软件工程概述_第1页
软件工程概述_第2页
软件工程概述_第3页
软件工程概述_第4页
软件工程概述_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

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

文档简介

软件工程主讲:林芳Qq:1329155520课件:/cmRBEA6CPdMuy访问密码d614第一章软件工程概述本章主要内容:软件危机软件工程软件生命周期软件过程本章重点:软件工程软件生命周期软件生命周期模型1.1软件危机1.1.1软件工程发展史1.1.2软件危机1.1.1软件工程发展史19世纪初在法国人约瑟夫雅各JosephMarieJaquard设计的织布机里已经具有了初步的程序设计的思想英国著名诗人拜伦Byron的女儿、数学家爱达奥古斯塔拉夫拉斯伯爵夫人AdaAugustaLovelace,在帮助巴贝奇研究分析机时指出分析机可以像织布机一样进行编程,并发现进行程序设计和编程的基本要素,被认为是有史以来的第一位程序员。而著名的计算机语言Ada就是以她的名字命名的。在计算机的发展史上,二值逻辑和布尔代数的使用,是一个重要的突破。其理论基础是由英国数学家布尔奠定的。早期利用计算机器解决问题的一般过程是针对特定的问题制造解决该问题的机器设计所需的指令并把完成该指令的代码序列传送到卡片或机械辅助部件上使计算机器运转执行预定的操作程序设计的形式有不同程度的改变,但革命性的变革则是1948年,香农重新发现了二值演算之后,发生的二值逻辑代数,被引入程序设计过程。程序的表现形式就是存储在不同信息载体上的0和1的序列。1.1.1软件工程发展史从1946年第一台计算机产生,软件工程发展分为4个阶段程序设计阶段(20世纪40年代中期-60年代中期)“软件=程序+文档”阶段(20世纪60年代中期-70年代中期)软件工程阶段:20世纪70年代中期-20世纪90年代第4代技术阶段程序设计阶段(20世纪40年代中期-60年代中期)

主要致力于硬件的设计和生产。计算机程序是作为解决特定问题的工具和信息分析工具而存在的,并不是一个独立的产业,软件基本不受重视。软件=程序。“软件=程序+文档”阶段(20世纪60年代中期-70年代中期)20世纪60年代中期-60年代末期20世纪60年代末期-70年代中期20世纪60年代中期-60年代末期软件需求量增大,软件作为独立产品;1968年MartinGoetz获得了世界上第一个软件专利。1969年春ADR公司就IBM垄断软件产业提出了诉讼,促使IBM在1969年6月30日宣布结束一些软件和硬件的捆绑销售,为软件产品单独定价。20世纪60年代中期-60年代末期软件规模与复杂性大大增加这个阶段软件技术的发展为解决这个问题奠定了基础。软件的技术也在不断发展:引入了多道程序技术、多用户系统、人机交互概念、数据库管理系统;有了操作系统和编译技术;不再直接用机器码编程,而使用各种符号语言来编程,如高级语言BASIC、FORTRAN、ALGOL、COBOL等。20世纪60年代中期-60年代末期开发方式仍沿用个体化方式,出现了“软件危机”二十世纪六十年代IBM公司开发了System/360系列机器。尽管这些机器在性能上有明显的差异,但是他们有统一的操作系统——OS/360,让单一OS适用于整个系列的产品是System/360成功的关键。OS/360的成功陆续地催化出MFT、MVT、SVS、MVS、MVS/XA、MVS/ESA、OS/390和z/OS等大型机的操作系统。OS/360问题开发难度大,IBM在1963-1966年开发OS/360,IBM为这个计划总共投入50亿美元的研发费用,花5000人-年工作量,最多同时有1000人投入开发工作,源程序近100万行。质量差,维护困难:每次发行新版本都要更正前一个版本1000个程序错误。

《人月神话》焦油坑这个系统在开发和维护过程中存在很多问题,在开发OS/360过程中遇到的问题在FredBrooks写的软件工程经典之作《人月神话》中详细地叙述了。史前史中,没有别的场景比巨兽在焦油坑中垂死挣扎的场面更令人震撼。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈,焦油纠缠得越紧,没有任何猛兽足够强壮或具有足够的技巧,能够挣脱束缚,它们最后都沉到了坑底。

