欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    软件工程第一章(绪论).ppt

    • 资源ID:6063545       资源大小:925KB        全文页数:122页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软件工程第一章(绪论).ppt

    9/19/2023,第一章 软件工程学概述,参考教材,1.软件工程实践者的研究方法 Roger S.Pressman(第6版)机械工业出版社2.软件工程(第8版)Ian Sommerville 机械工业出版社,什么是软件 软件的特点 软件的发展 软件生存期 什么是软件工程 软件工程的目的和要求,第一章 软件工程学概述,先接受开发软件不等于编写程序的正确观点:开发软件应该完成的工作远远多于编写程序应该完成的工作。编写程序步骤为首先设计算法(即完成指定功能的步骤),然后用程序设计语言(例如:C语言)表达该算法。而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完成的工作的一部分,而且只占一小部分。为了开发出一个符合用户需要、质量合格的软件,软件工程师必须首先弄清楚用户面临的问题是什么,也就是要明确软件需要解决用户的哪些问题;接下来应该进行可行性研究方案,分析用户面临的问题是否有行得通的解决方案。为避免浪费资源,仅在该软件的开发是可行的前提下,才进行实质性的开发工作;,然后应该进行需求分析工作,通过与用户的反复交流,搞清楚用户对该软件的具体需求,这些需求是进行软件设计的依据;在编写程序之前需要先进行设计。通常,大型软件的设计工作又分成两个阶段进行,先进行总体设计(又称为概要设计),再进行详细设计;编写程序实质上是把设计结果翻译成用某种程序设计语言书写的程序;程序编写出来之后,还需要经过严格的测试过程(需要的工作量通常占软件开发全部工作量的40%50%),软件确实符合用户需求而且质量合格,才能交付给用户使用。,1.1什么是软件,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列。计算机程序包括源程序和目标程序。数据是使程序能正常操纵信息的数据结构(即数据的组织形式)。文档是与程序开发,维护和使用有关的图文材料。,1.1什么是软件,软件的特点软件是一种逻辑实体,而不是具体的物理实体。因此,它具有抽象性。软件的生产与硬件不同,没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。在软件的运行和使用期间,没有像硬件那样的磨损、老化问题。软件的开发和运行往往受到计算机系统的限制,对计算机系统有不同程度的依赖性。,故障率曲线,硬件的故障率曲线,理想曲线,实际曲线,1.1什么是软件,软件的特点(续)迄今为止,软件的开发尚未完全摆脱手工艺的方式。软件本身是复杂的。软件的成本相当昂贵。相当多的软件工作涉及到社会因素。,例:Windows95有1000万行代码 Windows2000有5000万行代码,3000多个工程师,几百个小团队。Exchange2000和 Windows2000开发人员结构,1.1什么是软件,软件的分类按软件的功能划分:系统软件、支撑软件、应用软件按软件的规模划分:微型、小型、中型、大型、超大型按软件的工作方式划分:实时、分时、交互、批处理按软件服务对象的范围划分:项目软件、产品软件,计算机系统的发展,自从1945年第一台电子数字计算机问世以来,计算机经历了电子管、半导体、集成电路到大规模集成电路几个发展时期,软件也经过程序、软件、软件工程及软件产业化等不同的发展时期。,1、程序时代(60年代前)计算机硬件处于电子管时代、应用于科学计算。其特点:.软件的开发者、使用者、维护者都是同一人.重视编程技巧和运算效率的提高。.结构不清晰,不易理解,像一部天书,是人脑进行的隐含过程(4).使用机器语言。(后期用汇编语言)软件=程序。,计算机系统的发展(续1),2、软件时代(6070年代)计算机进入了半导体时代,CPU速度和存储容量大幅提高(几万次秒100万次秒)其特点:.多人分工合作,共同协作完成。.软件逐渐成为计算机系统必不可少的组成部分。.应用领域从科学计算拓宽到工业控制、商业系统等。软件=程序+使用说明 软件商品化。60年代末IBM实行价格分离,软件独立于硬件单独定价,这项政策大大促进了软件的发展,几万、几十万语句行的程序屡见不鲜。同时由于软件的发展迅猛也给软件的开发、运行、维护带来新的问题,软件的庞大及其复杂性造成了许多大型软件开发失败,有些交付使用后并不能运行,不能被用户所接受。在此时期爆发了“软件危机”。,计算机系统的发展(续2),3、软件工程时代(70年代80年代)在这个时期里,计算机从集成电路发展到大规模集成电路,主机芯片的产生,将计算机的主要部件集中在一个小芯片上。计算机走出机房,有了个人电脑。软件无论从数量到质量都无法满足发展的需要,早期的错误观念和做法严重的阻碍了软件的发展。1968年,北大西洋公约组织的计算机专家提出并使用了“软件工程”这一术语,即按工程化的技术进行软件开发。诞生了软件工程这门新兴的科学。软件开发不再把效率作为追求的第一目标,而是重视易读、易理解,软件质量的标准起了变化可维护性、可靠性、可理解性,这一阶段围绕软件工程的目标和内容,与之相应的理论、技术及方法相继建立,软件开发过程的规范化,工程化为软件的产业化奠定了坚实的基础。软件=程序+文档,计算机系统的发展(续3),4、软件产业化的时代(90年代以后)由于软件工程技术的发展带动了软件产业的发展,80年代后期至90年代全社会的信息化进程,使得软件从传统的技术性应用到大规模地向消费性应用过渡。软件产业已名符其实地成为国民经济信息化和社会信息化的战略产业。,计算机软件发展三个时期的比较,发展带来的新问题:,硬件的发展超过软件发展;集成度18个月翻一翻,计算速度、存储容量成倍增长,成本每10年递减两位数。制作软件的能力和速度与需求不适应;计算机的应用依赖于可靠的软件,软件失败将造成巨大经济损失;已有的软件难以维护。,中国软件产业面临挑战与机遇,外国软件渗透 软件开发投资力度不足 软件侵权行为 软件人才结构不合理,缺乏高级系统程序员和项目负责人。软件人员缺乏软件工程化的概念。,1.2软件危机,一、软件危机的出现,软件危机表现 产生危机的原因,软件危机案例,例:IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。.据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。.,项目负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。.程序设计工作正像这样一个泥潭,.一批批程序员被迫在泥潭中拼命挣扎,.谁也没有料到问题竟会陷入这样的困境.”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,危机,危机,问题出在哪里?,项目没有被很好地理解;计划不周,最终导致进度拖延;文档资料不充分,使人与人的交流变得比写程序困难得多;缺少度量软件可靠性(reliability)的标准,质量无法保证;软件难以维护(maintainability),不易升级(evolvability);,必须意识到:,软件 编程,1.2软件危机,二、什么是软件危机软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。主要是两个问题。1.如何开发软件,怎样满足对软件的日益增长的需求。2.如何维护数量不断膨胀的已有软件,1.2软件危机,三、软件危机的主要表现1.对软件开发成本和进度的估计不准确2.用户不满意3.软件质量不高、可靠性差4.软件常常不可维护、错误难以改正。5.缺乏适当的文档资料6.软件成本占系统总成本的比例逐年上升7.软件开发速度跟不上计算机发展速度,三、软件危机(续1),危机的表现,软件成本在计算机系统中总成本所占的比例逐年增高。,软件生产率的提高远跟不上需求的增长。,失败案例,1962年美国飞向金星的探测器失败,损失几千万美元,问题出在控制程序中:DO 5 i=1,3,错写为:DO 5 i=1.3。1982年日本第五代计算机计划,预算达8亿美元,由于没能突破关键性的技术难题的原因于1993年下马。上世纪六十年代操作系统的研制经受了一系列重大挫折,典型的例子是OS360。数百万行汇编代码中有成千上万处错误,IBM不断发行新的版本试图更正这些错误,每个新版本在更正老错误的同时又引入了新的错误;随着时间的流逝,错误的数量大致保持不变。,相关数据,IBM每年花费大约2.5亿美元,用于修复1.3万个客户反馈缺陷和重新安装修复后的版本,每个缺陷大约花费千美元。20世纪90年代中期,美国软件工程实践的现状是:软件开发仍然很难预测,大约只有10%的项目能够在预定的费用和进度下交付。很多投入了巨大资金和人力的软件产品不能取得很好的成绩。,1.2软件危机,四、产生软件危机的原因在软件的开发和维护过程中存在着这么多的问题,一方面与软件本身的特点有关,另一方面也与软件的开发和维护的方法有关。造成上述软件危机的原因概括起来有以下几方面:,2023年9月19日,30,(1)软件的规模愈发庞大。1968年美国航空公司订票系统达到30万条指令;IBM360OS第16版达到100万条指令;1973年美国阿波罗计划达到1000万条指令。XP3000万行,win7近2亿行这些庞大软件的功能非常复杂,体现在处理功能的多样性和运行环境的多样性。随着计算机应用的日益广泛,需要开发的软件规模日益庞大,软件结构也日益复杂。,2023年9月19日,31,(2)软件开发的管理困难。软件不同于硬件,它是计算机系统中的逻辑部件。在写出代码并在计算机上试运行前,由于软件规模大,结构复杂,又具有无形性,软件开发过程的进展情况较难度量,质量也难评价。因此导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。,2023年9月19日,32,(3)相当多的软件开发人员对于软件的开发和维护存在不少糊涂的观念,实践中或多或少地采用错误的方法和技术。这可能是软件危机的主要原因。,2023年9月19日,33,(4)软件开发和维护中许多错误认识和方法的形成可以归结与计算机发展早期软件开发的个体化特点。其主要表现在对软件需求分析的重要性认识不够,错误地认为软件开发就是写程序并使之运行,不重视软件需求分析与维护等工作。,2023年9月19日,34,(5)软件开发技术落后。在20世纪60年代,人们注重一些计算机理论问题的研究,如编译原理、操作系统原理、数据库原理、人工智能原理、形式语言理论等,不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应,它们之间的差距越来越大。,2023年9月19日,35,(6)生产方式落后。软件仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依据,靠言传身教方式工作。(7)开发工具落后,生产率提高缓慢。软件开发工具过于原始,没有出现高效率的开发工具,因而软件生产率低下。在19601980年期间,计算机硬件的生产由于采用计算机辅助设计、自动生产线等先进工具,使硬件生产率提高了100万倍,而软件生产率只提高了2倍,相差十分悬殊。,1.2软件危机,五、解决软件危机的途径,.研制新一代体系结构的智能计算机,以改变软件的实现方式,降低软件的复杂性。目前尚未研制成功。.采用工程化、规范化的开发方法来指导软件的开发:这就是产生“软件工程学”的背景,并在70年代形成了结构化分析、设计方法。也是本课程要讲授的主要内容。.在求解方法上采用面向对象的软件设计方法。即在软件开发中,以客观世界的问题空间入手进行软件设计,以减少求解方法空间与客观世界问题空间存在的“鸿沟”。,1.3软件工程简述,一、什么是软件工程软件工程是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。,一、什么是软件工程?,不同机构从不同角度给出了许多定义。“运用现代科学技术知识来设计并构造计算机程序设计及为开发,运行和维护这些程序所必须的相关文件资料”。Boehm“软件工程是开发,运行,维护和修复软件的一套系统方法”。IEEE“软件工程学是为在成本限额以内按时完成开发和修改软件产品所需的系统生产和维护的技术和管理的学科”。Fairley“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。Fritz Bauer,1.3软件工程简述,二、软件工程的基本原理1968年,北大西洋公约组织(NATO),召开的有关计算机软件会议上正式提出“软件工程”术语。目前有100多条关于软件工程的准则,其中最出名的是著名软件工程专家B.W.Boehm在1983年提出的7条基本原理。,1.3软件工程简述,1.用分阶段的生命周期计划严格管理经统计表明,不成功的软件项目中有一半左右是由于计划不周造成的。Boehm认为,在软件的整个生命周期中应制定并严格执行六类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。,1.3软件工程简述,2.坚持进行阶段评审大部分错误是在编码之前造成的 因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程的错误,1.3软件工程简述,3.实行严格的产品控制在软件开发过程中不要随意改变需求,因为改变某项需求往往需要付出较高的代价,但在实践中用户往往会提出需求变更,因此需要采取科学的产品控制技术。目前主要实行基准配置管理:基准配置是指经过阶段评审后的软件配置成分,如各个阶段产生的文档或程序代码。对涉及基准配置的修改,必须经过严格的评审,通过后才能实施修改。,1.3软件工程简述,4.采用现代程序设计技术实践表明:采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率。80年代及之前:结构化分析、设计技术90年代:面向对象分析、设计技术,1.3软件工程简述,5.结果应能清楚地审查软件产品是看不见、摸不着的逻辑产品,开发过程难以评价和管理。根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使所得的结果能够清楚地审查,1.3软件工程简述,6.开发小组的人员应该少而精开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。开发小组人员数目的增加,使相互交流复杂、费用增加。,1.3软件工程简述,7.承认不断改进软件工程实践的必要性遵循前6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但不能保证赶上时代前进的步伐。积极主动采纳新的软件技术,且不断总结经验。,三、软件工程的目标,2023年9月19日,47,软件工程的目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。下面分别介绍这些概念。,2023年9月19日,48,(1)可修改性(modifiability)。容许对系统进行修改而不增加原系统的复杂性。它支持软件的调试与维护,是一个难以度量和难以达到的目标。,2023年9月19日,49,(2)有效性(efficiency)。软件系统能最有效地利用计算机的时间资源和空间资源。各种计算机软件无不将系统的时/空开销作为衡量软件质量的一项重要技术指标。很多场合,在追求时间有效性和空间有效性方面会发生矛盾,这时不得不牺牲时间效率换取空间有效性或牺牲空间效率换取时间有效性。时/空折中是经常出现的。有经验的软件设计人员会巧妙地利用折中概念,在具体的物理环境中实现用户的需求和自己的设计。,2023年9月19日,50,(3)可靠性(reliability)。能够防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。对于实时嵌入式计算机系统,可靠性是一个非常重要的目标。,2023年9月19日,51,(4)可理解性(understandabimy)。系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植或重用。,2023年9月19日,52,(5)可维护性(maintainability)。软件产品交付用户使用后,能够对它进行修改,以便改正潜伏的错误,改进性能和其他属性,使软件产品适应环境的变化等等。由于软件是逻辑产品,只要用户需要,它可以无限期地使用下去,因此软件维护是不可避免的。,2023年9月19日,53,(6)可重用性(reusebility)。概念或功能相对独立的一个或一组相关模块定义为一个软部件。软部件可以在多种场合应用的程度称为部件的可重用性。可重用的软部件有的可以不加修改直接使用,有的需要修改以后再用。可重用软部件应具有清晰的结构和注解,应具有正确的编码和较低的时/空开销。,2023年9月19日,54,(7)可适应性(adaptability)。软件在不同的系统约束条件下,使用户需求得到满足的难易程度。适应性强的软件应采用广为流行的程序设计语言编码,在广为流行的操作系统环境中运行,采用标准的术语和格式书写文档。适应性强的软件较容易推广使用。,2023年9月19日,55,(8)可移植性(portability)。软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。为了获得比较高的可移植性,在软件设计过程中通常采用通用的程序设计语言和运行支撑环境。可移植性支持软件的可重用性和可适应性。,2023年9月19日,56,(9)可追踪性(tracebility)。根据软件需求对软件设计、程序进行正向追踪,或根据程序、软件设计对软件需求进行逆向追踪的能力。软件可追踪性依赖于软件开发各个阶段产档和程序的完整性、一致性和可理解性。降低系统的复杂性会提高软件的可追踪性。,2023年9月19日,57,(10)可互操作性(interoperability)。多个软件元素相互通信并协同完成任务的能力。为了实现可互操作性,软件开发通常要遵循某种标准,支持这种标准的环境将为软件元素之间的可互操作提供便利。可互操作性在分算环境下尤为重要。,1.4 软件的生存周期,1.“生命周期法”的起源。软件工程采用的“生命周期法”,就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后再逐步完成每个阶段的任务.,1.4软件的生存周期,2.生命周期划分的原则任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。3.生命周期的划分软件生命周期一般分为:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码和测试)、软件使用与维护等三个时期八个阶段。,1.4软件的生命周期,软件生命周期的各个阶段:(1)问题定义(2)可行性分析(3)需求分析 分析软件需求,编写软件需求规格说明(4)概要设计和详细设计 确定软件体系结构,设计软件模块(5)程序编写(6)软件测试(7)运行和维护,问题定义“要解决什么问题?”可行性研究“上一个阶段所确定的问题是否有行得通的解决办法”目的:用最小的代价在尽可能短的时间内确定问题是否能够解决,需求分析“系统必须做什么”对待开发软件提出的需求进行分析并给出详细的定义 编写软件需求规格说明书 提交管理机构评审,概要设计 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应详细设计 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础编写设计说明书,提交评审。,编码 把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”写出的程序应当是结构良好、清晰易读的,且与设计相一致的,软件测试单元测试:查找各模块在功能和结构上存在的问题并加以纠正组装测试:将已测试过的模块按一定顺序组装起来按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,软件维护改正性维护:运行中发现了软件中的错误需要修正适应性维护:为了适应变化了的软件工作环境,需做适当变更完善性维护:为了增强软件的功能需做变更,4.软件工程三要素 过程、方法和工具,1.2软件工程,软件工程,过程,方法,工具,软件工程釆用层次化的方法,每个层次都包括过程、方法、工具三要素。方法支撑过程和工具、过程和工具促进方法学的 研究。,为软件工程的过程和方法提供自动化或半自动化的工具支持,软件工程过程是为了获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动,完成项目的技术手段(传统方法学、面向对象方法学),软件工程过程定义了:方法使用的顺序 要求交付的文档资料 为保证质量和适应变化所需要的管理 软件开发各个阶段完成的里程碑,1)传统方法学(生命周期方法学),原理:采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用,即把软件生命周期的全过程依次划分为若干阶段,然后顺序地完成每个阶段的任务。,优点:分阶段完成任务,各阶段任务较为独立,便于人员分工协作,降低了开发难度;上一阶段的工作经审查后进入下一阶段,可保证软件质量,提高软件的可维护性。,2)面向对象方法学,原理及特点:以数据为主线,把数据和对数据的操作紧密地结合起来的方法,对软件便于维护。,4个要点:把对象作为融合了数据及在数据上的操作行为的统一的软件构件;对象具有“类”的特性;父与子类间具有继承性;对象之间用发送消息互相联系,即封装性。,面向对象方法学的出发点和基本原则:是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。,1.5软件的开发模型,一、瀑布模型瀑布模型的优点:通过设置里程碑,明确每阶段的任务与目标。可为每阶段制定开发计划,进行成本预算,组织开发力量。通过阶段评审,将开发过程纳入正确轨道。严格的计划性保证软件产品的按时交付。瀑布模型的缺点:缺乏灵活性,不能适应用户需求的改变。开始阶段的小错误被逐级放大,可能导致软件产品报废。返回上一级的开发需要十分高昂的代价。随着软件规模和复杂性的增加,软件产品成功的机率大幅下降。瀑布模型的适应范围:它主要适应于小规模和需求较为稳定的的软件开发。,瀑布模型,GB8566-88将软件生命周期划分为8个阶段,问题定义可行性研究,概要设计详细设计,实际瀑布模型,特点:阶段间具有顺序性和依赖性推迟实现的观点(逻辑设计与物理设计分开)质量保证观点文档驱动,线性顺序,改正一个问题需付出的代价,改正一个问题的估计费用,改正一个问题的估计工作量,瀑布模型适应场合,瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。例如操作系统、编译系统、数据库管理系统等系统软件的开发。应用有一定的局限性。,1.5软件的开发模型,二、原型模型1.基本思想在获取一组基本的需求定义后,利用高级软件工具的可开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解”,即用户满意为止。经过这样一个反复补充和修改的过程,应用系统的“最初版本”就逐步演变为系统的“最终版本”。,1.5软件的开发模型,原型:一个具体的可执行模型,它实现了系统的若干功能。原型法:不断地运行系统“原型”来进行启发、揭示和判断的系统开发方法。,由于软件项目的特点和运行原型的目的不同,分为两种类型:,软件原型的分类,2、追加(add on)型也称快速建立渐进原型RCP法(Rapid Cyclic Prototyping)法采用循环渐进的开发方式,对系统模型作连续精化,即先构造一个功能简单而且质量要求不高的模型系统,将系统需要具备的性质逐步添加上去,通过不断地扩充修改,逐步追加新的要求,直至所有性质全部满足,此时的原型模型也就是最终的产品。,1、废弃(throw away)型也称为快速建立需求规格原型RSP法(Rapid Specific Prototyping),先构造一个功能简单而且质量要求不高的模型系统,针对这个模型系统反复进行分析修改,让用户学习。待需求说明书一旦确定,原型将被废弃,后阶段的工作仍按照瀑布模型开发。,快速分析 快速确定软件系统的基本要求,确定原型所要体现的特性(总体结构,功能,性能、界面等)。2.构造原型 根据基本规格说明,忽略细节,只考虑主要特性,快速构造一个可运行的系统。有三类原型:用户界面原型,功能原型,性能原型。3.运行和评价原型用户试用原型并与开发者之间频繁交流,发现问题,目的是验证原型的正确性。4.修正与改进 对原型进行修改,增删。,运 行,评价,构造,快速分析或修改,快速原型模型开发过程,快速原型法的工作模型如图所示,按以下步骤循环执行。,图1.7 快速原型模型,快速建立系统原型进行系统的分析和构造有如下优点:1、增进软件开发人员和用户对系统需求的理解。便于将用户模糊的功能需求明确化。2、为用户提供了一种强有力的学习手段。3、易于确定系统的性能,是理解和确认软件需求规格说明的工具。4、按照RCP 法建立的原型即为最终的产品。,缺点:1、对于大型软件项目,原型模型需要足够的人力资源以建立足够的原型组。2、原型模型要求开发者和客户在一段时间内共同完成原型系统的开发,如果任何一方没有实现承诺,会导致原型开发的失败。3、如果系统难以模块化,建造原型所需构件就有问题。,三 增量模型(incremental model),增量模型是一种非整体开发的模型。根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。使用增量模型开发模型时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能完成特定的功能。第一个增量构件往往提供最核心的功能。注意:在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。,增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早地产生工作软件。,图1.9 增量模型,1.5软件的开发模型,四、螺旋模型在原型基础上,进行多次原型反复并增加风险评估,形成螺旋模型。螺旋模型综合了传统的软件生命周期模型和原型模型的优点。将瀑布模型与增量模型结合起来,加入了两种模型均忽略了的风险分析,弥补了这两种模型的不足。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次,螺旋模型是一种风险驱动的模型,2023年9月19日,88,将原型的迭代特征与线性顺序模型中控制的和系统化的方法结合起来。,螺旋模型沿着螺线旋转,在四个象限上分别表达了四个方面的活动,即:制定计划确定软件目标,选定实施方案,弄清项目开发的限制条件风险分析分析所选方案,考虑如何识别和消除风险实施工程实施软件开发客户评估评价开发工作,提出修正建议,五 喷泉模型,2023年9月19日,91,软件生命周期可以按瀑布模型,先进行分析,后进行设计;也可以按螺旋模型或增量模型,交替地进行分析和设计。不过更能体现两者之间关系特点的是近几年提出的喷泉模型。喷泉模型以面向对象的软件开发方法为基础,以用户需求为动力,以对象作为驱动的模型。它适合于面向对象的开发方法。,2023年9月19日,92,喷泉模型,2023年9月19日,93,喷泉模型的特点:(1)模型规定软件开发过程有5个阶段,即分析、设计、实现、测试与集成。(2)模型从高层返回低层无资源消耗,反映了软件过程迭代的自然特性。(3)以分析为基础,资源消耗呈塔型,在分析阶段消耗的资源最多。(4)各阶段相互重叠反映了软件过程并行性。,2023年9月19日,94,(5)模型强调增量开发,它依据分析一点,设计一点的原则,并不要求一个阶段的彻底完成,整个过程是一个迭代的逐步提炼的过程。(6)模型是对象驱动的过程,对象是所有活动作用的主体和项目管理的基本内容。,六、形式化方法模型 是基于形式化语言和程序变换的模型,因此,也称变换模型。从软件需求形式化说明开始,经过一系列的数学变换和正确性证明,最终得到系统高层的设计逻辑或低层的目标程序。形式化方法使开发者应用一个严格的数学符号体系来表示、构造和验证系统,从而大大提高软件的可靠性。基于模型的描述语言及方法如Z、VDM(Vienna Definition Method)、B、Petri Nets等。,形式化过程模型的一个扩展,称为净室软件工程(cleanroom software engineering)或净室模型,它除了强调分析和设计上的严格性,以及使用基于数学的正确性证明来对设计模型的每个元素进行形式化验证外,还强调了统计质量控制技术。基本思想:力求在分析和设计阶段就消除错误,确保正确,然后在无缺陷或“洁净”的状态下实现软件的制作。,七、构件组装模型 构件(component)也称为组件,是一段实现一系列有确定标准接口的程序体,具有自己的功能和逻辑,能同其他构件组装起来协调工作。该模型支持软件重用,对缩短软件开发周期、降低项目成本有重要的现实意义。同时,建造符合某应用领域体系结构标准的构件,可以用来搭建分布式的、跨越不同操作平台的软件,扩展了软件的应用前景,促进了软件标准化、商品化的发展。因此,在此基础上专家们又提出了“基于构件的软件工程”(CBSE)。构件组装模型的一种形式如下图所示:,构件组装模型的一种形式 该模型是软件体系结构被建立后用构件去充实。这些构件可从复用库(或商品库)中获得,或者根据专门需要而开发。整个过程可以演化地进行,面向对象方法给予技术上的支持。,1.6 统一过程-RUP,RUP(Rational Unified Process)或UP于1998年6月由Rational公司推出。有上千家公司在使用,分布于电信、交通、航空、国防、制造、金融等不同的行业和应用域。RUP是一个二维的迭代结构:横轴为生命周期的四个阶段起始、细化、构建和产品化,各阶段结束于一个里程碑。纵轴为九个工作流(RUP2000版)业务建模、需求、分析设计、实施、测试、部署、配置(称为核心过程工作流)与变更管理、项目管理、环境(称为核心支持工作流)。下图显示了五个核心过程工作流的二维结构:,起始(inception):定义业务需求、提出系统大致的架构,识别各种资源,评估主要风险,制定开发计划。细化(elaboration):扩展起始阶段定义的用例,扩展体系结构以包括各类视图用例模型、分析模型、设计模型、实现模型和部署模型,修改项目计划。构建(construction):以体系结构模型作为输入,开发或获取软件构件,确保最终用户能够操作用例。转换(transition):软件被提交给用户进行Beta测试和验收测试,根据缺陷进行必要的变更,创建系统发布所必要的支持信息。生产(production):持续的监控软件的运行并提供运行环境的技术支持。在构建、转换和生产阶段的同时,下一个增量的工作已开始。,1、RUP每一阶段产生的主要工作产品,起始阶段 初始用例模型 初始项目术语表 初始业务用例 初始风险评估 项目计划 阶段及迭代 业务模型 如果需要 一个或多个原型,细化阶段 用例模型 补充需求 包括非功能需求 分析模型 软件体系结构描述 可执行的体系结构原型 初步的设计模型 修订的风险列表 项目计划,包括 迭代计划 调整的工作流 里程碑 技术工作产品 初始用户手册,构建阶段 设计模型 软件构件 集成的软件增量 测试计划及步骤 测试用例 支持文档 用户手册 安装手册 对于并发增量的描述,转换阶段 提交的软件增量 Beta测试报告 综合用户反馈,2、RUP的主要特点:(1)用例驱动 用例作为系统分析、设计、实现和测试的基本输入。即用例不只是一种确定系统需求的工具,它还能驱动系统的设计、实现和测试的进行。基于用例模型,开发人员可以创建一系列实现这些用例的设计模型和实现模型。开发人员可以审查每个后续建立的模型是否与用例模型一致。测试人员测试实现以确定实现模型的构件是否实现了用例。所以用例启动了开发过程,还使开发过程结合为一体。开发过程是沿着一系列从用例得到的工作流前进的。,下图显示了用例模型与其他模型之间的相关性:,用例模型,由建立,分析模型,为系统描述一系列类,由设计,设计模型,为系统定义一系列子系统和界面,由实现,实现模型,将类映射到构件,由分布,测试模型,由验证,验证系统是否提供了用例模型中描述的功能,实施模型,定义软件部署,(2)以构架(Architecture)为中心 架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象,(3)迭代与增量的过程 迭代指工作流中的步骤,是反复求精的概念;增量指产品中增加的部分,是逐块建造的概念。迭代过程要处理一组用例,这组用例合起来能扩展所开发产品的可用性,后续的迭代过程建立在前一次迭代过程末期所开发的产品上。(4)基于构件 统一过程所构造的软件系统,是由软件构件通过明确定义的接口相互连接所建造起来的。,(5)使用UML 统一过程使用UML来制定软件系统的所有蓝图,UML是整个统一过程的一个完整部分,他们是共同发展起来的,它强调创建和维护模型。(6)过程可剪裁 RUP是一个过程模式,或过程定义(PD)而非过程(P)。可以根据系统的规模、项目的性质、开发组织的经验对过程加以裁剪。Ivar Jacobson 于2005年发布了EssUP,即“超轻和超敏捷的”RUP。2007年,他提出“Enough of Processes,Lets Do Practices”。,另外,在人员方面,RUP定义了角色的概念,从角色视角对不同人员从事的不同活动进行了规范。在方法与产品方面,RUP提供了使用UML进行可视化建模、基于用例驱动且以架构为中心的分析设计方法,并有相应的工具支持,如Rational Solutions,包括建模工具Rose、文档自动生成工具SoDA、测试工具Purify和Quality、配置管理工具ClearCase、变更管理工具ClearQuest等。RUP强调了开发方法的统一、建模语言的统一、研究成果的统一。现代软件工程领域的一些专家普遍认为影响软件实践的三个基本要素是:人、技术和过程。RUP 主要强调的是过程,认为具有好的过程才能生产出稳定质量的软件。,敏捷(Agile)是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,方法强调的是人,认为人才是创造的源泉,只有人与人之间的充分交流(包括与用户的交流和开发着之间的交流)才是解决许多问题的关键。是一种应对快速变化的需求的一种软件开发能力。更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重做为软件开发中人的作用。,2023年9月19日,各模型比较图,中国软件产业,中国软件产业的途径之一(软件外包)印度软件产业发展与软件外包 中国向印度学习发展软件外包业务中国目前外包业务与市场分析 中国目前80%的外包业务来自日、韩等亚洲国家 印度的外包业务主要来自于美国 中国和印度的不同(文化、语言、软件工程意识),2023年9月19日,五部委联合报告:人才需求每年增加万,目前,教育部、信息产业部、国防科工委、交通部、卫生部联合发布数控技术应用、计算机应用与软件技术、汽车运用与维修、护理等四个专业领域的人才需求状况。其中,计算机应用与软件技术人才需求最大,初步统计人才需求量每年增加万。,国内现有软件从业人员近10万人,其中专业人才约有70万人,其中高级人才15万人,中级人才35万人,初级人才20万人。人才结构呈两头小中间大的

    注意事项

    本文(软件工程第一章(绪论).ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开