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

下载本文档

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

文档简介

软件危机与软件工程学概述软件工程学系列2026/6/172主要内容软件开发过程软件危机的产生解决软件危机的途径软件工程2026/6/173计算机硬件与软件任何计算机系统都包含硬件(hard)和软件(software)两大部分。

硬件只是提供了计算的可能性必须有支持和管理计算机的软件,系统才能实现计算软件开发过程2026/6/174软件的三层含义个体含义:指计算机中的程序及其文档。整体含义:指在特定计算机系统中所有上述个体含义下的软件的总称,即计算机系统中硬件除外的所有成分。学科含义:指在研究、开发、维护以及使用前述含义下的软件所涉及的理论、方法、技术所构成的学科。软件开发过程2026/6/175软件开发过程的演化

第一个时期:40—60年代,个体时期(程序时期)第二个时期:60—70年代,软件作坊时期(程序+文档)第三个时期:70年代以后,软件工程时期。软件开发过程2026/6/176

阶段特点程序设计程序系统软件工程软件所指程序程序及说明书程序、文档、数据主要程序设计语言汇编及机器语言高级语言软件语言*软件工作范围程序编写设计和测试整个软件生命周期需求者程序设计者本人少数用户市场用户开发软件的组织个人开发小组开发小组及大、中型开发机构软件规模小型中、小型大、中、小型计算机软件发展的三个阶段及其特点2026/6/177

阶段特点程序设计程序系统软件工程决定质量的因素个人技术小组技术水平技术与管理水平开发技术和手段子程序、程序库结构化程序设计数据库、开发工具、集成开发环境、工程化开发方法、标准和规范、网络及分布式开发、面向对象技术、计算机辅助软件工程维护责任者程序设计者开发小组专职维护人员硬件的特征高价、存储量小、可靠性差降价,速度、容量和可靠性明显提高向超高速、大容量、网络化、微型化方向发展软件的特征完全不受重视软件的技术发展不能满足需求,出现软件危机开发技术有进步,但仍未完全摆脱软件危机续上表2026/6/178软件开发过程的演化

计算机软件的数量以惊人的速度急剧膨胀。计算机硬件的性能/价格比,每10年提高2个数量级,且质量稳步提高。软件生产跟不上计算机应用的要求,开发成本增加,质量没有保证,已成制约计算机发展的关键因素。软件开发过程2026/6/179软件危机软件危机(crisis):是指在计算机软件开发和维护过程中所遇到的一系列的严重问题。

软件危机的产生2026/6/1710软件危机的具体表现①

对软件开发成本高和进度估计不准确。②

用户对已完成的“软件系统”不满意。③

软件产品的质量不可靠。④

软件维护困难,维护的人员与费用不断增加。⑤

缺乏完整、正确的文档资料。⑥

软件成本在计算机系统中所占比例逐年上升。⑦

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

软件危机的产生2026/6/1711产生软件危机的原因客观原因:软件需求大,规模大主观原因:软件本身的特点

软件是一种逻辑部件不是物理部件,其进展情况和质量难以控制。

软件的规模非常庞大,多人共同开发,必须有严格和科学的管理。

软件开发过分依赖于个人的智力劳动和经验。

在对用户需求没有完整、准确的认识,匆忙开发。

软件危机的产生2026/6/1712软件的生命周期

软件的生命周期(lifecycle):是指软件产品或软件系统,从生产、投入使用到被淘汰的全过程。把软件生命周期依次划分为若干阶段,每个阶段有相对独立的任务,逐步完成各个阶段的任务后,软件的生命周期向前推进。解决软件危机的途径2026/6/1713软件的生命周期软件定义阶段

问题定义:要解决的问题是什么?可行性研究:在时间和资源的约束条件下,能否完成指定的任务?包括:技术可行性、经济可行性、法律可行性、社会可行性。解决软件危机的途径2026/6/1714