1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序:

DO5I=1,3

误写为:DO5I=1.

3

1967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。20世纪60年代末期-70年代中期

产生了结构化程序设计理论。从程序中分离出数据结构与算法。形成了完整的软件系统。发展了各种程序设计语言。提出并使用“软件工程”这个术语。“软件工程”这个词是由NATO(NorthAtlanticTreatyOrganization北大西洋公约组织属下的一个研究组在1967年提出的,这个研究组提议召开一次会议,专门讨论“软件所面临的问题”。1968年,由NATO科学委员会主办的这次会议在德国加米施(Garmish)召开,会议提交的报告就被命名为《软件工程》。1968年NATO提出软件工程的概念,倡导以工程的原理、原则和方法进行软件开发,以期解决当时出现的"软件危机"。3、软件工程时代(20世纪70年代中期~今)计算机渗透到人类活动各个领域。软件的生产方式是工程化的生产,软件工程标准规范还不完善软件开发技术有很大进步,软件生产率大大提高,但未能获得突破性进展软件产品供不应求,软件维护要耗费大量的成本,软件危机日益严重,没有完全摆脱软件危机4、第4代技术阶段现在的软件已经不再是单机系统,计算机体系结构从主机结构转向C/S环境、B/S环境。开发技术有了新的发展:计算机辅助软件工程CASE将工具和代码生成器结合起来,为许多软件系统提供了可靠的解决方案;面向对象技术已在许多领域迅速取代了传统的软件开发方法;专家系统和人工智能软件有了实际应用;人工神经网络软件展示了信息处理的美好前景;并行计算、网络计算机、虚拟现实技术、多媒体技术和现代通信技术使人们开始采用和原来完全不同的方法进行工作。此外,光计算机、化学计算机、生物计算机和量子计算机等新一代计算机也在研制之中,这将使软件工程带来一场新的革命。1.1.2软件危机(1)软件危机定义软件危机定义:软件开发和维护过程中遇到的一系列严重问题。软件危机包含两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。1.1.2软件危机(2)软件危机表现1)

软件成本高

做个算术题:美国一家公司在1982年计划用FORTRAN语言开发一个在VAX750计算机上运行的应用程序,估计这个程序的长度为10000条FORTRAN指令。如果平均每人每天可以开发出10条(注意:开发工作量包括问题定义、需求分析、总体设计、详细设计、编码和测试,不仅仅是编写代码。),回答如下问题:回答如下问题:1)开发这个应用程序需要多少人日?答:10000/10=1000(人日)2)假设程序员的月平均工资为4000美元,每月按20个工作日计算,这个软件的成本是多少?答:1000/20*4000=200000(美元)3)1982年VAX750计算机硬件价格为125000美元,在那一年这个软件的成本在总成本中占比多少?答:200000/(200000+125000)=61.5%

4)20年后,一台性能远远优于VAX750的微型计算机的价格约为2000美元,这时软件开发生产率已提高到平均每人每天40条指令,程序员的月平均工资为8000美元,那么这时开发上述程序,该软件的成本在总成本中占比多少?答:软件成本:10000/40/20*8000=100000(美元)总成本中占比:100000/(100000+2000)=98%

1.1.2软件危机(2)软件危机表现1)

软件成本高

1008060402001955硬件软件19701985总费用的百分比计算机系统硬件/软件成本变化趋势1.1.2软件危机(3)2)软件研制进度无法预先估计

3)软件产品质量差

4)软件常常是不可维护

5)软件发展跟不上硬件的发展和用户的要求

产生软件危机的原因1、软件本身的特点软件是个逻辑实体,不是物理实体,具有抽象性→管理和控制软件困难软件规模庞大→软件开发困难软件故障是在开发过程中产生而在测试时没有发现的问题→软件故障修改困难软件维护会产生新的错误→软件维护困难1.1.2软件危机(4)1.1.2软件危机(5)2、人为因素,软件开发和维护的方法不正确

1)软件开发技术落后、生产方式落后、开发工具落后

2)对用户要求没有完整准确认识就匆忙着手编写程序

3)只重视程序而忽视软件配置其余成分:

4)轻视维护:维护费用占软件总费用的55%-70%

