面向对象技术与工具(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 软件与软件工程过程

“软件工程”是在软件生产中采用工程化的方法,采用一系列科学的、现代化的方法技术来开发软件。这种工程化的思想贯穿了软件开发和维护的全过程。

为了进一步学习有关软件工程的方法和技术,先介绍软件、软件生存期及软件工程过程这几个重要的概念。

1.2.1 软件的概念和特点

1.软件

“软件(Software)就是程序,开发软件就是编写程序”,这是一个错误的观念。这种错误观点的长期存在,影响了软件工程的正常发展。

事实上,正如Boehm指出的:软件是程序及开发、使用和维护程序所需的所有文档。它由应用程序、系统程序、面向用户的文档和面向开发者的文档4部分构成。

2.软件的特点

① 软件是一种逻辑实体,不是具体的物理实体。

② 软件产品的生产主要是研制。

③ 软件具有“复杂性”,其开发和运行常受到计算机系统的限制。

④ 软件成本昂贵,其开发方式目前尚未完全摆脱手工生产方式。

⑤ 软件不存在磨损和老化问题,但存在退化问题。

图1-1给出了硬件失效率曲线,它是一个U形曲线(即浴盆曲线),这表明硬件随着使用时间的增加,失效率急剧上升。

图1-1 硬件失效率曲线

图1-2描述了软件失效率曲线,它没有U形曲线的右半翼,这表明软件随着使用时间的增加,失效率降低,因为软件不存在磨损和老化问题,但存在退化问题。

图1-2 软件失效率曲线

3.软件生存期

软件生命周期(SDLD)是指一个从用户需求开始,经过开发、交付使用,在使用中不断地增补修订,直至软件报废的全过程,亦称软件生存期(Life Cycle)。

GB 8567中规定,软件生命周期分为7个阶段。

① 可行性研究和项目开发计划。可行性研究和项目开发计划阶段必须要回答的问题是“要解决的问题是什么”。

② 需求分析。需求分析阶段的任务不是具体地解决问题,而是准确地确定“软件系统必须做什么”,确定软件系统必须具备哪些功能。

③ 概要设计。概要设计就是设计软件的结构,该结构由哪些模块组成,这些模块的层次结构是怎样的,这些模块的调用关系是怎样的,每个模块的功能是什么。同时还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。

④ 详细设计。详细设计阶段就是为每个模块完成的功能进行具体描述,要把功能描述变为精确的、结构化的过程描述。

⑤ 编码。编码阶段就是把每个模块的控制结构转换成计算机可接受的程序代码,即写成以某特定程序设计语言表示的“源程序清单”。

⑥ 测试。测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。测试分为模块测试、组装测试和确认测试。

⑦ 维护。软件维护是软件生存期中时间最长的阶段。已交付的软件投入正式使用后,便进入软件维护阶段,它可以持续几年甚至几十年。

在大部分文献中,将生存周期划分为五个阶段,即要求定义、设计、编码、测试及维护。其中,要求定义阶段包括可行性研究和项目开发计划、需求分析,设计阶段包括概要设计和详细设计。

为了描述软件生存期的活动,提出了多种生存期模型,如瀑布模型、循环模型、演化模型、螺旋模型等。

1.2.2 软件工程过程

按照IEEE计算机学会和ACM联合推出的软件工程知识体系(Software Engineering Body Knowledge,SWEBOK),将软件工程过程(Software Engineering Process)知识域(Knowledge Areas)划分为6个知识子域:基本概念、过程基础设施、过程度量、过程定义、定性分析和过程实施与变更。也就是说,软件工程过程是指在软件工具的支持下,所进行的一系列软件工程活动。通常包括以下4类基本过程。

① 软件规格说明:规定软件的功能及其运行环境。

② 软件开发:产生满足规格说明的软件。

③ 软件确认:确认软件能够完成客户提出的要求。

④ 软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。

软件工程过程具有可理解性、可见性(过程的进展和结果可见)、可靠性、可支持性(易于使用CASE工具支持)、可维护性、可接受性(为软件工程师的接受)、开发效率和健壮性(抵御外部意外错误的能力)等特性。

如图1-3所示,在软件工程的三要素中,软件工程过程将人员、规程与方法、工具和管理有机地结合起来,形成一个能有效控制软件开发质量的运行机制。

图1-3 软件工程过程