程序质量评审是着眼于软件本身的结构、与运行环境的接口、变更带来的影响而进行的评审活动。通常它是从开发者的角度进行评审,直接与开发技术有关。
(1)软件的结构
为了使得软件能够满足设计规格说明中的要求,软件的结构本身必须是优秀的。
1)功能结构:在软件的各种结构中,功能结构是用户唯一能见到的结构。因此,功能结构可以说是联系用户很开发者的规格说明,它在软件的设计中占有极其重要的地位。软件功能的本质是把输入信息变换为输出信息。因此,在讨论软件的功能结构时,也必须明确软件的数据结构。需要检查的项目有:
①数据结构:包括数据名和定义;构成该数据的数据项;数据与数据项间的关系。例如,数据A是由数据项B和c构成时,A是B与C的组合数据还是由B或c中某一方选择出来的数据?
②功能结构:包括功能名和定义;构成该功能的子功能;功能与子功能之间的关系。
③数据结构和功能结构之间的对应关系:包括数据元素与功能元素之间的对应关系;数据结构与功能结构的一致性。
2)功能的通用性:在软件的功能结构中,某些功能有时可以做为通用功能反复出现多次。从功能便于理解、增强软件的通用性及降低开发的工作量等观点出发,希望尽可能多地使功能通用化。实现功能通用化的最一般的方法是通过提取公用功能来实现通用模块化。而进一步的功能通用化方法就是信息隐蔽或数据抽象。它的基础就是抽象数据类型。
在实现功能通用性方面,检查项目如下:
①抽象数据结构:包括抽象数据的名称和定义;抽象数据构成元素的定义。
②抽象功能结构:包括对①中的抽象数据进行操作的各个功能的一览表;上述备功能的定义及各个功能之间的关系。
进行功能通用化时功能结构的变化情形。在此例中,一棵大的功能树被转换成三棵较小的功能树。
3)模块的层次:模块的层次就是指程序模块结构。由于模块是功能的具体体现,所以模块层次应当根据功能层次来设计。图10.20是根据功能结构来设计模块层次的一个例子。
模块层次中保有一部分功能层次,但模块层次并不全与功能层次相同,重要的是应明确模块层次与功能层次之间的关系。为此,要检查以下项目:
①模块层次:模块层次的定义,包括各层次的含义、各层次物理容量的上限;模块的层次结构,包括各模块间的联系、各模块与层次的对应关系。
②与功能层次的对应关系:功能与模块的对应关系;功能层次与模块层次的匹配程度。
4)模块结构:以上所述的模块层次结构是模块的静态结构。现在要检查模块问的动态结构。模块分为处理模块和数据模块两类。模块间的动态结构也与这些模块分类有关。对这样的模块结构进行检查的项目有:
①控制流结构:这种结构规定了处理模块与处理模块之间的流程关系。因此,要检查处理模块之间的控制转移关系;控制转移形式(调用方式)。
②数据流结构:这种结构规定了数据模块是如何被处理模块进行加工的流程关系。因此,要检查处理模块与数据模块之间的对应关系;处理模块与数据模块之间的存取关系(建立、删除、查询、提取、修改等)。
③模块结构与功能结构之间的对应关系:包括功能结构与控制流结构的对应关系;功能结构与数据流结构的对应关系。
④每个模块的定义:包括功能;输入与输出数据。
5)处理过程的结构:处理过程是指模块划分到最底层的那些模块的实现方式,也就是最基本的加工逻辑过程。对它的检查项目有:
①要求模块的功能结构与实现这些功能的处理过程的结构应明确对应;
②要求控制流应是结构化的;
③数据的结构与控制流之间的对应关系应是明确的,并且可依这种对应关系来明确数据流程的关系;
④用于描述的术语标准化。
(2)与运行环境的接口
运行环境包括硬件、其他软件和用户。与运行环境的接口应设计得较理想,要预见到环境的改变,并且当一旦要变更时,应尽量限定其变更范围和变更所影响的范围。
主要检查项目有:
1)与其他软件的接口:包括与上层软件的接口,如与操作系统等控制该软件的那些软件的接口;与同层软件的接口,如通过文件连接起来的那些软件的接口;与下层软件的接口,如编译程序与做为其输入的源程序之间的接口。
2)与硬件的接口:包括与硬件的接口约定,即根据硬件的使用说明等所做出的规定;硬件故障时的处理和超载时的处理。
3)与用户的接口,包括:
①与用户的接口规定,即通过用户手册做出的规定;
②输入数据的结构,如输入的种类、输入的形式、输入的数据量、输入表达式的容易理解程度、输入方法(输入设备种类)等;
③输出数据的结构,如输出的种类、输出的形式、输出的数据量、输出表达式的容易理解程度、输出方法(输出设备种类)等;
④异常输入时的处理;
⑤超载输入时的处理;
⑥用户存取资格的检查。
(3)变更的影响范围问题
随着软件运行环境的变更,软件的规格也在跟着不断地变更。在处理变更的过程中,重要的是要明确地掌握变更的影响范围,并且在设计上努力缩小其变更的影响范围。
运行环境变更时的影响范围,需要从以下三个方面来分析:
1)与运行环境的接口;
2)在每项设计工程规格内的影响;
3)在设计工程相互间的影响;
上述的1)是变更的重要原因,需要注意的是对那些不要求变更的部分的副作用。而2)是在每个软件结构范围内的影响。例如,若是改变某一功能,则与之相联系的父功能和它的子功能都会受到影响。如果要变更某一模块,则调用该模块的其他模块都会受到。此外,3)是指不同种类的软件结构相互间的。例如,当改变某一功能时,就会影响到模块的层次及模块结构,这些对模块的处理过程都将产生影响。
下面进一步详细说明这样的改变将影响的范围。
1)与运行环境的接口:参看此节标题2中的内容。包括与其他软件的接口、与硬件的接口及与用户的接口。
2)在每项设计工程规格内的影响:参看此节标题1中的内容。包括功能结构、功能的通用性、模块层次、模块结构及处理过程的结构。
3)在设计工程相互间的影响:包括功能结构与功能的通用性、功能结构与模块层次、模块层次与模块结构及模块结构与处理过程的结构。
|