随着计算机软硬件技术的发展,软件研究人员利用软件工程的基本原理不断探索新的软件开发方法。本文阐述了当前软件开发方法的现状,同时对其发展趋势做出了分析与探讨。
一、软件开发方法的现状
1.结构化软件开发方法
(1)面向数据流的结构化软件开发方法
根据软件内部数据传递和变换关系,自顶向下逐层分解,描绘出满足功能要求的软件模型,设计阶段依据模块独立性准则、软件结构准则,将数据流图转换为软件的体系结构,用软件结构图来建立系统的物理模型,实现系统的概要设计。此方法适应范围广、开发步骤明确,结构化分析、结构化设计、结构化编程相辅相成,一次完成。
(2)面向数据结构的结构化软件开发方法
1975年Jackson MA提出了Jackson方法?D?DJSP方法。该方法首先描述问题的输入、输出数据结构,分析其对应性,然后推出相应的程序结构从而给出问题的软件过程描述。ISP方法是以数据结构为驱动的,适应于小规模的项目。当输人、输出数据结构无对应关系时,难于应用该方法。基于JSP方法的局限性,又发展了JSD方法,它是JPS方法的扩充。SJD方法是一个完整的系统开发方法,该方法首先建立现实世界的模型,再确定系统的功能需求,对需求的描述特别强调了操作之间的时序性,它以事件作为驱动,是一种基于进程的开发方法,应用于时序特点较强的系统,包括数据处理系统和一些实时控制系统。
Warmer方法是Warmer JD在1974年提出的。Warmer软件开发方法与Jackson方法相比的差别如下:第一,使用的图形工具不同;第二,使用的伪码不同;第三,在构造程序框架时,Warmer方法仅考虑输人数据结构,而Jackson方法不仅考虑输人数据结构,而且还考虑输出数据结构,这点差别也是最主要的差别。
2.面向对象软件开发方法
面向对象软件开发方法包括面向对象分析方法、面向对象设计方法和面向对象实现方法,其核心是面向对象程序设计方法。面向对象程序设计语言的创新发展推动面向对象程序设计方法逐渐形成和完善,从而推动面向对象软件开发方法形成并发展。
在面向对象程序设计方法中,数据和施加在数据上的操作被封装在一起,形成类和对象的概念,用对象分解取代了传统方法的功能分解,所有对象被划分成各种对象类,按照子类与父类的关系组成对象类的层次结构,子类自动继承父类的所有特性,对象彼此间仅通过传递消息实现联系。这一思维观念创新使得问题空间与解空间的结构基本一致;使得从问题空间到解空间的过渡非常自然;使得软件重复使用的粒度增大,有利于大型软件的开发;使得模块的信息隐藏和独立性增强,有利于提高软件的可维护性;为开发者提供了随着对某个被开发系统的认识逐步深入和具体化的过程,与人们通常采用的认识客观世界、解决复杂问题的渐进式思维方式相一致。
二、软件开发方法的发展趋势
在软件工程发展的过程中,繁琐复杂的开发过程、文档维护难度的加大以及软件开发过程中的反馈问题等逐渐的暴露出来,并且人们对软件提出了智能化的需求,而面对这些问题和需求的出现与改变,软件方法的研究与更新也引起了很大的重视与关注,许多新的方法出现并体现出了很大的发展潜力。
1.敏捷软件开发方法
敏捷软件开发方法包括 ASD、FDD、DSDM、XP 等,敏捷软件开发作为一种以人为核心、循序渐进、迭代的开发方法,它把软件项目的整体构建划分为许多个子项目,而这些子项目本身在测试后也验证具有可运行以及集成的特征。敏捷软件开发方法强调了人的作用以及对变化情况的使用,同时强调反馈有效性和简单化,同时重视生产效率的提高,在软件开发过程中,小项目可以分别完成并可以独立运行,软件可以始终处于能够进行使用的状态。它的12条实践原则能够在一定程度上体现出它自身的特性?D?D(1)获得客户的满意最为优先,需要持续的、尽早的交付有使用价值的软件;(2)在软件开发过程中的后期也可以改变对软件的需求;(3)交付可使用的软件要具有经常性,交付的时间需要控制在最短的时间范围之内;(4)开发人员以及业务人员在项目开发中需要始终共同工作;(5)需要为被激励的个人提供必要的支持与环境,并信任他们能够完成软件开发工作;(6)在团队工作中,面对面交谈是左右效率的信息传递方法;(7)首要的进度标准是可以工作的软件;(8)可持续的提高开发速度;(9)强调优秀设计与技能在提高敏捷能力方面的作用;(10)最好的需求、构架与设计来源于自组织的工作团队;(11)在一定时间内,工作人员要针对如何提高工作有效性进行反省并对工作行为做出调整。
2.面向 Agent 的软件开发方法
在互联网不断发展的背景下,规模大以及复杂性高成为了软件开发中最明显的趋势,人们对计算机软件的需求要开始重视其智能化,但是原来的软件开发方法并不能胜任开发具有智能特性软件的工作。Agent 的概念来源于资源分布式人工智能领域,自主性、驻留性以及灵活性是其最重要的三个特征?D?D自主性是指 Agent 能够以外部环境以及内部状态为根据来对自身的状态进行决定,在此过程中并不需要外部进行控制和干涉;驻留性是指 Agent 能够感知到外部环境产生的变化;灵活性是指 Agent 能够与其他的 Agent 进行比较复杂的协同交互行为。凭借 Agent 自身的优势,它在以后的发展中可以应用于交通管理、医疗护理、游戏娱乐、电力电讯甚至国防军事等众多领域。虽然 Agent 仍旧处于探索阶段并且并不成熟,但是已经得到了广泛的重视与关注,并且也会成为软件工程在软件开发方法方面的重要趋势之一。