1.1.2软件危机(6)缓解软件危机的途径1、更新观念:采用工程化的方法和途径来开发与维护软件2、汲取系统工程的理念,采用必要的组织管理和技术管理措施3、应该不断地发现、完善、推广、使用再实践中总结出来的开发软件的成功的技术和方法。4、开发和使用更好的软件工具,提高软件生产率。

1.2软件工程学1.2.1什么是软件?1.2.2什么是软件工程?1.2.3软件工程的目标1.2.4软件工程学的内容1.2.5软件过程1.2.6软件工程基本原理1.2.1什么是软件?1.软件的定义软件是指计算机程序及其有关的数据和文档。程序:能够完成预定功能的可执行的指令序列。数据:程序能适当处理的信息,具有适当的数据结构。文档:开发、使用和维护程序所需要的图文资料。有了程序,为什么需要文档?直接阅读程序有难度。程序只是软件开发和维护过程中,其中一小阶段的成果。软件生产的各个阶段必需完成的有关计算机程序的功能、设计和使用的文字或图形资料,这些资料称为“文档”。软件文档是以人们可读的形式出现的技术数据和信息。特别当软件成为商品时,文档是必不可少的。2.软件的特点软件是一种逻辑产品生产方式主要是研制,而不是硬件制造软件不允许有误差软件维护复杂

3.软件的分类—按功能进行划分系统软件操作系统数据库管理系统设备驱动程序通信处理程序等支撑软件文本编辑程序文件格式化程序磁盘向磁带向数据传输的程序程序库系统支持需求分析、设计、实现、测试和管理的软件

应用软件商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件3.软件的分类—按规模进行划分类别参加人员数研制期限源程序行数

微型 1 1~4周0.5k小型1 1~6月1k~2k中型2~5 1~2年5k~50k大型5~20 2~3年50k~100k甚大型100~10004~5年1M(=1000k)极大型2000~50005~10年1M~10M

3.软件的分类按工作方式划分:实时处理软件分时软件交互式软件批处理软件按服务对象的范围划分:项目软件产品软件按使用的频度进行划分:一次使用频繁使用按软件失效的影响进行划分:高可靠性软件一般可靠性软件1.2.2什么是软件工程?软件工程定义

1968年在联邦德国召开的NATO(NorthAtlanticTreatyOrganization)国际会议上正式提出并使用“软件工程”这个术语。定义1:软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列的工程化原则。[Bauer1972]定义2:软件工程是以工程的形式应用计算机科学和数学原理,从而经济有效地解决软件问题[CMU/SEI-90-TR-03]定义3:软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护。[IEEE1990]定义4:采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。理解:

1)软件工程是系统方法而不是神秘的个人技巧。

2)软件工程的目标是经济、成功地开发出高质量地软件。

