五个块:软件基础——>软件分类——>软件发展阶段——>软件过程——>软件工程过程——>软件的生存期
软件的分类
软件的发展阶段: 软件的发展总是依赖于硬件的发展,每个阶段的硬件水平不同导致软件开发的水平不一
软件的生存期: 整个软件从开发诞生到废弃的过程。重点是开发的步骤,到软件工程的开发阶段每个步骤都会产生相应的文档并经过严格的评审才能执行下一步的开发。
软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程。其目的是提高软件生产率、提高软件质量、减低软件成本。软件工程是1968年在德国的NATO会议上提出的,希望用工程化的原则和方法来克服软件危机;而软件危机就是软件开发和维护过程中的各种问题,由于软件开发阶段缺乏好的方法的指导和好的工具的辅助,而且缺少有关的文档,使得大量的软件难以维护。
软件生命周期是指由软件定义、软件开发和软件维护等阶段组成的全过程,反映软件生存期内各种工作得组织以及各个阶段如何衔接。下表归纳了软件生存周期各个阶段的任务、参与人员和产生文档。常见的软件开发模型有瀑布模型、演化模型、螺旋模型和喷泉模型等。
软件由计算机程序、数据及文档组成,同时与硬件、数据库人、过程等共同构成计算机系统。软件工程包括三个要素:方法、工具和过程。主要的软件开发方法有以下几种方法:
软件开发模型:瀑布模型;演化模型(原型法);螺旋模型;喷泉模型(迭代和无间隙);软件成本模型;可行性分析的任务是从技术上、经济上、使用上、法律上分析需解决的问题是否存在可行的解。
需求分析是软件生存周期中相当重要的一个阶段。需求分析主要是确定待开发软件的功能、性能、数据、界面等要求。具体有以下几点:
需求分析的基本原则是能够表达和理解问题的信息域和功能域;以层次化的方式进行分解和不断细化;要给出系统的逻辑视图和物理视图;
描述软件需求的方法:
结构化分析(SA)方法是一种面向数据流的需求分析方法,它适用于分析大型数据处理系统。结构化分析方法的基本思想是自顶向下逐层分解,这样做可以把一个大问题分解成若干个小问题,经过多次逐层分解,每个最底层的问题都是足够简单、容易解决的,这个过程就是分解的过程。结构化方法的分析结果由数据流图DFD、数据词典和加工逻辑说明几个部分组成。其中,DFD的基本成分有数据流(data flow)、加工(process)、文件(file)和源/宿(source/sink)。
软件开发过程中的软件工程原则(8个):
软件工程基本原理(7个):
软件设计原则: 软件设计的原则对提高软件的设计质量有很大的帮助。
◆ 抽象
抽象是指忽视一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。过程抽象和数据抽象是常用的两种主要抽象手段。
◆ 模块化
模块化是指将一个待开发的软件分解成若干个小的简单的部分——模块,每个模块可独立地开发、测试、最后组装成完整的软件。这是一种复杂问题的“分而治之”的原则。
模块是指执行某一特定任务的数据结构和程序代码。一个模块有它的外部特征和内部特征。
◆ 信息隐蔽
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。信息隐蔽原则对提高软件的可修改性、可测试性和可移植性都有重要的作用。
◆ 模块独立
模块独立是指每个模块完成一个相对独立的子功能,并且与其他模块之间的联系简单。衡量模块独立程度的度量标准有两个:耦合和内聚。耦合是指模块之间联系的紧密程度。耦合度越高则模块的独立性越差。按耦合度从低到高依次有7种耦合方式。
内聚是指模块内部各元素之间联系的紧密程度内聚度越低模块的独立性越差。按内聚度从低到高依次有7种内聚种类。
模块分解原则:
结构化设计方法
结构化设计(SD)方法是一种面向数据流的设计方法,它可以与SA方法衔接。结构化设计采用结构图(SC)来描述程序的结构。其基本成分有模块、调用和输入/输出数据。
结构图:
在需求分析阶段用SA方法产生了数据流图(DFD)。面向数据流的设计可以方便的将DFD转换成程序结构图。DFD从系统的输入数据流到系统的输出数据流的一连串连续变换形成一条信息流。DFD的信息流大体可分为两种类型:变换流和事务流。与之对应的也存在两种分析,变换分析和事务分析。变换分析是从变换流型的DFD导出程序结构图,而事务分析则是从事务流行型的DFD导出程序结构图。
SD方法的具体设计步骤为:
结构化程序设计
结构化程序(SP)设计采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。结构化程序设计的描述工具主要有图形描述工具、语言描述工具和表格描述工具。常用的图形描述工具有程序流程图、盒图(NS图)和问题分析图(PAD)。典型的语言描述工具是PDL(program designlanguage)。典型的表格描述工具是判定表和判定树。
面向数据结构的Jackson方法也十分常用:
Jackson方法是以数据结构为设计基础,设计目标是得出对程序处理过程的描述,其设计过程是从描绘数据结构的Jackson图推导出描绘程序结构的Jackson图。这种方法最适合于详细设计阶段使用。
Jackson方法的具体设计步骤为:
软件编码:
根据详细设计说明书编写程序,为开发项目选择程序设计语言需要考虑的因素有应用领域、算法和计算的复杂性、软件运行环境、用户需求、数据结构和开发人员的水平。软件的设计质量与程序设计语言的技术性能无关,但在程序设计转向程序代码时,转化的质量受语言性能的影响。好的程序应该具有模块化结构,系统应该有较高的模块独立性。从应用领域看,COBOL适合商业领域;FORTRAN适合科学计算;PROLOG和LISP适合人工智能领域;SMALLTALK、C++、JAVA是面向对象语言;C是开发系统的程序设计语言;
对源程序最基本的质量要求是正确性和可靠性,此外还很注重软件的易使用性、易维护性和易移植性。软件测试的工作量约占软件开发总工作量的40%以上,其目的是尽可能多的发现软件产品(主要是指程序)中的错误和缺陷。软件测试是自底向上,逐步集成的过程,低一级测试为上一级测试准备条件;
测试的关键是测试用例的设计,其方法可分为两类。
软件测试的主要步骤有单元测试、集成测试和确认测试。
使用各种测试方法的综合策略:
用来辅助软件开发、运行、维护、管理和支持等过程中的活动的软件称为软件工具,通常也称为CASE(计算机辅助软件工程)工具。
整个软件开发过程要使用很多开发工具,其中包括分析工具、设计工具、编程工具、测试工具、维护工具等等。
软件开发工具是指支持软件产品开发的软件系统,它由软件工具集和环境集成机智构成。工具集包括支持软件开发相关过程、活动、任务的软件工具;环境集成机智为工具集成和软件开发、维护和管理提供统一的支持。
软件开发环境是把一组相关的工具集成在环境中,提供数据集成、控制集成和界面集成等机制。其中:
集成型软件开发环境由工具集和环境集成机制组成,这种环境应该具有开放性和可剪裁性;环境集成机制的核心是环境数据库。
软件开发项目管理基础知识(时间管理、成本管理、质量管理、人力资源管理、风险管理等)及其常用管理工具.软件维护阶段是指从软件交付使用到软件被淘汰为止的整个时期,它是在软件交付使用后,为了改正软件中隐藏的错误,或者为了使软件适应新的环境,或者为了扩充和完善软件的功能或性能而修改软件的过程。根据引起软件维护的原因,软件维护通常可分成改正性维护、适应性维护、完善性维护、预防性维护。
软件管理工作涉及到软件开发工作的方方面面,其直接对象包括人、财、物,简单地说,人就是指软件开发人员,财就是指项目经费,物就是指软件项目。也许还没有关于这方面的专门理论,但在工商管理领域已经有十分成熟的管理学理论,他山之石,可以攻玉,所以我们完全可以引进到软件项目方面的管理。
作为软件管理人员,应该站在高处来俯瞰整个项目,如果有不识庐山真面目的感觉就不太好了。有了俯瞰全局的意识这一前提,采用适当的管理技术,项目开展就容易罗。软件项目的管理工作可以分位四个方面:软件项目的计划、软件项目的组织、软件项目的领导和软件项目的控制.
1 软件项目的计划
软件开发项目的计划包括定义项目的目标,以及达到目标的方法。他涉及到项目实施的各个环节,带有全局的性质,是战略性的。计划应力求完备,要考虑到一些未知因素和不确定因素,考虑到可能的修改。计划应力求准确,尽可能提高所依据的数据的可靠程度。主要工作集中在软件项目的估算、软件开发成本的估算和软件项目进度安排。软件项目计划的目标是提供一个能使项目管理人员对资源、成本和进度做出合理估算的框架。这些估算应在软件项目开始时的一段有限时间内作出,并随着项目的进展进行更新。
2 软件项目的估算
软件项目管理过程开始于项目的计划,在做项目计划时,第一项活动是估算。现在已经使用的使用技术是时间和工作量的估算。因为估算是其他项目计划活动的基石,而且项目计划又未软件工程过程提供了工作方向,所以我们不能没有计划就着手开发,否则就会陷入盲目性。
估算本身带有风险,估算资源、成本和项目进度时需要经验、有用的历史信息、足够的定量数据和作定量度量的勇气。估算的精确程度受到多方面的影响。首先,项目的复杂性对于增加软件计划的不确定性影响很大,复杂性越高,估算的风险就越高。复杂性是相对度量的,他与项目参加人员的经验有关,比如如果让搞MIS的项目组去搞操作系统设计显然增加了复杂性。其次,项目的规模对于估算的精确性和功效的影响也比较大,因为随着软件规模的扩大,软件相同元素之间的相互依赖、相互影响也迅速增加,因而估算时进行问题分解也会变得更加困难。还有项目的结构化程度也影响项目估算的风险,这里的结构性是指功能分解的简便性和处理信息的层次性,结构化程度提高,进行精确估算的能力就提高,相应风险将减少。此外,历史信息的有效性也影响估算的风险,在对过去的项目进行这综合的软件度量之后,就可以借用来比较准确地进行估算。影响估算的因素远不止这些,比如用户需求的频繁变更给估算带来非常大的影响。
估算的依据是软件的范围,包括功能,性能、限制、接口和可靠性。在估算开始之前,应对软件的功能进行评价,并对其进行适当的细化以便提供更详细的细节。由于成本和进度的估算都与功能有关,因此常常采用功能分解的办法。性能的考虑主要包括处理和响应时间的需求。约束条件则标识外部硬件、可用存储和其他现有系统对软件的限制。另外软件项目计划还要完成资源估算,包括人力资源、硬件资源和软件资源。在考虑各种软件开发资源时最重要的是人,必须考虑人员的技术水平、专业、人数以及在开发过程各阶段对各种人员的需要。硬件资源作为一种工具投入。软件资源包括各种帮助开发的软件工具,比如编程工具、管理工具、测试工具,还有操作系统和数据库等。
工作两估算是最普遍使用的技术。经过功能分解之后,可以估计出每一个项目任务的分解都需要花费若干人年,总计之后就知道软件项目总体工作量。
软件开发成本的估算
软件开发成本主要是指软件开发过程所花费的工作量及其相应的代价。它不同于其他物理产品的成本,它主要包括人的劳动的消耗,人的劳动的消耗所需的代价就是软件产品的开发成本。
开发成本的估算方法有很多种,象简单的代码行技术,任务分解技术,自动估计成本技术,专家判定技术,还有参数方程法,标准值法,以及COCOMO模型法。其中COCOMO (Constructive Cost Model)模型法是一种精确、易于使用的成本估算方法,该模型按其详细程度分为三级:基本COCOMO模型、中间COCOMO模型和详细COCOMO模型
软件项目进度安排
软件项目的进度安排主要是考虑软件交付用户使用的这一段开发时间的安排。进度安排的准确程度可能比成本估计的准确程度更重要。软件产品可以靠重新定价或者靠大量的销售来弥补成本的增加,但进度安排的落空会导致市场机会的丧失或者用户不满意,而且也会导致成本的增加。因此在考虑进度安排时要把人员的工作量与花费的时间联系起来,合理分配工作量,利用进度安排的有效分析方法严密监视软件开发的进展情况,以使得软件开发的进度不致被拖延。
在进行进度安排时要考虑的一个主要问题是任务的并行性问题。当参加项目的人数不止一人是软件开发工作就会出现并行情况。因为并行任务是同时发生的所以进度计划表必须决定任务之间的从属关系,确定各个任务的先后次序和衔接,确定各个任务完成的持续时间。另外还应注意关键路径的任务,这样可以确定在进度安排中应保证的重点。常用的进度安排方法有两种,即甘特图(Gantt Chart)法和工程网络法。
3.软件项目的组织
参加软件开发的人员如何组织起来,使他们发挥最大的工作效率,对成功地完成软件项目极为重要。
组织结构
开发组织采用什么形式由软件项目的特点决定,同时也与参加人员的素质有关。通常有三种组织结构模式:
组织结构的最后一层是程序设计小组的组织形式。通常认为程序设计工作是按独立的方式进行的,程序人员独立地完成任务。但这并不意味着相互之间没有联系。一般在人数比较少时组员之间的联系比较简单,但随着人数的增加,相互之间的联系变得负责起来。小组内部人员的组织形式对对生产率有着十分重要的影响。
常见的小组组织形式有三种,这三种形式可以灵活使用。
合理地配备人员是成功地完成软件项目的切实保证。所谓合理地配备人员应包括按不同阶段适时运用人员,恰当掌握用人标准。一般来说,软件项目不同阶段不同层次技术人员的参与情况是不一样的。下图是典型的软件开发人员参与情况曲线。
在人力配备问题上,由于配置不当,很容易造成人力资源的浪费,并延误工期。特别是采用恒定人员配备方案时在项目的开始和最后都会出现人力过剩,而在中期又会出现人力不足的情况。
面向对象(object-oriented,OO)方法是以客观世界中的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计的结果与客观世界的实际比较接近,容易被人们所接受。下面列举几个面向对象设计方法中的重要术语,它们构成面向对象的程序设计语言的核心。
◆对象(Object)
对象是和有数据及可对这些数据施加的操作结合在一起所构成的独立单位的总称。一个对象通常可由对象名、属性和操作三部分组成。
对象的划分判定标准:
◆实例(Instance)实例是由某个特定类所描述的一个对象。
◆类(Class)类是一组具有相同属性和相同操作的对象的集合。类是面向对象的程序设计语言提供的可再用软件成分。
◆方法(Method)对象所能执行的操作称为方法。方法是类中定义的函数,描述对象执行操作的算法。
◆消息(Message)消息是要求某个对象执行类中定义的某个操作的规格说明。一个消息通常包括接受对象名、调用的操作名和适当的参数(如有必要)。
主要特点:
◆封装性: 封装性是一种信息隐蔽技术,它使系统分析员能够清晰地标明他们所提供的服务界面,用户和应用程序员则只看得见对象提供的操作功能(即封装面上的信息),看不到其中的数据或操作代码细节。
◆多态性: 多态性是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。
◆继承性: 继承是指在某个类的层次关联中,不同的类共享属性和操作的一种机制。一个父类可以有多个子类。父类描述了这些子类的公共属性和操作,子类中还可以定义其自己的属性和操作。如果一个子类只有唯一的一个父类,这种继承称为单一继承。如果一个子类有多个父类,可以从多个父类中继承特性,这种继承称为多重继承。
◆分布式对象Distributed Object: 在发布实施角度上看,对象可分为三种:本地对象,远地对象,虚拟对象。
- 本地对象Local Object :指分布在同一个系统中的对象,互称为本地对象
- 远地对象Remote Object :指分布在不同系统中的对象(同一个群体系统)。
- 虚拟对象Virtual Object :不同于本地和远地对象,虚拟对象不属于真实的对象,而是一个虚设的类型。真正的操作不在虚拟对象本身,只是远地对象在本地的映射。本地和远地对象是相互的关系。而虚拟对象只是一种映射,用于关联本地和远地对象,起到分布和负载均衡的作用。
面向对象数据库技术:是面向对象技术和数据库技术的有机的结合,它有着关系数据库没有的优点。面向对象数据库(OODB) +关系数据库(RDB)→对象-关系数据库(ORDB). 面向对象的特征:类和继承性,对象及对象标识、封装性、信息/实现隐蔽、状态保持,消息,多态性,一般性。
面向对象的系统分析设计,看起来其实也很简单,步骤大概如下:
边界条件(也即上面提到的“一定要求”,对象划分的原则):
当前常见的面向对象的方法很多,下面简单介绍三种:
在这种方法中定义两种对象类之间的结构:
- 5个层次:主题层、对象类层、结构层、属性层、服务层
- 5个活动:标识对象类、标识结构、定义主题、定义属性、定义服务
OOA中的5个层次和5个活动继续贯穿在OOD(面向对象设计)过程中。OOD模型由4个部分,即:
- 分类结构——反映了一般与特殊的关系
- 组装结构——反映了对象之间整体与部分的关系
- 问题域
- 人机交互
- 任务管理
- 数据管理
面向对象的类设计相关原则:
软件质量是指反映软件系统或软件产品满足规定或隐含需求的能力的特征和特性全体。
下面从管理的角度列出了影响软件质量的主要因素。
高质量软件的特性:采用测试作为评价软件标准的做法是非常常见的。例如,sun公司就专门设计了测试软件,对各个实现J2EE规范的产品进行测试。使用测试作为规范的最大好处就是明确、具体。使用测试代码建立目标,编写代码完成测试目标,再制定下一个目标,如此循环,构成了测试驱动开发的工作流程。
为了成功地领导和运作一个组织,需要采用一种系统和透明的方式进行管理。针对所有相关方的需求,实施并保持持续改进其业绩的管理体系,使组织获得成功。组织为实现质量目标,应遵循以下八项质量管理原则。
- 1、 组织实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
- 1、 组织实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
- 1、 织实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
- 1、 实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
- 1、 实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
- 1、 实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
- 1、 实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
- 1、 实施本原则的主要利益
- 2、 组织实施本原则时一般要采取的主要措施
- 3、 本原则在标准中的体现
软件质量保证是指为了保证软件系统或软件产品最大限度的满足用户要求而进行的有计划、有组织的活动,其目的是产生高质量的软件。目前有多种软件质量模型来描述软件质量特性,如ISO/IEC9126软件质量模型、Mc Call软件质量模型等
软件配置管理(SCM——Software ConfigurationManagement)是ISO9001和CMM Level2中的重要组成元素,它在软件产品开发的生命周期中,提供了结构化的、有序化的、产品化的管理软件工程的方法,是软件开发和维护的基础。
SCM是指通过技术及行政手段对软件产品及其开发过程和生命周期进行控制、规范的一系列措施和过程,它通过控制、记录、追踪对软件的修改和每个修改生成的软件组成部件来实现对软件产品的管理。SCM可以协调软件开发使得混乱减到最小,是一种标识、组织和控制修改的技术,目的是使错误达到最小并最有效地提高生产效率。
SCM使软件产品变为受控的和可预见的,它控制这样几个问题:
通过实施SCM,可以达到可重用过程制度化,包括:满足组织的政策方针、计划和过程描述文档化、分配适当资源(包括资金,人员和工具)、确定责任和权限、培训相关人员、通过不同级别的管理方法和纠正活动检测状态。置于SCM之下的工作产品包括发送给用户的软件产品(如软件需求文档,软件代码),用于内部使用的软件工作产品(如过程描述),和用于创建工作产品的工具等(如操作系统、数据库、开发工具)。
SCM还用于建立和维护软件工作产品基线。基线是由配置项及相关实体组成的,包括组成软件产品的相关版本、设计、代码、用户文档等。它是软件生命周期中各开发阶段末尾的特定点,即里程碑。通过正式的技术评审而得到的软件配置的正式文本才能成为基线,它的作用是使各个阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检验和肯定阶段成果。基线是配置项继续发展的一个固定基础。
实施SCM不论是对软件开发者、测试者、项目经理、QA人员,还是客户都将会获得很多好处:有助于规范团队各个角色的行为,同时又为各个角色之间的任务传递和交流提供无缝的接合;能帮助项目经理更好地了解项目的进度、开发人员的负荷、工作效率和产品质量状况、交付日期等信息。
SCM分为四大功能领域:配置标识、变更控制、配置状态统计、配置审核。
SCM从应用层次上可以从低到高分为三级:版本控制、以开发者为中心、过程驱动。
目前,CMM已经发展到CMMI(CapabilityMaturity Model Integration,能力成熟度模型集成)阶段。自20世纪80年代末以来,SEI开发了一系列涉及多个学科的CMM标准,包括系统工程、软件工程、软件获取、生产力实践及集成产品和过程开发,希望通过帮助组织提高人员、技术和过程的成熟度来改善组织整体软件生产能力。然而,多个模型的同时使用限制和阻碍了组织过程改善的能力。于是,SEI中止了对CMMI源模型的更新,开始集中开发CMMI项目。CMMI项目融合了SW-CMM v2.0 draft C、EIA/IS731、SECM以及IPD-CMMv0.98的内容,形成了组织范围内过程改善的单一集成模型。预计到2001年末,CMMI-SE/SW/IPPD/A ver1.1将正式发行。CMMI项目为工业界和政府部门提供了一个集成的产品集,主要目的是消除不同模型之间的不一致和重复,降低基于模型改善的成本。未来的CMMI将以更加系统和一致的框架来指导组织改善软件过程,提高产品和服务的开发、获取和维护能力。
SW-CMM主要应用在两大方面:能力评估和过程改善。
1. 能力评估
SW-CMM是基于政府评估软件承包商的软件能力发展而来的,有两种通用的评估方法用以评估组织软件过程的成熟度:软件过程评估和软件能力评价。
● 软件过程评估: 用于确定一个组织当前的软件工程过程状态及组织所面临的软件过程的优先改善问题,为组织领导层提供报告以获得组织对软件过程改善的支持。软件过程评估集中关注组织自身的软件过程,在一种合作的、开放的环境中进行。评估的成功取决于管理者和专业人员对组织软件过程改善的支持。CBA-IPI是一种软件过程评估方法,
● 软件能力评价: 用于识别合格的软件承包商或者监控软件承包商开发软件的过程状态。软件能力评价集中关注识别在预算和进度要求范围内完成制造出高质量的软件产品的软件合同及相关风险。评价在一种审核的环境中进行,重点在于揭示组织实际执行软件过程的文档化的审核记录。SCE是SEI开发的一种基于CMM面向软件能力评价的方法。
SW-CMM分为5个成熟度等级:初始级、可重复级、已定义级、可管理级和优化级。其中每个成熟度等级都是由一些关键过程域和关键实践组成。
CMM的目的是帮助软件企业对软件工程过程进行管理和改进,增强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。企业实施CMM模型并评估可为企业带来如下好处:指导软件组织提高软件开发管理能力;降低软件承包商和采购者的风险;评估软件承包商的软件开发管理能力;帮助软件企业识别开发和维护软件的有效过程和关键实践;帮助软件企业识别为达到CMM更高成熟等级所必须的关键实践;增加软件企业的国际竞争能力。
CMM为企业的软件过程能力提供了一个阶梯式的进化框架,阶梯共有五级。第一级只是一个起点,任何准备按CMM体系进化的企业都自然处于这个起点上,并通过它向第二级迈进。除第一级外,每一级都设定了一组目标(Goals),如果达到了这组目标,则表明达到了这个成熟级别,可以向下一级别迈进。
除了初始级别以外,CMM的每个成熟级别的实现都定义成可操作的,每一级包含了实现这一级目标的若干关键过程域(KPA),共有18个关键过程域(KPA)分布于2、3、4、5级当中,如下表所示。
每个KPA都是由关键实施活动(KP)所组成,它们的执行表明该KPA在一个组织内部得到实现。
2. 过程改善
软件过程改善是一个持续的、全员参与的过程。SW-CMM建立了一组有效地描述成熟软件组织特征的准则。该准则清晰地描述了软件过程的关键元素,并包括软件工程和管理方面的优秀实践。东软股份目前有选择地引用这些关键实践指导软件过程的开发和维护,以不断地改善组织软件过程,实现成本、进度、功能和产品质量等目标。
软件过程改进:
"软件危机"简单地说就是:软件质量达不到要求,软件项目无法按时完成和软件项目的花费超预算。这是一个世界性的问题。在试图解决这个危机时,就引入了软件工程过程管理与软件工程过程改进的概念。
软件工程过程管理就是要把整个软件的生命周期,从原始概念到产品维护,制订出-个明确合理的工程过程加以管理。过程管理不会压制专业人员的创造性。好的工程过程会保证软件项目不会陷入混乱状态,开发人员有充分的时间按计划进行创造。过程及其管理只不过是我们手中的一件工具,而且这件工具是我们为了自己而设计的。
一个企业软件工程过程的建立不会一开始就十全十美, 而且企业的内外部环境也是在不断地变化.所以软件的管理过程需要不断地改进。缺少了过程改进,再好的体系也会渐渐的变得过时和不适用,更没有可能使我们开发软件的能力逐步地成熟起来。所以不管是从提高内部的管理水平和赢得外部客户信任角度来讲,不断进行过程改进、向更高的成熟度迈进都是当今软件企业所必须要作的工作。
如何进行软件过程管理与改进,软件界的许多人提出了各种各样的方案。卡内基梅隆大学的软件工程研究所SEI(Software Engineering Institute)提出了SW-CMM,它将软件过程的成熟度分为五级,描述了企业要达到每一个级别所必须要做的工作。企业通过使用这个模型,一级级地去提高它们的软件开发及生产能力。
CMM实施中应注意的问题 :