软件工程理论与实践(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 软件

本节讲述软件的概念、特点,以及软件的分类。

1.1.1 软件的概念及特点

人们通常把各种不同功能的程序,包括系统程序、应用程序、用户自己编写的程序等统称为软件。然而,当计算机的应用日益普及,软件日益复杂,软件规模日益增大,人们意识到软件并不仅仅等同于程序。程序是人们为了完成特定的功能而编制的一组指令集,它由计算机语言描述,并且能在计算机系统上执行。而软件不仅包括程序,还包括程序的处理对象——数据,以及与程序开发、维护和使用有关的图文资料(文档)。例如,用户购买的Windows 10操作系统这个软件,它不仅包含可执行的程序,还包含一些支持的数据(都放在光盘中),并且还包含纸质的用户手册等文档。Roger S.Pressman对软件给出了这样的定义:计算机软件是由专业人员开发并长期维护的软件产品。完整的软件产品包括了在各种不同容量和体系结构计算机上的可执行的程序、运行过程中产生的各种结果,以及以硬拷贝和电子表格等多种方式存在的软件文档。

软件具有以下几个特点。

1)软件是一种逻辑实体,而不是具体的物理实体,因而具有抽象性。

2)软件的生产与硬件不同,它没有明显的制造过程。要提高软件的质量,必须在软件开发方面下功夫。

3)在软件的运行和使用期间,不会出现硬件中所出现的机械磨损、老化等问题。然而它却存在退化问题,必须要对其进行多次修改与维护,直至其“退役”。如早期的DOS操作系统,就是进行了多次修改与维护,实在难以与Windows操作系统匹敌而“退役”了。图1-1和图1-2分别展示了硬件的失效率和时间的关系以及软件的失效率和时间的关系。

图1-1 硬件失效曲线图

图1-2软件失效曲线图

4)计算机的开发与运行常常会受到计算机系统的制约,它对计算机系统有着不同程度的依赖性。例如,有专门针对安装Windows操作系统的计算机的游戏,也有针对安装macOS操作系统的计算机的游戏。为了解除这种依赖性,在软件开发中提出了软件移植的问题。

5)软件的开发至今尚未完全摆脱人工的开发方式。

6)软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。

7)软件成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它的成本是比较高的。

8)相当多的软件工作涉及社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,它们直接决定项目的成败。

1.1.2 软件的分类

随着计算机软件复杂性的增加,在某种程度上人们很难对软件给出一个通用的分类,但是人们可以按照不同的角度对软件进行分类。按照功能的不同,软件可以分为系统软件、支撑软件和应用软件三类。系统软件是计算机系统中最靠近硬件的,为其他程序提供最底层的系统服务,它与具体的应用领域无关,如编译程序和操作系统等。支撑软件以系统软件为基础,以提高系统性能为主要目标,支撑应用软件的开发与运行,主要包括环境数据库、各种接口软件和工具组。应用软件是提供特定应用服务的软件,如字处理程序等。系统软件、支撑软件和应用软件之间既有分工又有合作,是不可以分开的。

基于规模的不同,软件可以划分为微型、小型、中型、大型和超大型软件。一般情况下,微型软件只需要一名开发人员,在4周以内完成开发,并且代码量不超过500行,这类软件一般仅供个人专用,没有严格的分析、设计和测试资料,例如,某个学生为完成软件工程课程的一个作业而编制的程序,就属于微型软件,小型软件的开发周期可以持续到半年,代码量一般控制在5000行以内,这类软件通常没有预留与其他软件的接口,但是需要遵循一定的标准,附有正规的文档资料,例如,某个学生团队为完成软件工程课程的大作业(学期项目)而编制的程序,就属于小型软件;中型软件的开发人员控制在10人以内,要求在两年以内开发5000~50000行代码,这种软件的开发不仅需要完整的计划、文档及审查,还需要开发人员之间、开发人员和用户之间有交流与合作,例如,某个软件公司为某个客户开发的办公自动化系统(OA)而编制的程序,就属于中型软件;大型软件是10~100名开发人员在1~3年的时间内开发的,具有50000~100000行(甚至上百万行)代码的软件产品,在这种规模的软件开发中,统一的标准、严格的审查制度及有效的项目管理都是必需的,例如,某个软件公司开发的某款多人在线网络游戏,就属于大型软件;超大型软件往往涉及上百名甚至上千名成员以上的开发团队,开发周期可以持续到3年以上,甚至5年,这种大规模的软件项目通常被划分为若干个小的子项目,由不同的团队开发,如微软公司开发的Windows 10操作系统,就属于超大型软件。

根据软件服务对象的不同,软件还可以分为通用软件和定制软件。通用软件是由特定的软件开发机构开发,面向市场公开销售的独立运行的软件系统,如操作系统、文档处理系统和图片处理系统等;定制软件通常是面向特定的用户需求,由软件开发机构在合同的约束下开发的软件,如为企业定制的办公系统、交通管理系统和飞机导航系统等。

按照工作方式的不同,计算机软件还可以划分为实时软件、分时软件、交互式软件和批处理软件。

软件的分类示意图如图1-3所示。

图1-3 软件的分类