3)软件工程包含技术和管理两方面的内容。软件工程的本质特性软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品1.2.3软件工程的目标软件工程是一门工程性的学科,软件工程的目的是成功地构造一个大型软件系统。所谓成功是指达到以下标准:有较低的开发成本。能达到用户所要求的软件功能。有很好的软件性能。软件有较好的可移植性、稳定性、健壮性和可靠性。有较好的可维护性,较低的维护成本。能按计划规定的进度开发,及时交付使用。1.2.4软件工程学的内容软件工程学的主要内容:软件开发技术包含:软件工程方法学软件工具软件开发环境;软件工程管理学包含:软件工程经济学软件管理学。理论方面研究1.软件工程方法学软件工程方法学是编制软件的系统方法,它确定软件开发的各个阶段,规定每一阶段的活动、产品、验收的步骤和完成准则。各种软件工程方法的适用范围不尽相同。目前使用得最广泛的软件工程方法学可以分为传统方法学面向对象方法学计算机世界现实世界结构化开发方法SASDSPOOAOODOOP面向对象开发方法(1)传统方法学采用结构化技术,来完成软件开发任务,把软件开发工作划分成若干个阶段传统方法学历史悠久,是广大软件开发人员所熟悉的,在开发某些软件时十分有效。传统方法可以再分为:面向数据流设计方法面向数据结构设计方法。(2)面向对象方法学面向对象方法学是在传统方法学的基础上发展起来的。面向对象方法学的要素是对象、类、继承以及消息通信。可以用下列方程来概括:面向对象=对象+类+继承+消息通信面向对象方法学是多次反复、迭代开发的过程。软件工程方法学有三个要素,包括方法、工具和过程。质量焦点过程方法工具质量焦点:任何工程方法必须以有组织的质量保证为基础。质量的理念刺激不断过程改进,导致出现更加成熟的软件工程方法。它是软件工程的根基。过程:软件工程的基础是过程。规定了完成任务的工作阶段、工作内容、产品、验收的步骤和完成准则。软件工程过程是将技术层结合在一起的凝聚力,使得软件能够合理地和及时地开发出来。方法:完成软件开发任务的技术手段,软件工程方法层提供了建造软件在技术上需要“怎么做”。工具:在工具层对过程和方法提供了自动和半自动的支持。2.软件工具软件工具(softwaretools)是指为了支持计算机软件的开发和维护而研制的程序系统。使用软件工具的目的是提高软件设计的质量和软件生产效率,降低软件开发、维护的成本。软件工具用于软件开发的整个过程。3.软件开发环境软件开发环境是方法和工具的结合。在1985年第八届国际软件工程会议上,关于“软件开发环境”的定义是:“软件开发环境是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成”。软件开发环境的设计目标是提高软件生产率和改善软件质量。计算机辅助软件工程(ComputerAidedSoftwareEngineering,CASE)是一组工具和方法的集合,可以辅助软件生命周期各阶段进行的软件开发活动。4.软件工程管理软件工程管理学包含软件工程经济学:包括成本估算、效益评价、风险分析、投资回收分析、质量评价等。软件管理学:包括软件费用管理、人员组织、工程计划管理、软件配置管理等。(1)费用管理从经济角度分析,开发一个软件系统是否划算,是软件使用单位负责人决定是否开发这个项目的主要依据,要从软件开发成本、运行费用、经济效益等方面来估算整个系统的投资和回收情况。软件开发成本主要包含开发人员的工资报酬,开发阶段的各项支出;软件运行费用取决于系统的操作费用和维护费用;系统的经济效益是指因使用新系统而节省的费用和增加的收入。由于运行费用和经济效益两者在软件的整个使用期内都存在,总的效益和软件使用时间的长短有关,所以,应合理地估算软件的寿命。一般在进行成本/效益分析时一律假设软件使用期为五年。(2)人员组织软件开发不是个体劳动,需要各类人员协同配合、共同完成工程任务,因而应该有良好的组织、周密的管理。(3)工程计划管理软件工程计划是在软件开发的早期确定的。在计划实施过程中,如果需要,应对工程进度作适当的调整。在软件开发结束后应写出软件开发总结,以便今后能制定出更切实际的软件开发计划。(4)软件配置管理软件工程各阶段所产生的全部文档和软件本身构成软件配置。每当完成一个软件工程步骤,就涉及软件工程配置,必须使软件配置始终保持其精确性。软件配置管理就是在系统的整个开发、运行和维护时期控制配置的状态和变动,验证配置项的完整性和正确性。1.2.5软件过程国际标准化组织(InternationalStandardizationOrganization,ISO)是世界性的标准化专门机构。ISO9000把软件过程定义为:“把输入转化为输出的一组彼此相关的资源和活动”。软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件开发过程(softwaredevelopmentprocess)是把用户要求转化为软件需求,把软件需求转化为设计,用代码来实现设计、对代码进行测试,完成文档编制并确认软件可以投入运行使用的过程。软件过程定义了运用方法的顺序、应该交付的文档、开发软件的管理措施和各阶段任务完成的标志。1.2.6软件工程基本原理用分阶段的生命周期计划严格管理坚持进行阶段评审.高中低变化出现的时期早中晚不同时期引入同一变动付出的代价代价1.2.6软件工程基本原理实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性1.3软件生命周期1.3.1软件生命周期定义1.3.2软件生命周期划分阶段的原则1.3.3软件生命周期各阶段的任务1.3.1软件生命周期定义软件产品从定义开始,经过开发、使用和维护,直到最后被淘汰的整个过程称为软件生存周期。

为什么称为软件生命周期?T软件生命周期人的生命周期T费用费用贡献效益为什么要划分阶段?是实现软件生产过程化的重要步骤。能够简化每个阶段的工作。容易确立系统开发计划。还可以明确系统各类开发人员的分工与职责范围。

