软件系统开发与软件工程方法_第1页
软件系统开发与软件工程方法_第2页
软件系统开发与软件工程方法_第3页
软件系统开发与软件工程方法_第4页
软件系统开发与软件工程方法_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章 软件系统开发与软件工程方法,一、软件危机 二、软件工程,一、软件危机 1、软件开发的发展历程,早期 第二阶段 第三阶段 第四阶段 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 嵌入“智能” 面向对象技术 自定义软件 数据库 低成本硬件 专家系统 开发者=使用者 软件产品 人工神经网络 并行计算 网络计算机,一、软件危机 2、软件危机,1)案例思考1FAA的失败项目 20世纪80年代中期,更换空中交通控制系统已成为美国联邦航空管理局(FAA)非常优先的任务。1989年IBM公司获得更换该系统的合同,截止期为2001年,预计投入25亿美元。由于面临着极苛刻的需求,该软件

2、项目是已进行的最复杂的项目之一。例如,交通控制系统必须具备全局完整性并且每周7天,每天24小时不能停止工作,甚至在升级时或正常维护时,也不允许有停顿时间。任何错误的数据都会引起重大伤亡,任何停机均会导致世界范围的出行延误或潜在的危险。该系统的反应时间不能超过2-3秒。此外,该系统设计时必须考虑到允许私人飞机驾驶员继续使用旧设备,并要求软件能在未来移植到更新的硬件设备上。当IBM获得该合同后,该系统的主要花费为软件开发,用于硬件的投入仅为8万美元。1993年,负责该项目的IBM子公司IBM联邦系统公司被IBM卖给了Loral公司。到1994年,该系统已花费了23亿美元,但尚未提交系统的任何程序段

3、,而此时估算整个系统的花费将增至50亿美元。1994年底,FAA不得不承认该项目失败并进行调查。作为调查的结果,FAA取消或修改了系统的四个主要部分。面临当前空中控制系统存在的隐患,FAA不得不订购了一套作为权宜之计的系统,由另一家公司开发。 你认为该项目的失败反映了什么问题?失败的主要原因可能是什么?FAA为什么选择取消和修改的方式而不是增加资源和生产力的方式,FAA对此项目调查总结出的原因为以下几条: FAA并没有明确掌握某些系统功能的需求。 制定了过于急躁的开发和实现计划(包括费用与进度的估计) 在给定的软件复杂度下,没有考虑到开发商的生产力,尤其是早期阶段需要投入的资源,在人月神话一书

4、中,Brooks将过去30年大型软件项目的开发比喻为史前陷入沥青坑的巨兽。恐龙、猛犸、剑齿虎等动物在焦油中挣扎,然而挣扎得越激烈,就陷得越快,最终都沉到了坑底。过去的大型软件项目中,大多数开发出了可运行的系统不过只有极少数满足了目标、进度和预算的要求。表面上看起来没有任何一个单独的问题会导致困难,每个问题都能获得解决,但这些问题纠缠和积累在一起时,团队的行动就越来越慢,并且很难再看清问题的本质,1995年美国的商业软件失败统计,一、软件危机 2、软件危机,案例思考2遗传信息库建设 在正在建设的遗传信息库如,假设你要开发一个管理软件。你并不是一个生物遗传方面的专家,甚至对此方面的知识一窍不通,你

5、该如何入手?要使该项目成功,你认为应该有哪些保障条件,你的问题是什么:对遗传信息的管理,需要什么条件:了解遗传信息的表示和管理流程,如何实现:与遗传领域的专家交流,障碍是什么:难以沟通与交流。可能因误解产生错误的需求描述,一、软件危机 2、软件危机,软件项目为什么会失败,软件项目失败的核心问题在哪里,答案只有一个:复杂性,软件要解决的问题本身是复杂的,开发人员一般不是该问题领域的专家,软件规模要求多人参与,而不同专业领域的人的交流是困难的,软件规模使得既要理解系统整体结构又要把握细节比较困难,例:Windows95有1000万行代码 Windows2000有5000万行代码 Exchange2

