登陆注册
8724600000006

第6章 软件工程概述(4)

1.CMM的组成

CMM由5个成熟度等级组成。除了等级1外,每个成熟度等级都由几个关键过程区域组成。每个关键过程区域又划分为5个称作共同特点的部分。共同特点规定一些关键实践,当这些关键实践群体得到认真执行时,关键过程区域的目标就能得以实现。

CMM的成分包括以下几个内容。

1)成熟度等级(Maturity levels)

一个成熟度等级是在实现成熟软件过程中的一个完整定义的平台。5个成熟度等级提供CMM的顶层结构。

2)过程能力(Process Capability)

软件过程能力描述通过遵循软件过程能实现预期结果的程度。一个组织的软件过程能力提供一种预测组织承担下一个软件项目时预期的最可能结果的方法。

3)关键过程区域(Key Processareas)

每个成熟度等级由若干关键过程区域组成。每个关键过程区域标识出一串相关的活动,当它们作为群体完成时,就达到一组目标,此组目标对建立该过程成熟度等级是至关重要的。关键过程区域是分别定义在各个成熟度等级并与之相连在一起的。例如,等级2的一个关键过程区域是软件项目策划。

4)目标(Goals)

目标概括了一个关键过程区域中的关键实践,并可用于确定一个组织或项目是否已有效地实施该关键过程区域。目标表示每个关键过程区域的范围、边界和意图。例如,软件项目策划关键过程区域的一个目标是“软件估计已文档化,供策划和跟踪软件项目使用”。参见“软件能力成熟度模型1.1版”。

5)共同特点(CommonFeatures)

将关键实践分别归入下列5个共同特点中:执行约定、执行能力、执行的活动、测量和分析及验证实施。共同特点是一种属性,它能指示一个关键过程区域的实施和规范化是否是有效的、可重复的和持久的。执行的活动这个共同特点描述实施活动。其余4个共同特点描述规范化因素,它们使得过程成为组织文化的一部分。

6)关键实践(KeyPractices)

每个关键过程区域用若干关键实践加以描述,当实施这些关键实践时,能帮助实现该关键过程区域的目标。关键实践描述是对关键过程区域的有效实施和规范化贡献最大的基础设施和活动。例如,软件项目策划这个关键过程区域的一个关键实践是“按照已文档化的规程制定项目的软件开发计划”。

2.CMM的5个等级

1)初始级

在初始级,软件开发过程基本上处于无序的状态,整个过程的特征是特定的和偶然的,有时甚至是混乱的,项目的成功往往依赖于个人能力。项目经常处于混乱状态。

2)可重复级

在可重复级上,已建立管理软件项目的方针和实施这些方针的规程,也就是建立基本的项目管理过程,能够跟踪费用、进度和功能;有适当的、必要的过程规范;借鉴以前项目的成功经验成为了可能。等级2组织的过程能力可概括为有纪律的,因为软件项目的规划和跟踪是稳定的,能重复以前的成功。

3)已定义级

在已定义级,软件的工程活动和管理活动已经被文档化和标准化,并与整个组织的软件过程相集成。所有的项目都使用统一的、文档化的、组织过程认可的版本来开发和维护软件。等级3组织的软件过程能力可概括为标准的和一致的,因为无论软件工程活动还是管理活动,过程都是稳定的和可重复的。

4)已管理级

在已管理级上,组织对软件产品和过程都设置定量的质量目标。此时,软件过程和产品质量的详细度量数据被收集,通过这些度量数据,软件过程和产品能够被定量地理解和控制。等级4组织的软件过程能力可概括为可预测的,因为过程是已测量的,并在可测的范围内运行。

5)优化级

在优化级,整个组织集中精力对通过的数据反馈进行不断的过程改进。因而在此阶段的软件过程能力可特征化为不断改进。

1.5.2XP

