计算机软件
? 计算机软件指计算机系统中的程序及其文档
– 程序是计算任务的处理对象和处理规则的描述
? 计算任务:以计算机为处理工具的任务
? 处理对象:数据(如数据、文字、图形、图象、声音等,它们只是表示,而无含义)或信息(数据及有关的含义)
? 处理规则:一般指处理的动作和步骤。程序必须装入计算机内才能工作
– 文档是为了便于了解程序所需的阐明性资料
软件的发展
1946-1956年
从计算机问世到实用的高级程序语言出现前
? 存储容量比较小,运算速度比较慢
? 采用个体工作方式,用低级语言编写程序
? 应用领域主要是以数值数据处理为主的科学计算,其特点是输入、输出量较小,但计算量大
? 衡量程序质量的标准主要是功效,即运行时间省、占用内存小
? 主要研究内容是科学计算程序、服务性程序和程序库,研究对象是顺序程序
1956-1968年
从实用的高级程序语言出现到软件工程出现前
? 存储器容量大,外围设备得到迅速发展,出现了高级程序设计语言
? 应用领域包括数据处理(非数值数据),其特点是计算量不大,但输入、输出量却较大
? 高速主机与低速外围设备的矛盾突出,出现了操作系统、并发程序、数据库及其管理系统
? 20世纪60年代初提出了软件一词,开始认识到文档的重要性
? 研究高级程序设计语言、编译程序、操作系统、支持编程的工具及各种应用软件
? 工作方式逐步从个体方式转向合作方式
? 出现软件危机
1968年-至今
从软件工程出现到现在
? 硬件向巨型机和微型机二个方向发展,出现了计算机网络,软件方面提出了软件工程,出现了“计算机辅助软件工程”(CASE)
? 计算机的应用领域渗透到各个业务领域,出现了嵌入式应用,其特点是受制于它所嵌入的宿主系统
? 开发方式逐步由个体合作方式转向工程方式
? 软件工程方面的研究主要包括软件开发模型、软件开发方法及技术、软件工具与环境、软件过程、软件自动化系统等
? 软件方面研究以智能化、自动化、集成化、并行化、以及自然化为标志的软件开发新技术
软件危机
许多软件项目不能满足客户的要求
许多软件项目超出预算和时间安排
软件危机的表现
? 对软件开发成本和进度的估计常常很不正确
? 用户对“已完成的”软件系统不满意的现象经常发生
? 软件产品的质量往往靠不住
? 软件常常是不可维护的
? 软件通常没有适当的文档资料
? 软件成本在计算机系统总成本中所占的比例逐年上升
? 软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势
软件危机的原因
? 软件是逻辑产品,开发进度、成本难以估计
? 缺乏或不完整、不一致的文档给维护带来困难
? 用户对软件需求的描述往往不够精确,有遗漏,有二义
? 软件开发人员对需求的理解与用户的本来愿望有差异
? 大型软件项目需多人协同完成,缺乏管理经验
? 开发人员不能有效地、独立自主地处理大型软件的全部关系
? 缺乏有力的方法学和工具的支持
? 软件项目的特殊性和人类智力的局限性
克服软件危机的途径
? 消除错误的概念和做法
? 推广使用成功的开发技术和方法
? 使用软件工具和软件工程支持环境
? 加强软件管理
软件的特点
? 软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算
? 软件是被开发的或被设计的,没有明显的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大
? 软件的使用没有硬件那样的机械磨损和老化问题
其它特点:
? 软件的开发和运行常受到计算机硬件的限制,对计算机硬件有着不同程度的依赖性
? 软件的开发至今尚未完全实现自动化
? 软件成本相当昂贵
? 相当多的软件工作涉及到社会因素
软件的分类
? 系统软件:位于计算机系统中最靠近硬件的一层,其它软件一般都通过系统软件发挥作用,它与具体的应用领域无关。如操作系统、编译程序等。
? 支撑软件:支持软件的开发、维护与运行的软件。如数据库管理系统、网络软件、软件开发环境等。
? 应用软件:特定应用领域专用的软件。如人口普查软件、嵌入式应用软件、科学和工程计算软件、事务处理软件等。
按软件工作方式划分
§ 实时处理软件
§ 分时软件
§ 交互式软件
§ 批处理软件
按软件服务对象的范围划分
§ 项目软件
§ 产品软件
按使用的频度进行划分
§ 一次使用
§ 频繁使用
按软件失效的影响进行划分
§ 高可靠性软件
§ 一般可靠性软件
软件语言software language
软件语言是用于书写计算机软件的语言。
它主要包括:
需求定义语言
功能性语言
设计性语言
程序设计语言
文档语言
需求定义语言requirements definition language
? 需求定义语言用于书写软件需求定义
? 软件需求定义是软件功能需求和非功能需求的定义性描述。软件功能需求刻画软件“做什么”,软件非功能需求刻画诸如功能性限制、设计限制、环境描述、数据与通信规程及项目管理等
? 典型的需求定义语言有PSL语言(Problem Statement Language问题陈述语言)
功能性语言functional language
? 功能性语言用于书写软件功能规约(functional specification)
? 软件功能规约是软件功能的严格而完整的陈述。通常它只刻画软件系统“做什么”以及“只做什么”的外部功能,而不涉及系统“如何做”的内部算法
? 典型的功能性语言有广谱语言、Z语言
设计性语言design language
? 设计性语言用于书写软件设计规约(design specification)
? 软件设计规约是软件设计的严格而完整的陈述。一方面,它是软件功能规约的算法性细化,刻画软件“如何做”的内部算法,另一方面,它是软件实现的依据。
? 典型的设计性语言有PDL语言(Program Design Language)
程序设计语言programming language
? 实现性语言用于书写计算机程序(习惯上指实现级语言程序)
? 程序设计语言(programming language)也称编程语言
? 程序设计语言可按语言的级别、对使用者的要求、应用范围、使用方式、成分性质等多种角度进行分类
按语言级别分:低级语言和高级语言
低级语言是与特定计算机体系结构密切相关的程序设计语言,如机器语言、汇编语言。其特点是与机器有关,功效高,但使用复杂、繁琐、费时、易出差错,难维护
高级语言是不反映特定计算机体系结构的程序设计语言,它的表示方法比低级语言更接近于待解问题的表示方法。其特点是在一定程度上与具体机器无关,易学、易用、易维护。但高级语言程序经编译后产生的目标程序往往功效较低
按用户要求分:过程式语言和非过程式语言
过程式语言(procedural language)是通过指明一列可执行的运算及运算次序来描述计算过程的程序设计语言。如FORTRAN、C、Java等
非过程式语言(nonprocedural language)是不显式指明处理过程细节的程序设计语言。在这种语言中尽量引进各种抽象度较高的非过程性描述手段,以期做到在程序中增加“做什么”的描述成分,减少“如何做”的细节描述。如第四代语言(4GL)、函数式语言、逻辑式语言也可称:命令式语言和申述式语言
命令式语言(imperative language)即过程式语言
申述式语言(declarative language)是着重描述要处理什么,而非描述如何处理的语言。申述式语言程序是关于问题解的约束陈述,这些约束迫使含于实现中的算法处理机制生成一个解或一组解。如函数式语言、逻辑式语言
函数式语言(functional programming language)中函数是构造程序的基本成分,它提供一些设施用于构造更为复杂的函数。程序人员根据提出的问题去定义求解函数(即主程序),其中可能包含一些辅助函数。如Lisp语言
逻辑式语言(logic programming language)的基本运算单位是谓词。谓词定义了变元间的逻辑关系。例如,Prolog语言的基本形式是Horn子句,其程序围绕着某一主题的事实、规则和询问三类语句组成。这三类语句分别用于陈述事实、定义规则和提出问题
按应用范围分:通用语言和专用语言
通用语言指目标非单一的语言,如FORTRAN、C、Java等
专用语言指目标单一的语言,如自动数控程序语言APT
按使用方式分:交互式语言和非交互式语言
交互式语言指具有反映人机交互作用的语言成分的语言,如BASIC
非交互式语言指语言成分不反映人机交互作用的语言,如FORTRAN、C
按成分性质分:顺序语言、并发语言、分布语言
顺序语言指只含顺序成分的语言,如FORTRAN、C
并发语言指含有并发成分的语言,如Modula、Ada、并发Pascal
分布语言指考虑到分布计算要求的语言,如Modula﹡
文档语言documentation language
? 文档语言用于书写软件文档。
计算机软件文档是计算机开发、维护和使用过程的档案资料和对软件本身的阐述性资料
通常用自然语言或半形式化语言书写
? 计算机软件文档包括软件开发过程中产生的中间产品和结果,这些中间产品和结果可以使用不同的描述手段,如ER图、数据流图、结构图、类图、状态机图、顺序图、活动图等,再加上自然语言完善其描述
? 对于功能规约文档,可以使用形式化功能规约语言书写,如Z语言、OBJ语言等