软件过程的真实目标是完成一个软件系统的规格说明、设计、实现和测试。
4个基本的过程活动——规格说明、开发、确认(测试)、演化,在瀑布模型中,这些活动被组织成一个序列;而在增量式开发中,这些活动交织在一起。
软件规格说明
软件设计和实现
软件开发的实现阶段是开发一个可执行的系统交付给用户的过程。有时候软件设计和编码活动会分开。然而,如果使用敏捷方法,那么设计和实现是交织在一起的,不会在此过程中产生正式的设计文档。当然,仍然需要对软件进行设计,但是设计是以一种非正式的方式记录在程序员的电脑上的。
软件设计是对将要实现的软件的结构、系统所使用的数据模型和结构、系统构件间的接口的描述,有时候还会包括所用的算法。设计者不是立即完成全部设计的,而是分阶段完成设计的。设计者在设计过程中要不断添加所需要的细节,同时不断修改先前的设计方案。
下图是设计过程的抽象模型,显示了设计过程的输入、过程活动以及过程的输出。设计过程活动即存在交织又相互依赖。关于设计的新信息不断生成,这会影响此前的设计决策。因此,设计的修改是不可避免的。
大多数软件都会与其他软件系统进行交互。这些其他系统包括操作系统、数据库、中间件和其他应用系统。这些构成了所谓的“软件平台”,即软件将会在其中运行的环境。关于该平台的信息对于设计过程是一种重要输入,因为设计者必须决定如何以最好的方式将系统与其他环境集成在一起。
不同开发项目中的设计过程活动有所相同,取决于所开发的系统类型。例如,实时系统要求一个额外的时间设计阶段,但可能不包含数据库,因此可以没有数据库设计阶段。在设计过程的通用模型
图中显示了信息系统设计过程中可能包含的4个活动。
-
体系结构设计
:将识别系统的总体结构,基本的构件(有时候也称为子系统或模块)、它们之间的关系以及它们是如何分布的。 -
数据库设计
: 将设计系统的数据结构以及数据库中的数据表示方式。同样,这里的工作取决于是否要复用一个已经存在的数据库或者创建一个新的数据库。 -
接口设计
:将定义系统构件间的接口。接口规格说明必须是无歧义的。有了精确的接口定义,一个构件就可以在无需了解另一个构件的具体实现情况下使用该构件。针对接口的规格说明达成一致后,各个构件就可以独立进行设计和开发了。 -
构件选取和设计
: 将搜索可复用的构件,如果没找到合适的构件那么就设计新的软件构件。此阶段的设计可能只是对构件的简单描述,而把实现细节留给程序员。也可以是确定要对一个可复用构件进行的一个修改列表,或者是UML表示的一个详细的设计模型。
这些活动产生设计输出,在设计过程的通用模型
图中也有表示。对于关键性系统,设计过程的输出是详细设计文档,其中设定了精确和准确的系统描述。如果使用模型驱动的开发方法,设计输出是设计图。如果使用敏捷开发方法,设计过程的输出可能不是独立的规格说明文档,而是在程序的代码中进行表示。
通常,程序员会对已经开发好的代码进行一些测试。这经常可以发现一些必须从程序中移除的程序缺陷(BUG)。找到并修复程序缺陷被称为调试(DEBUG)。缺陷测试和调试是不同的过程:测试确定缺陷的存在;调试关注定位并修正这些缺陷。