6、000和 Windows2000开发人员结构,一、软件危机 2、软件危机,2)软件神话,1管理神话 神话:有关软件开发的理论和方法已经很丰富,有很多可用的标准与规范,因而可以保证软件开发的顺利进行。 现实:理论与方法在大多数实践中并没有得到真正的应用。使用者并没有对这些理论与方法建立正确的认识。 神话:已经有很多强大的开发工具和先进的计算机硬件,这些可以保证软件开发的质量与效率。 现实:这些工具并没有得到合理的应用。 神话:如果我们落后于进度,可以通过增加人手来赶上。 现实:向一个已经延迟的项目增加人手,只会使延迟的项目更加落后除非项目中不需要交流。生一个孩子10个月,无论有多少人,一、软件危

7、机 2、软件危机,2)软件神话,1管理神话 神话:通过把软件项目外包给实现强大的软件开发公司可以保证软件的成功。 现实:再专业的软件公司,不了解客户的需求和业务流程,也不可能顺利完成软件开发项目,改正一个问题需付出的代价,需 求 分 析,结构设计,详细设计,编码,集成测试,系统测试,现场,改正一个问题的估计费用,改正一个问题估计的工作量,20,200,2000,1000,5.0,2.5,0.05,0.5,美元,人天,一、软件危机 2、软件危机,2)软件神话,2客户神话 神话:有了目标系统的一般性描述就可以写程序了,细节可以逐步完善。 现实:糟糕的系统定义是项目失败的主要原因。关于问题域、功能、

8、行为、性能、接口、设计约束以及确认标准的形式化的、详细的描述是必要的,这些内容只能通过客户与开发者之间的交流才能确定。 神话:软件需求是经常变更的,而这些变更可以容易的被满足,因为软件是灵活的。 现实:软件需求确实是容易变更的,但变更的代价将随软件开发的进度不同而有很大的差异。如果重新项目早期的问题定义,需求变化则很容易被调节,而项目后期需求变更的代价可能是致命的,一、软件危机 2、软件危机,2)软件神话,3实践者的神话 神话:软件是艺术,软件开发是个人的舞台。 现实:50年代可能是,现在不是。 神话:一旦写完了程序并能正常运行,我们的工作就结束了。 现实:越早开始写代码,软件开发花费的时间就

9、越长。统计表明60%到80%的工作量是花在将软件第一次交付给客户以后发生的。 神话:程序真正运行以前,没有办法评估其质量。 现实:高质量的实现来自高质量的设计。从项目一开始就必须进行技术评审。 神话:项目的成功来自于可运行程序的提交。软件开发过程中的文档是不必要的,延缓项目进度的东西。 现实:软件项目的成果包含很多内容,文档是成功开发的基础,也是软件质量的保证。好的开发质量降低了重复劳动,从而提高了效率,导致更短的交付时间,一、软件危机 2、软件危机,3)软件危机及主要表现,软件危机指在计算机软件开发和维护过程中所遇到的一系列严重问题软件开发不能满足日益增长的需求;难以维护不断增长的已有软件,

10、1成本与进度的估计 2用户需求与产品不一致 3软件可靠性差 4可维护性差 5文档资料不完整 6软件成本比例不断上升 7开发生产率相对停滞,一、软件危机 2、软件危机,3)软件项目成败的因素分析,1)失败项目的主要原因 1用户需求不完整、被误解或经常变化 2有限的用户参与 3缺少行政支持 4缺少技术支持 5项目计划不充分 6目标不明确 7没有足够的资源(客户没有提供/开发者不具备相应生产力,2)成功项目的主要原因 1大量的用户参与 2上层管理人员的支持 3完整、详细的项目计划 4符合实际的工作进度与里程碑 5开发人员的培训、交流 6良好的工作环境、团队协作机制,一、软件危机 2、软件危机,3)消

11、除软件危机的思路1正确的观念,a)软件不是程序 软件是逻辑产品而不是实物产品 软件的功能依赖于硬件和软件的运行环境以及人们对它的操作 软件特征: 功能的多样性 实现的多样性 能见度低 软件结构合理性差 智力密集及知识产权保护 b)软件开发不是个体劳动 软件设计的复杂性,一、软件危机 2、软件危机,3)消除软件危机的思路2正确的过程管理与控制,软件开发技术:软件开发方法 软件开发过程 软件工具和软件工程环境 软件工程管理:软件管理 软件经济 软件心理,二、软件工程 1、软件工程 将工程管理思想引入软件开发过程,转变对软件的认识: 上升 程序 系统 转变思维定式: 上升 程序员 系统工程师 (系统

12、分析员) 工程化训练,二、软件工程 1、软件工程 将工程管理思想引入软件开发过程,用户,分析员,程序员,一个好的工业,应有一套良好的标准来配套,软件的工业化生产过程应具备的特点: 明确的工作步骤 详细具体的规范化文档 明确的质量评价标准,软件产品的标准化,软件开发过程的标准化,强调规范化 强调文档化,软件工程技术的两个明显特点,二、软件工程 1、软件工程 Fritz Bauer在NATO会议上给出的定义: “软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。,二、软件工程 1、软件工程 IEEE【IEE83】给出的软件工程定义: “软件工程是开发