1.3.2软件生命周期划分阶段的原则各阶段的任务彼此间尽可能相对独立。这样便于逐步完成每个阶段的任务,能够简化每个阶段的工作,容易确立系统开发计划。同一阶段的工作任务性质尽可能相同。这样有利于软件工程的开发和组织管理,明确系统各类开发人员的分工与职责范围,以便协同工作,保证质量。1.3.3软件生命周期各阶段的任务软件生存周期阶段划分:软件计划:问题定义、可行性研究、需求分析软件开发:设计、实现和测试软件维护:维护

实际从事软件开发时,软件规模、种类、开发环境及开发时所使用的技术方法等因素,都影响阶段的划分。(1)问题定义确定系统的目标、规模和基本任务。(2)可行性研究从经济、技术、法律等方面分析确定系统是否值得开发,及时建议停止项目开发,避免人力、物力、时间的浪费。(3)需求分析确定软件系统应具备的具体功能。通常用数据流图、数据字典和简明算法描述表示系统的逻辑模型,防止系统的设计与用户的实际需求不相符的后果。(4)概要设计确定系统设计方案,软件的体系结构。确定软件由哪些模块组成以及这些模块之间的相互关系。(5)详细设计描述应该如何具体地实现系统。详细设计每个模块,确定实现模块所需要的算法和数据结构。(6)软件实现阶段进行程序设计(编码)和模块测试。(7)综合测试阶段通过各种类型的测试,查出软件设计中的错误并改正,确保软件质量;还要在用户的参与下进行验收,才可交付使用。(8)软件运行、维护软件运行期间,通过各种必要的维护使系统改正错误、或修改扩充功能使软件适应环境变化,以便延长软件的使用寿命,提高软件的效益。每次维护的要求及修改步骤都应详细准确地记录下来,作为文档保存。1.4软件过程软件过程:为了获得高质量软件所需要完成的一系列任务的框架,他规定了完成各项任务的工作步骤。软件开发模型:描述软件开发过程中各种活动如何执行的模型。软件开发模型确立了软件开发和演绎中各阶段的次序限制,以及各阶段活动的准则,确立了开发过程所遵守的规定和限制。1.4.1瀑布模型1.4.2快速原型模型(RapidPrototypeModel)1.4.3增量模型1.4.4喷泉模型1.4.5螺旋模型(SpiralModel)1.4.6RUP(统一过程)1.4.7敏捷过程与极限编程1.4.8微软过程1.4.9软件开发模型的选择1.4.1瀑布模型(waterfallmodel)

属于传统的结构化开发模式,是一种将软件生存周期各活动阶段规定为依线性顺序联接的、系统的和顺序的开发方法。传统的瀑布模型

按照传统的瀑布模型开发软件,有下述三个特点:(1)阶段间具有顺序性和依赖性(2)推迟实现的观点(3)质量保证的观点传统的瀑布模型

为了保证质量,瀑布模型坚持两个重要做法:每个阶段都要完成规定的文档。每个阶段都要对已完成的文档进行复审,以便及早发现隐患,排除故障。文档的作用:作为阶段工作成果和结束标志;向管理人员提供软件开发过程中的进展和情况,把软件开发过程中的一些“不可见的”事物转换成“可见的”文字资料;记录开发过程中的技术信息,便于协调以后的软件开发、使用和修改;提供对软件的有关运行、维护和培训的信息,便于各类人员之间相互了解彼此的工作;向潜在用户报告软件的功能和性能,使他们能判定该软件能否服务于自己的需要。瀑布模型的优点:

它可强迫开发人员采用规范的开发方法。它严格地规定了每个阶段必须提交的文档。它要求每个阶段所交出的一切产品都必须经过质量保证小组的仔细验证。瀑布模型缺点:1)对于应用软件项目,需求难以完整、准确:2)缺乏灵活:3)开发代价高:4)没有体现开发人员之间通信和软件工具之间联系和开发工作之间并行、串行。1.4.2快速原型模型(RapidPrototypeModel)为什么要原型?正确的需求定义是系统成功的关键。由于以下几个方面原因:用户与开发者之间以及他们之间的交流存在巨大的文化差异;用户不熟悉信息技术,可能提出非常含糊的需要,而这种需求有可能被开发人员随意解释;经验证明,一旦用户开始使用计算机系统,他们对目标系统的理解可能又会发生变化。快速原型模型就是解决这方面的问题。快速原型的定义所谓快速原型是快速建立起来的可以在计算机上运行的程序,它能完成的功能往往是最终的软件产品所能完成的功能的一个子集。特点:软件产品的开发基本上是线性顺序进行的

