第一部分软件工程与过程(1-3)_第1页
第一部分软件工程与过程(1-3)_第2页
第一部分软件工程与过程(1-3)_第3页
第一部分软件工程与过程(1-3)_第4页
第一部分软件工程与过程(1-3)_第5页
已阅读5页,还剩145页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程总学时: 32课程性质:考 试先修要求:语言程序设计、数据结构 数据库技术等主讲老师:刘冬懿 联系方式ldy_软件工程教学方式:教学方式: 课堂讲授(多媒体教学);课堂讲授(多媒体教学); 学生上机实习;学生上机实习; 通过通过Email与与Web进行网上辅导。进行网上辅导。 考查方式:考查方式:平时成绩平时成绩10%(考勤);(考勤);作业成绩作业成绩20%(平时作业)(平时作业)期末考试占期末考试占70%。 课程教材课程教材作者:作者: 窦万峰窦万峰 出版社:机械工业出版社出版社:机械工业出版社 软件工程导论软件工程导论张海藩张海藩 清华大学出版社清华大学出版

2、社 参考书目参考书目 (References) 实用软件工程实用软件工程 (第二版)(第二版)郑人杰、殷人昆、陶永雷郑人杰、殷人昆、陶永雷 清华大学出版社清华大学出版社 软件工程设计导论软件工程设计导论-过程、原过程、原理与模式理与模式(UML2.0版版) (美美)Christopher Fox 清华大学出版社清华大学出版社 参考书目参考书目 (References)Introduction to the Personal Software ProcessWatts S.Humphrey吴超英等译 人民邮电出版社人民邮电出版社 Introduction to the Team Software

3、 ProcessWatts S.Humphrey韩丹韩丹等译 人民邮电出版社人民邮电出版社 参考书目参考书目 (References) Frederick P. Brooks著著 清华大学出版社清华大学出版社 Tom Demarco著著 清华大学出版社清华大学出版社 参考书目参考书目 (References)相关网站1 IBM开发者:http:/ UML China: http:/ 3 软件工程俱乐部:/4 UML软件工程组织:http:/ 5 软件工程专家网:http:/ 中国系统分析员:http:/ 我们国家有30多所软件学院,但是几百

4、个高校都有计算机系,它们的区别主要是:计算机专业主要是计算机科学与工程,软件学院主要是计算机软件这个学科,而且软件工程这个专业还要展开,比如:需求分析,面向对象的需求分析和设计,项目管理,进度控制,统一建模语言,文档写作等。软件工程是不是背背就能过的课软件工程绝对不是背背就能过的课,计算机理论可能是一个人就能研究出来,软件工程是成千万网软件工程师几十年来失败的教训凝结成的结晶。计算级专业的人必须具备任何语言1小时上手的能力,最起码要在10分钟把hello world做出来。 学好课程,只是万里长征的第一步即使你学好了以上课程,我们仍然差得很远,我们只弄清学什么了,但是还不知道做什么。所以我们要

5、尽可能的多做设计,别一个人们闷着头做,两三个人合作一个项目,不会交流的计算机人员30岁以后肯定会下岗。题目呢,尽量是一些简单的底层开发,可以去国外大学网站上搜一搜,要自信你一定能做出来,毕竟不是什么难题,而是我们应当具备的素质。 窦万峰计算机科学与技术学院南京师范大学2013年9月第一部分:软件工程基础什么是软件工程?什么是工程化思想?什么是软件过程?有哪些过程模型?如何选择与建立过程模型?什么是统一过程?什么是敏捷过程?有哪些模型?什么是软件工程实践?第1章 软件工程概述(内容提要)软件的本质软件工程的基本概念软件工程化思想软件工程两大范型软件工程思想与基本原理软件工程基本活动什么是软件?三

6、要素:软件=程序+文档+数据特性:复杂性一致性退化性易变性移植性高成本程序是按事先设计的功能和性能要求编写的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。软件技术演化第一阶段:程序设计阶段。1946年到60年代初,其主要特征是程序生产方式为个体手工方式。 第二阶段:程序系统阶段。60年代初到70年代初,软件工程学科诞生。软件的开发方式由个体生产发展到了小组生产,软件的开发与维护费用以惊人的速度增加,维护困难,导致软件危机。第三阶段:传统软件工程阶段。20世纪70年代中期至80年代中期,软件工程师把工程化的思想加入到软件的开发过程中,用工程化的原则、

