5.5净室软件工程&5.6 基于构件的软件工程&5.7软件项目管理

5.5净室软件工程

净室 (Cleaning Room) 软件工程是一种应用数学与统计学理论以经济的方式生产高质量软件的工程技术,力图通过严格的工程化的软件过程达到开发中的零缺陷或接近零缺陷。净室方法不是先制作一个产品,再去消除缺陷,而是要求在规约和设计中消除错误,然后以“净”的方式制作,可以降低软件开发中的风险,以合理的成本开发出高质量的软件。

净室软件工程 (Cleanroom Software Engineering,CSE) 是一种在软件开发过程中强调在软件中建立正确性的需要的方法。在净室软件工程背后的哲学是:通过在第1次正确地书写代码增量,并在测试前验证它们的正确性,来避免对成本很高的错误消除过程的依赖。它的过程模型是在代码增量积聚到系统的过程的同时,进行代码增量的统计质量验证。它甚至提倡开发者不需要进行单元测试,而是进行正确性验证和统计质量控制。

净室是一种以合理的成本开发高质量软件的基于理论、面向工作组的方法。净室是基于理论的,因为坚实的理论基础是任何工程学科所不可缺少的。再好的管理也代替不了理论基础。净室是面向工作组的,因为软件是由人开发出来的,并且理论必须简化到实际应用才能引导人的创造力和协作精神。净室是针对经济实用软件的生产的,因为在现实生活中,业务和资源的限制必须在软件工程中予以满足。最后,净室是针对高质量软件的生产的,因为高质量改进管理,降低风险及成本,满足用户需求,提供竞争优势。

5.5.1理论基础

净室软件工程的理论基础主要是函数理论和抽样理论。

1.函数理论

一个函数定义了从定义域到值域的映射。一个特定的程序好似定义了一个从定义域(所有可能的输入序列的集合)到值域(所有对应于输入的输出集合)的映射。这样,一个程序的规范就是一个函数的规范。

一个明确定义的函数应当具有以下特性。

● 完备性:对定义域中的每个元素,值域中至少有一个元素与之对应。对程序而言,每种可能的输入都必须定义,并有一个输出与之对应。

● 一致性:在值域中最多有一个元素与定义域中的同一元素对应。对程序而言,每个输入只能对应一个输出。

● 正确性:函数的正确性可以由上述性质判断。对程序而言,某项设计的正确性可以通过基于函数理论的推理来验证。

2.抽样理论

不可能对软件的所有可能应用都进行测试。把软件的所有可能的使用情况看作总体,通过统计学手段对其进行抽样,并对样本进行测试,根据测试结果分析软件的性能和可靠性。

5.5.2技术手段

净室软件工程中应用的技术手段主要有以下4种。

1.统计过程控制下的增量式开发 (Incremental Development )

增量开发基于产品开发中受控迭代的工程原理——控制迭代。增量开发不是把整个开发过程作为一个整体,而是将其划分为一系列较小的累积增量。小组成员在任何时刻只须把注意力集中于工作的一部分,而无须一次考虑所有的事情。

2.基于函数的规范与设计

盒子结构方法按照函数理论定义了3种抽象层次:行为视图、有限状态机视图和过程视图。规范从一个外部行为视图(称为黑盒)开始,然后被转化为一个状态机视图(称为状态盒),最后由一个过程视图(明盒)来实现。盒子结构是基于对象的,并支持软件工程的关键原则:信息隐藏和实现分离。

3.正确性验证

正确性验证被认为是CSE的核心,正是由于采用了这一技术,净室项目的软件质量才有了极大的提高。

4.统计测试 (Statistically Based Testing) 和软件认证

净室测试方法采用统计学的基本原理,即当总体太大时必须采取抽样的方法。首先确定一个使用模型 (Usage Model) 来代表系统所有可能使用的(一般是无限的)总体。然后由使用模型产生测试用例。因为测试用例是总体的一个随机样本,所以可得到系统预期操作性能的有效统计推导。