软件工程的定义阶段2026/6/1715软件的生命周期软件开发(development)阶段需求分析总体设计详细设计编码测试运行解决软件危机的途径2026/6/1716软件开发(development)阶段(1)需求分析:弄清用户对软件系统的全部需求,主要是确定目标系统必须具备哪些功能。(2)总体设计:设计软件的结构,即确定程序由哪些模块组成以及模块间的关系。(3)详细设计:针对单个模块的设计。(4)编码:按照选定的语言,把模块的过程性描述翻译为源程序。(5)测试:通过各种类型的测试(及相应的调试)使软件达到预定的要求。2026/6/1717软件工程的开发阶段2026/6/1718软件的生命周期软件维护(maintenance)阶段在不同的阶段对软件修改而付出的代价是不同的!在后期引入一个变动的代价比在早期引入要高的多,甚至高达2─3个数量级。维护的目的,是使软件在整个生存周期内保证满足用户的需求和延长软件的使用寿命。解决软件危机的途径2026/6/1719软件工程的运行维护阶段2026/6/1720软件工程软件工程

是一门指导计算机软件开发和维护的工程学科,是一类求解软件包的工程。它应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法,创建软件以达到提高质量、降低成本的目的。解决软件危机的途径2026/6/1721软件工程

计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。解决软件危机的途径2026/6/1722软件工程基本原理1968年在联邦德国召开的国际会议正式提出并使用“软件工程”的概念和术语,众多专家提出100多条关于软件工程的准则。

1983年,B.W.Boehm归纳提出了七条基本原则。解决软件危机的途径2026/6/1723软件工程基本原理1.用分阶段的生命周期计划严格管理有人统计,在不成功的软件项目中有50%左右是由于计划不周造成的。应该把软件生命周期划分为若干阶段,并制定出相应的切实可行的计划,严格按照计划对开发和维护进行管理。

B.W.Boehm认为,应制定和严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。解决软件危机的途径2026/6/1724软件工程基本原理2.坚持进行阶段评审设计的错误占软件错误的63%,编码错误只占37%。而且在后期纠正错误的代价非常高。因此,必须严格坚持阶段评审,及早发现和纠正错误。解决软件危机的途径2026/6/1725软件工程基本原理3.实行严格的产品质量控制在现实中由于外部原因要求对需求等进行修改是难免的。但必须有严格的管理制度和措施,其中主要是实行基准配置管理。解决软件危机的途径2026/6/1726软件工程基本原理4.采用现代程序设计技术和软件工程技术如结构化程序分析(StructuredAnalysis)和结构化设计(StructuredDesign)等。5.结果应能清楚地审查由于软件是一种看不见摸不着的逻辑产品,对它的检验和审查很困难。因此,应提供可视化的检验标准和方法。解决软件危机的途径2026/6/1727软件工程基本原理6.开发人员应少而精软件开发小组的人员应该是素质高,人员不宜过多。人员素质低和人员过多,都会导致软件的错误率高,且开发效率下降,成本增加。

7.承认不断改进软件工程的必要性软件工程是一门不断迅速发展的学科,必须学习和跟踪先进的技术和方法,也要不断总结经验、改进方法,要不断进行技术创新。解决软件危机的途径2026/6/1728解决软件危机的传统方法用生命周期把软件划分为若干阶段,每个阶段相对独立的任务,分阶段逐步完成。每一阶段的开始和结束都有严格的标准,前一个阶段的结果就是下一阶段设计和开发的依据。每个阶段的工作都有严格的技术和管理审查,通过之后才方可开始进行下一阶段。每个阶段都要形成详尽、规范、完整的文档,提供下一阶段以及本阶段评审之用。

解决软件危机的途径2026/6/1729软件工程方法学通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(Methodology)软件工程方法学3要素:方法:完成开发的技术,解决“怎样做”;工具:为运用方法提供的软件工程环境;过程:任务的框架,规定了完成各项任务的步骤。2026/6/1730软件工程方法学1.传统方法学也称为生命周期方法学或结构化范型。把软件生命周期的全过程依次划分为若干阶段,然后顺序地完成每个阶段的任务。传统方法学应用十分广泛。2026/6/1731软件工程方法学2.面向对象方法学该方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。2026/6/1732软件工程方法学比较:传统方法学强调自顶向下顺序地完成软件开发的各阶段任务。面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。2026/6/1733生命周期各阶段的任务1.问题定义本阶段需要明确回答:“要解决的问题是什么?”。系统分析员应该提出问题的性质、目标和规模的书面报告。通过对实际用户和使用部门的调查、研究,以及讨论、交流,得出一份双方都满意的文档。

