软件工程方法与实践窦万峰计算机科学与技术学院南京师范大学2009年8月第一部分:软件工程与过程什么是软件工程?什么是工程化思想?什么是软件过程?有哪些过程模型?如何建立过程模型?什么是统一过程?什么是敏捷过程?有哪些模型?什么是软件工程实践?注:本部分的实验课参照实验教材实验1和实验2进行第1章概述(主要内容)软件工程的基本概念软件工程化思想软件工程两大范型软件工程思想与基本原理软件工程活动软件工程定义B.W.Boehm的定义:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必须的相关文件资料。FritzBauer的定义:软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。1983年美国《IEEE软件工程标准术语》的定义为:软件工程是开发、运行、维护和修复软件的系统方法,其中“软件”的定义为:计算机程序、方法、规则、相关的文档资料以及在计事机上运行时所必需的数据。什么是软件?三要素:程序文档数据特性:复杂性一致性不会磨损和“老化”易变性移植性成本高软件演化第一代:程序设计阶段。1946年到60年代初,其主要特征是程序生产方式为个体手工方式。第二代:程序系统阶段。60年代初到70年代初,软件工程学科诞生。软件的开发方式由个体生产发展到了小组生产,软件的开发与维护费用以惊人的速度增加,维护困难,导致软件危机。第三代:传统软件工程阶段。20世纪70年代中期至80年代中期,软件工程师把工程化的思想加入到软件的开发过程中,用工程化的原则、方法和标准来开发和维护软件。第四代:面向对象阶段。20世纪80年代中期至今,面向对象的方法学受到了人们的重视,促进了软件业的飞速发展,软件产业在世界经济中已经占有举足轻重的地位。软件危机两个方面的问题:如何开发如何维护表现:软件的规模大复杂度增加软件的需求量增大价格昂贵供需差增大开发速度慢质量难以保证软件危机解决途径重视需求分析,明确与确切表达需求重视与客户沟通与交流统一的、公认的方法论和规范指导重视设计和实现过程的资料充分的检测工作软件工程化思想把软件看作是一个工程产品软件工程学分成两个方面:软件开发技术软件工程管理工程化管理思想:很多问题的出现是因为缺乏软件过程控制能力能力成熟模型(CapabilityMaturityModel)软件工程两大范型传统的结构化范型特征:结构化技术要么面向行为,要么面向数据构成结构化范型的技术包括:结构化分析结构化设计结构化编程结构化测试结构化维护软件工程两大范型面向对象范型特征:将对象视作一个融合了数据及在其上操作的行为的、统一的软件组件。技术包括:面向对象分析面向对象设计面向对象编程面向对象测试面向对象维护优势:对象的概念符合业务或领域的客观实际维护容易软件工程基本原理分阶段的软件生存周期坚持进行阶段评审实行严格的产品控制采用现代程序设计技术明确职责开发小组的人员应少而精不断改进开发过程软件工程思想推迟实现的观点逐步求精的观点分解与抽象的观点信息隐蔽观点质量保证观点软件工程活动开发活动软件生命周期模型项目管理活动项目的范围(要做的内容)进度(要花费的时间)成本(要耗费的资源)过程改进活动关注质量软件开发的最佳实践过程定义和改进小结软件工程的主旨是以工程化的思想进行软件开发,以生产高质量和高效率的软件。软件工程化思想的核心是,把软件看作是一个工程产品。软件工程方法学分别是传统结构化范型和面向对象范型。软件工程活动包括开发活动、管理活动和过程改进活动。第2章软件过程(内容提要)什么是软件过程?什么软件生命周期?能力成熟度模型敏捷过程软件过程实践软件过程定义:软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动通常使用生命周期模型简洁地描述软件过程层次:软件工程是一门建立在以质量焦点为基础,分过程、方法和工具三个研究层次的综合技术过程方法与工具工具方法过程质量焦点软件过程框架定义:框架是实现整个软件开发活动的基础,并且那些与过程有关的角色、职责的定义以及实现也都离不开框架的支持两个方面组织及管理框架技术及工具框架软件过程模型把软件生命周期中各项开发活动的流程用一个合理的框架—开发模型来规范描述,这就是软件过程模型。软件生命周期模型软件生命周期划分为定义、开发和运行三个阶段细分为六个阶段:问题的定义及规划需求分析软件设计程序编码软件测试运行维护能力成熟度模型集成CMM(CapabilityMaturityModel)是指“能力成熟度模型”CMM是由美国卡内基-梅隆大学的软件工程研究所(SEI)开发的软件成熟度模型。思想:管理软件过程的方法不当引起的问题,导致新软件技术的运用并不会自动提高软件的生产率和质量。CMM为软件企业的过程能力提供了一个阶梯式的改进框架,它基于过去所有软件工程过程改进的成果,吸取了以往软件工程的经验教训,提供了一个基于过程改进的框架。能力成熟度模型集成(CMMI--CapabilityMaturityModelIntegration)是CMM模型的最新版本。CMM概述为企业的发展规定过程成熟级别,分为5级(Version1.0):初始级(Initial):一般企业皆具有可重复级(Repeatable):成功经验可以重复定义级(Defined):一套完整的企业过程,人员自觉遵守(培训)管理级(Managed):过程&产品可度量和控制优化级(Optimizing):过程持续改进从无序到有序、从特殊到一般、从定性管理到定量管理、最终达到动态优化CMM概述(续)2.Repeatable1.Initial3.Defined4.ManagedDisciplinedProcessStandard,ConsistentProcessPredictableProcessContinuouslyImprovingProcessUnpredictableandpoorlycontrolledCanrepeatpreviouslymasteredtasksProcesscharacterized,fairlywellunderstoodProcessmeasuredandcontrolledFocusonprocessimprovement5.OptimizingProjectManagementIntegratedEngineeringProcessProductandProcessQualityManagingChangeDisorderDisciplinedPredictableImmatureMatureCMM的概念模型关键过程域KPA:代表一组相关的工作(活动)。每个KPA都有一个确定的目标,完成该目标即认为过程能力的提高。一般特性CF(CommonFeatures):进一步细分KPA的工作。五个特性:承诺(commitment)准备(ability)执行(activity)度量分析(measurement&analysis)验证(verifyingimplementation)CMM的五个级别Level1:初始级过程无序且不可见OutInCMM的五个级别Level2:可重复级Milestone(里程碑)可见,按计划开发CMM的五个级别Level2的6个KPA:侧重于管理•需求管理(RequirementsManagement)•软件项目计划(SoftwareProjectPlanning)•软件项目的跟踪和监控(SoftwareProjectTackingandOversight)•软件子合同管理(SoftwareSubcontractManagement)•软件质量保证(SoftwareQualityAssurance)•软件配置管理(SoftwareConfigurationManagement)CMM的五个级别Level3:定义级每个阶段的内部活动可见标准过程和项目定义过程裁剪CMM的五个级别Level3的7个KPA:工程过程+企业理念•机构过程关注(OrganizationProcessFocus)•机构过程定义(OrganizationProcessDefinition)•培训计划(TrainingProgram)•集成软件管理(IntegratedSoftwareManagement)-过程裁剪和定义•软件产品工程(SoftwareProductEngineering)-过程执行•组间协调(IntergroupCoordination)•对等审查(PeerReviews)CMM的五个级别Level4管理级过程可度量,预测值与结果之间的偏差可控CMM的五个级别Level4的2个KPA:预测+量化管理•定量过程管理(QuantitativeProcessManagement)-过程度量•软件质量管理(SoftwareQualityManagement)-产品度量CMM的五个级别Level5优化级过程动态调整、新技术的采用CMM的五个级别Level5的3个KPA:动态优化•缺陷预防(DefectPrevention)•技术改变管理(TechnologyChangeManagement)•过程改变管理(ProcessChangeManagement)能力成熟度模型集成CMMI--CapabilityMaturityModelIntegration是CMM模型的最新版本。CMMI有两种表示方法:和软件CMM一样的阶段式表现方法连续式的表现方法过程管理项目管理工程支持CMMI的目标是质量、时间表和最低的成本敏捷过程敏捷不是一个过程,是一类过程的统称。敏捷方法的两大主要特征:对“适应性”的强调对“人”的关注做法:引入迭代式的开发手段将整个软件生命周期分解为若干个小的迭代周期获取切实有效的客户反馈提出12条基本原则极限编程极限编程(eXtremeProgramming,XP)是一种软件工程方法学,是敏捷开发中最富有成效的方法学之一由KentBeck在1996年提出具有强沟通、简化设计、迅速反馈等特点适合于规模小、进度紧、需求不稳定、开发小项目的小团队。极限编程特点:XP模型是“轻量型”或“灵活”的软件过程模型与面向对象语言结合的开发方案“专家协作”的开发方式,解决难点问题核心有四个要点:交流简单反馈勇气结对编程结对编程(Pair-Programming)是XP中非常重要的实践之一。定义:两个人坐在同一台计算机前面,使用相同的键盘和鼠标来开发同样的一个模块,一个称为驾驶者(Driver),负责代码的键入,另外一个称为领航员(Navigator),负责监看与决策,包括低级错误和方向性的错误。当出现的一个问题对其中一个人来说,难以解决,而恰好是另外一个人的强项的时候,那么角色就会发生转换。结对编程优势:可以减少风险可以使团队生产效率更高是知识传播的最好途径可以打造出最佳的合作团队。可以生成更好的代码三个方面的应用:教育学结对学习工业界结对开发与编程分布式结对编程环境结对编程研究教育学研究结对编程学习效果研究结对双方的相容性研究结对编程过程研究软件工业界结对编程实践方式社会动力学研究个人编程能力的增强分布式结对编程结对编程开发环境研究开发结对编程工具的需求适合开展分布式结对编程的工具研究自适应软件开发自适应软件开发(AdaptiveSoftwareDevelopment)由JimHighsmith提出着眼于人员协作和团队自我组织,类似于收集人们创意的容器生命周期三个阶段包括:思考:启动项目并完成自适应循环计划协作:沟通与信任学习