软件工程导论—详细设计(上)

简介: 软件工程导论—详细设计

文章目录


1. 结构程序设计

2. 人机界面设计

2.1. 人机界面设计概述

2.2. 人机界面设计问题

2.3. 人机界面设计过程

3. 过程设计工具

3.1. 程序流程图

3.2. 盒图(N-S图)

3.3. PAD图

3.4. 判定表(决策表)

3.5. 判定树(决策树)

3.6. 过程设计语言

4. 面向数据结构的设计方法

4.1. 面向数据结构的设计方法概述

4.2. Jackson图

4.4. Jackson方法

5. 程序复杂程度的定量度量

5.1. 程序复杂程度的定量度量概述

5.2. McCabe方法

5.3. Halstead方法


正文


1. 结构程序设计


详细设计阶段的根本目标是确定应该怎样具体地实现所要求的系统。经过这个阶段的设计工作,应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。


结构程序设计技术是实现上述目标的关键技术,因此是详细设计的逻辑基础。


结构程序设计的经典定义是:如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。为了实际使用方便起见,常常还允许使用DO-UNTIL和DO-CASE两种控制结构。


有时需要立即从循环(甚至嵌套的循环)中转移出来,允许使用LEAVE(或BREAK)结构。LEAVE或BREAK结构实质上是受限制的GOTO语句,用于转移到循环结构后面。

33.png


2. 人机界面设计


2.1. 人机界面设计概述


人机界面设计是接口设计的重要组成部分。对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。


人机界面的设计质量,直接影响用户对软件产品的评价,从而影响软件产品的竞争力和寿命,必须对人机界面设计给予足够重视。


人机界面设计有三条黄金规则:


界面要置用户于控制之下;

界面内容要减少用户记忆负担;

各个保持界面一致。


2.2. 人机界面设计问题


设计人机界面过程中会遇到的4个问题:


系统响应时间

系统响应时间指从用户完成某个控制动作,到软件给出预期的响应之间的这段时间。系统响应时间有两个重要属性:长度和易变性。

长度:如果系统响应时间过长,用户就会感到紧张和沮丧;系统响应时间过短会迫使用户加快操作节奏,从而可能会犯错误。

易变性:指系统响应时间相对于平均响应时间的偏差,即使系统响应时间较长,响应时间易变性低也有助于用户建立起稳定的工作节奏。

用户帮助设施

大多数现代软件都提供联机帮助设施,用户无须离开用户界面就能解决自己的问题。常见的帮助设施可分为集成的和附加的两类。

集成的帮助设施设计在软件里面,它对用户工作内容是敏感的,用户可以从与刚刚完成的操作有关的主题中选择一个请求帮助。

附加的帮助设施是在系统建成后再添加到软件中的,它实际上是一种查询能力有限的联机用户手册。集成的帮助设施优于附加的帮助设施。

出错信息处理

出错信息和警告信息,是出现问题时交互式系统给出的“坏消息”。

命令交互

多数情况下,用户既可以从菜单中选择软件功能,也可以通过键盘命令序列调用软件功能。在理想的情况下,所有应用软件都有一致的命令使用方法。


2.3. 人机界面设计过程


用户界面设计是一个迭代的过程,也就是说,通常先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改。

为了支持上述迭代过程,各种用于界面设计和原型开发的软件工具应运而生。这些工具被称为用户界面工具箱或用户界面开发系统。

34.png


3. 过程设计工具


3.1. 程序流程图


程序流程图又称为程序框图,它是历史最悠久、使用最广泛的描述过程设计的方法。


44.png

它的主要优点是对控制流程的描绘很直观,便于初学者掌握。

程序流程图的主要缺点有:


程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构;

程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制;

程序流程图不易表示数据结构。


3.2. 盒图(N-S图)


盒图具有功能域明确的特点,很容易确定局部和全程数据的作用域,能清晰的表现嵌套关系,也可以表示模块的层次结构。不可以任意转移控制。

45.png

例如下面的程序流程图,N-S图表示如下。

46.png


3.3. PAD图


PAD是问题分析图(problem analysis diagram)的英文缩写,自1973年由日本日立公司发明以后,已得到一定程度的推广,它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。

47.png

它拥有如下优点:


使用表示结构化控制结构的PAD符号设计出来的程序必然是结构化程序;

PAD图所描绘的程序结构十分清晰;

PAD图表现程序逻辑易读、易懂、易记;