2026/6/1734生命周期各阶段的任务

2.可行性分析

本阶段需要回答的是:“上一阶段确定的问题有无可行的解决方案,是否值得解决?”。更进一步明确项目的规模和目标,从技术可行性、经济可行性、操作可行性、法律可行性、社会可行性等方面进行研究,确定是否开发本项目。

2026/6/1735生命周期各阶段的任务

3.需求分析

本阶段确定为解决该问题,目标系统必须应具备哪些功能。系统分析员在本阶段必须与用户密切配合,充分交流,得到经用户确认的系统逻辑模型,用数据流图、数据字典等描述系统的逻辑模型。需求分析阶段所确定的系统逻辑模型是以后设计和实现目标系统的基础,必须准确、完整的体现用户的需求。2026/6/1736生命周期各阶段的任务4.总体设计本阶段确定目标系统的主要功能如何完成。采用流程图或其他工具描述出每种可能的系统,推荐出一个最佳的方案,并制定出实现该系统的详细计划。本阶段的另一个主要任务是设计软件的结构,确定软件应由哪些模块构成,以及模块之间的关系。还应考虑系统的开发和应用环境,如计算机系统的配置,计算机网络等。2026/6/1737生命周期各阶段的任务5.详细设计详细设计阶段的任务就是把问题的求解具体化,设计出程序的详细规格说明。通常用HIPO图(层次图/输入/处理/输出)或PDL语言(过程设计语言)描述详细设计的结果。2026/6/1738生命周期各阶段的任务6.编码和单元测试本阶段的任务是编写软件程序。程序员应根据目标系统的要求,选取适合的程序设计语言,把详细设计的结果编制成程序,并对每一个模块进行单元测试。需要考虑软件平台、开发工具等等。2026/6/1739生命周期各阶段的任务7.综合测试本阶段的任务是通过各种测试以及相应的调试,使软件达到预定的要求。应该把测试计划、测试方案、测试结果等以文档的形式保存下来,作为软件配置的一个组成部分。2026/6/1740生命周期各阶段的任务8.软件维护软件维护的任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有4类维护活动:改正性维护;适应性维护;完善性维护;预防性维护。每一项维护活动都应该准确地记录下来,作为正式的文档保存。2026/6/1741软件过程软件过程:为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。过程定义了运用方法的顺序、应交付的文档资料、为保证软件质量的协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。使用生命周期模型简洁地描述软件过程。2026/6/1742软件工程开发模式1.瀑布模型(WaterfallModel)

一直是唯一被广泛采用的生命周期模型。传统的生命周期方法学可以用瀑布模型来模拟,犹如瀑布,各个阶段从上到下,奔流不息。2026/6/1743软件工程开发模式系统需求综合测试设计编码规格说明维护2026/6/1744软件工程开发模式

按照传统的瀑布模型来开发软件,有如下几个特点:各阶段具有顺序性和依赖性,必须等上一阶段结束后,才能开始下一阶段;前一阶段的输出文档就是下一阶段的输入。2026/6/1745软件工程开发模式推迟实现的观点:不要急于求成,对于规模较大、较复杂的系统,过早地急于编程实现,往往导致大量返工,甚至开发失败。应该把前面几个阶段的工作做得比较扎实,再进行后续的工作。2026/6/1746软件工程开发模式质量保证的观点:(1)每个阶段都必须交出合格的文档。这是下一阶段开发设计的依据和开发交互的媒介,也是对软件进行维护的重要依据。(2)每个阶段完成前都要对完成的文档进行评审,以便及时发现和改正错误。对错误的修改越早越好,越晚代价越高。2026/6/1747软件工程开发模式瀑布模型的优缺点:优点:强迫采用规范化的方法;每个阶段必须提交文档;产品都要经过验证。缺点:该模型几乎完全依赖书面的规格说明,很可能导致最终的软件产品不能真正满足用户的需要。2026/6/1748软件工程开发模式2.快速原型(prototyping)开发模型快速原型:快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品功能的一个子集。如图1.4,当用户试用原型模型后会提出修改意见,开发人员按照该意见修改原型模型,然后用户再试用…2026/6/1749软件工程开发模式原型模型优点:软件产品

温馨提示

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

评论

0/150

提交评论