软件开发的形式化方法.ppt
《软件开发的形式化方法.ppt》由会员分享,可在线阅读,更多相关《软件开发的形式化方法.ppt(55页珍藏版)》请在三一办公上搜索。
1、软件开发的形式化方法硕士研究生讲义周清雷 郑州大学信息工程学院,课程参考教材,参考材料软件开发的形式化方法,古天龙编,2005,高等教育出版社软件可靠性方法,Doron A.Peled著,王林章等译,2012,机械工业出版社,-2-,第1章 软件及其开发概述,-4-,内容安排,软件开发的历史软件危机软件工程形式化开发方法,-5-,1.1 软件开发的历史,软件软件开发把现实世界的需求反映成软件的模型化并予以实现的过程软件及开发的三个阶段程序设计阶段(1946年-1956年)科学计算、机器语言及汇编语言、个体编程编程技巧、程序效率没有文档、软件一词尚未出现,1.1 软件开发的历史,软件及开发的三个
2、阶段程序系统阶段(1956年-1968年)1956年,J.Backus(77)Fortran语言诞生大量数据处理、小组开发“软件”一词出现:程序及其说明60年代中期,软件危机。IBM OS/360 P.Brooks软件工程阶段(1968年以来)1968年NATO会议,提出“软件工程”术语工程化方法、描述语言、团队开发软件的定义 当它被执行时能够提供所要求的功能和性能的指令或计算机程序 使得该程序能够满意地处理信息的数据结构 描述程序的功能需求以及程序的操作和使用文档,-6-,1.2 软件危机,1968年,NATO会议提出了“软件危机”一词软件危机包含两方面问题如何开发软件,以满足不断增长、日趋
3、复杂的需求;如何维护数量不断膨胀的软件产品。软件危机主要表现如下几个方面开发成本昂贵项目进度难控质量无法保证修改维护困难,-7-,开发成本昂贵,1968年,美国花费于软件的投资高达60亿美元,有些系统,特别是军用系统,软费用要高出硬件费用好几倍,例如美国全球军事指挥控制系统的计算机硬件费用为1亿美元,而软件费用高达7.2亿美元。1980年美国政府的财政年度当中,计算机系统方面(软,硬件与服务)共耗资达570亿美元,其中320亿美元(占总数的56)用于计算机软件方面(与同年的美国汽车行业进行简单的比较,美国是当时的世界第一汽车生产大国,汽车的年销售量为900万辆,总的销售额仅为720亿美元。技术
4、的进步使得计算机硬件的成本持续降低,而软件成本则不断增长,软件成本在计算机系统总成本中所占的比例呈现日益扩大的趋势来自美国空军计算机系统的数据表明,1970年,软件费用约占总费用的60,1975年达到72,1980年达到80,1985年计达到85。这种增长的速度是惊人的。(1979年,美国的国防预算为1258亿美元,其中9%用于计算机领域,约113亿美元。在这113亿美元当中,91亿美元(约占80)用于软件投资。仅有22亿美元用于硬件设备)。,-8-,项目进度难控,在研究大型系统时,遇到越来越多的困难。有的系绞干脆失败了,损失了大量金钱和人力;有的系统虽然完成了,但性能不理想,或推迟了许多年,
5、经费大大超过预算。如一个大项目负责人所说:“软件人员太像皇帝新衣故事中的裁缝了、当我来检查软件开发工作时;所得到的回答好像对我说我们正忙于编织这件带有魔法的织物。只要等一会儿,你就会看到这件织物是极其美丽的。但是我什么也看不到,什么也摸不到,也说不出任何一个有关的数字;没有任何办法得到一些信息说明事情确实进行的非常顺利,而且我已经知道许多人最终已经编织了一大堆昂贵的废物而离去,还有下少人最终什么也没有作出来。”为软件开发制定进度是根困难的事情:通常我们对一个任务根据其复杂性、工作量及进度要求安排人力。如有10人月的工作量,则由一个人完成需要10个月,由10个入完成则需要一个月。但这种工作量估计
6、方式仅对各部分工作互下干扰的情况下才适用,例如当各部分工作尚能很好地划分时,安排由不同人完成不同部分的工作。但作为整体,尚需讨论合作,这种讨论交流活动就增加了工作量。软件系统的结构很复杂,各部分附加联系极大。增加更多人工作,往往不是缩短时间进度,而是会延缓进度。,-9-,项目进度难控,对于一项复杂的任务,通常难于通过增加人力来缩短开发时间。Brook提出的法则“在已拖延的软件项目上增加入力只会使其更难按期完成”。这对于一般的工业产品来说是难于想象的!1995年,美国共取消810亿美元的软件项目,其中31%未完取消,53%的项目延长一半时间,9%按期完成且不超期。1998年,美国企业应用项目不成
7、功比率75%,其中28%的项目取消,40%无限拖长且资金超出预赛对于一项复杂的任务,通常难于通过增加人力来缩短开发时间。Brook提出的法则“在已拖延的软件项目上增加入力只会使其更难按期完成”。这对于一般的工业产品来说是难于想象的!,-10-,质量无法保证,1985年11月21日,由于计算机软件的错误,造成纽约银行与美联储电子结算系统收支失衡,发生了超额支付,而这个问题一直到晚上才被发现,纽约银行当日帐务出现了230亿的短款。Therac-25是加拿大原子能公司AECL和一家法国公司CGR联合开发的一种医疗设备,它产生的高能光束或电子流能够杀死人体毒瘤而不会伤害毒瘤附近的人体健康组织。在198
8、5年6月到1987年1月,因为软件缺陷引发了6起由于电子流或X-光束的过量使用的医疗事故,造成4人死亡、2人重伤的严重后果。美国Florida州的福利救济系统用于处理数百万受抚养儿童、食品券、医疗援助等受资助家庭接受者的资格认证,其基于巨型机系统,支持84个数据库、1390个程序、12000多个终端和个人计算机。1992年,该系统的错误使得成千上万的人收到了他们无权收到的救济,而其他成千上万急需食品券的人却排着长队等待了好几天。该错误导致了多支付2.6亿美元以及少支付5800万美元医疗补助的后果。1996年,欧洲航天局阿丽亚娜5型(Ariane5)火箭在发射后40秒钟后发生爆炸,2名法国士兵当
9、场死亡,损耗资产达10亿美元之巨,历时9年的航天计划因此严重受挫。爆炸原因在于惯性导航系统软件技术要求和设计的错误。2002年,美国商务部的国立标准技术研究所(NIST)的调查报告:“据推测,由于软件缺陷而引起的损失额每年高达595亿美元。这一数字相当于美国国内生产值的0.6%”,-11-,软件维护困难,软件的维护任务特别重。事实上,正式投入使用的商用软件,总是存在着一定数量的错误。随着时间的延伸,在不同的运行条件下,软件就会出现故障,就需要维护。这种维护与通常意义下的设备(硬件)维护是完全不同的。因为软件是逻辑元件,不是一种实物。软件故障是软件中的逻辑故障所造成的,不是硬件的“用旧”、“磨损
10、”之类问题。软件维护不是更换某种备件,而是要纠正逻辑缺陷。当软件系统变得庞大,问题变得复杂时,常常会发生“纠正一个错误带来更多新的错误!”的问题。新的错误发现、运行环境的改变、用户提出新要求,软件需不断修改没有遵循标准、没有准确的文档,维护困难巨大。,-12-,软件危机的原因:复杂性,复杂性 规模的复杂性 结构的复杂性 环境的复杂性 领域的复杂性 交流的复杂性,-13-,软件规模的复杂性,随着计算机应用的日益广泛,需要开发的软件规模越来越庞大。以美国宇航局的软件系统为例:1963年,水星计划的软件系统约有 200万条指令;1967年,双子星座计划系统约为400万条指令;1973年,阿波罗计划系
11、统达到1000万条指令;1979年,哥伦比亚航天飞机系统更是达到了4000万条指令。软件庞大的规模是引起技术上和心理上挫折的一个重要因素;此外,规模的复杂性引起了大量学习和理解上的负担。由于在需求分析及生成规格的阶段需要搜集和分析的信息数量非常巨大,从而可能会使得信息不正确或不完整,并且在审查阶段也未能检查出来。正如Leveson 所认为的:几乎所有与计算机过程控制系统有关的事故都是源于这类由软件规模因素所引起的错误。,-14-,结构的复杂性,结构复杂性体现在管理和技术两个方面。在管理方面,开发小组用来组织和管理开发活动时所采用的层次的宽度和深度,决定了用来管理系统的结构的复杂性;此外,软件开
12、发机构内部的惯例和制度可能会改变各小组之间的信息流动,从而增加了结构复杂性。在技术方面,软件系统的模块结构愈加复杂,模块之间复杂的调用关系以及接口信息往往超过了人们所能接受的程度。这种结构的复杂性可以用模块之间的耦合度来衡量,耦合度反映了在需求变化的情况下,相应所需修改的模块的数量。,-15-,环境的复杂性,首先,运行中的软件总是受其所处环境的影响,在接收到外界环境的触发事件时,软件应该做出正确的响应。为了保证软件的可靠性,原则上必须对其所处环境有很好的理解,对外界环境可能产生的所有事件进行考虑,但这往往是难以办到的。其次,对于许多软件系统来说,人们往往缺乏对其所运行的环境特性的认识。许多系统
13、只有当成功地运行于其环境时,才能对其环境进行很好的理解。再次,软件运行环境的多样性和异构性给软件开发者带来了更大的挑战。,-16-,领域的复杂性,软件中所操作的对象仅仅是对应用领域真实对象的模拟,因而软件开发者需要从现实世界中抽象出软件模型所需的部分,并以其为基础构建软件。但是对于有的应用领域来说,这些模拟只能是近似的。其原因可能是由于对应用领域对象的认识不完全,或者是由于该模型所具有的苛刻条件限制,或者两者兼而有之。对于一个应用工程来说,其中所使用的模型应该是具有合理的科学理论支持,并且经过良好测试的。然而在某些软件应用领域中,并不存在可以认知的模型,或者没有准确的模型来描绘相应的物理对象的
14、几何、拓扑以及其它特征。在这种缺少准确认识的情况下,应用领域的某些方面很可能在软件中不能体现出来。同时,由于有的软件是根据近似的模型来构建的,因而这些模型不一定能反映事实情况。,-17-,交流的复杂性,由于软件庞大的规模、大量的内部结构、以及应用领域的不同属性等因素,在开发一个大型软件系统时所参与的不仅仅是单个的人,而是一个团队。该团队里的每个人参与开发过程中的一个或多个活动。此时,对于参与不同开发阶段的人来说,彼此之间明确的交流非常重要。一方面,由于结构的复杂性以及开发团队的庞大等原因,团队成员之间的交流非常困难;另一方面,成员之间在进行交流时使用的媒介往往是自然语言、图、表等非形式化的方式
15、,这些媒介很难准确地描述出所开发的产品的基本属性,并且,由于这些媒介本身所具有的二义性,往往会使开发人员产生错误的理解,这种错误将会随着开发过程的进行而逐渐蔓延开来,最终导致灾难性的后果。,-18-,软件危机?,软件危机的原因缺乏指导或实施软件设计、开发、维护的有效理论、方法及技术 或者缺乏有效解决软件设计、开发、维护中相关实际问题的理论、方法及技术 解决方案软件工程:工程的方法组织和管理形式化方法:正确性和可靠性,-19-,1.3 软件工程,NATO、软件工程的定义1983年IEEE给软件工程下的定义是:“软件工程是开发、远行、维护和修复软件的系统方法”。主要强调软件工程是系统方法而不是某种
16、神秘的个人技巧。Fairly认为:“软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统生产和维护技术及管理学科。”软件工程的目标:成本限额、按时完成,软件工程包含技术和管理。Fritz Bauer给出了下述定义:“软件工程是为了经济地获得可靠的且能在实际机器上有效运行的软件,而建立和使用的完善的工程化原则。”不仅指出软件工程的目标是经济地开发出高质量的软什,而且强调了软件工程是一门工程学科,应建立并使用完善的工程化原则。1993年IEEE进一步给出了一个更全面的定义“软件工程是:把系统化的、规范的、可度量的途径应用于软件并发、运行和维护的过程,也就是把工程化应用于软件中;研究
17、中提到的途径。”,-20-,软件工程目标、内容,目标成功地生产具有正确性、可用性以及开销合宜的产品。三要素方法:构造软件的技术工具:自动化、半自动化的支持过程:综合运用方法和工具分步内容软件工程过程、生命周期、开发模型、开发方法、工具开发环境、计算机辅助软件工程、软件工程经济学,-21-,软件工程过程,规定了获取、供应、开发、操作以及维护软件时,所需要实施的过程、活动和任务。包括:开发过程:分析、设计、编码、集成、测试、安装和验收管理过程:范围定义、计划、实施和控制、评审评价、完成供应过程:供方按合同提供系统、软件、服务获取过程:需方操作过程:运行系统维护过程:修改支持过程:生命周期的支持,-
18、22-,软件生命周期,五个活动需求分析和规格软件设计:逻辑模型转换为软件方案,总体结构、模块算法代码编写软件测试:模块测试、组装测试、确认测试运行维护,-23-,软件开发模型,组织软件生命周期内的各种活动:次序、任务、准则瀑布模型(Winston Royce 1970)计划任务书、需求规格、设计规格、程序、测试、维护缺点:需求分析的准确性问题、错误反馈不及时、进度难以控制原型模型快速成型、评估、反馈、改进缺点:用户不理解、开发人员的惰性不愿意优化,-24-,软件开发模型,螺旋模型(Barry W.Boehm,1988)制定计划、风险评估、实施工程、用户评价-演化缺点:丰富的评估经验和专业知识,
19、要求高构件模型 即插即用编程标识、选用、组装,构件库优点:生产率、可靠、灵活、可维护,-25-,软件开发模型,四代技术模型(4GT)基于一系列软件工具的开发核心:规格软件的能力不支持软件开发的全过程侧重:设计阶段、实现阶段、支持界面缺点:维护问题变换模型基于形式化规格及程序变换的开发模型,自动程序设计模型或形式化方法模型三个核心活动:规格生成、形式化验证、计算机辅助程序求精高效、可靠、可控,但要求高,-26-,软件开发方法,软件开发方法是指在某种思想的指导下使用已经定义好的一系列技术和表示工具来组织软件开发过程的方法一般表述成一系列步骤典型的传统软件开发方法:结构化方法面向数据结构方法面向对象
20、的开发方法,-27-,软件工具,辅助软件开发、维护和管理的一系列软件种类繁多管理工具、配置工具、分析设计工具、编码工具、测试工具测试工具:数据获取、静态分析、动态测试、模拟、测试管理维护工具:版本控制、文档分析、开发信息库、逆向过程等,-28-,软件开发环境,支持软件产品生产的软件系统,由软件工具和集成机制组成。软件工具集成机制:为工具集成和软件的开发、管理,以及维护提供统一的支持。前端开发环境、后端开发环境、软件维护环境、逆向工程环境,-29-,计算机辅助软件工程,实现软件生命周期各个环节的自动化整个生命周期的支持,解决生产效率软件工程经济学从经济学的观点来研究、分析如何有效地开发、发布软件
21、产品和支持用户使用成本估算技术、模型、效益分析、多目标决策、不确定性的处理、风险分析、工期估计,-30-,1.4 形式化方法,形式化方法概念发展目的形式化方法软件开发 变换模型形式化规格形式化验证程序求精形式化方法的应用,-31-,形式化方法概念,形式化方法是渗透在软件生命期中各个环节(如:需求、设计、实现、测试等)的数学方法 或者 具有严格数学基础的软件开发方法形式化方法的基本含义是借助数学的方法来研究计算机科学中的有关问题。Encyclopedia of Software Engineering对形式化方法定义为:“用于开发计算机系统的形式化方法是基于数学的用于描述系统性质的技术。这样的形
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 开发 形式化 方法

链接地址:https://www.31ppt.com/p-6027974.html