容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成;

即可表示程序逻辑,也可描绘数据结构;

PAD图的符号支持自顶向下、逐步求精方法的使用。

例如下面的程序流程图,PAD图表示如下。


48.png


3.4. 判定表(决策表)


当算法中包含多重嵌套的条件选择时,用程序流程图、盒图、PAD图或后面即将介绍的过程设计语言(PDL)都不易清楚地描述。

判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。

54.png

如上图所示,一张判定表由4部分组成:

  1. 左上部列出所有条件;
  2. 左下部是所有可能做的动作;
  3. 右上部是表示各种条件组合的一个矩阵;
  4. 右下部是和每种条件组合相对应的动作。

一张典型的判定表如下所示:



1
2 3 4
条件 发货单金额 >$500 >$500 <=$500 <=$500
赊欠情况 >60天 <=60天 >60天 <=60天
操作 不发出批准书
发出批准书
发出发货单
发出赊欠报告


判定表能清晰地表示复杂的条件组合与应做的动作之间的对应关系。但判定表的含义不是一眼就能看出来的,初次接触这种工具的人理解它需要有一个简短的学习过程,当数据元素的值多于两个时,判定表的简洁程度也将下降,此时建议使用判定树。


3.5. 判定树(决策树)


判定树是判定表的一种简化形式,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。因此多年来判定树一直受到人们的重视,是一种比较常用的系统分析和设计的工具。


判定树的形式简单,一眼就可以看出其含义,因此易于掌握和使用。但是它的简洁性不如判定表,数据元素的同一个值往往要重复写多遍,而且越接近树的叶端重复次数越多,并且画判定树时分枝的次序可能对最终画出的判定树的简洁程度有较大影响。


如下判定树示例,用来计算行李费:

56.png


3.6. 过程设计语言


过程设计语言(PDL)也称为伪代码,它是用正文形式表示数据和处理过程的设计工具。


PDL具有严格的关键字外部语法,用于定义控制结构和数据结构;另一方面,PDL表示实际操作和条件的内部语法通常又是灵活自由的,可以适应各种工程项目的需要。


PDL是一种“混杂”语言,它使用一种语言的词汇,同时却使用另一种语言的语法。


伪代码的基本控制结构有三种:


简单陈述句结构:避免复合语句;

判定结构:IF_THEN_ELSE或CASE_OF结构;

选择结构:WHILE_DO或REPEAT_UNTIL结构。

例如用伪代码设计检测发货单的过程

IF 发货单金额超过$500 THEN
  IF 欠款超过60天 THEN
    在偿还欠款前不予批准
  ELSE 欠款未超期
    发批准书及发货单
  ENDIF
ELSE 发货单金额未超过$500
  IF 欠款超过60天 THEN
    发批准书、发货单及催款通知
  ELSE 欠款未超期
    发批准书及发货单
  ENDIF
ENDIF

PDL可以作为注释直接插在源程序中间。有助于保持文档和程序的一致性,提高了文档的质量。也可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。现在已经有自动处理程序存在,而且可以自动由PDL生成程序代码,极大方便了工作。但不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时,不如判定表清晰简单。

相关文章
|
6月前
|
机器学习/深度学习 人工智能 测试技术
【软件设计师备考 专题 】软件工程的未来:面向构件和统一建模语言(UML)
【软件设计师备考 专题 】软件工程的未来:面向构件和统一建模语言(UML)
138 0
|
算法 程序员 Go
[软件工程导论(第六版)]第6章 详细设计(复习笔记)
[软件工程导论(第六版)]第6章 详细设计(复习笔记)
|
算法 数据挖掘 数据库
[软件工程导论(第六版)]第5章 总体设计(复习笔记)
[软件工程导论(第六版)]第5章 总体设计(复习笔记)
|
算法 数据库 开发者
[软件工程导论(第六版)]第3章 需求分析(复习笔记)
[软件工程导论(第六版)]第3章 需求分析(复习笔记)
|
6月前
|
测试技术
【软件工程】高效需求分析在软件工程中的精要
【软件工程】高效需求分析在软件工程中的精要
193 0
|
存储 自然语言处理 数据库
|
机器学习/深度学习 算法 数据格式
软件工程导论—详细设计(下)
软件工程导论—详细设计(下)
软件工程导论—总体设计(下)
软件工程导论—总体设计(下)
|
安全 算法 测试技术
|
机器学习/深度学习 小程序 测试技术