极限编程是敏捷模式(Agile Model)的典型代表,与CMM这些重量级(Heavyweight)的软件过程模型相比较而言,传统的CMM,ISO/IEC15504等软件过程模型通过加强软件组织级别管理与过程控制,强调通过大量的中间制品,如大量过程文档的制作以实现软件质量的保证,但却忽视了开发人员工作效率的提高;强调软件过程的可预见性、可控制性和可视性,而忽视对日益复杂多变的软件环境的适应性。正是为了弥补传统重载软件工程模型的不足,人们提出了敏捷模式(Agile Model)。因而敏捷模式的特点可以归纳为两点:一是基于对环境多变性的适应而不是对过程的预测;二是强调以人为导向而非以过程为导向。

KentBeck在他的开篇之作《Extreme Programming Explained—Embrace Change》(1997)最早提出了极限编程。题目中的“Embrace Change”道出了提出极限编程的初衷。现代企业环境日益复杂,变化莫测。传统的假定需求不可变的软件过程模型,如线性模型,已经过时。必须针对企业环境多变,客户需求多变这一事实,提出新的软件过程模型,XP就是这样的软件过程模型,充分地体现了极限编程的特点。所以XP实质上是以开发符合变化的客户需求的软件为目标而产生的一种方法。它的成功得益于特别强调客户满意度,XP使开发者能够更有效地响应客户的需求变化,甚至在软件生命周期的后期,也能做到对客户需求的变化及时响应。极限编程在国外已经很多大公司加以实践,并被证明是很有效的软件过程模型。

1.XP的过程

用户代表提出用户故事(User Stories,实际上是对需求的一种简明易懂的描述),开发小组根据用户故事进行系统比拟,并进行初步的体系结构刺探(spike,意在试探需要解决的技术难点,走通技术路线)得到系统比拟的结果。开发小组以系统比拟用户需求以及体系结构刺探得到的可能难点为基础,根据用户设定的优先级来制定发布计划,然后开始一个个迭代过程。每次迭代结束时,进行用户验收测试,若仍需继续改进,则继续迭代,否则就完成了一次小交付。

本质上XP是一种高度动态的软件过程,它通过一系列较短的迭代周期,来降低软件开发风险,适应系统需求的变更。所以极限编程通常比较适用于需求容易变化的环境,同时由于其极为重视沟通而忽视中间制品的制作,它通常对于场地集中,10人以下的开发团队较为合适。

2.XP的4个价值

1)交流(Communication)

XP充分强调了项目开发人员之间的充分交流,同时也强调客户的积极参与。

2)简化(Simplicity)

现代设计领域越来越倾向于简约之美。复杂系统的可靠构建往往出之于最为简单的设计思路。XP顺应了这一潮流,它强调在系统可以运转的前提下,做最简洁的工作;在开发中不断优化设计,时刻保持代码简洁、无冗余。

3)反馈(Feedback)

XP是高度动态的软件过程,它强调通过各种形式的反馈(这些反馈包括小交付、短迭代、测试先行等内容)以实现高度迭代的动态过程。

4)胆识(Courage)

XP以人为导向还体现在提倡开发者勇敢的面对压力,做正确的判断,并敢于付诸行动。如丢弃设计不良的代码,甚至重新设计,程序员在疲惫时立即休息,每星期工作40小时等,这些都充分体现了XP以人为导向的特点。

3.XP的11个核心实践

1)工作团队(Whole Team)

除了传统软件开发团队的一些角色,如程序员、系统分析师、项目经理这样的角色外,XP编程的Team中还包含了用户代表(On—site User)。由他来提出需求,确定开发优先级,把握开发动向。通常在XP团队中还有类似教练(Coach)的角色,以指导XP方法的实施与外部的沟通和协调。XP强调小组所有成员对整个团队的贡献。

2)计划(Planning Game)

XP中的计划包括两类:一类是发布计划(Release Planning),一类是迭代计划(Iteration Planning)。前者是指在项目开始时,所进行的项目过程交付日期所需资源所进行的粗略计划;后者是指每次迭代时,对此次迭代的工作计划的详细安排。

3)系统比拟(System Metaphor)

系统比拟是一种组员都可以接受,都易于理解的一种形象比喻,它描述了系统的功能或者运作方式。本质上它是系统架构的一种形象化的描述,其目的是为了促进组员之间的沟通与理解。

4)简单设计(Simple Design)