7、方法和标准来开发和维护软件。第四阶段:面向对象阶段。20世纪80年代中期至今,面向对象的方法学受到了人们的重视,促进了软件业的飞速发展,软件产业在世界经济中已经占有举足轻重的地位。发展趋势软件服务多样性:中间件开放性:新型中间件平台软件危机两个方面的问题:如何开发软件如何维护软件表现:规模大复杂度增加需求量增大价格昂贵供需差增大开发速度慢质量难以保证软件错误的实例ARIANE 5 火箭1996 年 6 月,耗资 70 亿美元,发射 37 秒后爆炸发射失败的原因在于软件的错误 软件错误程序中试图将 64 位浮点数转换成 16 位整数时产生溢出缺少错误处理程序对数据溢出进行管理备份软件复制而成 严

8、格地遵守软件确认过程可以避免这种错误9软件错误的实例Therac 25 放射医疗仪事故 1986 年由于软件错误导致放射过量,2 人死亡 溢出错误是导致问题的主要原因之一 千年虫问题 迫于计算机存储空间的限制,程序员将日期缩减为 2 位数 世界各地更换或升级 2000 年问题软件的花费超过数亿美元 其他 电子邮件的病毒 拒绝访问等的网络攻击 网络事务的安全问题11软件危机解决途径软件危机解决途径重视需求分析,明确与确切表达需求重视与客户沟通与交流统一的、公认的方法论和规范指导重视设计和实现过程的资料充分的检测工作软件工程定义B.W.Boehm的定义:运用现代科学技术知识来设计并构造计算机程序及

9、为开发、运行和维护这些程序所必须的相关文件资料。Fritz Bauer的定义:软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。1983年美国IEEE软件工程标准术语的定义为:软件工程是开发、运行、维护和修复软件的系统方法,其中“软件”的定义为:计算机程序、方法、规则、相关的文档资料以及在计事机上运行时所必需的数据。软件工程化思想软件工程化思想把软件看作是一个工程产品两个方面:软件开发技术软件工程管理原因:缺乏软件过程控制能力能力成熟模型(Capability Maturity Model)体现:工程化管理软件工程的三要素软件工程的三要素 软件工程

10、以关注软件质量为目标,包括过程、方法和工具三个要素。 过程 支持软件生命周期的所有活动 方法 为软件开发过程提供“如何做”的技术 工具 为软件开发方法提供自动的或半自动的软件支撑环境30方法质量工具过程软件工程基本原理软件工程基本原理推迟实现原理逐步求精原理分解与抽象原理信息隐蔽原理质量保证原理软件工程基本原则软件工程基本原则分阶段的软件生存周期坚持进行阶段评审实行严格的产品控制采用现代程序设计技术明确职责开发小组的人员应少而精不断改进开发过程软件工程两大范型软件工程两大范型结构化开发范型特征:结构化技术要么面向行为,要么面向数据构成结构化开发范型的技术包括:结构化分析结构化设计结构化编程结构

11、化测试结构化维护软件工程两大范型软件工程两大范型面向对象范型特征:将对象视作一个融合了数据及在其上操作的行为的、统一的软件组件。技术包括:面向对象分析面向对象设计面向对象编程面向对象测试面向对象维护优势:对象的概念符合业务或领域的客观实际维护容易结构化方法 vs. 面向对象方法计算机35测试问题域需求分析总体设计详细设计编程自然语言传统的编程语言分析与设计的鸿沟计算机问题域面向对象分析面向对象设计面向对象编程面向对象测试自然语言面向对象的编程语言重型与轻型软件工程重型软件工程文档齐全规范化和程式化周期长推迟实现轻型软件工程非正式交流重视代码重视测试响应需求变化软件工程活动软件工程活动沟通活动计

