《软件系统开发所面临的挑战概要课件.ppt》由会员分享,可在线阅读,更多相关《软件系统开发所面临的挑战概要课件.ppt(40页珍藏版)》请在三一办公上搜索。
1、2022/12/21,1,软件系统开发所面临的挑战,-软件-挑战-方法-测试,2022/12/21,2,-软件,什么是软件 软件的特点 软件的发展,2022/12/21,3,一、什么是软件,软件 是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序 是按事先设计的功能和性能要求执行的指令序列。数据 是使程序能正常操纵信息的数据结构文档 是与程序开发、维护和使用有关的图文材料。,概念,2022/12/21,4,二、软件的特点,软件具有抽象性。因为它是一种逻辑实体,而不是具体的物理实体。软件是开发或工程化而形成的。而不是传统意义上的制造产生的。软件不会磨损。,20
2、22/12/21,5,故障率曲线,硬件的故障率曲线,理想曲线,实际曲线,2022/12/21,6,软件是自定义的。他不能通过已有的构件组装而来。软件对计算机系统有一定的依赖性。其开发和运行常受到计算机系统的限制。软件成本昂贵,特点,2022/12/21,7,软件本身是复杂的实际问题的复杂性程序逻辑结构的复杂性,例1 Windows95程序超过1000万行例2 军事和控制系统项目, 3500多人花费了几年时间,交付后相继发现了100个错误,最后以失败告终。,特点,2022/12/21,8,软件的投入费用越来越高,特点,2022/12/21,9,三、软件的发展过程,程序设计阶段 50至60年代程序
3、系统阶段 60至70年软件工程阶段 70年代以后,2022/12/21,10,计算机50年的发展,早期 第二代 第三代 第四代面向批处理 多用户 分布式系统 桌面系统有限的分布 实时 嵌入“智能” 面向对象技术自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者的影响 人工神经网络 并行计算 网络计算机,小规模程序 软件作坊 微处理器 网络 软件产品,2022/12/21,11,发展带来的新问题:,硬件的发展超过软件发展;集成度18个月翻一翻,计算速度、存储容量成倍增长,成本每10年递减两位数。 制作软件的能力和速度与需求不适应; 计算机的应用依赖于可靠的软件,软件失败将造成巨大经济损失
4、; 已有的软件难以维护。,2022/12/21,12,-挑战,外国软件渗透 软件开发投资力度不足 软件侵权行为 软件人才结构不合理,缺乏高级系统程序员和项目负责人。 软件人员缺乏软件工程化的概念。,2022/12/21,13,软件已经从特定的问题解决和信息分析工具演化为一门独立的产业!,需要解决的新问题:软件危机,!,2022/12/21,14,软件危机,什么是软件危机 产生危机的原因,2022/12/21,15,一、什么是软件危机,例: IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程
5、序。.据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。.,2022/12/21,16,项目负责人F. D. Brooks事后总结了他在组织开发过程中的沉痛教训时说:“.正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。.程序设计工作正像这样一个泥潭,.一批批程序员被迫在泥潭中拼命挣扎,.谁也没有料到问题竟会陷入这样的困境.”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。,危机,2022/12/21,17,危机,问题出在哪里?,项目没有被很好地理解;计划不周,最终导致进度拖延;文档资料不充分,使
6、人与人的交流变得比写程序困难得多;缺少度量软件可靠性(reliability) 的标准,质量无法保证;软件难以维护(maintainability) , 不易升级(evolvability);,2022/12/21,18,必须意识到:,软件 编程,2022/12/21,19,软件系统的开发与建造高楼大厦、制造飞机导弹同理,需要工程化方法和工具,2022/12/21,20,危机,二、软件危机的主要特征,对软件开发的成本和进度估计常常不准确;用户对“已完成的” 软件系统不满意;软件质量不可靠;软件系统常常不可维护;软件没有适当的文档资料;软件成本在计算机系统总成本不断上升;软件生产率的提高速度既比
7、不上硬件的发展,也跟不上计算机应用迅速普及深入的趋势。,2022/12/21,21,三、产生危机的原因,软件需求巨增!软件通用性不强 软件难于度量,原因,2022/12/21,22,用户与软件开发者之间难以沟通 软件难以维护:没有适当的文档资料; 软件的维护是修改原来的设计;软件开发受硬件的限制软件是定做而不是组装;没有工程化的管理和方法。,原因,2022/12/21,23,改正一个问题需付出的代价,改正一个问题的估计费用,改正一个问题的估计工作量,2022/12/21,24,解决问题的途径软件开发工程化!,如何维护已有的软件?如何使软件的开发速度适应越来越大的软件需求?如何面临挑战?,202
8、2/12/21,25,-方法,什么是软件工程 软件工程的基本原理 软件工程方法学,2022/12/21,26,一、软件工程是什么?,软件工程是指导计算机软件开发和维护的工程学科。软件工程是以系统的、工程的概念、原理、技术和方法开发和维护软件,把先进的管理技术和开发技术相结合,经济地开发出高质量的软件并有效地维护它。,概念,软件工程是1968年NATO在计算机科学家国际会议上首次提出来。,2022/12/21,27,Fritz Bauer的定义:软件工程是为了经济地获得可靠的并能高效运行的软件,而建立和使用的完善的工程化原则。,概念,IEEE的定义:软件工程是开发、运行、维护和修复软件的系统方法
9、。,将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程。,2022/12/21,28,Boehm提出了软件工程的7条基本原理:用分阶段的生命周期计划严格管理;坚持进行阶段评审;实行严格的产品控制;采用现代程序设计技术;结果应能清楚地审查;开发人员应该少而精;承认不断改进软件工程实践的必要性,二、软件工程基本原理,2022/12/21,29,一个好的工业,应该有一套良好的标准来配套。,软件的工业化生产过程应具备的特点:明确的工作步骤详细具体的规范化文档明确的质量评价标准,概念,三、软件工程基本原理,方法工具过程,2022/12/21,30,软件工程层次图:,管理:支持软件工程的根
10、基在于对质量的关注。过程:过程将技术层结合在一起,使计算机软件合理并及时开发出来。方法:涵盖一系列的任务:分析、设计、编程、测试和维护。工具:对过程、方法提供自动或半自动的支持。例:CASE软件工程环境。,工具(CASE),方法(任务),过程(构建框架),质量管理(基础),计算机辅助软件工程。集成了软件、硬件和一个软件工程数据库(仓库),形成了软件工程环境。,2022/12/21,31,软件工程的一般视图:,软件工程完成对技术实体(计算机软件)的分析、设计、建造、验证和管理。软件工程必须回答的问题:要解决的问题是什么?实体有哪些特点?如何实现?如何建造?如何及时发现错误?如何维护?,2022/
11、12/21,32,软件系统开发过程中会面临很多问题,就需要我们去认识,去解决!去面对!这样我们的软件事业才会迅速发展!,2022/12/21,33,-测试,人们在对软件工程开发的常规认识中,认为开发程序是一个复杂而困难的过程,需要花费大量的人力、物力和时间,而测试一个程序则比较容易,不需要花费太多的精力。这其实是人们对软件工程开发过程理解上的一个误区。在实际的软件开发过程中,作为现代软件开发工业一个非常重要的组成部分,软件测试正扮演着越来越重要的角色。随着软件规模的不断扩大,如何在有限的条件下对被开发软件进行有效的测试正成为软件工程中一个非常关键的课题。,2022/12/21,34,软件测试的
12、复杂性,设计测试用例是一项细致并且需要具备高度技巧的工作,稍有不慎就会顾此失彼,发生不应有的疏漏。下面分析了容易出现问题的根源。(1) 完全测试是不现实的在实际的软件测试工作中,不论采用什么方法,由于软件测试情况数量极其巨大,都不可能进行完全彻底的测试。所谓彻底测试,就是让被测程序在一切可能的输入情况下全部执行一遍。通常也称这种测试为“穷举测试”。穷举测试会引起以下几种问题:输入量太大;输出结果太多;软件执行路径太多;说明书存在主观性。,2022/12/21,35,E.W.Dijkstra的一句名言对测试的不彻底性作了很好的注解:“程序测试只能证明错误的存在,但不能证明错误的不存在”。由于穷举
13、测试工作量太大,实践上行不通,这就注定了一切实际测试都是不彻底的,也就不能够保证被测试程序在理论上不存在遗留的错误(2) 软件测试是有风险的穷举测试的不可行性使得大多数软件在进行测试的时候只能采取非穷举测试,这又意味着一种冒险。比如在使用Microsoft Office工具中的Word时,可以作这样的一个测试:新建一个Word文档;在文档中输入汉字“胡”;设置其字体属性为“隶书”,字号为初号,效果为“空心”;将页面的显示比例设为“500%”。这时在“胡”字的内部会出现“胡万进印”四个字。类似问题在实际测试中如果不使用穷举测试是很难发现的,而如果在软件投入市场时才发现则修复代价就会非常高。这就会
14、产生一个矛盾:软件测试员不能做到完全的测试,不完全测试又不能证明软件的百分之百的可靠。那么如何在这两者的矛盾中找到一个相对的平衡点呢?,2022/12/21,36,如图1所示的最优测试量示意图可以观察到,当软件缺陷降低到某一数值后,随着测试从量的不断上升软件缺陷并没有明显地下降。这是软件测试工作中需要注意的重要问题。如何把测试数据量巨大的软件测试减少到可以控制的范围,如何针对风险做出最明智的选择是软件测试人员必须能够把握的关键问题。图1的最优测试量示意图说明了发现软件缺陷数量和测试量之间的关系,随着测试量的增加,测试成本将呈几何数级上升,而软件缺陷降低到某一数值之后将没有明显的变化,最优测量值
15、就是这两条曲线的交点。,2022/12/21,37,2022/12/21,38,软件测试的经济性,软件测试的经济性有两方面体现:一是体现在测试工作在整个项目开发过程中的重要地位;二是体现在应该按照什么样的原则进行测试,以实现测试成本与测试效果的统一。软件工程的总目标是充分利用有限的人力和物力资源,高效率、高质量地完成测试。,2022/12/21,39,软件测试的误区,随着软件产业工业化、模块化地发展,在软件开发组中软件测试人员的重要性也不断地突出。在国外,很多著名企业早已对软件测试工作十分重视。比如著名的微软公司,其软件测试人员与开发人员的比例已经达到2:1。可见软件测试对于一个软件开发项目的成功与否具有十分重要的意义。但是在实际的项目开发与管理中仍然存在很多管理上或者技术上的误区:(1) 期望用测试自动化代替大部分人工劳动(2) 忽视需求阶段的参与(3) 软件测试是技术要求不高的岗位,2022/12/21,40,the end! Thank you!,