简单设计包含两方面内容:一是XP从不考虑将来的需求,只实现眼前要实现的功能,以简化设计;二是XP的设计尽可能简单易懂。XP的设计不是一劳永逸的事,而是不断重构,不断改进的过程,甚至在最后交付的时候都可能有设计改进。

5)设计改进(Design Improvement)

简单的设计并不意味着XP不关心设计质量,相反XP对设计要求是相当高的。XP通过持续不断的设计改进,也就是重构(Refactoring)来提高整个设计的质量。重构着眼于移除重复代码(可以通过面向对象的封装或者继承加以实现),目的在于加强软件系统中各模块内部的联系[也就是要提高系统的内聚性(Cohesion)],弱化系统各模块之间的联系[也就是降低系统的耦合性(Coupling)]。

6)结对编程(PairProgramming)

所谓结对编程,是指两个程序员肩并肩用同一台电脑编程。这样的做法看似在浪费人力,但事实上对于促进沟通,提高设计代码的质量确实有益。

7)测试驱动的开发(TestDrivenTesting)

XP通过经常性的测试以实现对设计代码的反馈。XP的测试包括单元测试和验收测试。XP的测试策略和技术是XP过程得以存在的基础。XP的测试策略是测试先行,测试用例的书写先于编码的完成,其测试技术主要是通过特定的测试框架(如Nunit,Junit等工具)实现自动化测试,以提高测试效率。

8)持续集成(Continuous Integration)

保持项目组中的所有模块始终是组装完毕,集成良好且可以执行的状态,一旦通过某一新的模块的单元测试,就将新的模块集成到整个系统中,并运行系统集成测试。这种做法非常便于查找测试中的Bugs,为增量开发提供了方便。显然这种做法必须以便捷的测试为基础,否则集成测试将是一件复杂痛苦的过程。

9)代码共享(Collective Code Ownership)

任何结对开发者在能够充分理解代码含义的前提下可以对项目组的任何代码做出改进。

10)编码标准(Coding Standard)

代码共享显然鼓励成员修改别人的代码,但前提是理解别人的代码。为此,提出编码标准这一核心实践,它要求全体成员尽可能遵守共同的编码规范,以促进沟通。

11)可持续步调(Sustainable Pace)

整个项目的开发节奏应该是可以长期维持的,为此,XP提出各种策略,如每周工作40小时,以保证成员能够以较高的工作效率长期工作。XP从1997年开始被提出,到今天虽然只有短短的十几年时间,但是发展普及非常迅速,其内容也愈加丰富。

思考题

1.简述通过软件工程所要达到的目标是什么?

2.可以从哪几个角度衡量软件的质量?并简述其具体内容。

3.简述软件开发技术。

4.什么是软件工程管理,主要包括哪些内容?

5.软件过程管理核心的主要内容是什么?