12、划活动建模活动实现活动部署活动维护活动管理活动过程改进活动小结软件工程的是主旨以工程化的思想进行软件开发,以生产高质量和高效率的软件。软件工程化思想的核心是,把软件看作是一个工程产品。软件工程方法学分别是传统结构化范型和面向对象范型。软件工程活动包括开发活动、管理活动和过程改进活动。第2章 软件过程(内容提要)什么是软件过程?什么软件生命周期?能力成熟度模型敏捷过程结对编程软件过程定义:软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动通常使用生命周期模型简洁地描述软件过程层次:软件工程是一门建立在以质量焦点为基础的层次化综合技术过程:定义阶段和管理方法:技

13、术支持工具:自动化实施支持软件过程框架软件过程框架定义:框架是实现整个软件开发活动的基础,并且那些与过程有关的角色、职责的定义以及实现也都离不开框架的支持两个方面的内容组织及管理框架技术及工具框架软件过程环境组织、管理的角色和职责技术环境软件过程框架软件过程框架组织与管理框架:过程改进活动及角色与职责技术与工具框架:技术及自动化活动工具框架活动:沟通策划建模构建部署软件生存周期过程(表2-1)系统语境的过程协议过程组(2个过程,13个活动,52个任务)项目过程组(7个过程,23个活动,72个任务)技术过程组(11个过程,26个活动,64个任务)组织上项目使能过程组(5个过程,15个活动,48个

14、任务)针对软件开发的过程软件实现过程组(7个过程,7个活动,39个任务)软件支持过程组(8个过程,25个活动,68个任务)软件复用过程组(3个过程,14个活动,62个任务)软件过程模型软件过程模型把软件生命周期中各项开发活动的流程用一个合理的框架开发模型来规范描述,这就是软件过程模型,也称为软件生命周期模型.软件过程模型是一种就是软件过程抽象.软件过程模型是从一个特定的角度表现一个过程,一般使用直观的图形标识软件开发的过程,主要根据软件的类型、规模,特别是软件的开发方法、开发环境等多种因素确立过程模型。软件过程技术产品与过程选择软件过程过程评估CMMI/CMMISO9001:2000个人软件过

15、程(PSP):是一种可用于控制、管理和改进个人工作方式的自我持续改进过程,是一个包括软件开发表格、指南和规程的结构化框架。团队软件过程(TSP):帮助软件开发组织建立成熟和纪律性的工程实践,生产安全和可信的软件个人软件过程(PSP)内容PSP0是PSP的个人度量过程,其目的是建立个体过程基线。PSP1是个人规划过程,引入了基于估计的计划方法PROBE,用自己的历史数据来预测新程序大小和开发时间,并使用线性回归方法估计参数,确定置信区间以评价预测的可信程度。PSP2是个人质量管理,根据程序的缺陷建立检测表,按照检测表进行设计复查和代码复查,以便及早发现缺陷,使修复缺陷的代价最小。PSP3的目标是

16、把个体开发小程序所能达到的生产效率和生产质量,延伸到大型程序。团队软件过程(TSP)TSP 采用了循环递增的开发策略,整个软件生产过程由多个循环出现的开发周期组成,每个开发周期划分出若干个相对独立的阶段。TSP 提供了如下方法:计划评审设计和编码标准设计和代码评审方法缺陷评审质量分析能力成熟度模型能力成熟度模型CMM(Capability Maturity Model)是指“能力成熟度模型”CMM是由美国卡内基梅隆大学的软件工程研究所(SEI)开发的软件成熟度模型。思想:管理软件过程的方法不当引起的问题,导致新软件技术的运用并不会自动提高软件的生产率和质量。CMM为软件企业的过程能力提供了一个

17、阶梯式的改进框架,它基于过去所有软件工程过程改进的成果,吸取了以往软件工程的经验教训,提供了一个基于过程改进的框架。能力成熟度模型集成(CMMI-Capability Maturity Model Integration)是CMM模型的最新版本。CMM概述为企业的发展规定过程成熟级别,分为5级(Version 1.0):初始级(Initial):一般企业皆具有可重复级(Repeatable):成功经验可以重复定义级(Defined):一套完整的企业过程,人员自觉遵守(培训)管理级(Managed):过程&产品可度量和控制优化级(Optimizing):过程持续改进从无序到有序、从特殊到一般、从

18、定性管理到定量管理、最终达到动态优化CMM概述(续)2. Repeatable1. Initial3. Defined4. ManagedDisciplined ProcessStandard, Consistent ProcessPredictable ProcessContinuously Improving ProcessUnpredictable and poorly controlledCan repeat previously mastered tasksProcess characterized, fairly well understoodProcess measured an