净室软件工程是软件开发的一种形式化方法,它可以生成质量非常高的软件。它使用盒子结构规约进行分析和设计建模,并且强调将正确性验证(而不是测试)作为发现和消除错误的主要机制。

5.5.3应用与缺点

第一项净室软件项目由IBM的Richard Linger 于20世纪80年代中期负责实施。 COBOL结构化设施项目开发出一项商业软件再工程产品,该产品显示出了卓越的质量水平,净室方法得到了初步确认。

20世纪90年代初, IBM生产出运用净室方法开发的海量存储控制单元适配器,售出了数千单元,直至1997年产品超过使用寿命后,仍未收到任何反映现场故障的报告。

从20世纪80年代末到90年代初,美国国家宇航局 (NASA) 哥达德飞行控制中心(GSFC) 软件工程实验室 (SEL) 进行了一系列净室试验。这些试验被认为是迄今为止软件工程领域进行的一次最完整的研究。4个规模依次扩大的地面控制软件系统按净室工程方法开发出来,结果表明,与NASAGSFC 的质量和生产力有一致的提高。

20世纪90年代初,美国陆军执行了一个净室项目,并在这个项目中获得了20倍于引进净室技术所用的投资回报。1996年美国国防部软件数据与分析中心在其所做的软件方法比较分析中,报告净室具有真实的价值和质量优势。其他留有软件生产和质量方面历史数据的机构也用净室进行了大型项目的研发,它们公开发表了其结果。净室实践明显改进了 IBM、Ericsson、NASA、DoD及许多其他机构的软件项目产出。

但是,净室软件工程在使用的过程中,也显示出一些缺点。

1)CSE太理论化,需要更多的数学知识。其正确性验证的步骤比较困难且比较耗时。 CSE要求采用增量式开发、盒子结构、统计测试方法,普通工程师必须经过加强训练才能掌握,开发软件的成本比较高昂。

2)CSE 开发小组不进行传统的模块测试,这是不现实的。工程师可能对编程语言和开发环境还不熟悉,而且编译器或操作系统的bug也可能导致未预期的错误。

3)CSE毕竟脱胎于传统软件工程,不可避免地带有传统软件工程的一些弊端。

5.6 基于构件的软件工程

基于构件的软件工程 (Component-Based Software Engineering,CBSE) 是一种基于分布对象技术、强调通过可复用构件设计与构造软件系统的软件复用途径。基于构件的软件系统中的构件可以是 COTS(Commercial-Off-The-Shelf) 构件,也可以是通过其他途径获得的构件(如自行开发)。 CBSE 体现了“购买而不是重新构造”的哲学,将软件开发的重点从程序编写转移到了基于已有构件的组装,以更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担,从而降低软件开发的费用。

CBSE正在改变大型软件系统被开发的方式。 CBSE体现了Fred Brooks 等人支持的“购买,而非建造”的思想。就像早期的子例程将程序员从思考细节中解放出来一样, CBSE将考虑的重点从编程软件移到组装软件系统。工程师的焦点从“实现”变成了“集成”。这样做的基础是假定在很多大型软件系统中存在足够多的共性,从而使得开发可复用软件组件来满足这些共性是值得的。

5.6.1构件和构件模型

在软件复用领域,一般观点认为构件是一个独立的软件单元,可以与其他构件构成一个软件系统。然而也有其他专家提出了其他的构件定义。

不管构件如何定义,用于CBSE 的构件应该具备以下特征。

(1)可组装型:对于可组装的构件,所有外部交互必须通过公开定义的接口进行。同时它还必须对自身信息的外部访问。

(2)可部署性:软件必须是自包含的,必须能作为一个独立实体在提供其构件模型实现的构件平台上运行。构件总是二进制形式,无须在部署前编译。

(3)文档化;构件必须是完全文档化的,用户根据文档来判断构件是否满足需求。

(4)独立性:构件应该是独立的,应该可以在无其他特殊构件的情况下进行组装和部署,

如确实需要其他构件提供服务,则应显示声明。

(5)标准化:构件标准化意味着在 CBSE过程中使用的构件必须符合某种标准化的构件模型。

