[软件工程] 详细设计

详细设计

  • 详细设计
    • 一、 结构程序设计
    • 二、 人机界面设计
      • (一) 设计问题
        • 1. 系统响应时间
        • 2. 用户帮助设施
        • 3. 出错信息处理
        • 4. 命令交互
      • (二) 设计过程
      • (三) 人机界面设计指南
        • 1. 一般交互指南
        • 2. 信息显示指南
        • 3. 数据输入指南
    • 三、 过程设计的工具
      • (一) 程序流程图
      • (二) 盒图(N-S图)
      • (三) PAD图
      • (四) 判定表
      • (五) 判定树
      • (六) 过程设计语言 PDL
    • 四、面向数据结构的设计方法
      • (一) Jackson图
        • 1.Jackson图的优点:
        • 2.Jackson图表达符
        • 3.Jackson伪代码
      • (二)Jackson方法
        • 1.两种方法的比较
        • 2.Jackson方法的步骤
    • 五、程序复杂程度的定量度量定性度量软件质量——软件设计基本原理;
      • (一) McCabe方法
        • 1. 流图
        • 2. 计算环形复杂度的方法
        • 3. 环形复杂度的用途
      • (二) Halstead方法

详细设计

详细设计的基本目的就是回答“详尽、精确地描述系统各模块的具体实现方法”。
详细设计的结果基本决定了最终程序代码的质量,其中包括:正确性、可读性、效率。

一、 结构程序设计

结构程序设计的经典定义:“如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。”

消灭GOTO语句!
  仅用3种基本结构,称为经典的结构程序设计;
  若还允许使用DO-CASE(多分支循环)、DO-UNTIL(直到型循环),成为扩展结构程序设计;
  如果在允许使用LEAVE(或BREAK,中断)结构,则称为修正结构程序设计。

二、 人机界面设计

对于交互式系统来说,人机界面设计数据设计体系结构设计及过程设计一样重要。

  • 直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命。
  • 人机界面目前所占的工作量越来越大

(一) 设计问题

在设计人机界面常会遇到下述4个问题:

  • 系统响应时间
  • 用户帮助设施
  • 出错信息处理
  • 命令交互

上述问题,最好在设计初期作为重要的设计问题来考虑,这时修改比较容易,代价也低。

1. 系统响应时间

  • 系统响应时间是指从用户完成某个控制动作(例如,按回车键或点击鼠标),到软件给出预期的响应(输出信息或做动作)之间的这段时间。
  • 系统响应时间有两个重要属性,分别是长度和易变性。
    响应时间过长,会感到沮丧;
    响应时间过短,会迫使用户加快节奏,会犯错。
  • 易变性指系统响应时间相对于平均响应时间的偏差。一般稳定较好,若发生变化,用户往往比较敏感,担心系统工作出现了异常。

2. 用户帮助设施

几乎交互式系统的每个用户都需要帮助,大多数现代软件都提供联机帮助设施,这使得用户无须离开用户界面就能解决自己的问题。
  常见的帮助设施可分为集成的(根据当前的应用进行的帮助)和附加的(需查询使用)两类。集成的帮助优于附加的帮助设施。
  具体设计帮助设施时,必须解决下述的一系列问题。
(1) 帮助的程度:全部还是部分;
(2) 如何实现帮助:菜单、功能键和HELP命令;
(3) 怎样显示帮助信息:独立窗口、指出参考某个文档(不理想)、显示简短;
(4) 使用帮助后,如何返回原交互方式中:返回按钮、功能键;
(5) 如何组织帮助信息:平面结构、信息的层次结构和超文本结构。

3. 出错信息处理

交互式系统的出错信息或警告信息,应该具有下述属性:
  (1) 信息应该使用用户可以理解的术语描述问题;
  (2) 信息应该提供有助于从错误中恢复的建设性意见;
  (3) 信息应该指出错误可能导致哪些负面后果(例如,破坏数据文件);
  (4) 信息应该伴随着听觉上或视觉上的提示,强化出现异常;
  (5) 信息不能带有指责用户的内容。
  
当确实出现了问题的时候,有效的出错信息能提高交互式系统的质量,减轻用户的挫折感。

4. 命令交互

在多数情况下,用户既可以从菜单中选择软件功能,也可以通过键盘命令序列调用软件功能。
在提供命令交互方式时,必须考虑下列设计问题:
  (1) 是否每个菜单选项都有对应的命令;
  (2) 采用何种命令形式:控制序列(如Ctrl+P)、功能键、键入命令。
  (3) 命令的难度有多大,忘记了命令怎么办;
  (4) 用户是否可以定制或缩写命令。

(二) 设计过程