19、d controlledFocus on process improvement5.OptimizingProject Management Integrated Engineering ProcessProduct and Process QualityManaging ChangeDisorder Disciplined Predictable Immature Mature CMM的概念模型关键过程域KPA:代表一组相关的工作(活动)。每个KPA都有一个确定的目标,完成该目标即认为过程能力的提高。一般特性CF(Common Features):进一步细分KPA的工作。五个特性:承诺(co

20、mmitment)准备(ability)执行(activity)度量分析(measurement & analysis)验证(verifying implementation)CMM的五个级别Level 1:初始级过程无序且不可见OutInCMM的五个级别Level 2:可重复级Milestone可见,按计划开发CMM的五个级别Level 2的6个KPA:侧重于管理需求管理(Requirements Management)软件项目计划(Software Project Planning)软件项目的跟踪和监控(Software Project Tacking and Oversight)软件子合

21、同管理(Software Subcontract Management)软件质量保证(Software Quality Assurance)软件配置管理(Software Configuration Management)CMM的五个级别Level 3:定义级每个阶段的内部活动可见标准过程和项目定义过程裁剪CMM的五个级别Level 3的7个KPA:工程过程企业理念机构过程关注(Organization Process Focus)机构过程定义(Organization Process Definition)培训计划(Training Program)集成软件管理(Integrated Sof

22、tware Management)过程裁剪和定义软件产品工程(Software Product Engineering)过程执行组间协调(Intergroup Coordination)对等审查(Peer Reviews)CMM的五个级别Level 4 管理级过程可度量,预测值与结果之间的偏差可控CMM的五个级别Level 4的2个KPA:预测量化管理定量过程管理(Quantitative Process Management)过程度量软件质量管理(Software Quality Management)产品度量CMM的五个级别Level 5 优化级过程动态调整、新技术的采用CMM的五个级别L

23、evel 5的3个KPA:动态优化缺陷预防(Defect Prevention)技术改变管理(Technology Change Management)过程改变管理(Process Change Management)能力成熟度模型集成CMMI-Capability Maturity Model Integration是CMM模型的最新版本。CMMI有两种表示方法:和软件CMM一样的阶段式表现方法连续式的表现方法过程管理项目管理工程支持CMMI的目标是质量、时间表和最低的成本关键实践CMM结构CMM标准的使用软件过程的改进(SPI,Software Process Improvement)软件

24、过程评估(SPA,Software Process Assessment)软件能力评价(SCE Software Capability Evaluation)敏捷过程敏捷不是一个过程,是一类过程的统称。敏捷方法的两大主要特征:对“适应性”的强调对“人”的关注做法:快速响应:引入迭代式的开发手段将整个软件生命周期分解为若干个小的迭代周期获取切实有效的客户反馈提出12条基本原则敏捷开发12条原则我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交

25、付的时间间隔越短越好。在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。围绕被激励起来的个体来构建项目,给他们提供所需的环境和支持,并且信任他们能够完成工作。敏捷开发12条原则(续)在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。工作的软件是首要的进度度量标准。敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。不断地关注优秀的技能和好的设计会增强敏捷能力。 简单是最根本的。 最好的构架、需求和设计出于自组织团队。 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。极限编程极限编程(eXt

26、reme Programming,XP)是一种软件工程方法学,是敏捷开发中最富有成效的方法学之一由KentBeck在1996年提出具有强沟通、简化设计、迅速反馈等特点适合于规模小、进度紧、需求不稳定、开发小项目的小团队。极限编程特点:XP模型是“轻量型”或“灵活”的软件过程模型与面向对象语言结合的开发方案“专家协作”的开发方式,解决难点问题重视客户反馈核心有四个要点:交流简单反馈勇气交流开发人员与客户的交流开发人员之间的交流使用结对编程开发人员与管理人员的交流简单设计的简单编码的简单注释的简单测试的简单反馈客户对软件的反馈测试代码对功能代码的反馈先测试,后编程勇气接受任务的勇气XP常见问题XP

