1
面向对象软件工程实践指南
1.2.1.3 1.3 传统软件工程
1.3 传统软件工程

目前使用得最广泛的软件工程方法学,分别是传统软件工程和现代软件工程。传统软件工程,主要指的是生命周期方法下的软件工程,是20世纪60年代为摆脱“软件危机”出现的工程学。它采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。该方法把软件生命周期的全过程依次划分为需求分析、总体设计与详细设计、编码、测试、维护等几个主要阶段,然后顺序地完成每个阶段的任务。每个阶段的开始和结束都有严格的标准,必须经过正式严格的技术审查和管理审查,前一阶段的结束标准就是后一个阶段的开始标准。其中,审查最主要的标准就是每个阶段都应该提交“最新的”高质量的文档。

1)需求分析

该阶段的主要工作是对待开发软件提出的需求进行分析并给出详细的定义。该阶段的输出为软件需求说明书及初步的系统用户手册。

2)总体设计

以需求分析为结果,设计出总体的系统构架。包括模块的划分、数据传送与共享等内容。该阶段的输出为概要设计说明书。

3)详细设计

在总体设计的基础上,设计模块内部的结构,包括界面设计、算法设计、数据库的设计等。该阶段的输出为详细设计说明书。

4)编码

将设计模型映射为代码,用代码来实现设计的功能。利用编程语言,将人类的思想转变为能被计算机理解和执行的程序,该阶段的输出为程序代码。

5)测试

在设计或编码的过程中,会出现一些纰漏或者错误。测试的作用是不断验证已有系统的功能,排除错误,完善系统。该阶段的具体任务包括单元测试、集成测试、验收测试等,输出为测试报告。

6)维护

在使用中对发现的错误进行修改或者针对变化的需求对软件进行修改。具体包括三种类型的维护:改正性维护、适应性维护和完善性维护。其中,改正性维护主要对运行中发现的软件错误进行修正,适应性维护主要为了适应变化了的软件工作环境而进行适当的变更,完善性维护则主要针对软件需求的变化而做变更。

传统的软件工程学是符合工程学原理的一套体系。传统软件工程学的出现,很大程度上解决了“软件危机”中的一些问题。其优点主要有两个方面:一是将软件的生命周期划分为若干个独立的阶段,便于不同人员分工协作;二是在每个阶段结束前都进行严格的审查,可有效地保证软件的质量。

然而,传统软件工程最主要的问题是缺乏灵活性,它要求必须在项目开始前说明全部需求,但这恰恰是非常困难的。当软件规模比较大,并且软件的需求是模糊的或者随时间变化而变化时,传统软件工程就会存在很多问题。同时,传统的软件工程采用了结构化的技术来完成软件开发的各项任务,比较明显的问题是开发效率比较低下,软件中代码的复用率低,软件维护比较困难。由于传统软件工程强调更多的是模块化,各个小模块组成了系统的功能。随着用户需求的改变和技术的发展,模块经常需要改变。而这是传统软件工程很难处理的情况,因为局部功能模块的修改甚至可能带来整个系统的改变。低下的开发效率和代码复用率成为传统软件工程继续发展的瓶颈。