软件工程:理论与实践(第2版)
上QQ阅读APP看书,第一时间看更新

第1部分 软件工程概述

第1章 软件与软件工程

1.1 软件

1.1.1 软件的概念及特点

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

软件具有以下几个特点。

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

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

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

48019-00-012-1

图1-1 硬件失效曲线图

48019-00-012-2

图1-2 软件失效曲线图

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

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

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

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

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

1.1.2 软件的分类

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

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

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

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

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

48019-00-013-1

图1-3 软件的分类