同类推荐
热门推荐
  • 散落爱情

    散落爱情

    他只是异国的皇子,却对远方的她痴情已久,他的日思夜想,她终有一天明了,可她已经残缺,又如何配得上他的高贵?一场削藩,倒戈的何止是一个朝代,那些纯洁的爱情,生死相许的誓言,在战乱中已经变得微不足道。
  • 致新世界:风起

    致新世界:风起

    海城大学,名叫光辉青春的团体。在社团成立的一月纪念日上,发生的事情,只是六人的小团体,最终将带来整个世界的巨变!
  • 纸婚厚爱,拒嫁优质前夫

    纸婚厚爱,拒嫁优质前夫

    柯凌潇的新婚婚礼上,他嫌恶得擦去沾染在嘴角的鲜红唇膏,薄情嘲笑,“十亿倒贴的女人,味道还真不错。”受嘲讽的黎渃像只受惊的小鹿,哀伤的眼神中蒙上了一层化不开的水气。而他没有怜悯之心,有的只是嗤笑之意,“真丑,跟丑八怪多呆一分钟都让我窒息!”柯凌潇的再婚婚礼上,黎渃身着黑裙,高调出现。红唇轻启,盛气凌然,“别关注我,今天的主角是站在我前夫身边的那一位才对。”目光交错,流言四起。小三上位,正牌观礼。黎渃含笑,注视着那个就连施舍的笑都不曾给予自己的前夫!柯凌潇......你准备好迎接我即将要呈现给你的重重惊喜了吗?
  • 诛天九劫

    诛天九劫

    成长的道路是由血泪白骨铺就的,太多太多的原因让他只能变强,变强,变强!世界越来越清晰,终有一天,他的眼中再无秘密。挥手翻云雨,横眼断风云!天地之间,舍我其谁?然而他不知道,故事才刚刚开始……
  • 初之命轮

    初之命轮

    身为空间神王的继承人,拥有无尽的空间之力。这个世界上最后一位召唤师,手下三大圣兽,暗黑冥炎虎,六灵啸月狼,八翼独角兽。以数十人的兵力,将敌人和仇人玩弄于股掌之间。神火焚烧,死而逃生,推翻教廷的统治。再次召集七族之力,平复自神界的侵略,将天使长歼灭于中央神殿门前。以一人之力战三大主神,将其收入麾下。在命运三女神的阻挠之下,力斩光明神王太华。耗尽神力拨动命运之轮,一切重新洗牌。
  • 灵棺夜行

    灵棺夜行

    送葬上山,我却被装在棺材里活活给埋了,随之整个村子三百多口人一夜之间全都消失了,只有晚上这里才人声鼎沸。我从棺材里爬出来,才发现......
  • 第一注灵师

    第一注灵师

    一个研究画画的女子携带两件中华宝器穿越异世,从此绘魂符、战凶兽、制灵图、引动天道,历经近百年风霜,成就从一个尘世弃子成长为仙界第一注灵师的传奇。秦入画的修炼一途或许孤独,但是那个一直陪伴左右的至爱、那些同过一段路程的朋友和那些激励自己奋进的反派们都将成为生命中难以忘却的风景。本篇小说免费阅读,保证完结,封面、插图及文字为作者原创。小可初临起点,写作水平有限,请大家多多包涵,真诚地希望与读者们在玄幻故事的细节里共同分享中华文化之美,非常感谢!
  • 初恋,生如夏花

    初恋,生如夏花

    爱如潮水,有涨有落,唯此生生不息;或澎湃汹涌,一波未平一波起;或风平浪静,海阔天空任东西。生如夏花,有开有谢,但求刹那芳华;或精彩纷呈,万紫千红争春暖;或淡雅如菊,独饮白露曳秋风。……这是一个关于青春的故事,有懵懂也有执着,有激荡也有平淡。这是一个关于初恋的故事,有欢乐也有悲伤,有怯懦也有勇敢。这是一个关于爱情的故事,有微笑也有泪水,有幸福也有遗憾。这是一个关于夏天的故事,有热情也有真心,有美丽也有温暖。这是一个相对易于被女生认同的故事,但其实更应该给男生看。这是一个发生在现实世界的真实故事,同生活相近,与YY无关。……谨以此书献给茉莉。谨以此书献给所有努力爱着的人。
  • 从绝地求生开始玩

    从绝地求生开始玩

    叮咚,获得铜币*5叮咚,获得银币*5“哇咔咔,杀职业选手和主播就是这么容易”木飞膨胀的在直播间吼道砰!你的队友使用AWM狙击步枪误伤了你系统,吃鸡,快穿,(三国,水浒类小说),修炼?不存在的,喝药才是王道(校花,假仙,斗破,斗罗等等都得去),综艺节目少不了(跑男,鸡条,向往等等都少不了)
  • 不医皇后

    不医皇后

    拒绝潜规则的小医生命丧五星级酒店,当再睁开眼时却成了失宠嫡女。庶妹抢她指腹为婚的世子未婚夫——好啊,她给。姨娘想方设法上位成正妻只等嫡女点头——好啊,她同意。渣父想将她卖给病的半死的太子冲喜——好啊,她嫁。医好一个人很难,但吊着一条命却很简单,姐会医术。都别急,抬头向上看、苍天放过谁,早晚一天,她会将这些曾欺负她的人如同试验室小白鼠般挨个放血!(本文纯属虚构,请勿模仿。)