构件模型定义了构件实现、文档化以及开发的标准。这些标准是为构件开发者确保构件的互操作性而设立的,也是为那些提供中间件的构件执行基础设施供应商支持构件操作而设立的。目前主流的构件模型是Web Services 模型、 Sun公司的EJB 模型和微软的.NET模型。

构件模型包含了一些模型要素,这些要素信息定义了构件接口、在程序中使用构件需要知道的信息,以及构件应该如何部署。

(1)接口。构件通过构件接口来定义,构件模型规定应如何定义构件接口以及在接口定义中应该包含的要素,如操作名、参数以及异常等。

(2)使用信息。为使构件远程分布和访问,必须给构件一个特定的、全局唯一的名字或句柄。构件元数据是构件本身相关的数据,比如构件的接口和属性信息。用户可以通过元数据找到构件提供的服务。构件模型的实现通常包括访问构件的元数据的特定方法。构件是通用实体,在部署的时候,必须对构件进行配置来适应应用系统。

(3)部署。构件模型包括一个规格说明,指出应该如何打包构件使其部署成为一个独立的可执行实体。部署信息中包含有关包中内容的信息和它的二进制构成的信息。

构件模型提供了一组被构件使用的通用服务,这种服务包括以下两种。

● 平台服务,允许构件在分布式环境下通信和互操作。

● 支持服务,这是很多构件需要的共性服务。例如,构件都需要的身份认证服务。

中间件实现共性的构件服务,并提供这些服务的接口。为了利用构件模型基础设施提供的服务,可以认为构件被部署在一个容器中。容器是支持服务的一个实现加上一个接口定义,构件必须提供该接口定义以便和容器整合在一起。

5.6.2 CBSE过程

CBSE过程是支持基于构件组装的软件开发过程,需要考虑构件复用的可能性,以及在开发和使用可复用的构件中所涉及的不同过程活动。成功的构件复用需要一个经过裁剪、适配的开发过程,以便在软件开发过程中包含可复用的构件。

CBSE过程中的主要活动包括:

(1)系统需求概览;

(2)识别候选构件;

(3)根据发现的构件修改需求;

(4)体系结构设计;

(5)构件定制与适配;

(6)组装构件,创建系统。

这种CBSE 过程与传统的软件开发过程存在几点不同。

(1)CBSE 早期需要完整的需求,以便尽可能多地识别出可复用的构件。而增量式开发中,早期并不需要完整的需求。

(2)在过程早期阶段根据可利用的构件来细化和修改需求。如果可利用的构件不能满足用户需求,就应该考虑由复用构件支持的相关需求。通过劝说用户修改需求,以便能节省开支且快速开发系统。

(3)在系统体系结构设计完成后,会有一个进一步的对构件搜索及设计精化的活动。可能需要为某些构件寻找备用构件,或者修改构件以适合功能和架构的要求。

(4)开发就是将已经找到的构件集成在一起的组装过程。其中包括将构件与构件模型基础设施集成在一起,有时还需要开发适配器来协调不匹配的构件接口,可能还需要开发额外的功能。

在 CBSE 中,体系结构设计阶段特别重要。在这个阶段,将选择一个构件模型和一个实现平台。而模型和平台也决定和限制了可选构件的范围。

5.6.3构件组装

构件组装是指构件相互直接集成或是用专门编写的“胶水代码”将它们整合在一起来创造一个系统或另一个构件的过程。

常见的组装构件有以下3种组装方式。

1.顺序组装

通过按顺序调用已经存在的构件,可以用两个已经存在的构件来创造一个新的构件。顺序组装的类型可能适用于作为程序元素的构件或是作为服务的构件。需要特定的胶水代码,来保证两个构件的组装:上一个构件的输出,与下一个构件的输入相兼容。

2.层次组装

这种情况发生在一个构件直接调用由另一个构件所提供的服务时。被调用的构件为调用的构件提供所需的服务。因此,被调用构件的“提供”接口必须和调用构件的“请求”接口兼容。如果接口相匹配,则调用构件可以直接调用被调用构件,否则就需要编写专门的胶水代码来实现转换。