27、适合于小型项目(10人左右)?结对编程,搭档如何安排?实施结对编程、集体代码所有权之后,如何考核单个开发人员?77Pair Programming( 结对编程 )结对编程结对编程(Pair-Programming) 是XP中非常重要的实践之一。定义:两个人坐在同一台计算机前面,使用相同的键盘和鼠标来开发同样的一个模块,一个称为驾驶者(Driver),负责代码的键入,另外一个称为领航员(Navigator),负责监看与决策,包括低级错误和方向性的错误。当出现的一个问题对其中一个人来说,难以解决,而恰好是另外一个人的强项的时候,那么角色就会发生转换。Pair Programming的角色(Role

28、)Driver The one who typesNavigator The one who watches the back角色可以互换的疑问: 一个程序两个人写是不是一种浪费(可是两份工资,双倍资源哦)? 编程从来是一个人的活动。学校里这么教的,一直以来也是做么做的。 我不喜欢被人盯着工作,这样我不自在,无法工作。 这个笨家伙老是问问题,他/她不会看书么?我都无法专心工作了。 另一方面: Pair Programming被很多的大师级程序员推崇;不少大学都展开对Pair Programming的研究,并得到正面的结论; 很多尝试过的Developer都开始喜欢Pair Programmin

29、g。Pair Programming的疑问Pair Programming和Solo Programming的比较一些研究数据:1999年,University of Uath.两组学生,一组独自工作,一组Pair Programming。Pair Programming的历史 1995年,Larry Constantine在他的专栏中第一次提到了在他在P. J. Plaughers software company, Whitesmiths, Ltd观察到一个现象:Collaborative Programming“两个程序员一起工作,可以比以往更快的交出完成并经过测试的代码,而且这些代码几

30、乎是没有Bug的。”Collaborative Software Process(相对PSP)1996年,Kent Beck,Ward Cunningham 和Ron Jeffries一起提出了Extreme Programming(XP),其中吸收了Collaborative Programming,并称为Pair Programming。Pair Programming是XP的一个key practice,也是XP成功的关键。随着XP在世界范围内被采用和练习,Pair Programming开始被接受。为什么要Pair Programming“The Human eye has an al

31、most infinite capability for not seeing what it does not want to see Programmers, if left to their own devices, will ignore the most glaring errors in their output-errors that anyone else can see in an instant.” - Gerald Weinberg“Knowledge is commonly socially constructed through collaborative effor

32、ts toward shared objectives or by dialogues and challenges brought about by difference in persons perspective” - Salomon“三个臭皮匠,胜过一个诸葛亮” - ?不间断的不间断的Code Review1. Peer Code Review,即程序员之间的互相Review缺乏Design Review不能持久,定时Code Review对需求和设计的不了解导致无法实现有效的Review2. Team Code Review什么时候开会做Review?不可能Team天天开会无法对所有

33、的设计和Code进行Review面子问题效率低传统开发过程的Review(例如印度的InfoSys公司)的问题:不间断的不间断的Code ReviewPair Programming提供不间断的Design review,Unit Test Review,Code Review,Document Review,避免了效果差的Team Code Review,也比抽查式的Peer Code Review有更好的质量。(CMM Level 3)Pair Programming中,任何一段代码都至少被两双眼睛看过,两个脑袋思考过。结合Collective code ownership和小的Task

34、(Small Engineering Task),代码被不断的Review。编程方式编程方式避免cow boy式的编程好代码的衡量标准:可读性和可维护性硬件设备价格的下降和速度的提升,使得代码效率不是考虑的重点(对大多数的商业应用)。对大部分的商业项目来说,更主要的顾虑是成本。而成本中人工占最大的比例。好的代码可以减少修改的成本。Pair Programming的互相督促可以提高代码的可读性。Pair是一个最小单位的Team,而任何人都是工作在这样一个Team中。Developer的言行都会影响到其他的Developer( Partner),也受到其他Developer的影响。Pair Pro

35、gramming避免了“我的Code”,使得代码的责任不属于某个人,而是属于一个Pair和整个Team,从而做到Collective Code Ownership,也避免个人英雄主义。迫使程序员必须频繁的交流,增进知识经验的交流(Cross-Training)。团队合作以人为本以人为本同伴的潜在压力( Peer Pressure )。Pair Programming的过程也是一个互相督促的过程。由于这种督促的压力,使得程序员更认真的工作。每个人每天的有效工作时段不超过3-4个小时。Pair Programming中Driver和Navigator的互换可以让程序员轮流工作,从而避免出现过度思考

