众所周知的软件危机爆发于60年代中期。为了克服这一危机,“软件工程”一词是在1968年和1969年连续召开的两次著名的北约会议上提出的,并在以后不断发展和完善。同时,软件研究者也在不断探索新的软件开发方法。
1972年,针对可维护性和可靠性方面的严重问题,首次提出了软件开发方法。信息隐藏原理3360列出了大纲设计中未来可能改变的因素,并将这些因素放在模块划分中的各个模块内部。第二个原则是采取措施处理软件设计中可能出现的各种意外故障。
对软件开发提出了一些深刻的见解。不幸的是,他没有给出明确的工作流程。因此,这种方法不能单独使用,只能作为其他方法的补充。
1978年,又提出了一种结构化方法,即SASD方法,也可以称为面向功能的软件开发方法或面向数据流的软件开发方法。这种方法在1979年得到了进一步改进。
方法是80年代应用最广泛的软件开发方法。首先使用结构分析(SA)对软件进行需求分析,然后使用结构化设计(SD)对软件进行整体设计,最后使用结构化编程(SP)。这种方法不仅开发步骤清晰,SA、SD、SP一气呵成,而且给出了两种典型的软件结构(转换型和事务型),方便参考,大大提高了软件开发的成功率,因而受到软件开发人员的青睐。
方法1975年,提出了一种面向数据结构的软件开发方法。该方法从目标系统的输入输出数据结构入手,导出程序框架结构,补充其他细节,得到完整的程序结构图。这种方法对于输入和输出数据结构清晰的中小型系统尤其有效,例如商业应用中的文档表处理。这种方法也可以结合其他方法进行模块的详细设计。
Warnier方法1974年,J.D.Warnier提出的软件开发方法类似于杰克逊方法。有三个区别:第一,他们使用不同的图形工具,分别使用Warnier图和Jackson图;另一个区别是使用的伪码不同;第三个主要区别是Warnier方法在构建程序框架时只考虑输入数据结构,而Jackson方法不仅考虑输入数据结构,还考虑输出数据结构。
PAM(ProblemAnalysisMethod)是日立在20世纪80年代末提出的一种软件开发方法。PAM方法的特点:希望兼顾Yourdon方法、Jackson方法和自下而上的软件开发方法的优点,避免它们的缺陷。基本思路是:考虑输入输出数据结构,指导系统分解,在系统分析指导下逐步合成。
面向对象技术是软件技术的一场革命,在软件发展史上具有里程碑意义。随着面向对象编程(OOP)向面向对象设计(OOD)和面向对象分析(OOA)的发展,最终形成了面向对象的软件开发方法OMT(object modeling technology)。这种方法是自下而上和自上而下的结合,它基于对象建模,不仅考虑输入和输出数据结构,还包含所有对象的数据结构
自下而上归纳
OMT的第一步是从问题的陈述开始,构建系统模型。
类的系统是从真实系统中派生出来的,即对象模型包括类的属性,与子类和父类的继承关系,类与类之间的关联。
类是一组具有相似属性和行为的具体实例(目标对象)的抽象,父类是几个子类的泛化。所以这是一个自下而上的归纳过程。
对象模型建立后,很容易导出动态模型和功能模型。这三个模型共同构成了一个需要解决方案的系统模型。
从上到下分解
不像尤登方法那样按功能分解,OMT通常按服务分解。
服务是具有共同目标的相关功能的集合,比如I/O处理、图形处理等等。
这种分解通常是清晰的,而这些子系统的进一步分解因为具体的系统模型而相对容易。
因此,OMT还具有自上而下方法的优点,即可以有效控制模块的复杂性,避免尤尔登方法中函数分解的困难和不确定性。
OMT是基于对象模型的
每个对象类由数据结构(属性)和操作(行为)组成,所有相关的数据结构(包括输入输出数据结构)都成为了软件开发的基础。
因此,在OMT,杰克森方法和PAM中的输入和输出数据结构与整个系统之间的差距不再存在。
OMT法不仅具有杰克逊法和帕姆法的优点,而且可以应用于大规模系统。
更重要的是,在Jackson方法和PAM方法中,当它们的起点————输入输出数据结构(即系统边界)发生变化时,整个软件必须重新发明。然而,在OMT,系统边界的变化只是增加或减少了一些对象,整个系统变化很小。
彻底的需求分析
传统的软件开发方法不允许用户的需求在开发过程中改变(原型模型就是为此而开发的)
OMT已经完全解决了这个问题。因为需求分析的过程和系统模型形成的过程是一致的,所以开发者和用户之间的讨论是从用户熟悉的具体例子(实体)开始的。开发人员必须了解真实的系统,才能导出系统模型,这使得用户和开发人员有了共同的语言,避免了传统需求分析中可能出现的各种问题。
可维护性大大提高
在OMT之前,软件开发方法是基于功能分解的,但是本质上,基于功能分解的软件很难维护。因为一旦功能发生变化,开发出来的软件系统就会有很大的变化,甚至
推倒重来。OMT的基础是目标系统的对象模型,而不是功能的分解。功能是对象的使用,它依赖于应用的细节,并在开发过程中不断变化。由于对象是客观存在的,因此当需求变化时对象的性质要比对象的使用更为稳定,从而使建立在对象结构上的软件系统也更为稳定。
更重要的是OMT彻底解决了软件的可维护性。
在OO语言中,子类不仅可以继承父类的属性和行为,而且也可以重载父类的某个行为(虚函数)。利用这一特点,我们可以方便地进行功能修改:引入某类的一个子类,对要修改的一些行为(即虚函数或虚方法)进行重载,也就是对它们重新定义。由于不再在原来的程序模块中引入修改,所以彻底解决了软件的可修改性,从而也彻底解决了软件的可维护性。
OO技术还提高了软件的可靠性和健壮性。
可视化开发是上个世纪90年代软件界最大的热点之一
Windows提供了可视化开发的应用程序设计接口API(ApplicationProgrammingInterface)(包含了600多个函数)
BorlandC++推出了ObjectWindows编程(它将API的各部分用对象类进行封装,提供了大量预定义的类,并为这些定义了许多成员函数。)
可视化开发就是在可视开发工具提供的图形用户界面上,通过操作界面元素,诸如菜单、按钮、对话框、编辑框、单选框、复选框、列表框和滚动条等,由可视开发工具自动生成应用软件。
这类应用软件的工作方式是事件驱动。对每一事件,由系统产生相应的消息,再传递给相应的消息响应函数。这些消息响应函数是由可视开发工具在生成软件时自动装入的。
可视开发工具应提供两大类服务。
一类是生成图形用户界面及相关的消息响应函数。
另一类服务是为各种具体的子应用的各个常规执行步骤提供规范窗口,它包括对话框、菜单、列表框、组合框、按钮和编辑框等,以供用户挑选。
由于要生成与各种应用相关的消息响应函数,因此,可视化开发只能用于相当成熟的应用领域,如目前流行的可视化开发工具基本上用于关系数据库的开发。
早在1982年美国国防部就提出了STARS工程,希望建立一个“用以支持需求定义、程序生成以及软件维护等软件生存期全部活动的,并把它们集成在一起的整个体系”。
在应用最成熟的数据库领域,目前已有能实现全部自动生成的应用软件,如MSE公司的Magic系统。它只要求软件开发人员填写一系列表格(相当于要求软件实现的各种功能),系统就会自动生成应用软件。它不仅能节省90%以上的软件开发和维护的工作量,而且还能将应用软件的开发工作转交给熟练的用户。
相关阅读
版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除
标签: #软件设计方法方面的最新动态