13、、运行、维护和修复软件的系统方法。,二、软件工程 1、软件工程 IEEE【IEE93】给出了一个更加综合的定义: “将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。,二、软件工程 1、软件工程 软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的,软件工程所包含的内容不是一成不变的,而是随着人们对软件系统的研制开发和生产的理解不断发展变化,应该用发展的眼光看待,二、软件工程 1、软件工程,软件工程是一种层次化的活动,a)质量软件工程的根基与目标 b)过程建造一个高质量软件所需完成任务的框

14、架 c)方法提供了如何建造软件的技术手段 d)工具为过程和方法提供自动或半自动化的支持(CASE,工具,方法,过程,质量焦点,二、软件工程 2、软件工程一般视图,工程:对技术(或社会)实体的分析、设计、构造、验证和管理。首先要问题的问题: 要解决什么问题? 实体的什么特征能解决这个问题? 如何设计该实体? 如何构建该实体? 如何控制和避免构建过程中的错误? 如何在用户要求修改、适应和增强时长期地支持这些实体? 定义阶段:做什么 开发阶段:如何做 支持阶段:应对变化,项目跟踪与控制 技术评审 质量保证 软件配置管理,文档管理 复用管理 测试管理 风险管理,支持活动,软件工程框架,可,用,性,性,

15、性,确,正,合,算,选取适宜的开发模型,采用合适的设计方法,提供高质量的工程支持,重视软件工程的管理,基本过程,原则,目标,过,程,支 持 过 程,组 织 过 程,软件过程评估,软件能力成熟度CMM 1-初始级:没有过程定义,个人能力。 2-可重复级:基本项目管理过程,跟踪费用与进度,有必要的规范以重复类似项目的成功。 3-定义级:过程管理文档化、标准化、集成化。使用统一的文档化的组织过程认可的方法开发和维护软件。 4-管理级:对软件过程与产品质量进行详细地定量地收集与评估 5-优化级:通过定量反馈不断进行过程优化与改进,二、软件工程 3、软件开发过程软件生命周期 软件产品或软件系统从设计、投

16、入使用到被淘汰的全过程,软件生存期的阶段划分,1)可行性研究与计划 (2)需求分析 (3)总体设计 (4)详细设计 (5)实现 (6)集成测试 (7)确认测试 (8)使用和维护,二、软件工程 3、软件开发过程软件开发模型 软件开发模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。 软件开发模型也常称为: 软件过程模型 软件生存期模型 软件工程范型,二、软件工程 2、软件开发过程瀑布模型,可行性研究与计划,需求分析,设计,编码,运行维护,测试,定义 阶段,开 发 阶 段,维护阶段,按照传统瀑布模型开发软件的特点,1.阶段间具有顺序

17、性和依赖性。 2.推迟实现的观点。 3.每个阶段必须完成规定的文档; 每个阶段结束前完成文档审查, 及早改正错误,二、软件工程 2、软件开发过程原型模型,建造/修改 原型,用户测试 运行原型,听取用 户意见,采用原型模型的软件生存周期,分析定义 系统需求,生成 原型,系统 设计,程序 设计,编码,测试,运 行 和维护,原型化,含原型化的 软件生存期,二、软件工程 2、软件开发过程增量模型 先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。 系统的总体设计在初始子集设计阶段就应作出设想,分析,增量模型,设计,编码,测试,分析,设计,编码,测试,分析,设计,编码,测试,分析,设计,编码,测试,增量1,增量2,增量3,增量n,增量1 交付客户,增量2 交付客户,增量3 交付客户,增量n 交付客户

温馨提示

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

评论

0/150

提交评论