36、而导致观察力和判断力出现偏差。潜意识的有利竞争。当人在一个团队中工作,总是下意识的努力展现自己的优点。工作及时得到同伴的肯定,自信心和成就感(Self-Satisfaction)增强。觉得工作是一件愉快( Enjoyable )的事情。结对建议Extreme Programming对实施的程序员提出了更高的要求。这种要求不是技术水平,也不是学历水平也不是工作经验。这种要求是对一个人的心智,道德,修养的更高要求。程序员的四怕: 1) 怕自己看上去傻 2) 怕被认为是没用的 3) 怕自己变的不重要(过时) 4) 怕自己不够好Pair Programming中,编码不再是私人的工作,而是一种公开的“

37、表演”。程序员的代码,工作方式,技术水平都变得公开和透明。XP开发人员素质 一个XP开发人员具备这样一些基本素质:诚实,公正,开明,勇敢和谦卑!在这些素质的基础之上,才是对技术水平,能力和天分等的要求。诚实诚实 公正公正开明开明 勇气勇气 谦卑谦卑 具备这些素质才能克服“四怕”,才能成为一个成熟和专业的Developer。如何结对编程Driver 写设计文档(Class diagram等),进行编码(Unit Test and Business Object)等XP开发流程。Navigator 审阅Driver的文档、Driver对编码等开发流程的执行;考虑Unit Test的覆盖程度;是否需

38、要和如何Refactoring;帮助Driver解决具体的技术问题。Driver和Navigator不断轮换角色,不要连续工作超过一小时,每一小时休息15分钟。Navigator要控制开发时间。主动参与 虽然每个Engineering Task都有owner,但不能一旁观者的心态来做。任何一个Task都首先是两个人的责任,也是所有人的责任。没有“我的Code”、”你的Code”或“她的Code”,只有“我们的Code”。如何结对编程只有水平上的差距,没有级别上的差异。一个Pair,尽管可能大家的级别资历不同,但不管在分析,设计或编码,双方都拥有平等的决策权利。Pairs之间互换Partner。

39、每个Task都应该和不同的Developer配对。每隔一天,甚至是半天,互换Partners。但Task的owner因该继续留该Task的Pair中。如果Pair中的一人请假,另一人应尽量不要写Production Code。Pair一起加班94没有结对编程就没有XPPair Programming是XP所有的Practices中最被争议和被认为是最难接受。Pair Programming是获得XP最大价值的关键。没有Pair Programming,无法实现有效的Continuous Code Review,代码质量下降。没有Peer Pressure,流程的执行很容易出现偏差。没有Pair

40、 Programming,Communication很容易弱化,进而影响Team work。Pair Programming象XP流程中的粘合剂,把各个环节连接起来实现最大的价值。95没有结对编程就没有XP这是引进XP时最难被接受的规则。但如果在采用其它XP的惯例和规则时,抛弃Pair Programming,那么会面对以下问题:如何进行有效的Design Review如何进行有效的Code Review如何保证代码质量如何保证流程的执行如何增进Communication如何进行Cross-Training如何增强Teamwork96Pair Programming和Open SourceOp

41、en Source现象:Open Source Project的代码质量比很多的商业软件(项目)都好。和Pair Programming的共性:有效的Code ReviewCollective code ownershipDistributed Pair Programming分布式的Pair Programming:两个Programmers身处不同的物理位置,通过Sharing 软件来实现Pair Programming。需要Sharing软件能提供 桌面共享,文字交谈,语音交谈,甚至是视频交流。目前这种方法还没有被认可,主要出现在学校的关于XP的研究项目中.面临的问题:Internet的

42、网路延迟工作时段的约定Pair Programming和Solo Programming的比较虽然Pair Programming的学生在刚开始的阶段比独自工作的学生花在同样Task的时间较多,但很快Pair Programming的学生的时间开始大幅度的下降。而独立工作的学生需要花费比Pairs更多的时间来达到接近的代码质量。Pair Programming和Solo Programming的比较比较研究项目后的问卷调查发现:Pair Programming能用较少的时间生产更高质量的代码。Pair Programming的学生们认为自己比一个人的时候更勤奋和更聪明的工作,因为不想让自己的p

