软件危机和软件工程.docx
《软件危机和软件工程.docx》由会员分享,可在线阅读,更多相关《软件危机和软件工程.docx(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件工程5.1 软件危机和软件工程5.1.1 软件危机一、产生软件危机的历史背景1 .计算机系统发展的早期(60年代中期以前)个体化的软件环境:软件规模小,续写者和使用者往往是同一个人,除程序清单外,无其它文档资料。2 .计算机系统发展的第2代时期(60年代中期到70年代)软件作坊:比较广泛使用产品软件,仍沿用个体化开发方法。软件维护工作很难进行,甚至不可维护(不能修改运行时发现的错误,不能适应新的硬件环境)由于软件的不可维护一而导致了软件危机3 .软件工程学诞生(1968年)北大西洋公约组织的计算机科学家,在联邦德国召开国际会议,讨论软件危机问题。正式提出”软件工 程”这个名词一新兴工程学诞
2、生了。二、软件危机的内涵:1 .软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列产问IH。主要是两个方面的问题:如何开发软件一怎样满足对软件日益增长的需求如何维护软 M数曜不断膨胀的已有软件2 .软件危机的内涵:(1)软件开发成本利进度的估计常常很不准确(2)用户对已完成的软件系统不满意的现象经常发生(3)软件产品的质往往靠不住(4)软件常常是不可维护的(5)软件通常没有拈当的文档资料(6)软件成本在计算机系统总成本中所占的比例逐年上升(7)软件开发生产率提高的速度远远跟不上计第机应用迅速及深入普及的速度三、产生软件危机的原因:1 .软件本身的特点:规模庞大,开发软件不仅涉及许多技术
3、问题(诸如分析方法,设计方法,形式说明方法,版本控制等); 更要的是必须有严格而科学的管理。2 .软件人员的主观原因:开发与维护的方法不正确。早期软件开发个体化。至今,忽视软件需求分析的重要性,轻视维护。(切 记:要充分、完整、准确地认识用户的要求,不要匆忙着手给写程序。要做大深入细致的调查研究工作, 反复多次地与用户交流信息,准确具体了解用户的要求。)四、解决软件危机的途径:1 .推广使用在实践中总结出来的开发软件的成功的技术和方法2 .研究、探索更好更有效的技术和方法3 .开发和使用更好的软件工具4 .有必要的组织管理措施5.1.2软件工程的基本原理一、基本概念:1 .软件:软件是程序、数
4、据以及开发、使用和维护程序需要的所有文档。2 .软件工程:是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术利方法来开发 与维护软件,把经过时间考验而证明正确的管理技术利当前能修得到的最好的技术方法结合起来,这就是 软件工程。二、软件工程基本原理:3 .软件工程的7条基本原理:(1)用分阶段的生命周期计划严格管理应该把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件 的开发与维护工作进行管理。(Boehm认为应该严格执行六类计划:项目概要计划;里程碑计划;项目控 制计划;产品控制计划;览证计划;运行维护计划。)(2)坚持进行阶段评审软件的质量保证
5、工作不能等到编码阶段结束之后再进行。大部分错误是纳码之前造成的:根据Boehm 等的统计设计借误占软件借误的63%,媳码错误仅占37%.借误发现与改正得越晚,所付出的代价也越高。(3)实行严格的产品控制当需求改变时,必须实行严格的产品控制,其中主要是实行基准配管理。一切有关修改软件的建议, 特别是涉及到基准配的修改建议,都必须按照严格的规定进行评审,获得批准后才能实施修改。(基准配 I1管理也称为变动控制)(4)采用现代程序设计技术采用先进的技术既可以提高软件开发的效率,又可提高软件维护的效率。60年代末提出结构程序设计 技术-结构分析(SA )与结构设计(SD 1 80年代末提出面向对象的技
6、术。(5)结果应能清楚地审查软件开发人员工作进展情况可见性差,难以准确度,难于评价和管理。应该根据软件开发项目的总 目标及完成期限,规定开发组织的责任和产品标准,从而使得结果能够清楚地审查。(6)开发小组的人员应该少而精开发小组人员的素质和数是影响软件产品质量和开发效率的重要因素。小组人员增加,交流情况和 讨论问题而造成的通讯开销也急剧增加,人数为N ,可能的通讯路径有N(N-1)(7)承认不断改进软件工程实践的必要性不仅要积极主动的采纳新的软件技术,而且要不断总结经验。4 .理解软件工程的氨本原理(1)强调使用生存周期方法学:生存周期方法学,就是从时间角度对软件开发和维护的复杂问题进行分解,
7、把软件生把软件生存的漫 长周期依次划分为若干阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。软件方法论:开发软件时从对任务的抽象逻辑分析开始,一个阶段,一个阶段地进行开发。前一个阶 段任务的完成是下一个阶段任务的前提和基础。(2)强调使用结构分析与结构设计任务在软件生存周期的每个阶段都采用科学的管理技术和良好的技术方法。每个阶段结束之前都从技术和管理两个角度进行严格的审查。5 .软件工程学的重要目标:提高软件的可维护性。减少维护的代价。三、软件工程的传统途径:(生存周期方法学要点)1 .生存周期:一个软件从定义、开发、使用、和维护,直到最终被废弃要经历一个漫长的时期,这个 时期称为
8、生存周期。2 .划分生存周期的基本原则:使各阶段的任务彼此间尽可能相对独立同一各项任务的性质尽可能相同有利于软件开发工程的组织管理(从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系。)软件工程三个要素:方法、工具、过程软件生存周期:是指从提出软件产品需求开始,直到该软件产品被淘汰的全过程。软件生存周期大体 分为三个阶段:软件定义、软件开发和软件支持(运行维护)。软件工程内容:研究内容包括开发技术和开发管理两个方面。软件工程的内容内容软件开发技术软件开发方法学基于厚布模型的结构化生命周期方法基于动态需求的快速原型法墓于结构的面向对象的软件开发方法软件工具用来开发软件的软件软件工程环境支持软
9、件开发的环境,软件工具及其相互间关系的总和软件工程管理软件管理人力管理、进度安排、质保证、资源管理软件工程经济学以经济学的观点研究开发过程中的经济效益。成本估算、效益分析的方法和技术软件开发模型:是跨越整个软件生存周期的各个阶段所需要的全部工作与任务的结构框架。5 . 2软件生存的周期模型软件生存周期模型是指软件开发和维护的分阶段的组织模式。它从时间角度对软件开发和维护的短杂 问题进行分解,把软件生存的漫长周期划分成若干阶段。要求每个阶段有相对独立的任务;各阶段都采用 科学的管理技术和通当的技术方法;每个阶段结束有明确标准;要有完整的文档资料;各阶段结束之前必 须经过严格的技术审查利管理复审。
10、通常把软件生存期划分为分析、设计、金码、潴试和维护5个阶段。前4个阶段又总称开发期,最后 一个阶段也称运行期。表1-2软件生命周期生存阶段周期序号周期名称生存阶段周期序号周期名称软件定义1问题定义可行性分析软件开发6测试软件开发2需求分析7软件发布或安装与验收3概要设计软件运行8软件使用4详细设计9维护或退役5码1)软件定义:问摩定义在进行可行性研究之前,系统分析人员首先必须了解所开发软件的问题定义:即确定软件开发项目必 须完成的目标。其关健问愿是:“要解决什么问发I?”,问题定义的主要内容应该包括:问题的背景、总体 要求与目标、类型范围、功能规模、实现目标的方案、开发的条件、环境要求等等。通
11、过问题的定义形成 系统定义报告,以供后续的可行性研究阶段使用。可行性研究可行性研究一般要涉及3个方面的问窟:经济、技术、社会因素(法律卜(1)技术可行性分析利用现有的技术能否实现,能否解决系统中的技术难题,所开发的系统能否达到 所要求的功能和性能,系统对技术人员的要求,现有的技术人员能否胜任,开发所需要的软件与硬件能否 如期羯到等。(2)经济可行性分析开发该项目能否取得合理的经济效益,主要是分析成本收益与短期效益 长远利益这两个方面。要作出投资的估算和系统投入运行后可能获雾的经济效益或可节约的费用估算。(3)社会因素的考虑社会因索主要考虑的是市场、政策与法律方面的问题。软件产品所面对的市场的性
12、质,是成熟的、未成熟的或即将消亡的。政策考虑的是国家宏观的经济政策对软件开发及销售的影响。法 律应该考虑软件的开发是否会侵犯他人、集体或国家的利益,是否会遑反国家的法律并可能由此承担相应 的法律责任等。2)需求分析阶段(简称分析阶段)基本任务是理解用户的需求,通过分析系统的功能要求、数据要求、性能要求、运行要求利将来可能 提出的要求等用户需求,用书面形式表达出来。产生的文档需求规格说明书。需求分析是软件生命周期中相当关键的一个阶段,是介于系统分析和软件设计阶段的要桥梁。要想 开发出用户满意的软件产品,首先得清楚用户的需求。在可行性研究阶段开发人员已经粗略了解了用户的 需求,其at本目的是用较小
13、的成本在较短的时间内确定是否存在可行的解法。由于软件开发人员和用户并 不熟悉对方的业务,因此对同一问题,他们在认识上可能存在差异,不可能全面地、精确地理解和表达用 户需求,致使隐at着一些目前未能发现的问题。需求分析是发现、求精、建横、规格说明和复审的过程。 需求分析的结果是形成需求规格说明书,它是系统设计的基础,它关系到工程的成败利软件产品的质需求的获取非常困难,其主要原因有三:一是用户需求的动态性(不稳定性),实践证明,软件史上还没 有一次就准确获取需求的;二是需求的模糊性(不准确性),也即用户不能清楚地表达出具体需求;三是需求 必须得到用户的确认,否则毫无意义,如同跑题的作文,写得再长也
14、不能得分。因此,在软件企业进行需 求分析的人员通常是具有较高系统驾驭能力的系统分析员来担任的。3)设计阶段要在需求规格说明书的基础上建立软件系统的结构,一般又可分为两步:概要设计和详细设计,前者 主要考虑模块的分解,后者考虑模块内部的细节。产生的文档包括系统设计说明书,详细设计说明书、数据库或文件结构说明等。4)编码(实现)阶段按模块说明书的要求为每个模块编写程序。5)测试阶段任务是发现、排除错误并组装成系统。可分单元(模块)测试、集成(组装)测试利确认测试等几步。6)维护阶段系统测试的软件仍可能隐含错误,此外,用户的需求利系统的操作环境也可能发生变化,所以在运行阶段仍需对软件系统作继续排错和
15、修改扩充,这类工作称为维护。5. 3软件开发的几种方法5. 3.1结构化方法目前软件开发的主要方法之一,包括结构化分析SA、结构化设计SD利结构化程序设计SPo是一种 面向数据流的开发方法。结构化分析适用于系统分析阶段,结构化设计被用于系统总体设计阶段,结构化 程序设计则被运用于系统的详细设计和编程阶段。“结构化”是指用一组标准的准则利工具从事某项工作。结构化程序设计基本思想是使用且只使用顺序、 选择、循环3种基本结构来嫡写程序,它们都是单入口单出口的;使用自顶向下逐步求精的程序设计方法, 即利用3种基本结构实现结构连续分解,产生较低层次的结构,直到设计详细到能使用低层伪代码或高级 语售中的3
16、种基本控制语句表达为止。不能解决系统的结构问题,更不能解决系统总体模型的表达问题, 而是由此启发人产提出结构化设计的思想。采用自顶向下横块设计方法,是一种有效的系统设计的方法。结构化分析是定义系统邃辑模型的一种 方法学。u =,、一.分析及缶-系坡设计公缶*T3A系统分析员 M耍目管嵬员 P程序员 T高毅程序员U用户p z:兽存 I更at要家A RftF6-H瀑布模型特点: 阶段间具有顺序性利依整性 每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误,但:。开发过程一般不能逆转,否则代价太大。:实际的项目开发很难严格按该模型进行。客户往往很难清楚地给出所有的需求,而该模型却要
17、求如此。应用范围:软件的实际情况必须到项目开发的后期客户才能,到,这要求客户有足够的耐心。用户的需求非常清楚全面,且在开发过程中没有或很少变化开发人员对软件的应用领域很熟悉。用户的使用环境非常稳定。开发工作对用户弁与的要求很低结构化方法试图在系统建立之前对用户需求进行严格定义或预先加以明确说明,这常常是不切实际的。 即使是定义很完善的由文字和图形表达的规格说明,对项目弁与者而曾仍会存在理解上差异。一个具体的 系统原型有助于种各类人员理解规格说明,这就是原型化方法。5. 3. 2快速原型法基本是首先建立一个能够反映用户主要需求的原型系统让用户在计算机上运行、试用这个原型系统, 通过与原型交互及早
18、发现需求的缺陷;设计人员也可检查设计的可行性。原型法开发软件的基本过程如图5.1所示。结束图5.1原型法开发软件的基本过程原型可以利用第四代语曾面向对象的应用程序框架,原型开发活动、用户反愦、开发者修改原型的 复迭代过程可提高用户满意程度,也可缩短软件开发周期,从而降低了开发和维护成本。在该模型中,如何快速进行原型的开发是关键,快速开发原型的途径一般可以有三种:利用计算机模拟一个软件的人机界面与交互方式。开发一个能实现部分功能(如输入界面、输出格式等)的软件,这部分功能往往是重要的,但也可能是 容易引起误解的。寻找一个或几个类似的正在运行的软件,利用这些软件向客户展示软件需求中的部分或全部功能
19、。为了快速地开发原型,要尽采用软件重用技术,以争取时间,尽快地向客户提供原型。(2)特点 该模型是基于原型驱动的。 可以得到比较良好的需求定义,便于开发者与客户进行全面的沟通与交流。而且原型系统也比较 容易适应用户需求的变化。 原型系统既是开发的原型,又可以作为培训的环境,这样有利于开发与培训的同步。 原型系统的开发费用低、开发周期短、维护容易且对用户更友好。尽管开发者和客户都喜欢使用原型模型,但原型模型也有其固有的缺点:在对原型的理解上客户与开发者有很大的差异,客户以为原型就是软件的最终版本,而开发者只将 原型当作一个漂亮美丽的软件外壳,在实际开发过程中要对原型进行不断修改完善,这就需要开发
20、人员与 客户相互沟通、相互理解。由于原型是开发者快速设计出来的,而开发者对所开发领域的陌生容易将次要部分当作主要的框架, 做出不切题的原型。软件的整个开发都是围绕着原型来展开的,在一定程度上不利于开发人员的创新。5. 3. 3面向对象法面向对象法的基本思想是:客观世界由形形色色的组成,所开发的系统涉及的问婷也是如此,各种对 象有自己的开发人员能按人类通常的思维方式来建立系统模型,实现从问题领域到系统模型的直接映射。 有较好的可用性的可扩充性。面向对象分析00A、面向对象设计OOD利面向对象程序设计OOP组成。最主要特征是整个生存周 期使用相同的概念、表示法利策略,始终围绕着对象。通常从3个不同
21、的方面建立一个系统模型,对或模 型、动态模型利功他横型。对问题初始陈述开始,运用应用领域知识来识别该领域中的物理实体,问题陈述中我就是对象,同类 对象组成对象类。及性用于刻划对象类或联系类的特征。属性较少直接出现在问摩陈述中,需要通过分析根据应用领域 知识从现实世界中提取。功能模型:在系统功能可以用传统的数据流图表示之前时系统和交互系统等决定如何将系统组织成子 系统,每个子系统划分成更小的子系统,存在继承关联。5. 4.结构化分析的基本概念5.4.1基本概念系统分析阶段任务是分析系统的综合要求,功能饕求、性能要求、运行要求和将来要求。功能要求系统必须完成的所有功能;性能要求指联机系统的响应时间
22、,系统需要的存储容以及健壮 性、安全性等方面的要求;运行要求为对系统运行所处的软件件环境的要求;将来要求是指系统可能的扩 充要求。数据要求是系统系统分析的另一重要任务,尤其是数据处理系统,必须收集系统所需的数据,分 析数据间的联系,建立数据模型。结构化的分析的方法特点是:(1 )请用户共同弁与系统的开发,面向用户;(2 )建立系统的逻辑模型,强调逻辑而不是物理;(3)使用图形工具简单明。地表达系统的逻辑模型,作为用户与系统分析员之间的交流媒介;(4)采用自顶向下的进行系统分析。采用软件工程中为控制复杂性常用的两个墓本手段r分解”和“抽象:结构化系统分析可采用下列步舞进行:(1)分析当前系统,导
23、出当前系统的物理模型;(2)从当前系统的物理模型抽象出当前系统的逻辑模型;(3 )分析目标系统和当前系统逻辑上差别,建立目标系统的逻辑模型;(4)补充完整目标系统的逻辑模型。在模型的核心是数据词典,它描述了所有的在目标系统中使用的和生成的数据对象。围绕着这个核心 的有三种图:实体一关系图(ERD)描述数据对象及数据对象之间的关系;数据流图(DFD)描述数据在系统中如 何被传送或变换,以及描述如何对数据流进行变换的功能(子功能);状态一迁移图(STD)描述系统对外部事 件如何响应,如何动作。因此,ERD用于数据建模,DFD用于功能建模,STD用于行为建模。经过结构化分析,应当得到系统的需求说明书
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 危机 软件工程
限制150内