人类认识世界总是循序渐进的过程,软件工程也一样,从最开始的单兵作战,再到软件作坊,直到如今的大规模软件开发,软件工程从业者不断总结实践中存在的问题以及解决途径,逐渐形成了一系列的软件工程方法,而所有这些方法中,最为经典的当属结构化和面向对象的方法。本文将在认识两种方法的基础上探讨如何在软件工程过程中将这两种方法结合起来。
1 结构化方法
1.1 结构化方法的基本思想
面对复杂的问题,我们先要想办法让它变得简单。结构化方法的基本思想就是通过自顶向下、逐步求精、模块化的方法来让让复杂的软件开发过程变得简单。
- 自顶向下、逐步求精就是指把一个复杂的问题划分成若干小问题,然后再分别解决,将问题的复杂性降低到人可以掌握的程度。即将复杂的系统分解成若干个人们易于理解和分析的子系统。在分解过程中,被分解的上层就是下层的抽象,下层为上层的具体细节,即最高层的问题最抽象,而底层的则较为具体。
- 模块化就是把程序划分成若干个模块,每个模块完成一个子功能,将多个模块组织起来实现整个软件系统的功能。模块化设计方法强调清楚地定义每个模块的功能和它们的输入/输出参数,而模块的实现细节隐藏在模块中,与 其他模块之间的关系是调用关系,因此,模块化程序易于调试和修改。
1.2 结构化软件工程过程
将上述思想融入到软件工程的各个过程,便是结构化软件工程过程。包括:
- 结构化分析:应用结构化方法进行软件需求分析时,是基于数据流的。即通过数据流图的自顶向下逐层分解来建立目标系统的功能模型,通过数据字典来和E-R图构建数据模型,通过流程图和状态转换图来构建行为模型,最后形成该阶段的里程碑文档:《需求规格说明书》,为下一步的软件设计提供依据。
- 结构化设计:在结构化分析的基础上,采用面向数据流的设计方法,以数据流图为基础得到软件的模块结构,应用流程图、PDL语言、判定表或判定树设计代码逻辑,最后形成该阶段的里程碑文档:《软件设计说明书》,文档中还需要对各模块内部及模块间的接口(包括界面设计)做出说明,为软件实现阶段的工作提供依据。
- 结构化程序设计:就是采用一种面向过程的程序设计语言,实现上述设计的系统。
1.3 结构化软件工程工具
如图所示,结构化方法主要是基于下面的工具来对系统进行建模。
1.3.1 数据流图
1.3.2 E-R图
1.3.3 数据字典
1.3.3 流程图
1.3.4 盒图
1.3.5 PAD图
1.3.6 状态转换图
1.3.7 PDL语言
1.3.8 判定表
1.3.9 判定树
1.3.10 模块图
1.3.11 层次图
1.3.12 HIPO图