43、artner失望。Pair Programming的学生认为自己比一个人的时候更专著,紧凑和由纪律的工作,而且是持续的(因为来自Partner的Pair-Pressure)。而独立工作的学生也可以专著和紧凑的工作,但往往不持续。Pair Programming的学生对自己的工作更有信心和成就感。Pair Programming的学生觉得工作很愉快,很愿意很partner一起工作。在紧张时间安排和繁重的工作压力下,独自工作的学生很容易蜕变为没有纪律的Programmer。Pair Programming是个渐进的过程有效率的Pair Programming不是一天就能做到的。Pair Progr

44、amming是一个相互学习,相互磨合的一个渐进过程。Developers需要时间来适应这种新的开发模式。刚开始的Pair Programming很可能不比Solo Programming有更高的效率。但适应后的Pairs的开发质量和开发时间都比Solo Programming有大幅度的改善。结对编程优势:可以减少风险可以使团队生产效率更高是知识传播的最好途径可以打造出最佳的合作团队。可以生成更好的代码三个方面的应用:教育学结对学习工业界结对开发与编程分布式结对编程环境结对编程研究教育学研究结对编程学习效果研究结对双方的相容性研究结对编程过程研究软件工业界结对编程实践方式社会动力学研究个人编程能

45、力的增强分布式结对编程结对编程开发环境研究开发结对编程工具的需求适合开展分布式结对编程的工具研究结对编程与测试驱动开发测试驱动开发(Test Driven Development,TDD)思想:开发之前首先完成测试用例编写;然后编写代码和测试;测试通过后即需增加新功能。优势:测试优先,保证质量结合结对编程结对编程与代码重构重构就是代码的重新设计。目的:得到好的代码和架构,易修改、易理解适应需求结对编程:审查代码理解代码反馈结对编程与简单设计简单设计:达到目前需求即可结对编程可以达到简单结对编程方法面对面结对编程分布式结对编程软件工程实践软件工程实践的精髓是理解问题、计划解决方案、实施计划和检查

46、结果的精确度等方面通用的框架活动包括:沟通计划建模部署普适性活动软件工程实践核心原则:存在价值保持简洁维护视图生产者要让消费者理解面向未来计划复用认真思考软件工程实践沟通实践:包括决定项目涉及人的信息和沟通需求计划实践:是软件开发过程的准备阶段,包括定义问题、可行性分析、制定计划模型实践:创建分析模型和设计模型小结软件工程是一种层次化技术,包括过程、技术和工具。软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程框架定义了若干个小的框架活动,为完整的软件开发过程建立了基础。软件过程框架的通用过程框架活动包括沟通、计划、建模、构建和部署。能力成熟度模

47、型(CMM)是改进软件过程的有效策略。它的基本思想是通过改进对软件过程的管理来提高软件生产率和软件质量。敏捷方法是一组敏捷实践技术的总称,包括极限编程、自适应软件开发、动态系统开发和特征驱动开发等等。软件工程实践包括概念、原则、方法和在整个软件开发过程中所使用的工具。软件工程实践的通用框架活动包括沟通实践、计划实践、建模实践、构造实践和部署实践。第3章 软件过程模型(内容提要)瀑布模型增量模型螺旋模型协同开发模型面向对象模型面向方面的软件开发软件生存周期软件也有一个从生到死的过程,这个过程一般称之为软件的软件生存周期或生命周期(Software Development Life Cycle)软

48、件生存周期可划分为定义、开发和运行三个时期,每个时期又细分为若干个阶段。把整个软件生存周期划分为若干阶段,使得每个阶段有明确的任务,使规模大,结构复杂和管理复杂的软件开发变的容易控制和管理。软件生存周期包括可行性分析、项目计划、需求分析、软件设计、编码与测试、维护等阶段,每个阶段有包含一系列的活动。瀑布模型瀑布模型将软件生命周期划分为软件计划、需求分析和定义、设计、实现、测试、运行和维护这6个阶段,规定了它们自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。从本质来讲,它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈.瀑