用户界面设计是一个迭代的、原型实现过程,各种用于界面设计和原型开发的软件工具较多,它们为简化窗口、菜单、设备交互、出错信息、命令及交互环境的许多其他元素的创建,提供了各种例程或对象。
使用评估的程序,直到用户满意为止。
早期评价用户界面的几个方面:
1.界面的规格说明书的长度和复杂程度,预示了用户学习使用该系统所需要的工作量。
2.命令或动作的数量、命令的平均参数个数或动作中单个操作的个数,预示了系统的交互时间和总体效率。
3.设计模型中包含的动作、命令和系统状态的数量,预示了用户学习使用该系统时需要记忆的内容的多少。
4.界面风格、帮助设施和出错处理协议,预示了界面的复杂程度及用户接受该界面的程度。

(三) 人机界面设计指南

1. 一般交互指南

2. 信息显示指南

3. 数据输入指南

三、 过程设计的工具

  • 描述程序处理过程的工具称为过程设计的工具。
  • 一般有图形、表格和语言3种。

(一) 程序流程图

(三) PAD图

(四) 判定表

对于多重嵌套的条件选择,用程序流程图、盒图、PAD图或后面即将介绍的过程设计语言(PDL)都不易清楚地描述。
  例如:假设某航空公司规定,乘客可以免费托运重量不超过30kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。
利用判定表则可清晰地描述。

(五) 判定树

判定表含义不是一眼就能看出来的。

(六) 过程设计语言 PDL

PDL(Program Design Language)程序设计语言,这是一种结构化的语言。是非形式化比较灵活的语言,用于描述模块内部过程的具体算法,以便在开发人员之间比较精确的进行交流。
PDL的语法是开放式的,其外层语法是确定的,而内层语法则不确定。外层语法描述控制结构它用类似于一般程序设计语言控制结构的关键字:
IF-THEN-ELSE WHILE- DO REPEAT- UNTIL
DO CASE DO WHILE 等表示。
有时还用关键字反排,表示控制结构结束:
   DO – OD IF – FI

四、面向数据结构的设计方法

面向数据结构的设计方法是按输入和输出以及内部存储信息的数据结构进行设计,然后再把数据结构的描述变换为对软件结构的描述。
  Jackson方法和Warnier方法是最著名的两个面向数据结构的设计方法,本节结合一个简单例子扼要地介绍Jackson方法,目的是使读者对面向数据结构的设计方法有初步了解。
  
  面向数据结构的设计与面向数据流的设计的异同

  • Jackson图是层次图的一种精化,两者的图形类似,但有着许多区别,表现在:
  • 层次图主要描绘软件结构,而Jackson图除描绘软件结构外,也能描绘数据结构;
  • 层次图中的一个方框代表一个模块,而Jackson图即使在描绘程序结构时,一个方框也不表示一个模块,而只代表几个语句;
  • 层次图表现的是调用关系,通常一个模块除了调用下级模块外还完成其它操作;而Jackson图表现的是组织关系,一个方框中包括的操作仅仅由它下层框中的哪些操作组成。

3.Jackson伪代码

Jackson图中三种结构对应的伪代码如下(凡带下划线的字均为关键字)

  • 用任何方法表示的过程设计结果,都可以翻译成流图。

  • 图6.16是用PDL表示的处理过程及与之对应的流图。

    2. 计算环形复杂度的方法

    环形复杂度定量度量程序的逻辑复杂度。
    利用流图,可以用下述3种方法中的任何一种来计算环形复杂度。
      (1) 流图中的区域数等于环形复杂度。
      (2) 流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
      (3) 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。

    (1) 流图中的区域数等于环形复杂度;V(G)=4
      (2) 流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数;E=11,N=9,V(G)=4
      (3) 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目;P=3,V(G)=4。

    3. 环形复杂度的用途

    程序的环形复杂度取决于程序控制流的复杂程度,也即是取决于程序结构的复杂程度。
      当程序内分支数或循环个数增加时,环形复杂度也随之增加,因此它是对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。
      McCabe研究大量程序后发现,环形复杂度高的程序往往是最困难、最容易出问题的程序。实践表明,模块规模以V(G)≤10为宜,也就是说,V(G)=10是模块规模的一个更科学更精确的上限。

    (二) Halstead方法

    Halstead方法是根据程序中运算符和操作数的总数来度量程序的复杂程度。
      令N1为程序中运算符出现的总次数,N2为操作数出现的总次数,程序长度N定义为:N=N1+N2。
      详细设计完成之后,可以知道程序中使用的不同运算符(包括关键字)的个数n1,以及不同操作数(变量和常数)的个数n2。Halstead给出预测程序长度的公式如下:H=n1log2 n1+n2 log2n2
      多次验证都表明,预测的长度H与实际长度N非常接近。
      Halstead还给出了预测程序中包含错误的个数的公式如下:E=N log2 (n1+n2)/3000
      有人曾对从300条到12000条语句范围内的程序核实了上述公式,发现预测的错误数与实际错误数相比误差在8%之内。

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2019年9月27日
    下一篇 2019年9月27日

    相关推荐