2.1 软件过程概述

过程是一个广义的概念,它是通过一系列相互关联的活动,将输入转化为输出。对于软件开发来说,用户需求是软件开发的基础,也是整个开发过程的一个输入;开发人员通过一系列软件开发活动,最终交付出用户需要的产品。

要实现对软件开发过程的有效控制,首先,要规定过程实现的方法和步骤。把整个开发过程进行细分,详细地定义出过程里面的每一个环节以及各个环节之间的执行顺序。其次,要对过程进行监控。但是这个监控并不只是对最终产品进行质量检验,而是要对过程的开始、每一个活动的执行、一直到结束,进行全方位的监测,以保证每一个活动能够达到应有的质量。

从某个待开发软件的目的被提出并着手实现,直到最后停止使用的这个过程,一般称为软件生存期。软件工程采用的生命周期方法学就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。

把软件生存周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而可以降低整个软件开发工程的困难程度;在软件生存周期的每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。

软件过程是指软件生存周期中的一系列相关过程,是为了获得高质量软件而实施的一系列活动。它包括问题定义、需求开发、软件设计、软件构造、软件测试等一系列软件开发的实现活动,而每一项活动都会产生相应的中间制品。

1.定义阶段

任何一个软件产品,都起源于一个实际问题或者一个创意。当问题或创意提出之后,人们通过开展技术探索和市场调查等活动,来研究系统的可行性和可能的解决方案,从而确定待开发系统的总体目标和范围。因此,软件定义阶段主要是确定待开发的软件系统要做什么。即软件开发人员必须确定处理的是什么信息,要达到哪些功能和性能,建立什么样的界面,存在什么样的设计限制,以及要求一个什么样的标准来确定系统开发是否成功;还要弄清系统的关键需求;然后确定该软件。软件定义阶段大致分三个步骤。

(1)系统分析

在这个步骤,系统分析员通过对实际用户的调查,提出关于软件系统的性质、工程目标和规模的书面报告,同用户协商,达成共识。

(2)制定软件项目计划

软件项目计划包括确定工作域、风险分析、资源规定、成本核算以及工作任务和进度安排等。

(3)需求分析

对待开发的软件提出的需求进行分析并给出详细的定义。开发人员与用户共同讨论决定哪些需求是可以满足的,并对其加以确切的描述。首先要收集用户的需求,对所收集的需求进行分析、整理和提炼,来理解和建模系统的行为。在这个过程,可能还要返回去继续收集更多的需求。在对系统的行为进行明确之后,还要使用文档的形式,把待开发系统的行为定义出来,并且检查和确认这个文档是否满足用户的要求。在确认的过程中,还要反复收集、分析、再补充这样的一个过程。确认通过之后,形成一个正式的软件需求规格说明书。这个需求规格说明将作为后续开发的一个基础。

2.开发阶段

主要是要确定待开发的软件应怎样做,即软件开发人员必须确定对所开发的软件采用怎样的数据结构和体系结构、怎样的过程细节、怎样把设计语言转换成编程语言以及怎样进行测试等。开发阶段大致分为三个步骤。

(1)软件设计

有了需求规格说明之后,需要对软件进行设计以形成软件设计说明书。软件设计主要是把软件的需求翻译为一系列的表达式(如图形、表格、伪码等)来描述数据结构、体系结构、算法过程以及界面特征等。软件设计一般又可分为总体设计和详细设计。其中总体设计主要进行软件体系结构的设计,详细设计主要进行算法过程的实现。具体的设计活动包括:首先要对软件的整体结构进行设计;然后定义出每个模块的接口,并且进一步地设计每一个组件的实现算法和数据结构;同时,还要对整个系统的数据库进行设计。

(2)编码

在设计完成之后,还需要通过编码活动把设计转换成为程序代码。这就要求程序员根据目标系统的性质和实际环境,选取一种适当的程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。因此程序员需在理解系统模型的基础上编写代码,进行代码的审查和单元的测试。此外,还要进行代码优化,最终要构建系统并且集成连接。这是一个复杂而迭代的过程。

(3)软件测试

在软件构造完成之后,还要对软件产品进行测试。软件测试主要是通过各种类型的测试及相应的调试,发现功能、逻辑和实现上的缺陷,使软件达到预定的要求,检查和验证所开发的系统是否符合客户期望。测试是有不同层次的,包括单元测试、子系统测试、系统的集成测试和验收测试等。测试需在不同的层次上进行,以保证每一个模块、整个系统和最终产品的质量。

3.维护阶段

测试通过以后,产品就可以发布了。但是系统投入使用后还会进行不断的修改,以适应不断变化的需求。维护阶段主要是进行各种修改,使系统能持久地满足用户的需要。

维护阶段还要进行再定义和再开发,所不同的是在软件已经存在的基础上进行。应该说,完全从头开发的系统是很少的,整个开发和维护其实是一个连续交叉的过程。当新的需求出现之后,需要首先定义这个需求,然后查看现有的系统是不是能够满足当前这个新的需求。如果现有的系统不能满足需求,就要进行进一步的开发,提出系统的变更;针对这个系统的变更,对现有的系统进行修改,形成一个新的系统。整个过程是一个循环往复的过程。

通常有四类维护活动。改正性维护,即诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件使之能适应环境的变化;完善性维护,即根据用户的新要求扩充功能和改进性能;预防性维护,即修改软件为将来的维护活动进行准备。

4.软件开发管理

为了保证软件开发过程能够按照预定的成本、进度、质量顺利完成,还需要进行诸如项目管理、配置管理、质量保证等一系列开发管理活动,通过建立整个组织的质量管理体系,实现对软件开发活动的有效控制和质量保证。

(1)软件项目管理

是为了软件项目能够按照预定的成本、进度和质量顺利地完成,对人员、进度、质量、成本、风险进行控制和管理的活动。项目管理主要体现在以下四个方面。

首先,要明确项目的目标,制定项目的计划,明确项目需要的资源。

其次,要组建开发团队,要明确每一个成员的分工和责任。

再次,在项目实施过程中,要检查和评价项目的总体进展情况。

最后,控制整个项目范围的变更,监控项目进展过程中出现的问题,并及时地纠正这些问题。

(2)软件配置管理

是通过版本的控制、变更的控制并使用合适的配置管理软件,来保证整个开发过程的所有产品配置项(例如代码、文档等)的完整性和可跟踪性。它主要包括四个基本活动。

① 版本管理是跟踪系统中每一个组件的多个版本,来保证开发者对组件的修改不会产生混乱。

② 系统的构建是把不同的组件进行编译、链接,组成了一个可执行的系统。

③ 变更管理是对开发过程中来自用户和开发者的开发请求进行分析和评估,做出适当的决策,决定是否变更和何时变更。

④ 当整个开发完成之后,发布版本管理。需要准备发布的软件,并对用户使用的软件进行持续的跟踪。