原型开发的过程快速原型模型的特点只要快速原型法使用得当,就能减少软件的总成本,缩短开发周期。所以快速原型模型是目前比较流行的实用开发模型。开发按线性顺序进行,从模型图可以看出,快速原型模型是不带反馈环的,在需求确定之后,后面的开发按线性顺行进行。原型的开发工具应根据目的而使用,快速原型模型原型的分类渐增式原型:也称增量模型。用于验证软件需求的原型:用于验证设计方案的原型:1.4.3增量模型使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。增量模型例如,使用增量模型开发字处理软件:第一个增量构件可能提供基本的文件管理、编辑和文档生成功能;第二个增量构件提供更完善的编辑和文档生成功能;第三个增量构件实现拼写和语法检查功能;第四个增量构件完成高级的页面排版功能。

优点:能在较短时间内向用户提交可完成一些有用的工作的产品,是增量模型的一个优点。逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。困难:软件体系结构的设计:如何分解增量构件?应该使构件规模适中,规模过大或过小都不好。最佳的分解方法因软件产品特点和开发人员的习惯而异。在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。分解的唯一必须遵守的约束条件是,当把新构件集成到现有软件中时,所形成的产品必须是可测试的。1.4.4螺旋模型(spiralmodel)

螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。

简化的螺旋模型完整的螺旋模型如图所示1.4.5喷泉模型(fountainmodel)主要用于采用对象技术的软件开发项目。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性,喷泉模型使开发过程具有迭代性和无间隙性。

喷泉模型特点:1.开发过程有分析、系统设计、软件设计和实现4个阶段,各阶段相互重叠,它反映了软件过程并行性的特点。不同活动之间项目成就与时间关系项目工作分析时间设计实现测试2.以分析为基础,反映了软件过程迭代性的自然特性,从高层返回低层无资源消耗。3.强调增量开发,整个过程是一个迭代的逐步提炼的过程。1.4.6RUP(统一过程)

RationalUnifiedProcess(以下简称RUP),Rational公司提出的软件开发方法。主要由IvarJacobson的TheObjectoryApproch和TheRationalApproch发展而来。同时,它又是文档化的软件工程产品,所有RUP的实施细节及方法导引均以Web文档的方式集成在一张光盘上,由Rational公司开发、维护并销售,当前版本是5.0。RUP吸收了多种开发模型的优点,具有很好的可操作性和实用性。从它一推出市场,凭借Booch、IvarJacobson、以及Rumbagh在业界的领导地位以及与统一建模语言(UnifiedModelLanguage,以下简称UML)的良好集成、多种CASE工具的支持、不断的升级与维护,迅速得到业界广泛的认同,越来越多的组织以它作为软件开发模型框架。基于UML的RUP把软件开发分成四个阶段:初始阶段细化阶段构造阶段提交阶段RUP三大特点:软件开发是一个叠代过程。软件开发是由UseCase驱动的。软件开发是以架构设计(ArchitecturalDesign)为中心的。1.4.7敏捷过程与极限编程什么是敏捷过程?一种以人为核心、迭代、循序渐进的开发方法。敏捷开发是由一些业界专家针对一些企业现状提出了一些让软件开发团队具有快速工作、响应变化能力的价值观和原则,并于2001初成立了敏捷联盟。他们正在通过亲身实践以及帮助他人实践,揭示更好的软件开发方法。

在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