49、布模型示意图瀑布模型它是一个软件开发架构,开发过程是通过一系列阶段顺序展开的。每个阶段都会产生循环反馈各个阶段产生的文档是维护软件产品时必不可少的,没有文档的软件几乎是不可能维护的。瀑布模型是一种文档驱动的过程模型瀑布模型特点顺序性和依赖性推迟实现质量保证的观点是一种线性模型强调文档的作用增量模型增量模型(Incremental Model)也称为渐增模型,是在项目的开发过程中以一系列的增量方式开发系统。软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成.增量方式包括:增量开发:以一定的时间间隔开发部分工作软件增量提交:以一定

50、的时间间隔增量方式向用户提交工作软件及相应文档增量模型融合了线性顺序模型的基本成份和原型实现模型的迭代特征。增量模型分为渐增模型和原型模型渐增模型是瀑布模型的变种,有两类渐增模型:增量构造模型:它在瀑布模型基础上,对一些阶段进行整体开发整体开发,对另一些阶段进行增量开发。前面的开发阶段按瀑布模型进行整体开发,后面的开发阶段按增量提增量提交交。演化提交模型:它在瀑布模型的基础上,所有阶段都进行增量开发增量开发,也就是说不仅是增量开发,也是增量提交增量提交。增量构造模型需求分析设计编码1测试1测试2编码2编码3测试3螺旋模型螺旋模型(Spiral Model)是结合了瀑布模型和快速原型模型的迭代开

51、发模型强调了其他模型均忽略了的风险分析:风险识别风险分析风险控制特别适合于大型复杂的系统每一个周期都包括需求定义、风险分析、工程实现和评审螺旋模型示意图螺旋模型活动四个象限分别代表了以下活动:制定计划:确定软件目标,选定实施方案,确定项目开发的限制条件; 风险分析:分析评估所选方案,考虑如何识别和消除风险;实施工程:实施软件开发和验证;客户评估:评价开发工作,提出修正建议,制定下一步计划。螺旋模型是风险驱动的模型面向对象过程模型面向对象过程模型面向对象是一种的程序设计方法,或者说它是一种程序设计范型。基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。面向对象的要素: 抽象:强调

52、实体的本质、内在的属性,忽略一些无关紧要的属性。类实现了对象的数据(即状态)和行为的抽象,是对象的共性的抽象。封装性:指所有软件部件内部都有明确的范围以及清楚的外部边界。 共享性:面向对象的特征:对象惟一性;分类性;继承性;多态性(多形性)。统一过程统一过程A software development process:是一个将用户需求转是一个将用户需求转化为软件系统所需要的活动的集合。化为软件系统所需要的活动的集合。A process framework:一个简单的过程,也是一个通用一个简单的过程,也是一个通用的过程框架。的过程框架。Component-based:软件构件软件构件+接口接口T

53、he standard - employing the UML(Unified Modeling Language)use-case drivenarchitecture-centriciterative and incrementalThe Evolution of the Unified Process1967: a predecessorof Objectory1976-80: formalization &generalization1997: Objectory 4.11987-95: Objectory 1.0-3.8SDLA book: The Unified ProcessA

54、product: The Rational Unified Process1998: Unified ProcessOMTBoochRationals best practices: Kruchten Royce and many othersThe Next Industry StandardA Software Development ProcessSoftware development is the process of developing software from requirements.New or changedrequirementsNew or changed syst

55、emSoftware DevelopmentProcess统一过程是用况驱动的用况模型(use case model)要素:用户(user)用况(use case)动作(action)用况驱动(use-case driven):用况可以驱动开发过程:用况不只是确定系统需求的工具,还能驱动系统设计、实现和测试的进行。不能孤立地选择用况UC: 吃晚餐 用户动作 系统响应 点餐上开胃菜上主餐请上点心上点心买单结账开收据拿走收据统一过程是以构架为中心的软件构架包含了系统中最重要的静态和动态特征构架刻画了系统的整体设计,突出系统的重要特征构架的价值依赖于执行该任务的人的素质过程可以帮助构架设计师确定正确的目标用况和构架的关系:用况对应功能(function)构架对应表现形式(form)用况和构架相互影响,并必须进化统一过程是以构架

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论