1、软件开发方法综述,60年代中期开始爆发了众所周知的软件危机。为了克服这一危机,在1968、1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。与此同时,软件研究人员也在不断探索新的软件开发方法。,一、Parnas方法,D. Parnas在1972年最早提出了软件开发方法 Parnas的方法针对的是可维护性和可靠性方面存在着严重问题 信息隐蔽原则:在概要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。 第二条原则是在软件设计时应对可能发生的种种意外故障采取措施。,一、Parnas方法(续),Parnas对软件开发提出了深刻的见
2、解。遗憾的是,他没有给出明确的工作流程。所以这一方法不能独立使用,只能作为其它方法的补充。,二、Yourdon方法,1978年,E.Yourdon和L.L.Constantine提出了结构化方法,即SASD方法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法。 1979年Tom DeMarco对此方法作了进一步的完善。,二、Yourdon方法(续),Yourdon方法是80年代使用最广泛的软件开发方法。 它首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(SP)。 这一方法不仅开发步骤明确,SA、SD、SP相辅相成,一气呵成,而且
3、给出了两类典型的软件结构(变换型和事务型),便于参照,使软件开发的成功率大大提高,从而深受软件开发人员的青睐。,三、面向数据结构的软件开发方法,Jackson方法 1975年,M.A.Jackson提出了一类至今仍广泛使用的面向数据结构的软件开发方法。 这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。 这一方法对输入、输出数据结构明确的中小型系统特别有效,如商业应用中的文件表格处理。 该方法也可与其它方法结合,用于模块的详细设计。,三、面向数据结构的软件开发方法(续),Warnier方法 1974年,J.D.Warnier提出的软件开发方
4、法与Jackson方法类似。差别有三点: 一是它们使用的图形工具不同,分别使用Warnier图和Jackson图; 另一个差别是使用的伪码不同; 第三个是最主要的差别即在构造程序框架时,Warnier方法仅考虑输入数据结构,而Jackson方法不仅考虑输入数据结构,而且还考虑输出数据结构。,四、问题分析法PAM,PAM(Problem Analysis Method)是80年代末由日立公司提出的一种软件开发方法。 PAM方法的特点:希望能兼顾Yourdon方法、Jackson方法和自底向上的软件开发方法的优点,而避免它们的缺陷。 基本思想是:考虑到输入、输出数据结构,指导系统的分解,在系统分析
5、指导下逐步综合。,四、问题分析法PAM(续),PAM方法的具体步骤是:从输入、输出数据结构导出基本处理框;分析这些处理框之间的先后关系;按先后关系逐步综合处理框,直到画出整个系统的PAD图。 从上述步骤中可以看出,这一方法本质上是综合的自底向上的方法,但在逐步综合之前已进行了有目的的分解,这个目的就是充分考虑系统的输入、输出数据结构。,四、问题分析法PAM (续),PAM方法的另一个优点是使用PAD图。这是一种二维树形结构图,是到目前为止最好的详细设计表示方法之一,远远优于N-S图和PDL语言。 这一方法在日本较为流行,软件开发的成功率也很高。由于在输入、输出数据结构与整个系统之间同样存在着鸿
6、沟,这一方法仍只适用于中小型问题。,五、面向对象的软件开发方法,面向对象技术是软件技术的一次革命,在软件开发史上具有里程碑的意义。 随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT(Object Modelling Technique)。 这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构,五、面向对象的软件开发方法 (续),OMT彻底实现了PAM没有完全实现的目标 OO技术在需求分析、可维护性和可靠性这三个软件开发的关键环节和质量指标上有了实质
7、性的突破 ,彻底地解决了在这些方面存在的严重问题,从而宣告了软件危机末日的来临。(?),五、面向对象的软件开发方法 (续),自底向上的归纳 OMT的第一步是从问题的陈述入手,构造系统模型。 从真实系统导出类的体系,即对象模型包括类的属性,与子类、父类的继承关系,以及类之间的关联。 类是具有相似属性和行为的一组具体实例(客观对象)的抽象,父类是若干子类的归纳。因此这是一种自底向上的归纳过程。 在对象模型建立后,很容易在这一基础上再导出动态模型和功能模型。这三个模型一起构成要求解的系统模型。,五、面向对象的软件开发方法 (续),自顶向下的分解 与Yourdon方法按功能分解不同,在OMT中通常按服
8、务 (Service)来分解。 服务是具有共同目标的相关功能的集合,如I/O处理、图形处理等。 这种分解通常很明确,而这些子系统的进一步分解因有较具体的系统模型为依据,也相对容易。 所以OMT也具有自顶向下方法的优点,即能有效地控制模块的复杂性,同时避免了Yourdon方法中功能分解的困难和不确定性。,五、面向对象的软件开发方法 (续),OMT的基础是对象模型 每个对象类由数据结构(属性)和操作(行为)组成,有关的所有数据结构(包括输入、输出数据结构)都成了软件开发的依据。 因此Jackson方法和PAM中输入、输出数据结构与整个系统之间的鸿沟在OMT中不再存在。 OMT不仅具有Jackson
9、方法和PAM的优点,而且可以应用于大型系统。 更重要的是,在Jackson方法和PAM方法中,当它们的出发点输入、输出数据结构(即系统的边界)发生变化时,整个软件必须推倒重来。但在OMT中系统边界的改变只是增加或减少一些对象而已,整个系统改动极小。,五、面向对象的软件开发方法 (续),需求分析彻底 传统的软件开发方法不允许在开发过程中用户的需求发生变化 (为此发展了原型模型) OMT彻底解决了这一问题。因为需求分析过程已与系统模型的形成过程一致,开发人员与用户的讨论是从用户熟悉的具体实例(实体)开始的。开发人员必须搞清现实系统才能导出系统模型,这就使用户与开发人员之间有了共同的语言,避免了传统
10、需求分析中可能产生的种种问题。,五、面向对象的软件开发方法 (续),可维护性大大改善 在OMT之前的软件开发方法都是基于功能分解的 ,但从本质上讲,基于功能分解的软件是不易维护的。因为功能一旦有变化都会使开发的软件系统产生较大的变化,甚至推倒重来。 OMT的基础是目标系统的对象模型,而不是功能的分解。功能是对象的使用,它依赖于应用的细节,并在开发过程中不断变化。由于对象是客观存在的,因此当需求变化时对象的性质要比对象的使用更为稳定,从而使建立在对象结构上的软件系统也更为稳定。,五、面向对象的软件开发方法 (续),更重要的是OMT彻底解决了软件的可维护性。 在OO语言中,子类不仅可以继承父类的属
11、性和行为,而且也可以重载父类的某个行为(虚函数)。利用这一特点,我们可以方便地进行功能修改:引入某类的一个子类,对要修改的一些行为(即虚函数或虚方法)进行重载,也就是对它们重新定义。由于不再在原来的程序模块中引入修改,所以彻底解决了软件的可修改性,从而也彻底解决了软件的可维护性。 OO技术还提高了软件的可靠性和健壮性。,六、可视化开发方法,可视化开发是上个世纪90年代软件界最大的热点之一 Windows提供了可视化开发的应用程序设计接口API(Application Programm ing Interface)(包含了600多个函数 )Borland C+推出了Object Windows编
12、程 (它将API的各部分用对象类进行封装,提供了大量预定义的类,并为这些定义了许多成员函数。 ),六、可视化开发方法 (续),可视化开发就是在可视开发工具提供的图形用户界面上,通过操作界面元素,诸如菜单、按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可视开发工具自动生成应用软件。这类应用软件的工作方式是事件驱动。对每一事件,由系统产生相应的消息,再传递给相应的消息响应函数。这些消息响应函数是由可视开发工具在生成软件时自动装入的。,六、可视化开发方法 (续),可视开发工具应提供两大类服务。 一类是生成图形用户界面及相关的消息响应函数。 另一类服务是为各种具体的子应用的各个常规执行步骤
13、提供规范窗口,它包括对话框、菜单、列表框、组合框、按钮和编辑框等,以供用户挑选。 由于要生成与各种应用相关的消息响应函数,因此,可视化开发只能用于相当成熟的应用领域,如目前流行的可视化开发工具基本上用于关系数据库的开发。,六、可视化开发方法 (续),可视化开发是软件开发方式上的一场革命,它使软件开发从专业人员的手中解放出来,对缓解80年代中后期爆发的应用软件危机有重大作用。,七、ICASE(Integrated Computer-Aided Software Engineering),早在1982年美国国防部就提出了STARS工程,希望建立一个“用以支持需求定义、程序生成以及软件维护等软件生存
14、期全部活动的,并把它们集成在一起的整个体系”。,七、ICASE(续),系统集成方式经历了三代 第一代:数据交换方式 早期CASE采用的集成方式:点到点的数据转换 第二代 :公共用户界面方式 第二代CASE在一致的界面下调用众多不同的工具 第三代:信息中心库方式 它不仅提供数据集成(1991年IEEE为工具互连提出了标准P1175)和控制集成(实现工具间的调用),还提供了一组用户界面管理设施和一大批工具,如垂直工具集(支持软件生存期各阶段,保证生成信息的完备性和一致性)、水平工具集(用于不同的软件开发方法)以及开放工具槽。,七、ICASE(续),ICASE的进一步发展 与其它软件开发方法的结合,
15、如与面向对象技术、软件重用技术结合,以及智能化的I-CASE。近几年已出现了能实现全自动软件开发的ICASE。 ICASE的最终目标 实现应用软件的全自动开发,即开发人员只要写好软件的需求规格说明书,软件开发环境就自动完成从需求分析开始的所有的软件开发工作,自动生成供用户直接使用的软件及有关文档。,七、ICASE(续),在应用最成熟的数据库领域,目前已有能实现全部自动生成的应用软件,如MSE公司的Magic系统。它只要求软件开发人员填写一系列表格(相当于要求软件实现的各种功能),系统就会自动生成应用软件。它不仅能节省90%以上的软件开发和维护的工作量,而且还能将应用软件的开发工作转交给熟练的用
16、户 。,八、软件重用和组件连接,软件重用(Reuse)又称软件复用或软件再用。早在1968年的NATO软件工程会议上就已提出可复用库的思想。 1983年,Freeman对软件重用给出了详细的定义: 在构造新的软件系统的过程中,对已存在的软件人工制品的使用技术。,八、软件重用和组件连接 (续),软件重用的三个发展方向 1、基于软件复用库的软件重用 是一种传统的软件重用技术。这类软件开发方法要求提供软件可重用成份的模式分类和检索,且要解决如何有效地组织、标识、描述和引用这些软件成份。通常采用两种方式进行软件重用: (1)生成技术 这是对模式的重用。由软件生成器通过替换特定参数,生成抽象软件成份的具
17、体实例。 (2)组装方式 常用的组装方式有:子程序库技术、共享接口设计和嵌套函数调用等。组装方式对软件重用成份通常不作修改,或仅作很少的修改。,八、软件重用和组件连接 (续),软件重用的三个发展方向 2、与面向对象技术结合 OO技术中类的聚集、实例对类的成员函数或操作的引用、子类对父类的继承等使软件的可重用性有了较大的提高。而且这种类型的重用容易实现。所以这种方式的软件重用发展较快。,八、软件重用和组件连接 (续),软件重用的三个发展方向 3、组件连接 这是目前发展最快的软件重用方式 最早的组件连接标准OLE 1.0(Object Linking and Embedding)是Microsof
18、t公司于1990年11月在COMDEX展览会上推出的。 第二个标准是1995年3月推出的OpenDoc。这是IBM、Apple等公司组成的 CILabs集团使用的标准。(由于OpenDoc的编程接口比OLE小,因此OpenDoc的应用程序能与OLE兼容。 ) 第三个组件连接标准是对象管理集团OMG于1991年发表的CORBA(Common Object Reques t Broker Architecture),1994年OMG又发表了CORBA 2.0。,小结,综上所述,今后的软件开发将是以OO技术为基础(指用它开发系统软件和软件开发环境) ,可视化开发、ICASE和软件组件连接三种方式并驾
19、齐驱。它们四个将一起形成软件界新一轮的热点技术。,九、关于RUP,现在软件产业界普遍认为,开发复杂软件项目必须采用基于UML的、以构架为中心、用例驱动与风险驱动相结合的迭代式增量开发过程,他是世界公认的开发复杂软件项目的最好过程,已经成为软件界的“圣经”。这一开发过程目前已经稳定、成熟。这就是:,RUP Rational Unified Process,Rational 统一过程是由Rational (IBM)软件公司开发和营销的一种软件工程过程,是开发组织用以分配与管理任务和职责的一种规范化方法。这个过程的目的是: 在预定的进度和预算范围内,开发出满足最终用户需要的高质量软件。,最佳软件开发
20、实践 Best Practices,迭代地开发软件 Develop Iteratively 管理需求 Manage Requirements 应用基于构件的构架 Use Component Architectures 为软件建立可视化的模型 Model Visually (UML) 不断地验证软件质量 Continuously Verify Quality 控制软件的变更 Manage Change,RUP Implements Best Practices,RUP将软件开发最佳实践活动以一种适当的形式结合起来,从而适应了广泛的项目和开发组织。 RUP 是一个过程产品(process prod
21、uct)。Rational (IBM) 软件公司开发并维护着这个产品,并将其与Rational 软件公司自己的一系列软件开发工具集成。 RUP 有自己的过程框架 (process framework), 这个框架可以被改造和扩展以适应采纳此方法的组织。,RUP 简要历史,RUP 2000,RUP 5.5,RUP 5.0,ROP 4.1,ROP 4.0,Rational 方法,Objective 过程3.8,200019991998199719961995,实时,ROOM,业务工程,配置和,变更管理,需求学院,Booch 方法,OMT,UML 0.8,SQA 过程,UML 1.1,数据工程,UI
22、 设计,UML 1.2,基于WEB的开发,UML1.3,History of RUP,RUP的核心,RUP核心是解决可操作性问题,帮助开发人员尽可能少地依赖那些“不可描述的经验”。它详细给出了每个阶段参与该过程的各种角色,然后表示在过程中,该角色创建的制品。,RUP特点,用例驱动 以体系结构为中心 增量和迭代开发,用例驱动,用Use Case作为划分问题的组织单元,分析和设计活动的局部粒度都遵循这一划分原则。Use Case的定义反映可系统外部要素根据特定目标使用拟建系统的状况,能确保问题的局部划分粒度适当,保持了全局与局部的平衡。,增量和迭代开发,基于风险前驱的原则,渐进地展开分析、设计及其
23、相关活动,每个迭代都会提供一次验证和调整模型机会,推动软件质量的提升。,谁在使用RUP?,电信业 Ericsson、Alcatel、MCI 交通、航空、国防 Lockheed-Martin、British Aerospace 制造业 Xerox、Volvo、Intel 金融业 Visa、Merrill Lynch、Schwab 系统集成业 Ernst & Young、Oracle、Deloitte & Touche,NSE-新一代软件工程体系与实践,本书从分析软件界长期以来一直存在的效率低、成本高、质量差和风险大问题人手,指出以线性思维方式和简单性科学方法来处理复杂的软件系统和软件工程体系是造
24、成这些问题的根源。然后,详细介绍了著者所创立并指导软件开发团队实现了产品化的新一代软件工程体系非线性整体软件工程(Nonlinear Software Engineering,NSE)体系及其产品化应用。这一新体系的创立基础是非线性思维和系统科学与复杂性科学。NSE体系遵从系统科学与复杂性科学的一系列基本原则,特别是其整体性原则,即一切都从整体、全局出发。 NSE体系浓缩了著者几十年在美国创业和以外国专家身份来华工作所取得的一系列研究成果,包括处理多重复合复杂系统的五维结构综合法、非线性双向多轨并行实时迭代软件工程过程模型、缺陷预防与可追溯性驱动软件开发方法、“以防为主”的软件质量保证体系、用
25、于实现软件开发全过程可视化的交互式可追溯3J图式、可动态应用于软件开发全过程的“透明盒测试法”,以及基于一系列双向自动可追溯性技术的系统化与量化软件维护体系。实践应用表明,NSE体系能有效处理软件的复杂性、可变性、一致性与不可见性,实现多、快、好、省的软件开发与维护。,评论-一发臭弹,本书提供的主过程模型,看起来就很乱七八糟,看明白了也就那么一回事.无非是分两大块,前期利用一些手段实现对需求从非形式化向形式化的转化,然后在第二块,依据传统5部依次向下,中间如果出现了问题,就向上回述.这过程模型很新吗?无非就是把传统模型细化了一下而已.复杂性,非线性体现在哪里? 本书大谈了这么多复杂系统的理论,
26、居然连一个软件过程复杂系统的模型都没建出来,全部空口大谈自己理论的好处 再往后面看下去,几乎全是自动化测试的内容.难道软件工程就只是测试工程吗 ,作者回应:,作为本书的作者,我邀请你访问下列网页,以便充实你的“评论”的内容:http:/www.world-academy-of-science.org/worldcomp09/ws/tutorials/tutorial_xiong, 那是我应WORLDCOMP09(今年7月在美国拉斯维加斯召开的计算机科学、工程与应用超级国际会议 - 由22个相关国际会议同时同地联合举行)组委会的邀请所作的3小时辅导讲演的内容介绍,题目为:“A Complete
27、Revolution in Software Engineering Based on Complexity Science ”,即“基于复杂性科学的、完整的软件工程革命”。说的,正是本书的概要。,我在书中曾经作出预言: 新一轮更深刻更广泛的产业革命的来临, 指出复杂性科学将是这新一轮更深刻更广泛的产业革命的驱动力量,并提出了有助于各行各业实现从基于线性过程和还原论的旧体系到基于非线性思维和复杂性科学的新体系的革命性体系转移通用工作框架 五维结构综合法。非线性整体软件工程体系的创立,是这一工作框架的一个应用实例。应某国际高峰论坛的邀请,本月下旬我将到北京在该高峰论坛作题为“研究与实践:知识资本与新一轮产业革命”的讲演,为这新一轮基于复杂性科学的、更加深刻、更加广泛的产业革命的来临推波助澜。,谢谢,