3.叠加组装

这种情况发生在两个或两个以上构件放在一起来创建一个新构件的时候。这个新构件合并了原构件的功能,从而对外提供了新的接口。外部应用可以通过新接口来调用原有构件的接口,而原有构件不互相依赖,也不互相调用。这种组装类型适合于构件是程序单元或者构件是服务的情况。

当创建一个系统时,可能会用到所有的构件组装方式,对所有情况都必须编写胶水代码来连接构件。而当编写构件尤其是为了组装来写构件时,经常可能会面临接口不兼容的问题,即所要组装的构件的接口不一致。一般会出现3种不兼容情况。

(1)参数不兼容。接口每一侧的操作有相同的名字,但参数类型或参数个数不相同。

(2)操作不兼容。提供接口和请求接口的操作名不同。

(3)操作不完备。一个构件的提供接口是另一个构件请求接口的一个子集,或者相反。

针对上述不兼容情况,必须通过编写适配器构件来解决不兼容的问题,适配器构件使两个可复用构件的接口相一致;适配器构件将一个接口转换为另外一个接口。当用户选择组装方式时,必须考虑系统所需要的功能性需求、非功能性需求,以及当系统发生改变时,一个构件能被另一个构件替代的难易程度。

5.7软件项目管理

5.7.1项目管理概述

软件项目管理的提出是在20世纪70年代中期的美国,当时美国国防部专门研究了软件开发不能按时提交、预算超支和质量达不到用户要求的原因,结果发现70%的项目是因为管理不善引起的,而非技术原因。于是软件开发者开始逐渐重视起软件开发中的各项管理。到了20世纪90年代中期,软件研发项目管理不善的问题仍然存在。

软件项目管理和其他的项目管理相比有一定的特殊性。首先,软件是纯知识产品,其开发进度和质量很难估计和度量,生产效率也难以预测和保证。其次,软件系统的复杂性也导致了开发过程中各种风险的难以预见和控制。

软件项目管理的对象是软件工程项目。它所涉及的范围覆盖了整个软件工程过程。为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源(人、硬件/软件)、要实现的任务、经历的里程碑、花费工作量(成本)、进度安排等进行预先计划和执行。这种管理在技术工作开始之前就应开始,在软件从概念到实,的过程中继续进行,当软件工程过程最后结束时才终止。

软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、 产品 (Product)、 过程 (Process) 和项目 (Project) 进行分析和管理的活动。

下面对软件进度、配置、质量和风险管理进行简单介绍。

5.7.2软件进度管理

按时完成软件项目是项目经理最大的挑战之一。所谓进度,指的是对执行活动和里程碑所制定的工作计划,而进度管理指的是为了确保项目按期完成所需要的管理过程。在软件进度管理过程中,一般包括:活动定义、活动排序、活动资源估计、活动历时估计、制定进度计划和进度控制。

1.工作分解结构

软件项目往往是比较大而复杂的,往往需要进行层层分解,将大的任务分解成一个个的单一小任务进行处理。工作分解结构 (Work Breakdown Structure,WBS) 如图5-7所示,就是把一个项目,按一定的原则分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的日常活动中,直到分解不下去为止。即:项目→任务→工作→日常活动。工作分解结构以可交付成果为导向,对项目要素进行的分组,它归纳和定义了项目的整个工作范围,每下降一层代表对项目工作的更详细定义。 WBS总是处于计划过程的中心,也是制订进度计划、资源需求、成本预算、风险管理计划和采购计划等的重要基础。

 

 

WBS树形结构中最底层的被称为工作包,是最低层次的可交付成果,它应当由唯一主体负

责完成。
WBS常见的分解方式包括:按产品的物理结构分解、按产品或项目的功能分解、按照实施过程分解、按照项目的实施单位分解、按照项目的目标分解、按部分或只能进行分解等。不管采用哪种分解方式,最终都要满足以下对任务分解的基本要求。

(1)WBS 的工作包是可控和可管理的,不能过于复杂。

