《软件危机与软件工程.ppt》由会员分享,可在线阅读,更多相关《软件危机与软件工程.ppt(37页珍藏版)》请在课桌文档上搜索。
1、2023/3/10,1,第一章 绪论,软件危机与软件工程,软件工程(Software Engineering),2023/3/10,2,本章主要内容,软件开发过程软件危机的产生解决软件危机的途径软件工程,2023/3/10,3,计算机硬件与软件,任何计算机系统都包含硬件(hard)和软件(software)两大部分。硬件只是提供了计算的可能性必须有支持和管理计算机的软件,系统才能实现计算,软件开发过程,2023/3/10,4,软件的三层含义,个体含义:指计算机中的程序及其文 档。整体含义:指在特定计算机系统中所有上述个体含义下的软件的总称,即计算机系统中硬件除外的所有成分。学科含义:指在研究、
2、开发、维护以及使用前述含义下的软件所涉及的理论、方法、技术所构成的学科。,软件开发过程,2023/3/10,5,软件开发过程的演化,第一个时期:4060年代,个体时期(程 序时期)第二个时期:6070年代,软件作坊时期(程序+文档)第三个时期:70年代以后,软件工程时 期。,软件开发过程,2023/3/10,6,软件开发过程的演化,计算机软件的数量以惊人的速度急剧膨胀。计算机硬件的性能/价格比,每10年提高2个数量级,且质量稳步提高。软件生产跟不上计算机应用的要求,开发成本增加,质量没有保证,已成制约 计算机发展的关键因素。,软件开发过程,2023/3/10,7,软 件 危 机,软件危机(cr
3、isis):是指在计算机软件开发和维护过程中所遇到的一系列的严重问题。,软件危机的产生,2023/3/10,8,软件危机的具体表现,对软件开发成本高和进度估计不准确。用户对已完成的“软件系统”不满意。软件产品的质量不可靠。软件维护困难,维护的人员与费用不断 增加。缺乏完整、正确的文档资料。软件成本在计算机系统中所占比例逐年上升。软件的发展跟不上硬件的发展和用户的要求。,软件危机的产生,2023/3/10,9,产生软件危机的原因,客观原因:软件需求大,规模大主观原因:软件本身的特点 软件是一种逻辑部件不是物理部件,其进展情 况和质量难以控制。软件的规模非常庞大,多人共同开发,必须有 严格和科学的
4、管理。软件开发过分依赖于个人的智力劳动和经验。在对用户需求没有完整、准确的认识,匆忙开 发。,软件危机的产生,2023/3/10,10,软件的生命周期,软件的生命周期(life cycle):是指软件产品或软件系统,从生产、投入使用到被淘汰的全过程。把软件生命周期依次划分为若干阶段,每个阶段有相对独立的任务,逐步完成各个阶段的任务后,软件的生命周期向前推进。,解决软件危机的途径,2023/3/10,11,软件的生命周期,软件计划(planning)阶段 问题定义:要解决的问题是什么?可行性研究:在时间和资源的约束条件下,能否完成指定的任务?包括:技术可行性、经济可行性、法律可行性、社会可行性。
5、,解决软件危机的途径,2023/3/10,12,软件的生命周期,软件开发(development)阶段需求分析总体设计详细设计编码测试运行,解决软件危机的途径,2023/3/10,13,软件的生命周期,软件维护(maintenance)阶段 在不同的阶段对软件修改而付出的代价是不同的!在后期引入一个变动的代价比在早期引入要高的多,甚至高达23个数量级。,解决软件危机的途径,2023/3/10,14,软 件 工 程,软件工程 是一门指导计算机软件开发和维 护的工程学科,是一类求解软件包的工程。它应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法,创建软件以达到提高质量、降低成本的目的
6、。,解决软件危机的途径,2023/3/10,15,软 件 工 程,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。,解决软件危机的途径,2023/3/10,16,软件工程基本原理,1968年在联邦德国召开的国际会议正 式提出并使用“软件工程”的概念和术 语,众多专家提出100多条关于软件 程的准则。1983年,B.W.Boehm归纳提出了七条 基本原则。,解决软件危机的途径,2023/3/10,17,软件工程基本原理,1用分阶段的生命周期计划严格管理 有人统计,在不成功的软件项目中有50%左右是由于计划不周造成的
7、。应该把软件生命周期划分为若干阶段,并制定出相应的切实可行的计划,严格按照计划对开发和维护进行管理。B.W.Boehm认为,应制定和严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。,解决软件危机的途径,2023/3/10,18,软件工程基本原理,2坚持进行阶段评审 设计的错误占软件错误的63%,编码错误只占37%。而且在后期纠正错误的代价非常高。因此,必须严格坚持阶段评审,及早发现和纠正错误。,解决软件危机的途径,2023/3/10,19,软件工程基本原理,3实行严格的产品质量控制 在现实中由于外部原因要求对需求等进行修改是难免的。但必须有严格的
8、管理制度和措施。,解决软件危机的途径,2023/3/10,20,软件工程基本原理,4采用现代程序设计技术和软件工程技术 如结构化程序分析(Structured Analysis)和结构化设计(Structured Design)等。5结果应能清楚地审查 由于软件是一种看不见摸不着的逻辑产品,对它的检验和审查很困难。因此,应提供可视化的检验标准和方法。,解决软件危机的途径,2023/3/10,21,软件工程基本原理,6开发人员应少而精 软件开发小组的人员应该是素质高,人员不宜过多。人员素质低和人员过多,都会导致软件的错误率高,且开发效率下降,成本增加。7承认不断改进软件工程的必要性 软件工程是一
9、门不断迅速发展的学科,必须学习和跟踪先进的技术和方法,也要不断总结经验、改进方法,要不断进行技术创新。,解决软件危机的途径,2023/3/10,22,解决软件危机的传统方法,用生命周期把软件划分为若干阶段,每个阶段相对独立的任务,分阶段逐步完成。每一阶段的开始和结束都有严格的标准,前一个阶段的结果就是下一阶段设计和开发的依据。每个阶段的工作都有严格的技术和管理审查,通过之后才方可开始进行下一阶段。每个阶段都要形成详尽、规范、完整的文档,提供下一阶段以及本阶段评审之用。,解决软件危机的途径,2023/3/10,23,生命周期各阶段的任务,1问题定义 本阶段需要明确回答:“要解决的问题是什么?”。
10、系统分析员应该提出问题的性质、目标和规模的书面报告。通过对实际用户和使用部门的调查、研究,以及讨论、交流,得出一份双方都满意的文档。,解决软件危机的途径,2023/3/10,24,生命周期各阶段的任务,2 可行性分析 本阶段需要回答的是:“上一阶段确定的问题有无可行的解决方案,是否值得解决?”。更进一步明确项目的规模和目标,从技术可行性、经济可行性、操作可行性、法律可行性、社会可行性等方面进行研究,确定是否开发本项目。,解决软件危机的途径,2023/3/10,25,生命周期各阶段的任务,3需求分析 本阶段确定为解决该问题,目标系统必须应具备哪些功能。系统分析员在本阶段必须与用户密切配合,充分交
11、流,得到经用户确认的系统逻辑模型,用数据流图、数据字典等描述系统的逻辑模型。需求分析阶段所确定的系统逻辑模型是以后设计和实现目标系统的基础,必须准确、完整的体现用户的需求。,解决软件危机的途径,2023/3/10,26,生命周期各阶段的任务,4总体设计 本阶段 确定目标系统的主要功能如何完成。采用流程图或其他工具描述出每种可能的系统,推荐出一个最佳的方案,并制定出实现该系统的详细计划。本阶段的另一个主要任务是设计软件的结构,确定软件应由哪些模块构成,以及模块之间的关系。还应考虑系统的开发和应用环境,如计算机系统的配置,计算机网络等。,解决软件危机的途径,2023/3/10,27,生命周期各阶段
12、的任务,5详细设计 详细设计阶段的任务就是把问题的求解具体化,设计出程序的详细规格说明。通常用HIPO图(层次图/输入/处理/输出)或PDL语言(过程设计语言)描述详细设计的结果。,解决软件危机的途径,2023/3/10,28,生命周期各阶段的任务,6编码和单元测试 本阶段的任务是编写软件程序。程序员应根据目标系统的要求,选取适合的程序设计语言,把详细设计的结果编制成程序,并对每一个模块进行单元测试。需要考虑软件平台、开发工具等等。,解决软件危机的途径,2023/3/10,29,生命周期各阶段的任务,7综合测试 本阶段的任务是通过各种测试以及相应的调试,使软件达到预定的要求。应该把测试计划、测
13、试方案、测试结果等以文档的形式保存下来,作为软件配置的一个组成部分。,解决软件危机的途径,2023/3/10,30,生命周期各阶段的任务,8软件维护 软件维护的任务是,通过各种必要的维护活动使系统持久地满足用户的需要。通常有4类维护活动:改正性维护;适应性维护;完善性维护;预防性维护。每一项维护活动都应该准确地记录下来,作为正式的文档保存。,解决软件危机的途径,2023/3/10,31,软件工程开发模式,1瀑布模型(Waterfall Model)传统的生命周期方法学可以用瀑布模型来模拟,犹如瀑布,各个阶段从上到下,奔流不息。,解决软件危机的途径,2023/3/10,32,软件工程开发模式,按
14、照传统的瀑布模型来开发软件,有如下几个特点:各阶段具有顺序性和依赖性,必须等上一阶段结束后,才能开始下一阶段;前一阶段的输出文档就是下一阶段的输入,在某一阶段发现了问题,可能会追溯到前面某些阶段,必须对前面的许多阶段进行修改,代价高昂。,解决软件危机的途径,2023/3/10,33,软件工程开发模式,第一,不要急于求成,对于规模较大、较复杂的系统,过早地急于编程实现,往往导致大量返工,甚至开发失败。应该把前面几个阶段的工作做得比较扎实,再进行后续的工作。第二,每个阶段都必须交出合格的文档。这是下一阶段开发设计的依据和开发交互的媒介,也是对软件进行维护的重要依据。第三,每个阶段完成前都要对完成的
15、文档进行评审,以便及时发现和改正错误。对错误的修改越早越好,越晚代价越高。,解决软件危机的途径,2023/3/10,34,软件工程开发模式,2原型(prototyping)开发模型 在项目开发的早期尽快开发一个简化的系统原型版本。用于用户和开发人员学习和交流。,解决软件危机的途径,2023/3/10,35,软件工程开发模式,螺旋(spiral)模型 按照计划风险分析工程用户评价,象螺旋线一圈一圈地向外发展,最终建立起运行的系统。主要是为了控制开发风险。其工程开发仍采用生命周期和原型开发的方法。,解决软件危机的途径,2023/3/10,36,软件工程开发模式,第四代(4GT)技术 第四代技术(Fourth Generation techniques),拥有一组工具,提供开发人员在高层定义软件的特性,并按照这些特性自动生成原代码。,解决软件危机的途径,2023/3/10,37,软件工程开发模式,面向对象(OO)模型 采用面向对象(Object Oriented)的思想方法和技术进行软件的设计和开发。,解决软件危机的途径,