软件开发方法综述

   60年代中期开始爆发了众所周知的软件危机。为了克服这一危机,在1968、1969年连续召开的两次著名的NATO会议上提出了软件工程这一术语,并在以后不断发展、完善。与此同时,软件研究人员也在不断探索新的软件开发方法。 

   D. Parnas在1972年最早提出了软件开发方法 Parnas的方法针对的是可维护性和可靠性方面存在着严重问题 信息隐蔽原则:在概要设计时列出将来可能发生变化的因素,并在模块划分时将这些因素放到个别模块的内部。 第二条原则是在软件设计时应对可能发生的种种意外故障采取措施。

  Parnas对软件开发提出了深刻的见解。遗憾的是,他没有给出明确的工作流程。所以这一方法不能独立使用,只能作为其它方法的补充。

1978年,E.Yourdon和L.L.Constantine提出了结构化方法,即SASD方法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法。 1979年Tom DeMarco对此方法作了进一步的完善。

  Yourdon方法是80年代使用最广泛的软件开发方法。 它首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(SP)。 这一方法不仅开发步骤明确,SA、SD、SP相辅相成,一气呵成,而且给出了两类典型的软件结构(变换型和事务型),便于参照,使软件开发的成功率大大提高,从而深受软件开发人员的青睐。

  Jackson方法 1975年,M.A.Jackson提出了一类至今仍广泛使用的面向数据结构的软件开发方法。 这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。 这一方法对输入、输出数据结构明确的中小型系统特别有效,如商业应用中的文件表格处理。 该方法也可与其它方法结合,用于模块的详细设计。

Warnier方法 1974年,J.D.Warnier提出的软件开发方法与Jackson方法类似。差别有三点: 一是它们使用的图形工具不同,分别使用Warnier图和Jackson图; 另一个差别是使用的伪码不同; 第三个是最主要的差别即在构造程序框架时,Warnier方法仅考虑输入数据结构,而Jackson方法不仅考虑输入数据结构,而且还考虑输出数据结构。

  PAM(Problem Analysis Method)是80年代末由日立公司提出的一种软件开发方法。 PAM方法的特点:希望能兼顾Yourdon方法、Jackson方法和自底向上的软件开发方法的优点,而避免它们的缺陷。 基本思想是:考虑到输入、输出数据结构,指导系统的分解,在系统分析指导下逐步综合。 

  面向对象技术是软件技术的一次革命,在软件开发史上具有里程碑的意义。 随着OOP(面向对象编程)向OOD(面向对象设计)和OOA(面向对象分析)的发展,最终形成面向对象的软件开发方法OMT(Object Modelling Technique)。 这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构

自底向上的归纳
OMT的第一步是从问题的陈述入手,构造系统模型。
从真实系统导出类的体系,即对象模型包括类的属性,与子类、父类的继承关系,以及类之间的关联。
类是具有相似属性和行为的一组具体实例(客观对象)的抽象,父类是若干子类的归纳。因此这是一种自底向上的归纳过程。
在对象模型建立后,很容易在这一基础上再导出动态模型和功能模型。这三个模型一起构成要求解的系统模型。 

自顶向下的分解
与Yourdon方法按功能分解不同,在OMT中通常按服务 (Service)来分解。
服务是具有共同目标的相关功能的集合,如I/O处理、图形处理等。
这种分解通常很明确,而这些子系统的进一步分解因有较具体的系统模型为依据,也相对容易。
所以OMT也具有自顶向下方法的优点,即能有效地控制模块的复杂性,同时避免了Yourdon方法中功能分解的困难和不确定性。

OMT的基础是对象模型
每个对象类由数据结构(属性)和操作(行为)组成,有关的所有数据结构(包括输入、输出数据结构)都成了软件开发的依据。
因此Jackson方法和PAM中输入、输出数据结构与整个系统之间的鸿沟在OMT中不再存在。
OMT不仅具有Jackson方法和PAM的优点,而且可以应用于大型系统。
更重要的是,在Jackson方法和PAM方法中,当它们的出发点———输入、输出数据结构(即系统的边界)发生变化时,整个软件必须推倒重来。但在OMT中系统边界的改变只是增加或减少一些对象而已,整个系统改动极小。

需求分析彻底
传统的软件开发方法不允许在开发过程中用户的需求发生变化 (为此发展了原型模型)
OMT彻底解决了这一问题。因为需求分析过程已与系统模型的形成过程一致,开发人员与用户的讨论是从用户熟悉的具体实例(实体)开始的。开发人员必须搞清现实系统才能导出系统模型,这就使用户与开发人员之间有了共同的语言,避免了传统需求分析中可能产生的种种问题。

可维护性大大改善
在OMT之前的软件开发方法都是基于功能分解的 ,但从本质上讲,基于功能分解的软件是不易维护的。因为功能一旦有变化都会使开发的软件系统产生较大的变化,甚至推倒重来。
OMT的基础是目标系统的对象模型,而不是功能的分解。功能是对象的使用,它依赖于应用的细节,并在开发过程中不断变化。由于对象是客观存在的,因此当需求变化时对象的性质要比对象的使用更为稳定,从而使建立在对象结构上的软件系统也更为稳定。

更重要的是OMT彻底解决了软件的可维护性。
在OO语言中,子类不仅可以继承父类的属性和行为,而且也可以重载父类的某个行为(虚函数)。利用这一特点,我们可以方便地进行功能修改:引入某类的一个子类,对要修改的一些行为(即虚函数或虚方法)进行重载,也就是对它们重新定义。由于不再在原来的程序模块中引入修改,所以彻底解决了软件的可修改性,从而也彻底解决了软件的可维护性。
OO技术还提高了软件的可靠性和健壮性。

可视化开发是上个世纪90年代软件界最大的热点之一
Windows提供了可视化开发的应用程序设计接口API(Application Programm ing Interface)(包含了600多个函数 )
  Borland C++推出了Object Windows编程 (它将API的各部分用对象类进行封装,提供了大量预定义的类,并为这些定义了许多成员函数。 )

可视化开发就是在可视开发工具提供的图形用户界面上,通过操作界面元素,诸如菜单、按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可视开发工具自动生成应用软件。
 这类应用软件的工作方式是事件驱动。对每一事件,由系统产生相应的消息,再传递给相应的消息响应函数。这些消息响应函数是由可视开发工具在生成软件时自动装入的。

可视开发工具应提供两大类服务。
一类是生成图形用户界面及相关的消息响应函数。
另一类服务是为各种具体的子应用的各个常规执行步骤提供规范窗口,它包括对话框、菜单、列表框、组合框、按钮和编辑框等,以供用户挑选。
由于要生成与各种应用相关的消息响应函数,因此,可视化开发只能用于相当成熟的应用领域,如目前流行的可视化开发工具基本上用于关系数据库的开发。 

早在1982年美国国防部就提出了STARS工程,希望建立一个“用以支持需求定义、程序生成以及软件维护等软件生存期全部活动的,并把它们集成在一起的整个体系”。

 在应用最成熟的数据库领域,目前已有能实现全部自动生成的应用软件,如MSE公司的Magic系统。它只要求软件开发人员填写一系列表格(相当于要求软件实现的各种功能),系统就会自动生成应用软件。它不仅能节省90%以上的软件开发和维护的工作量,而且还能将应用软件的开发工作转交给熟练的用户 。

 

 
posted @ 2014-03-19 21:19  曹玉松  阅读(567)  评论(1编辑  收藏  举报