(2)任务分解也不能过细,一般原则WBS 的树形结构不超过6层。

(3)每个工作包要有一个交付成果。

(4)每个任务必须有明确定义的完成标准。

(5)WBS 必须有利于责任分配。

2.任务活动图

经过工作分解之后,会得到一组活动任务,这是需要对每个活动进行定义,并确定活动之间的关系。

活动定义是指确定完成项目的各个交付成果所必须进行的各项具体活动,需要明确每个活动的前驱、持续时间、必须完成日期、里程碑或交付成果。前驱指的是该活动开始之前必须发生的事件或事件集;持续时间是指完成该活动的时间长度(一般单位为天或周);必须完成日期指的是该活动必须完成的具体日期;里程碑指的是判定该活动完成的一组条件。

每个活动在明确了前驱、必须完成日期等内容后,就确定了活动之间的相互关系,也就是活动执行的前后顺序。根据活动顺序就可以得到对应的任务活动图。任务活动图是项目进度管理、项目成本管理等一系列项目管理活动的基础。

在项目管理中,目前通常采用甘特图等方式来展示和管理项目活动。

5.7.3软件配置管理

软件配置管理 (Software Configuration Management,SCM) 是一种标识、组织和控制修改的技术。软件配置管理应用于整个软件工程过程。在软件建立时变更是不可避免的,而变更加剧了项目中软件开发者之间的混乱。 SCM活动的目标就是为了标识变更、控制变更、确保变更正确实现并向其他有关人员报告变更。从某种角度讲, SCM 是一种标识、组织和控制修改的技术,目的是使错误降为最小并最有效地提高生产效率。

软件配置管理核心内容包括版本控制和变更控制。

(1)版本控制 (Version Control)。 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。版本控制最主要的功能就是追踪文件的变更。它将什么时候、什么人更改了文件的什么内容等信息忠实地记录下来。每一次文件的改变,文件的版本号都将增加。除了记录版本变更外,版本控制的另一个重要功能是并行开发。软件开发往往是多人协同作业,版本控制可以有效地解决版本的同步以及不同开发者之间的开发通信问题,提高协同开发的效率。并行开发中最常见的不同版本软件的错误(Bug) 修正问题也可以通过版本控制中分支与合并的方法有效地解决。

(2)变更控制 (Change Control)。 变更控制的目的并不是控制变更的发生,而是对变更进行管理,确保变更有序进行。对于软件开发项目来说,发生变更的环节比较多,因此变更控制显得格外重要。项目中引起变更的因素有两个:一是来自外部的变更要求,如客户要求修改工作范围和需求等;二是开发过程内部的变更要求,如为解决测试中发现的一些错误而修改源码甚至设计。比较而言,最难处理的是来自外部的需求变更,因为I T项目需求变更的概率大,引发的工作量也大(特别是到项目的后期)。

5.7.4软件质量管理

软件质量就是软件与明确地和隐含地定义的需求相一致的程度,更具体地说,软件质量是软件符合明确地叙述的功能和性能需求、文档中明确描述的开发标准以及所有专业开发的软件都应具有的隐含特征的程度。

从管理角度出发,可以将影响软件质量的因素划分为3组,分别反映用户在使用软件产品时的3种不同倾向和观点。这3组分别是:产品运行、产品修改和产品转移(如图5-8所示)。

 

1.软件质量保证

软件质量保证 (Software Quality Assurance,SQA) 是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。它通过对软件产品和活动进行评审和审计来验证软件是合乎标准的。软件质量保证组在项目开始时就一起参与建立计划、标准和过程。这些使软件项目满足机构方针的要求。

软件质量保证的关注点集中在于一开始就避免缺陷的产生。质量保证的主要目标是:

(1)事前预防工作,例如,着重于缺陷预防而不是缺陷检查。

(2)尽量在刚刚引入缺陷时即将其捕获,而不是让缺陷扩散到下一个阶段。

(3)作用于过程而不是最终产品,因此它有可能会带来广泛的影响与巨大的收益。

(4)贯穿于所有的活动之中,而不是只集中于一点。