通过这项工作,他们认为:个体和交互胜过过程和工具可以工作的软件胜过面面俱到的文档轻量开发方法是相对于传统的重量开发方法而言。简单地理解,“量”的轻重是指用于软件过程管理和控制的、除程序量以外的“文档量”的多少。轻量开发方法认识到,在当前很多情况下,按传统观念建立的大量文档,一方面需要消耗大量开发资源,同时却已失去帮助“预见、管理、决策和控制的依据”的作用。因此必须重新审视开发环节,去除臃肿累赘,轻装上阵。客户合作胜过合同谈判响应变化胜过遵循计划极限编程(XP,eXtremeProgramming)极限编程是敏捷过程中最富盛名的一个。极限:把好的开发实践运用到极致。XP从实践中来,是对实践的总结,也是经过实践检验的。广泛应用于需求模糊且经常改变的场合。极限编程(ExtremeProgramming,简称XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能性以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。极限编程采用的有效的开发实践客户作为开发团队的成员至少有一名客户代表在项目的整个开发周期中与开发人员在一起紧密配合工作,客户代表负责确定需求、回答开发人员的问题并且设计功能验收测试方案。使用用户素材用户素材就是正在进行的关于需求的谈话内容。根据用户素材合理安排实现该项需求的时间。短交付周期每两周完成一次的迭代过程实现了用户的一些需求,交付出目标系统的一个可工作的版本。通过向有关的用户演示迭代生成的系统,获得他们的反馈意见。验收测试通过执行由客户指定的验收测试来捕获用户素材的细节。结对编程由两名开发人员在同一台计算机上共同编写解决同一个问题的程序代码,通常一个人编码,另一个人对代码进行审查与测试,以保证代码的正确性与可读性。结对编程是加强开发人员相互沟通与评审的一种方式。测试驱动开发强调“测试先行”。在编码之前应该首先设计好测试方案,然后再编程,直到所有测试获得通过之后才可以结束工作。集体所有强调程序代码属于整个开发小组所有,小组每个成员都有更改代码的权利,每个成员都对全部代码的质量负责。持续集成主张在一天之内多次集成系统,而且随着需求的变更,应该不断进行回归测试。可持续的开发速度规定开发人员每周工作时间不超过40小时,连续加班不可以超过两周。开放的工作空间全体参与者(开发人员、客户等)一起在一个开放的场所中工作,项目组成员在这个场所自由地交流和讨论。及时调整计划计划应该是灵活的、循序渐进的。制定出项目计划后,必须根据项目进展情况及时调整。简单的设计设计与计划在本次迭代过程中完成的用户素材完全匹配,设计时不需要考虑未来的用户素材。在一次次迭代过程中,项目组成员不断变更系统设计,使之相对于正在实习的用户素材而言始终处于最优状态重构在不改变系统行为的前提下,重新调整和优化系统的内部结构,以降低复杂性、消除冗余、增加灵活性和提高性能。应该注意,不要过分依赖重构,不能轻视设计,对于大中型系统而言,推迟设计或者不做设计,那将是一场灾难。使用隐喻隐喻是把整个系统联系在一起的全局视图,它描述系统如何运作,以及用何种方式把新功能加入到系统中。与其他方式的不同:

对比其它方法

,敏捷方法有时候被误认为是无计划性和纪律性的方法,实际上更确切的说法是敏捷方法,强调适应性而非预见性。

适应性的方法集中在快速适应现实的变化。当项目的需求起了变化,团队应该迅速适应。这个团队可能很难确切描述未来将会如何变化.

对比迭代方法相比迭代式开发两者都强调在较短的开发周期提交软件,敏捷方法的周期可能更短,并且更加强调队伍中的高度协作。

对比瀑布式开发,两者没有很多的共同点,瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求、分析、设计、编码、测试的步骤顺序进行。步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等。相对来讲,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能将尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强。敏捷过程具有对变化和不确定性的更快速、更敏捷的反应特性,而且在快速的同时仍然保持可持续的开发速度。因此比较适合于开发可用资源及开发时间都有苛刻约束的小项目。1.4.8微软过程规划阶段确定产品目标;获取竞争对手的信息;完成对客户和市场的调研分析;确定新版本产品应该具备的特性;相对于前一版本,新版本应该解决的问题和需要增加的功能设计阶段编写系统特性规格说明书:软件特性、系统结构、各构件间的相关性及接口标准高层系统设计,绘制系统结构图,确定风险因素划分子系统制定产品开发计划开发阶段:编写代码和文档稳定阶段:测试和调试发布阶段微软过程与RUP比较相对于RUP而言,可以把微软过程看做是RUP的一个精简配置版本。整个微软过程由若干个生命周期的持续递进循环组成,每个生命周期分为5个阶段。RUP的初始阶段完成微软过程规划阶段的工作精化阶段完成设计工作构建阶段完成开发和稳定工作移交阶段完成发布工作微软过程的每个阶段精简为一次迭代完成,每次迭代所完成的工作相对于经历RUP的若干个核心工作流程:规划阶段中一次迭代主要经历的工作流程为:业务建模、需求和项目管理;设计阶段中一次迭代经历的工作流程为:业务建模、需求、分析设计和项目管理;开发阶段中一次迭代经历的工作流程为:需求、分析设计和实现;稳定阶段中一次迭代经历的工作流程为:测试发布阶段中一次迭代经历的工作流程为:部署、配置与变更管理和项目管理。微软过程与敏捷过程比较相对于敏捷过程,可以把微软过程看做是它的一个扩充版本。微软过程补充规定了其每个生命周期内各个阶段的具体工作流程。与敏捷过程类似,微软过程的适用范围也是具有有限资源和有限开发时间约束的项目。1.4.9软件开发模型的选择通过3个例子大家讨论如何进行软件项目开发模型测选择。例1假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果精确到小数点后4位。一旦实现并且测试完成后,该产品将被抛弃。选择用哪种软件生命周期模型,说明理由?这个软件需求很明确,实现开平方功能的算法也很成熟,因此,既无需通过分析需求也无需用原型来验证设计方案。此外,一旦实现并测试完成,该产品将被抛弃,因此也无需使用有助于提高软件可维护性的增量模型或螺旋模型来开发。综上所述,为了开发这个简单软件,使用大多数人所熟悉的瀑布模型就可以了。例2假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛应用的字处理软件的新版本开发。由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。你打算用哪种软件生命周期模型,说明理由?这个项目的一个重要要求是:严格的按照已对外公布完成期限。因此选择生命周期模型时应该着重考虑哪种模型有助于加快产品开发的进度。使用增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。这个项目是开发该公司已被广泛应用的字处理软件的新版本,那么有3个结论:第一:旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;第二:该公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的技术水平;第三,该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把该软件的体系结构设计成开放式的,以利于今后的改进和扩充。综上所述,采用增量模型来完成这个项目比较恰当。例3航天型号软件研制过程模型航天型号研制经历方案阶段、模样、初样、试样(正样)、定型型号软件研制通常也经历模样、初样、试样(正样)模样、初样、正样软件是针对同一个软件开展的循环研制,侧重面不同。结合原型、渐进模型,以原型-基本型-更新型来形成航天型号软件研制过程模型基本思想首先在需求尚不明确的情况下,对已知的需求和尚不能确定的需求进行分析整理,在此基础上简单地设计、编制软件,产生一个软件的原型;并对原型进行多方面的研究、分析和讨论,以便确定所采取的技术实现方案是否可行,需求还要做哪些补充、修改和完善,从而获得一个内容较完整、接口较明确的软件需求和一个切实可行的软件实现技术途径。在软件原型研制的基础上,进行一次完整、严格的软件研制工作,获得一个高质量的软件基本型;最后在软件基本型的基础上,针对更新的软件需求,采用软件更新与更改的的方法,对软件进行更新,获得软件的更新型模样、初样、试样-正样模样初样正样原型基本型更新型更新版本1更新版本2……原型软件原型研制的目的是明确接口、确定需求、试验系统方案需求分析:根据系统的任务分解和技术要求,对已知需求、应有需求、未确认需求等进行综合分析,形成粗略的原型软件需求规格说明。设计:对软件的总体结构和接口进行设计,形成软件设计说明。编码调试:编制程序并调试通过。分析总结:运行软件,并与系统总体、相应接口单位进行详细的分析讨论,对软件需求进行补充、修改和完善,并确定技术途径的可行性。对高质量要求的软件研制,软件原型研制所获的程序应废弃,不带入以后的研制阶段。基本型基本型研制的任务是根据基本确定的软件需求,全面开展软件的研制工作,形成一个基本满足系统对软件各项要求的基本型软件,以直接应用于型号或

温馨提示

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

评论

0/150

提交评论