软件工程第一章(绪论).ppt
《软件工程第一章(绪论).ppt》由会员分享,可在线阅读,更多相关《软件工程第一章(绪论).ppt(122页珍藏版)》请在三一办公上搜索。
1、9/19/2023,第一章 软件工程学概述,参考教材,1.软件工程实践者的研究方法 Roger S.Pressman(第6版)机械工业出版社2.软件工程(第8版)Ian Sommerville 机械工业出版社,什么是软件 软件的特点 软件的发展 软件生存期 什么是软件工程 软件工程的目的和要求,第一章 软件工程学概述,先接受开发软件不等于编写程序的正确观点:开发软件应该完成的工作远远多于编写程序应该完成的工作。编写程序步骤为首先设计算法(即完成指定功能的步骤),然后用程序设计语言(例如:C语言)表达该算法。而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完成的工作的一部分,而且只占
2、一小部分。为了开发出一个符合用户需要、质量合格的软件,软件工程师必须首先弄清楚用户面临的问题是什么,也就是要明确软件需要解决用户的哪些问题;接下来应该进行可行性研究方案,分析用户面临的问题是否有行得通的解决方案。为避免浪费资源,仅在该软件的开发是可行的前提下,才进行实质性的开发工作;,然后应该进行需求分析工作,通过与用户的反复交流,搞清楚用户对该软件的具体需求,这些需求是进行软件设计的依据;在编写程序之前需要先进行设计。通常,大型软件的设计工作又分成两个阶段进行,先进行总体设计(又称为概要设计),再进行详细设计;编写程序实质上是把设计结果翻译成用某种程序设计语言书写的程序;程序编写出来之后,还
3、需要经过严格的测试过程(需要的工作量通常占软件开发全部工作量的40%50%),软件确实符合用户需求而且质量合格,才能交付给用户使用。,1.1什么是软件,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列。计算机程序包括源程序和目标程序。数据是使程序能正常操纵信息的数据结构(即数据的组织形式)。文档是与程序开发,维护和使用有关的图文材料。,1.1什么是软件,软件的特点软件是一种逻辑实体,而不是具体的物理实体。因此,它具有抽象性。软件的生产与硬件不同,没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。在软
4、件的运行和使用期间,没有像硬件那样的磨损、老化问题。软件的开发和运行往往受到计算机系统的限制,对计算机系统有不同程度的依赖性。,故障率曲线,硬件的故障率曲线,理想曲线,实际曲线,1.1什么是软件,软件的特点(续)迄今为止,软件的开发尚未完全摆脱手工艺的方式。软件本身是复杂的。软件的成本相当昂贵。相当多的软件工作涉及到社会因素。,例:Windows95有1000万行代码 Windows2000有5000万行代码,3000多个工程师,几百个小团队。Exchange2000和 Windows2000开发人员结构,1.1什么是软件,软件的分类按软件的功能划分:系统软件、支撑软件、应用软件按软件的规模划
5、分:微型、小型、中型、大型、超大型按软件的工作方式划分:实时、分时、交互、批处理按软件服务对象的范围划分:项目软件、产品软件,计算机系统的发展,自从1945年第一台电子数字计算机问世以来,计算机经历了电子管、半导体、集成电路到大规模集成电路几个发展时期,软件也经过程序、软件、软件工程及软件产业化等不同的发展时期。,1、程序时代(60年代前)计算机硬件处于电子管时代、应用于科学计算。其特点:.软件的开发者、使用者、维护者都是同一人.重视编程技巧和运算效率的提高。.结构不清晰,不易理解,像一部天书,是人脑进行的隐含过程(4).使用机器语言。(后期用汇编语言)软件=程序。,计算机系统的发展(续1),
6、2、软件时代(6070年代)计算机进入了半导体时代,CPU速度和存储容量大幅提高(几万次秒100万次秒)其特点:.多人分工合作,共同协作完成。.软件逐渐成为计算机系统必不可少的组成部分。.应用领域从科学计算拓宽到工业控制、商业系统等。软件=程序+使用说明 软件商品化。60年代末IBM实行价格分离,软件独立于硬件单独定价,这项政策大大促进了软件的发展,几万、几十万语句行的程序屡见不鲜。同时由于软件的发展迅猛也给软件的开发、运行、维护带来新的问题,软件的庞大及其复杂性造成了许多大型软件开发失败,有些交付使用后并不能运行,不能被用户所接受。在此时期爆发了“软件危机”。,计算机系统的发展(续2),3、
7、软件工程时代(70年代80年代)在这个时期里,计算机从集成电路发展到大规模集成电路,主机芯片的产生,将计算机的主要部件集中在一个小芯片上。计算机走出机房,有了个人电脑。软件无论从数量到质量都无法满足发展的需要,早期的错误观念和做法严重的阻碍了软件的发展。1968年,北大西洋公约组织的计算机专家提出并使用了“软件工程”这一术语,即按工程化的技术进行软件开发。诞生了软件工程这门新兴的科学。软件开发不再把效率作为追求的第一目标,而是重视易读、易理解,软件质量的标准起了变化可维护性、可靠性、可理解性,这一阶段围绕软件工程的目标和内容,与之相应的理论、技术及方法相继建立,软件开发过程的规范化,工程化为软
8、件的产业化奠定了坚实的基础。软件=程序+文档,计算机系统的发展(续3),4、软件产业化的时代(90年代以后)由于软件工程技术的发展带动了软件产业的发展,80年代后期至90年代全社会的信息化进程,使得软件从传统的技术性应用到大规模地向消费性应用过渡。软件产业已名符其实地成为国民经济信息化和社会信息化的战略产业。,计算机软件发展三个时期的比较,发展带来的新问题:,硬件的发展超过软件发展;集成度18个月翻一翻,计算速度、存储容量成倍增长,成本每10年递减两位数。制作软件的能力和速度与需求不适应;计算机的应用依赖于可靠的软件,软件失败将造成巨大经济损失;已有的软件难以维护。,中国软件产业面临挑战与机遇
9、,外国软件渗透 软件开发投资力度不足 软件侵权行为 软件人才结构不合理,缺乏高级系统程序员和项目负责人。软件人员缺乏软件工程化的概念。,1.2软件危机,一、软件危机的出现,软件危机表现 产生危机的原因,软件危机案例,例:IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。.据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。.,项目负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣
10、扎,陷得越深,最后无法逃脱灭顶的灾难。.程序设计工作正像这样一个泥潭,.一批批程序员被迫在泥潭中拼命挣扎,.谁也没有料到问题竟会陷入这样的困境.”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,危机,危机,问题出在哪里?,项目没有被很好地理解;计划不周,最终导致进度拖延;文档资料不充分,使人与人的交流变得比写程序困难得多;缺少度量软件可靠性(reliability)的标准,质量无法保证;软件难以维护(maintainability),不易升级(evolvability);,必须意识到:,软件 编程,1.2软件危机,二、什么是软件危机软件危机是指在计算机软件的开发和维护
11、过程中所遇到的一系列严重问题。主要是两个问题。1.如何开发软件,怎样满足对软件的日益增长的需求。2.如何维护数量不断膨胀的已有软件,1.2软件危机,三、软件危机的主要表现1.对软件开发成本和进度的估计不准确2.用户不满意3.软件质量不高、可靠性差4.软件常常不可维护、错误难以改正。5.缺乏适当的文档资料6.软件成本占系统总成本的比例逐年上升7.软件开发速度跟不上计算机发展速度,三、软件危机(续1),危机的表现,软件成本在计算机系统中总成本所占的比例逐年增高。,软件生产率的提高远跟不上需求的增长。,失败案例,1962年美国飞向金星的探测器失败,损失几千万美元,问题出在控制程序中:DO 5 i=1
12、,3,错写为:DO 5 i=1.3。1982年日本第五代计算机计划,预算达8亿美元,由于没能突破关键性的技术难题的原因于1993年下马。上世纪六十年代操作系统的研制经受了一系列重大挫折,典型的例子是OS360。数百万行汇编代码中有成千上万处错误,IBM不断发行新的版本试图更正这些错误,每个新版本在更正老错误的同时又引入了新的错误;随着时间的流逝,错误的数量大致保持不变。,相关数据,IBM每年花费大约2.5亿美元,用于修复1.3万个客户反馈缺陷和重新安装修复后的版本,每个缺陷大约花费千美元。20世纪90年代中期,美国软件工程实践的现状是:软件开发仍然很难预测,大约只有10%的项目能够在预定的费用
13、和进度下交付。很多投入了巨大资金和人力的软件产品不能取得很好的成绩。,1.2软件危机,四、产生软件危机的原因在软件的开发和维护过程中存在着这么多的问题,一方面与软件本身的特点有关,另一方面也与软件的开发和维护的方法有关。造成上述软件危机的原因概括起来有以下几方面:,2023年9月19日,30,(1)软件的规模愈发庞大。1968年美国航空公司订票系统达到30万条指令;IBM360OS第16版达到100万条指令;1973年美国阿波罗计划达到1000万条指令。XP3000万行,win7近2亿行这些庞大软件的功能非常复杂,体现在处理功能的多样性和运行环境的多样性。随着计算机应用的日益广泛,需要开发的软
14、件规模日益庞大,软件结构也日益复杂。,2023年9月19日,31,(2)软件开发的管理困难。软件不同于硬件,它是计算机系统中的逻辑部件。在写出代码并在计算机上试运行前,由于软件规模大,结构复杂,又具有无形性,软件开发过程的进展情况较难度量,质量也难评价。因此导致管理困难,进度控制困难,质量控制困难,可靠性无法保证。,2023年9月19日,32,(3)相当多的软件开发人员对于软件的开发和维护存在不少糊涂的观念,实践中或多或少地采用错误的方法和技术。这可能是软件危机的主要原因。,2023年9月19日,33,(4)软件开发和维护中许多错误认识和方法的形成可以归结与计算机发展早期软件开发的个体化特点。
15、其主要表现在对软件需求分析的重要性认识不够,错误地认为软件开发就是写程序并使之运行,不重视软件需求分析与维护等工作。,2023年9月19日,34,(5)软件开发技术落后。在20世纪60年代,人们注重一些计算机理论问题的研究,如编译原理、操作系统原理、数据库原理、人工智能原理、形式语言理论等,不注重软件开发技术的研究,用户要求的软件复杂性与软件技术解决复杂性的能力不相适应,它们之间的差距越来越大。,2023年9月19日,35,(6)生产方式落后。软件仍然采用个体手工方式开发,根据个人习惯爱好工作,无章可循,无规范可依据,靠言传身教方式工作。(7)开发工具落后,生产率提高缓慢。软件开发工具过于原始
16、,没有出现高效率的开发工具,因而软件生产率低下。在19601980年期间,计算机硬件的生产由于采用计算机辅助设计、自动生产线等先进工具,使硬件生产率提高了100万倍,而软件生产率只提高了2倍,相差十分悬殊。,1.2软件危机,五、解决软件危机的途径,.研制新一代体系结构的智能计算机,以改变软件的实现方式,降低软件的复杂性。目前尚未研制成功。.采用工程化、规范化的开发方法来指导软件的开发:这就是产生“软件工程学”的背景,并在70年代形成了结构化分析、设计方法。也是本课程要讲授的主要内容。.在求解方法上采用面向对象的软件设计方法。即在软件开发中,以客观世界的问题空间入手进行软件设计,以减少求解方法空
17、间与客观世界问题空间存在的“鸿沟”。,1.3软件工程简述,一、什么是软件工程软件工程是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。,一、什么是软件工程?,不同机构从不同角度给出了许多定义。“运用现代科学技术知识来设计并构造计算机程序设计及为开发,运行和维护这些程序所必须的相关文件资料”。Boehm“软件工程是开发,运行,维护和修复软件的一套系统方法”。IEEE“软件工程学是为在成本限额以内按时完成开发和修改软件产品所需的系统生产和维护的技术和管理的学科”。Fairley“建立并
18、使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。Fritz Bauer,1.3软件工程简述,二、软件工程的基本原理1968年,北大西洋公约组织(NATO),召开的有关计算机软件会议上正式提出“软件工程”术语。目前有100多条关于软件工程的准则,其中最出名的是著名软件工程专家B.W.Boehm在1983年提出的7条基本原理。,1.3软件工程简述,1.用分阶段的生命周期计划严格管理经统计表明,不成功的软件项目中有一半左右是由于计划不周造成的。Boehm认为,在软件的整个生命周期中应制定并严格执行六类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、
19、验证计划、运行维护计划。,1.3软件工程简述,2.坚持进行阶段评审大部分错误是在编码之前造成的 因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程的错误,1.3软件工程简述,3.实行严格的产品控制在软件开发过程中不要随意改变需求,因为改变某项需求往往需要付出较高的代价,但在实践中用户往往会提出需求变更,因此需要采取科学的产品控制技术。目前主要实行基准配置管理:基准配置是指经过阶段评审后的软件配置成分,如各个阶段产生的文档或程序代码。对涉及基准配置的修改,必须经过严格的评审,通过后才能实施修改。,1.3软件工程简述,4.采用现代程序设计技术实践表明:采用先进的技术既可提高软件开发的效率
20、,又可提高软件维护的效率。80年代及之前:结构化分析、设计技术90年代:面向对象分析、设计技术,1.3软件工程简述,5.结果应能清楚地审查软件产品是看不见、摸不着的逻辑产品,开发过程难以评价和管理。根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,使所得的结果能够清楚地审查,1.3软件工程简述,6.开发小组的人员应该少而精开发小组人员的素质和数量是影响软件产品质量和开发效率的重要因素。开发小组人员数目的增加,使相互交流复杂、费用增加。,1.3软件工程简述,7.承认不断改进软件工程实践的必要性遵循前6条基本原理,就能够按照当代软件工程基本原理实现软件的工程化生产,但不能保证赶上时
21、代前进的步伐。积极主动采纳新的软件技术,且不断总结经验。,三、软件工程的目标,2023年9月19日,47,软件工程的目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。下面分别介绍这些概念。,2023年9月19日,48,(1)可修改性(modifiability)。容许对系统进行修改而不增加原系统的复杂性。它支持软件的调试与维护,是一个难以度量和难以达到的目标。,2023年9月19日,49,(2)有效性(efficie
22、ncy)。软件系统能最有效地利用计算机的时间资源和空间资源。各种计算机软件无不将系统的时/空开销作为衡量软件质量的一项重要技术指标。很多场合,在追求时间有效性和空间有效性方面会发生矛盾,这时不得不牺牲时间效率换取空间有效性或牺牲空间效率换取时间有效性。时/空折中是经常出现的。有经验的软件设计人员会巧妙地利用折中概念,在具体的物理环境中实现用户的需求和自己的设计。,2023年9月19日,50,(3)可靠性(reliability)。能够防止因概念、设计和结构等方面的不完善造成的软件系统失效,具有挽回因操作不当造成软件系统失效的能力。对于实时嵌入式计算机系统,可靠性是一个非常重要的目标。,2023
23、年9月19日,51,(4)可理解性(understandabimy)。系统具有清晰的结构,能直接反映问题的需求。可理解性有助于控制软件系统的复杂性,并支持软件的维护、移植或重用。,2023年9月19日,52,(5)可维护性(maintainability)。软件产品交付用户使用后,能够对它进行修改,以便改正潜伏的错误,改进性能和其他属性,使软件产品适应环境的变化等等。由于软件是逻辑产品,只要用户需要,它可以无限期地使用下去,因此软件维护是不可避免的。,2023年9月19日,53,(6)可重用性(reusebility)。概念或功能相对独立的一个或一组相关模块定义为一个软部件。软部件可以在多种场
24、合应用的程度称为部件的可重用性。可重用的软部件有的可以不加修改直接使用,有的需要修改以后再用。可重用软部件应具有清晰的结构和注解,应具有正确的编码和较低的时/空开销。,2023年9月19日,54,(7)可适应性(adaptability)。软件在不同的系统约束条件下,使用户需求得到满足的难易程度。适应性强的软件应采用广为流行的程序设计语言编码,在广为流行的操作系统环境中运行,采用标准的术语和格式书写文档。适应性强的软件较容易推广使用。,2023年9月19日,55,(8)可移植性(portability)。软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。为了获得比较高的可移植性,
25、在软件设计过程中通常采用通用的程序设计语言和运行支撑环境。可移植性支持软件的可重用性和可适应性。,2023年9月19日,56,(9)可追踪性(tracebility)。根据软件需求对软件设计、程序进行正向追踪,或根据程序、软件设计对软件需求进行逆向追踪的能力。软件可追踪性依赖于软件开发各个阶段产档和程序的完整性、一致性和可理解性。降低系统的复杂性会提高软件的可追踪性。,2023年9月19日,57,(10)可互操作性(interoperability)。多个软件元素相互通信并协同完成任务的能力。为了实现可互操作性,软件开发通常要遵循某种标准,支持这种标准的环境将为软件元素之间的可互操作提供便利。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 第一章 绪论
链接地址:https://www.31ppt.com/p-6063545.html