软件质量保证的目标是以独立审查的方式,从第三方的角度监控软件开发任务的执行,就软件项目是否正确遵循已制订的计划、标准和规程给开发人员和管理层提供反映产品和过程质量的信息和数据,提高项目透明度,同时辅助软件工程取得高质量的软件产品。

软件质量保证的主要作用是给管理者提供预定义的软件过程的保证,因此 SQA组织要保证如下内容的实现:选定的开发方法被采用、选定的标准和规程得到采用和遵循、进行独立的审查、偏离标准和规程的问题得到及时的反映和处理、项日定义的每个软件任务得到实际的执行。

软件质量保证的主要任务是以下3个方面。

(1)SQA审计与评审。 SQA审计包括对软件工作产品、软件工具和设备的审计,评价这几项内容是否符合组织规定的标准。 SQA评审的主要任务是保证软件工作组的活动与预定的软件过程一致,确保软件过程在软件产品的生产中得到遵循。

(2)SQA报告。 SQA人员应记录工作的结果,并写入到报告之中,发布给相关的人员。SQA报告的发布应遵循三条原则: SQA和高级管理者之间应有直接沟通的渠道; SQA报告必须发布给软件工程组,但不必发布给项目管理人员;在可能的情况下向关心软件质量的人发布SQA报告。

(3)处理不符合问题。这是SQA 的一个重要的任务, SQA人员要对工作过程中发现的问题进行处理及时向有关人员及高级管理者反映。

2.软件质量认证

质量认证用来检验整个企业的质量水平,注重软件企业的整体资质,全面考察软件企业的整体质量体系,检验该企业是否具有设计、开发和生产符合质量要求的软件的能力。目前国内软件企业主要采用的是ISO 9000 和能力成熟度模型 (Capability Maturity Model,CMM)。

1)ISO 9000

ISO 9000 标准是国际标准化组织 (ISO) 在1994年提出的概念,是指由 ISO/Tc176 (国际标准化组织质量管理和质量保证技术委员会)制定的国际标准。 ISO 9001 用于证实组织具有提供满足顾客要求和适用法规要求的产品的能力,目的在于增进顾客满意; ISO 9000不是指一个标准,而是一组标准的统称。软件企业经常采用的是 ISO 9001:1994《品质体系设计、开发、生产、安装的品质保证模式》。

ISO 9001 包括设计、开发、生产、安装和服务等活动的质量保障模式,该标准规定了质量体系的20个方面的质量要求,覆盖了全部设计和开发活动。如果软件开发企业能够达到这些要求,表明该企业具备质量保证能力,达到了 ISO 9001 认证。

2)CMM

CMM是由美国卡内基梅隆大学软件工程研究所1987年研制成功的,是软件生产过程标准和软件企业成熟度等级认证标准,我国软件企业大多采用 CMM认证。有关CMM 的内容见5.1.5节。

5.7.5软件风险管理

软件项目风险管理是软件项目管理的重要内容。在进行软件项目风险管理时,要辨识风险,评估它们出现的概率及产生的影响,然后建立一个规划来管理风险。风险管理的主要目标是预防风险。软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。软件项目风险会影响项目计划的实现,如果项目风险变成现实,就有可能影响项目的进度,增加项目的成本,甚至使软件项目不能实现。

美国Boehm的软件风险管理体系,把风险管理活动分成风险估计(风险辨识、风险分析、风险排序)和风险控制(风险管理计划、风险处理、风险监督)两大阶段。该体系偏重理论。

美国Charette的风险分析和管理体系,把风险分成分析(辨识、估计、评价)和管理(计划、控制、监督)两大阶段。该体系偏重理论,与Boehm体系接近。

美国卡内基梅隆大学软件研究所的CMU-SEI风险管理体系,包括SRE、CRM(ContinuousRisk Management)、TRM(Team Risk Management) 与 CMM配合的软件风险管理,是基于实践的全面风险管理体系,并将软件需求方作为软件风险管理的要素。

posted on 2024-08-09 23:48  欢笑一声  阅读(240)  评论(0)    收藏  举报

导航