1厦门大学软件学院高星软件工程基础主要内容软件工程的基本理念软件过程软件生命周期软件开发模型2解决软件危机之路提高软件产品的质量!降低软件开发的成本!3过程管理与目标管理理念:通过保证过程保证结果以小孩教育为例4软件工程原则B.W.Boehm(1983):1.用分阶段的生存周期计划严格管理软件开发2.进行阶段评审3.实行产品版本控制4.采用现代程序设计技术5.结果应能清楚的审查6.开发小组成员应少而精7.承认不断改进软件工程实践的必要性5二八定律对软件项目进度和工作量的估计:–认为完成80%的工作量,实际上只完成了20%。对程序中存在问题的估计:–80%的问题存在于20%的程序中。对模块功能的估计:–20%的模块实现了80%的功能。对人力资源的估计:–20%的人解决了软件中80%的问题。对投入资金的估计:–企业信息系统中,80%的问题可以用20%的资金耒解决。6软件工程视角与剖面企业角度计算角度信息角度工程角度政策、操作......7软件开发模型-软件生命周期模型•瀑布模型(WaterfallModel1970W.Royce)8•渐增模型(IncrementalModel)910快速原型模型(RapidPrototypingModel)11螺旋模型(SpiralModel)12•V模型13图1-7V模型14图1-8V模型改进-W模型•喷泉模型15•构件集成模型16图1-10构建集成模型•智能模型17图1-11智能模型•转换模型18图1-11智能模型软件过程基础任何工程方法(包括软件工程)必须以有组织的质量保证为基础.全面的质量管理和类似的理念刺激了不断的过程改进,正是这种改进导致了更加成熟的软件工程方法的不断出现.支持软件工程的根基就在于对质量的关注.建造计算机软件是一个迭代学习的过程。软件工程与软件过程的关系软件过程是为开发高质量软件所需要完成的任务的框架.软件工程是有创造力,有知识的人在定义好的,成熟的软件过程框架中进行的.该过程适合于他们建造的产品和他们的市场需要。一个软件过程定义了软件开发中采用的方法,而软件工程还包含该过程中应用的技术----技术方法和自动工具。软件的一般视图工程是对技术(或社会)实体的分析、设计、建造、验证和管理。抛开要工程化的实体,下列问题是必须首先回答的:–要解决的问题是什么?–要用于解决该问题的实体具有什么特点?–如何实现该实体(解决方案)?–如何建造该实体?–采用什么方法去发现该实体设计和建造过程中产生的错误?–当该实体的用户要求修改、适应和增强时,如何支持这些活动?软件的一般视图与软件工程相关的工作可分为三个一般的阶段:(1)定义阶段:集中于“做什么”;三个主要任务:系统工程、项目计划、需求分析(2)开发阶段:集中于“如何做”;三个特定任务:设计、编码、测试(3)支持阶段:关注于“变化”四类可能遇到的变化:纠错、适应、增强、预防软件过程一个软件过程包含以下内容:–一个公共过程框架:通过定义若干框架活动来建立的,这些活动可应用于所有软件项目,不考虑其规模和复杂性。–若干任务集合:每个集合都由软件工程工作任务、项目里程碑、软件工程产品和质量保证点组成。–最后是庇护性活动:软件质量保证、软件配置管理和测度。软件过程可分为三大类基本过程类:是构成软件生存周期主要部分的那些过程,包括获取,供应,开发,操作,维护等过程.支持过程类:可穿插到基本过程中提供支持的一系列过程,包括文档开发,配置管理,质量保证,验证,确认,联合评审,审计,问题解决等过程.组织过程类:一个组织用来建立,实施一种基础结构,并不断改进该基础结构的过程,包括管理,基础,改进,培训等过程.软件工程过程•软件工程过程(SoftwareEngineeringProcess)是为获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动。•软件工程的过程则是将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的。•过程定义了方法使用的顺序、要求交付的文档资料、为保证质量和协调变化所需要的管理、及软件开发各个阶段完成的里程碑。软件工程过程通常包含四种基本的过程活动P(Plan)软件规格说明:规定软件的功能及其运行的限制;D(Do)软件开发:产生满足规格说明的软件C(Check)软件确认:确认软件能够完成客户提出的要求A(Action)软件演进:为满足客户的变更要求,软件必须在使用的过程中演进软件过程模型所有软件开发都可被刻画为一个问题解决环,其中包括四个不同的阶段:状态描述、问题定义、技术开发和解决集成。软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期。软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。软件生存期模型(也称软件开发模型、软件过程模型、软件工程范型)是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。简单地说,是软件产品或软件系统从设计、投入使用到被淘汰的全过程。所谓模型就是一种开发策略,这种策略针对软件工程的各个阶段提供了一套范型,使工程的进展达到预期的目的。软件生存周期模型编码修复模型编码修复模型是所有模型中最古老也是最简单的模型。编码测试交付编码修复模型的特点它几乎不执行任何预先的计划,该模型的使用者很快就进入了所开发产品的编码阶段。典型的情况是,完成大量的编码,然后测试产品并且纠正所发现的错误。编码和测试工作一直持续到产品开发工作全部完成并将产品交付给客户。缺点:缺乏预先的计划和不正规的开发;软件产品的质量低于用其他模型实现的产品质量;产品的设计没有认真计划及文档化,代码很难维护。优点:简单快捷,适合于很小且很简单的项目。软件过程技术过程技术工具可以帮助软件组织分析它们当前的过程,组织工作任务,控制和监管进度,以及管理技术质量。一旦创建了一个可接受的过程,就可以使用其他过程技术工具来分配、监管、甚至控制过程模型中定义的所有软件工程任务。产品和过程如果过程很弱,最终产品不可避免会出问题。但过分依赖过程也是很危险的。企业的目的–根本目的:合法地赚取尽可能多的利润,使企业利益最大化。–为了使企业利益最大化,软件产品(项目)应当“做得好、做得快并且少花钱”企业的迫切愿望–寻求“提高产品质量、提高生产率并且降低成本”的解决方案,包括方法论和工具。CMM能力成熟度模型(CapabilityMaturityModel)人员方法与规程技术与工具过程产品软件过程改进概述过程的基本概念–过程就是人们使用相应的方法、规程、技术、工具等将原始材料(输入)转化成用户需要的产品。过程的3个基本要素是:人、方法与规程、技术与工具。过程被文档化后才能成为规范。–过程与产品存在因果关系。即好的过程才能得到好的产品,而差的过程只会得到差的产品。企业领导关心过程吗?为什么要监控过程?何为过程可视性?什么是软件过程改进–从20世纪90年代至今,软件过程改进成为软件工程学科的一个主流研究方向,其中CMM和CMMI是该领域举世瞩目的重大成果。–提高软件过程能力的实践通称为软件过程改进(SoftwareProcessImprovement)。软件过程改进的根本目的是:提高质量、提高生产率并且降低开发成本。主要的软件过程域–工程类的主要过程域:需求开发、系统设计、软件实现、软件测试、软件维护等等;–管理类的主要过程域:项目规划、项目监控、需求管理、质量管理、配置管理等等。–上述过程域中的任何活动都会影响产品的质量、生产率和成本。CMM发展简史CMM是什么–CMM(CapabilityMaturityModel)是用于衡量软件过程能力的事实上的标准,同时也是目前软件过程改进最好的参考标准。–美国卡内基-梅隆大学软件工程研究所(SEI)研制.发展简史–CMM1.0于1991年制定。–CMM1.1于1993发布,该版本应用最广泛。–CMM2.0草案于1997年制定(未广泛应用)。–到2000年,CMM演化成为CMMI(CapabilityMaturityModelIntegration),CMM2.0成为CMMI1.0的主要组成部分。–CMMI-SE/SW1.1(CMMIforSystemEngineeringandSoftwareEngineering)于2002年1月正式推出。软件工程研究所(SEI)提出了—个综合模型,定义了当一个组织达到不同的过程成熟度时应该具有的软件工程能力。为了确定一个组织目前的过程成熟度,SEI使用了一个五级的评估方案,即能力成熟度模型CMM.该模型定义了在不同的过程成熟度级别上所需要的关键活动.CMM重要概念–5个成熟度等级:Initial,Repeatable,Defined,Managed,Optimizing–18个关键过程域。关键过程域指出为了达到某个成熟度等级必须要解决的一族问题。第一级:初始级—软件过程的特征是无序的,有时甚至是混乱的。几乎没有过程定义,成功完全取决于个人的能力。第二级:可重复级建立了基本的项目管理过程,能够追踪费用、进度和功能。有适当的必要的过程规范,使得可以重现以前类似项目的成功.第三级:定义级用于管理和工程活动的软件过程已经文档化、标准化,并与整个组织的软件过程相集成。所有项目都使用文档化的、组织认可的过程来开发和维护软件。本级包含了第二级的所有特征。第四级:管理级软件过程和产品质量的详细度量数据被收集,通过这些度量数据,软件过程和产品能够被定量地理解和控制。本级包含了第三级的所有特征。第五级:优化级通过定量的反馈,进行不断的过程改进,这些反馈来自于过程或通过测试新的想法和技术而得到。本级包含了第四级的所有特征。CMM的结构是层次化的结构,包括级、关键过程域(18个)、公共特征(5类)和关键实施(316个),划分了5个级别。关键过程域是指一系列相互关联操作活动,这些活动反映了一个软件组织改进软件过程时必须集中力量改进的方面。公共特征有效指出了一个KPA的实现范围、结构要求和实施内容,包括:执行约定、执行能力、实施活动、度量和分析、验证实施。关键实践是一些主要的实践活动,它是组成KPA的单元。比如:遵循已文档化的规程制订项目的软件开发计划是软件项目计划的一个关键实践。CMM的结构过程成熟度第二级软件配置管理软件质量保证软件子合同管理软件项目追踪和查错软件项目计划需求管理过程成熟度第三级同级复审组内协调软件产品工程集成的软件管理培训计划组织的过程定义组织的过程焦点过程成熟度第四级软件质量管理定量的过程管理过程成熟度第五级过程变化管理技术变化管理缺陷预防CMM等级评估过程复杂–每一个CMM等级评估周期(从准备到完成)约需12-30个月。–每一级别的评估由SEI授权的主任评估师领导一个评审小组进行,其成员大部分来自企业内部。–评估过程包括员工培训(企业的高层领导也要参加)、问卷填写和统计、文档审查、数据分析、与企业的高层领导讨论和撰写评估报告等。–评估结束由主任评估师签字生效(没有盖上公章的证书)取得主任评估师的资格比较困难–10年以上的软件开发经验–在SEI接受培训,培训费用每人约需数万美元,非美国人加倍。–经过两次以上CMM评估的全过程实习–主任评估师的资格并非终身制评估费用昂贵:大约是ISO认证的十倍–价格视客户需求的多少而定,可以与咨询公司协商。–2002年参考价:CMM2级50万元RMB,CMM3级80万元RMB。CMM在中国国内IT企业采用CMM的目的–提高企业的软件过程能力,但并不关心CMM评估。–既要提高企业的软件过程能力,又想通过CMM评估来提升企业的威望与知名度。–只是为了拿到CMM证书共性问题:费用高、难度大、见效慢–企业做一次比较完整的CMM2-3级咨询和评估大约要花费60~100万元。–企业内部组建SEPG的成本并不比咨询费低。–软件工程与项目管理工具比较昂贵(如Rational的产品)。–目前国内