《实践者的研究方法》—— 第2章 软件工程 2.2 软件过程

本节书摘来自华章出版社《实践者的研究方法》一书中的第2章,第2.2节,作者罗杰 S. 普莱斯曼(Roger S. Pressman),更多章节内容可以访问云栖社区“华章计算机”公众号查看。


2.2 软件过程

软件过程是工作产品构建时所执行的一系列活动、动作和任务的集合。活动(activity)主要实现宽泛的目标(如与利益相关者进行沟通),与应用领域、项目大小、结果复杂性或者实施软件工程的重要程度没有直接关系。动作(action,如体系结构设计)包含了主要工作产品(如体系结构设计模型)生产过程中的一系列任务。任务(task)关注小而明确的目标,能够产生实际产品(如构建一个单元测试)。

在软件工程领域,过程不是对如何构建计算机软件的严格的规定,而是一种具有可适应性的调整方法,以便于工作人员(软件团队)可以挑选适合的工作动作和任务集合。其目标通常是及时、高质量地交付软件,以满足软件项目资助方和最终用户的需求。

2.2.1 过程框架

过程框架(process framework)定义了若干个框架活动(framework activity),为实现完整的软件工程过程建立了基础。这些活动可广泛应用于所有软件开发项目,无论项目的规模和复杂性如何。此外,过程框架还包含一些适用于整个软件过程的普适性活动(umbrella activity)。一个通用的软件工程过程框架通常包含以下5个活动。

沟通。在技术工作开始之前,和客户(及其他利益相关者)的沟通与协作是极其重要的,其目的是理解利益相关者的项目目标,并收集需求以定义软件特性和功能。

策划。如果有地图,任何复杂的旅程都可以变得简单。软件项目好比是一个复杂的旅程,策划活动就是创建一个“地图”,以指导团队的项目旅程,这个地图称为软件项目计划,它定义和描述了软件工程工作,包括需要执行的技术任务、可能的风险、资源需求、工作产品和工作进度计划。

建模。无论你是庭园设计师、桥梁建造者、航空工程师、木匠还是建筑师,你每天的工作都离不开模型。你会画一张草图来辅助理解整个项目大的构想——体系结构、不同的构件如何结合,以及其他一些特性。如果需要,可以把草图不断细化,以便更好地理解问题并找到解决方案。软件工程师也是如此,需要利用模型来更好地理解软件需求,并完成符合这些需求的软件设计。

构建。必须要对所做的设计进行构建,包括编码(手写的或者自动生成的)和测试,后者用于发现编码中的错误。

部署。软件(全部或者部分增量)交付给用户,用户对其进行评测并给出反馈意见。

上述五个通用框架活动既适用于简单小程序的开发,也可用于WebApp的建造以及基于计算机的大型复杂系统工程。不同的应用案例中,软件过程的细节可能差别很大,但是框架活动都是一致的。

对许多软件项目来说,随着项目的开展,框架活动可以迭代应用。也就是说,在项目的多次迭代过程中,沟通、策划、建模、构建、部署等活动不断重复。每次项目迭代都会产生一个软件增量(software increment),每个软件增量实现了部分的软件特性和功能。随着每一次增量的产生,软件将逐渐完善。

2.2.2 普适性活动

软件工程过程框架活动由很多普适性活动来补充实现。通常,这些普适性活动贯穿软件项目始终,以帮助软件团队管理和控制项目进度、质量、变更和风险。典型的普适性活动包括如下活动。

软件项目跟踪和控制——项目组根据计划来评估项目进度,并且采取必要的措施保证项目按进度计划进行。

风险管理——对可能影响项目成果或者产品质量的风险进行评估。

软件质量保证——确定和执行保证软件质量的活动。

技术评审——评估软件工程产品,尽量在错误传播到下一个活动之前发现并清除错误。

测量——定义和收集过程、项目以及产品的度量,以帮助团队在发布软件时满足利益相关者的要求。同时,测量还可与其他框架活动和普适性活动配合使用。

软件配置管理——在整个软件过程中管理变更所带来的影响。

可复用管理——定义工作产品复用的标准(包括软件构件),并且建立构件复用机制。

工作产品的准备和生产——包括生成产品(如建模、文档、日志、表格和列表等)所必需的活动。

上述每一种普适性活动都将在本书后续部分详细讨论。

2.2.3 过程的适应性调整

在本节前面部分曾提到,软件工程过程并不是教条的法则,也不要求软件团队机械地执行;而应该是灵活可适应的(根据软件所需解决的问题、项目特点、开发团队和组织文化等进行适应性调整)。因此,不同项目所采用的项目过程可能有很大不同。这些不同主要体现在以下几个方面:

活动、动作和任务的总体流程以及相互依赖关系。

在每一个框架活动中,动作和任务细化的程度。

工作产品的定义和要求的程度。

质量保证活动应用的方式。

项目跟踪和控制活动应用的方式。

过程描述的详细程度和严谨程度。

客户和利益相关者对项目的参与程度。

软件团队所赋予的自主权。

队伍组织和角色的明确程度。

本书第1部分将详细介绍软件过程。

上一篇:在JavaScript中操作Cookie


下一篇:项目交付为什么失败?-记我在某个项目中的迷思