SlideShare uma empresa Scribd logo
1 de 120
详细设计的目标

详细设计的根本目标是:
详细设计的基本任务

 为每个模块进行详细的算法设计;
 为模块内的数据结构进行设计;
 对数据库进行物理设计;
 其他设计:
  确定程序模块间的详细接口,根据软件
 系统的类型,还可能要进行代码设计、输入
 输出格式设计、人机界面设计等设计;
 编写详细设计说明书;
 对详细设计进行评审。
第 6 章


详细设计(模块设计)
第 6 章 详细设计(模块设计)


 6.1 结构化程序设计(S P)
 6.2 人机界面设计
 6.3 过程设计工具
 6.4 面向数据结构的设计方法
 6.5 程序复杂程度的定量度量
6.1 结构化程序设计
     一 . 结构化程序设计 (S P)
          的主要思想

 需求分析阶段    总体设计阶段     详细设计阶段
  S A 方法    S D 方法     S P 方法


 主要思想 设计方法:自顶向下、逐步求精
 结构化程序设计:指导人们用良好的思想方法
  开发出易理解、易验证的程序。
6.1 结构化程序设计
一 . 结构化程序设计 (S P)
     的主要思想
6.1 结构化程序设计
         二 . 结构化程序设计 (S P)
           的三种基本控制结构

 1966 年, C . B o hm 和 G . J a c o p ini 证明:只
  用三种基本控制结构就能实现任何单入口单出口的
  程序。
 结构化程序设计的三种基本控制结构                        exp F
      A          T           F
                     exp                  T
                 A           B              A
      B

   顺序结构             分支结构             循环结构
图 6.2 其他常用的控制结构
6.1 结构化程序设计




                  开始


 P141   习题 4     p


 右侧程序流程图是        g
  一个非结构化的程
  序
                  q

                       停止
6.1 结构化程序设计




  开始           开始



  p             p


  g             g


  q             q

       停止           停止


  当型循环?             直到型循
环?
6.1 结构化程序设计
         三 . 结构化程序设计 (S P)
              的设计准则

   一个程序模块内的基本结构(即顺序、选
    择和循环)应尽量少;
   将一个基本结构组成一个容易识别的程序
    块;
   程序块的入 / 出口都只有一个
6.1 结构化程序设计
      四 . 如何把非结构化的程序
         转化成结构化的程序
1. 重复编码法:
          1                1


      2       4        2       4

       goto 语句
  3               3        4

      非结构化程序           结构化程序
6.1 结构化程序设计
         四 . 如何把非结构化的程序
            转化成结构化的程序

       2. 布尔标识法:
WHILE p DO                   p   F
 BEGIN                       T
      …                  F   q   T
    IF q THEN GOTO L1;
    A;                       A
    B
                             B
  END;                               L1
L1: …      非结构化程序
6.1 结构化程序设计
         四 . 如何把非结构化的程序
            转化成结构化的程序
                                      b:=True
bool := true;
WHILE (p and bool) DO
  BEGIN                                p&b          F

   …                                    T
    IF q THEN bool := false       F     q       T
         ELSE BEGIN
                A;            A             b:=False

                B
               END            B
  END;
                                                        L1
 …                    结构
6.1 结构化程序设计
    四 . 如何把非结构化的程序
       转化成结构化的程序
              b:=True



    p   F                p&b        F

    T                    T
F   q   T            F   q     T


                 A           b:=False
    A

    B            B
            L1
                                        L1
五、结构化程序设计

 经典的结构程序设计:只允许使用顺序
  、 IF-THEN-ELSE 型分支和 DO-WHILE 型
  循环这 3 种基本控制结构。
 扩展的结构程序设计:还允许使用 DO-
  CASE 型多分支结构和 DO-UNTIL 型循环结
  构;
 修正的结构程序设计:再加上允许在循
  环体中使用 LEAVE( 或 BREAK) 结构。
6.1 结构化程序设计

   六 . 结构化程序设计 (S P) 的优点

 自顶向下、逐步求精:采用先整体后局部、先抽象
  后具体的方法开发出来的软件具有良好的结构,且
  开发出的程序易于理解;
 单入口单出口:良好的结构特征,降低复杂度,增
  强可读性,可维护性,可验证性等,从而提高软件
  开发工程的成功率和生产率;
 有利于程序正确性的证明。
6.2 人机界面设计

         人机界面概述

 人机界面( Huma n- C o mp ute r
  Inte rfa c e ,简称 HC I )又称人 - 机
  接口或用户界面,它是用户与计算机
  系统交换信息的媒介,更是用户使用
  计算机系统的综合操作环境。
 设计用户界面不仅需要计算机科学的
  理论和知识,而且需要认知心理学以
  及人 - 机工程学、语言学等学科的知
  识。
最有影响的事件和成果




   1963 年发明鼠标器的美国斯坦福研究所的
    D.Engelbart ,他预言鼠标器比其他输入设备
    都好,并在超文本系统、导航工具方面做了
    杰出的成果 (Augmented Human Intellect
    project ) ,而获 1997 年 ACM 图灵奖。 10 年
    后鼠标器经不断改进,成为影响当代计算机
    使用的最重要成果。
最有影响的事件和成果

 70 年代 Xerox 研究中心
  的 Alan Kay 提出了
  Smalltalk 面向对象程
  序设计等思想,并发明
  了重叠式多窗口系统。

 1989 年 Tim Berners-
  Lee 在日内瓦的 CERN 用
  HTML 及 HTTP 开发了 WWW
  网,随后出现了各种浏
  览器(网络用户界面)
  ,使互联网飞速发展起
  来。
最有影响的事件和成果
 90 年代美国麻省理工学
  院 N.Negroponte 领导
  的媒体实验室在新一代
  多通道用户界面方面
  (包括语音、手势、智
  能体等),做了大量开
  创性的工作。

 90 年代美国 Xerox 公司
  PARC 的首席科学家
  Mark Weiser 首先提出
  “无所不在计算
  ( Ubiquitous
6.2 人机界面设计


                    人机界面概述

  人机界面的风格 — — 四代。
     第一代界面 — — 命令和询问方式。
     通信完全以正文形式并通过用户命令和用户对
  系统询问的响应来完成。例如:
D > run p ro g 1. e xe /d e b ug =' o n' /o ut=p l /in=t1
  /a llo c =1000k
RUN A L L O C A TIO N TO B E Q UE UE D ? > > ye s
A UTO MA TIC C HE C K PO INTING INTE RVA L ?
  >>5
6.2 人机界面设计


                      人机界面概述
 第二代界面 — — 简单的菜单式,例如:
   c ho o s e p ro g ra m o p tio n tha t is d e s ire d :
   1=inp ut d a ta ma nua lly
   2=inp ut d a ta fro m e xis ting d a ta file
   3=p e rfo rm s imp lifie d a na lys is
   4=p e rfo rm d e ta ile d a na lys is
   5=p ro d uc e ta b ula r o utp ut
   6=p ro d uc e g ra p hic a l o utp ut
   7=o the r o p tio ns c la s s e s
   s e le c t o p tio n? _
  这种方式与命令行方式相比不易出错,但使用起
  来仍然乏味。
6.2 人机界面设计


                人机界面概述

 第三代界面 — — 面向窗口的点选界面
 ( p o int a nd p ic k inte rfa c e )
  亦称为 WIMP 界面,
即:窗口( wind o ws )、                四位一体,
  图标( ic o ns )、              形成桌面
 ( d e s kto p )
  菜单( me nus )、
  指示器( p o inting d e vic e )
人机界面技术的进展

1. 自然、高效的多通道交互
2. 移动手持设备的人机交互
3. 智能用户界面
6.2 人机界面设计


       一 . 设计问题
  设计人机界面,必须考虑四个方面:
        系统的响应时间;
        用户帮助设施;
        出错信息处理;
        命令方式。
1 )系统响应时间指当用户执行了某个控制动作后
  (如,点击鼠标器等),系统做出反应的时间
  (指输出信息或执行对应的动作)。
   系统响应时间过长、不同命令在响应时间上的
  差别过于悬殊,用户将难以接受。
6.2 人机界面设计


        一 . 设计问题
2 )用户都希望得到联机帮助。
   联机帮助设施有两类:集成式和附加式。
① 集成式帮助一般都与软件设计同时考虑,上下文
  敏感,整个帮助过程快捷而友好;
② 附加式帮助一般是在软件完成后附上一个受限的
  联机用户手册。
   此外,还要考虑诸如帮助范围(仅考虑部分还是
  全部功能)、用户求助的途径、帮助信息的显示
  、用户如何返回正常交互工作及帮助信息本身如
  何组织等一系列问题。
6.2 人机界面设计


      一 . 设计问题

3 )出错信息处理
  出错信息应选用用户明了、含义准确的
 术语描述,同时还应尽可能提供一些有关
 错误恢复的建议。此外,显示出错信息时
 ,若辅以听觉(如铃声)、视觉(专用颜
 色)刺激,则效果更佳。
6.2 人机界面设计


      一 . 设计问题
4 )命令交互
   键盘命令曾经一度是用户与软件系统之
  间最通用的交互方式,随着面向窗口的界
  面的出现,键盘命令虽不再是唯一的交互
  形式,但许多有经验的熟练的软件人员仍
  喜爱这一方式,更多的情形是菜单与键盘
  命令并存,供用户自由选用。
6.2 人机界面设计


            二 . 设计过程
                        用户界面设计是一个迭代
        初步设计            过程,直至与用户模型和
                        系统假想一致为止。
创建界面                 创建新界面
 原型 1                 原型

        用户评审界面                 修改设计

                    设计人员分析
                    用户评审意见     界面设计
                                完毕
         图 12-3-1   界面设计演进过程
6.3 过程设计工具

      一 . 过程设计工具分类

   详细设计           编码实现

   •程序流程图          基于某种程序设
   •盒图( N - S 图)   计语言的源程序
图形                    代码
   •问题分析图( PAD 图)
   •判定树
                 要求:无二义性描
表格 •判定表          述
语言 •过程设计语言 PDL 或伪码( Psudo-
   code )
6.3 过程设计工
                        具
          二 . 程序流程图

 历史最悠久 , 使用最广泛 ;   但使用最混乱 .
 程序流程图中使用的符号
 程序流程图也称为程序框图,它使用五种基本控制结
  构:
6.3 过程设计工
                 具
        二 . 程序流程图
 优点:
 • 简单易用、容易修改;
 • 对控制流程直观、易于理解、易于复审,便于初
   学者掌握。
 缺点:
 • 诱使程序员过早考虑控制流程,而不考虑程序的
   全局结构;不是逐步求精的过程。
 • 采用箭头表示控制流,随意转移控制 , 导致破坏
   结构程序设计的精神;
 • 不易表示数据结构,数据的处理与变换不清楚;
6.3 过程设计工
                          具
          三 . 盒图( N - S 图)
 不允许违背结构化程序设计精神
      没有箭头,因此不允许随意转移控制。
 由美国 I.Nassi 和 B.Shneiderman,1973 年提出。

    功能域(即一个结构的作用域)明确
    不可能任意转移控制

    易于确定局部和全局数据的作用域

    易于表现嵌套关系和模块的层次结构

  坚持使用盒图作为详细设计的工具,可以使程
 序员逐步养成用结构化的方式思考问题和解决问题
 的习惯。
6.3 过程设计工
                                      具
            三 . 盒图( N - S 图)
 N - S 图的基本符号
                                          循环条件
 任务      F 条        T       F   条件 T
 1 2
 任务       else件 then             then      do-while
          部分 部分                  部分         部分
 任务 3
         if-then-else 结构     if-then 结构   do-while 结构
顺序结构
                           case 条件
                                           do-until
                    值1       值2      值n     部分
  子程序
                   case1 case2 casen       循环条件
  P
 调用子程序             部分 部分 部分               do-until 结构
                           case 结构
6.3 过程设计工
                                        具
                   三 . 盒图( N - S 图)
例
                       a
                   b
                                   k:
T                  x1          F
                                              x2
         f
        x4                                1        2   3
T                  F
    i          g           k
                                   Do-While x3
                                                   d   e
Do-Until x5    h                              c

             Do-Until x6
                  j
6.3 过程设计工
                  具
     四 . 问题分析图( Problem
      Analysis Diagram 图)

   PAD 图
   日立公司, 1973 年发明
   采用二维树形结构来表示程序的控制流。
   它即克服了传统的流程图不能清晰表现程序
    结构的缺点,又不像 N- S 图那样受到把全
    部程序约束在一个方框内的限制,这就是其
    优势所在。
6.3 过程设计工
                                          具
         四 . 问题分析图( Problem
          Analysis Diagram 图)
    P1               P1                             def
             C                                 P1
    P2               P2                   L1
                                          L2   P2         P11
顺序结构              选择结构                   X=
          ( if C the n P 1 e ls e P 2)
                                          Ln   Pn
WHILE C          P
                                         Case 分支
 While 型循环结构                             与分层结构
                                          ( 用 def 细化处理框 )
UNTIL C          P             连接
                               ( 语句标号 )
Until 型循环结构
6.3 过程设计工
              四.             问题分析图
                                 具
            ( Problem Analysis
              Diagram 图)
开始 始                                 f
        a                                     Until x5       i
                        b
       Until x6                      x4

                        x1                     g
        j                            k
结束 束                                           h

                                          While x3       c
                                 1
        k         def
                            x2   2        d
                                 3        e
6.3 过程设计工
                     具
     四 . 问题分析图( Problem
      Analysis Diagram 图)
 主要优点:
   ( 1 )由该图设计出的程序必为结构化的

   ( 2 )结构非常清晰,竖线的条数即程序的层次

    数
   ( 3 )所表现的程序逻辑易读、易懂、易记

   ( 4 )可利用软件工具自动转换为高级语言源程

    序
   ( 5 )既可表示程序逻辑,也可描绘数据结构

   ( 6 )支持自顶向下、逐步求精(利用 def )


 面向高级语言: FORTRAN , PASCAL 等都有相应
6.3 过程设计工
                       具
                五. 判 定 表


    判定表 复杂的条件组合           应做的动作
    :

        条件           条件组合项
     (所有条件)        (条件组合的矩阵)

        操作           操作执行项
    (所有可能的动作)    (与每种条件组合相应的动作)
6.3 过程设计工
             具
     五. 判 定 表

 建立判定表的步骤
6.3 过程设计工
             具
     五. 判 定 表

 判定表的分析过程
6.3 过程设计工
              具
      五. 判 定 表

 步骤 1 :求出各种判定条件可能的取
  值;
6.3 过程设计工
              具
      五. 判 定 表

 步骤 2 :根据条件取值数,计算条件
  组合数
6.3 过程设计工
              具
      五. 判 定 表

 步骤 3 :在判定表中列出所有条件组
  合,求出各组合的操作判定值
6.3 过程设计工
      具
五. 判 定 表
6.3 过程设计工
      具
五. 判 定 表
6.3 过程设计工
      具
五. 判 定 表
6.3 过程设计工
      具
五. 判 定 表
6.3 过程设计工
      具
五. 判 定 表
6.3 过程设计工
      具
五. 判 定 表
6.3 过程设计工
      具
五. 判 定 表
6.3 过程设计工
                具
       五. 判 定 表

 下面以行李托运费的算法为例说明判定表的
  组织方法。假设某航空公司规定,乘客可以
  免费托运重量不超过 30kg 的行李。当行李
  重量超过 30kg 时,对头等舱的国内乘客超
  重部分每公斤收费 4 元,对其他舱的国内乘
  客超重部分每公斤收费 6 元,对外国乘客超
  重部分每公斤收费比国内乘客多一倍,对残
  疾乘客超重部分每公斤收费比正常乘客少一
  半。
Rules
                     Rule   五 .1 判 定 4 5
                                 2 3 表              6   7   8   9
Condition rows



                 国内乘客           T   T   T    T      F   F   F   F
                 头等舱            T   F   T    F      T   F   T   F
                 残疾乘客           F   F   T    T      F   F   T   T
                 行李重量 W ≤30   T F   F   F    F      F   F   F   F
                 免费           ×
                 (W-30) ×2              ×
Action rows




                 (W-30) ×3                    ×
                 (W-30) ×4      ×                           ×
                 (W-30) ×6          ×                           ×
                 (W-30) ×8                          ×
                 (W-30) ×12                             ×
                       用判定表表示计算行李费的算法
判定表

 适合描述:包含复杂的条件组合,并要根据
  这些条件选择动作执行的模块;
 缺点:
    不能表示:循环、顺序和选择。
    当条件为多值条件时(如机票分为头等舱、二
     等舱、经济舱等多种级别),判定表的简洁程
     度也下降。
    其含义不能一眼看出,初用者需要一个简短的
     学习过程
六. 判 定 树    6.3 过程设计工
                具
判定树:判定表的变种;形式简单,但简洁性不如判
           定表 残疾乘    (W-30) × 2
                   头等舱    客
              国内         正常乘   (W-30) × 4
              乘客          客
                         残疾乘   (W-30) × 3
                   其他舱    客
    行李重                  正常乘   (W-30) × 6
    量 W>                  客
                         残疾乘   (W-30) × 4
行    30
                   头等舱    客
李
              外国         正常乘   (W-30) × 8
费
              乘客          客
算                        残疾乘   (W-30) × 6
法                  其他舱    客
    行李重量                 正常乘   (W-30) × 12
               免费         客
     W ≤ 30
判定树

 形式简单: 不用任何说明,一眼可看出
  含义;易学易用。
 缺点:
   简洁性较差: 同一个数据元素的值往

    往要要重复写多遍。
   分支的次序:对判定树的简洁程度有较

    大影响
6.3 过程设计工
                       具
   七 . 过程设计语言 PDL (伪码
           )
 伪码:一种以正文形式表示数据和处理过程的设
  计工具,是一种混合语言。
伪码=严格的关键字外部语法+自然语言的词汇
    C 、 PAS C AL ,借用     英语 / 汉语
    某种结构化的程序设           ,某种自然语
    计语言的语法控制框              言
          架。
                       灵活表示实际
  用于定义控制结              操作和条件
  构和数据结构
(1) 、数据说明 :
          其功能是定义数据的类型和作用域
  格式 : TYPE < 变量名 > AS < 限定词 1> < 限定词 2>
说明 : 1. 变量名 : 是一个模块内部使用的变量或模块间共用
            的全局变量名。
      2. 限定词 1 : 标明数据类型
      3. 限定词 2 : 标明该变量的作用域

     TYPE number AS STRING LENGTH (12)


 (2) 、程序块 : 的过程成分是由块结构构成的,而块将作为
        PDL
        一个单个的实体来执行。


         BEGIN < 块名 >
               < 一组伪代码语句 >
         END
把 :
(3) 、子程序结构 PDL 中的过程称为子程序。

  PROCEDURE < 子程序名 > < 一组属性 >
   INTERFACE < 参数表 >
        < 程序块或一组伪代码语句 >
  END

(4) 、基本控制结构 :

     READ/WRITE TO < 设备 > <I/O 表 >
           --- 输入 / 输出结构


   IF < 条件 >
    THEN < 程序块 / 伪代码语句组 > ;
    ELSE < 程序块 / 伪代码语句组 > ;
   ENDIF

           --- 选择型结构
DO LOOP < 条件描述 >
DO WHILE < 条件描述 >
                              < 程序块 / 伪代码语句组 > ;
   < 程序块 / 伪代码语句组 > ;
                              EXIT WHEN
ENDDO
                           ENDLOOP


 REPEAT UNTIL < 条件描述 > DO FOR < 下标 = 下标表,表达式 >
   < 程序块 / 伪代码语句组 > ;     < 程序块 / 伪代码语句组 > ;
 ENDREP                ENDFOR


    --- 重复型结构                --- 重复型结构


  CASE OF <case 变量名 > ;
    WHEN < case 条件 1> SELECT < 程序块 / 伪代码语句组 > ;
    WHEN < case 条件 2> SELECT < 程序块 / 伪代码语句组 > ;
                                              ---- 多路选择结构
    … …
    DEFAULT: < 缺省或错误 case: < 程序块 / 伪代码语句组 > ;

  ENDCASE
6.3 过程设计工
             具
  七 . 过程设计语言 PDL (伪码
          )
 PDL 的特性
6.3 过程设计工
              具
 七 . 过程设计语言 PDL (伪码
         )
 示例:拼写检查程序
6.3 过程设计工
                  具
  七 . 过程设计语言 PDL (伪码
          )
 使用 PDL 语言逐步求精
6.3 过程设计工
                  具
  七 . 过程设计语言 PDL (伪码
          )
 使用 PDL 语言逐步求精
6.3 过程设计工
             具
  七 . 过程设计语言 PDL (伪码
          )
 PDL 的优点
6.3 过程设计工
                 具
      八. 总 结

 要求掌握:
  程序流程图
  N - S 图

  PA D 图
                 相互转换
  PD L 语言(伪码)

  判定树

  判定表
6.4 面向数据结构设计方
                   法
        面向数据结构的设计方法

 原理:重复出现的数据通常由循环控制结构处理
  ;选择数据通常由分支控制结构。
 缺点:没有足够重视和体现模块独立原理
 适用范围:详细设计阶段
 面向数据结构的设计方法:
   Jackson 方法:英国人 M.Jackson 在 1973 年

    提出
   Warnier 方法:法国人 J.D.Warnier 在 1973

    年提出
6.4 面向数据结构设计方
                         法
         面向数据结构的设计方法




               映射                 程序过程表示
  数据结构                程序结构
                                 (Jackson 伪代码
(Jackson 图 )        (Jackson 图 )
                                        )
  程序分析                        程序设
6.4 面向数据结构设计方
                               法
                    一 . Jac ks o n 图

 Jackson 图描述数据结构
           A                   A                 A


     B     C    D       B°    C°    D°           B*
      顺序结构                选择 结构             重复 结构

A 由 B 、 C 、 D 3 个元素顺序      根据条件,      A 由 B 出现 N 次 (N≥0) 组成
          组成        A 是 B 或 C 或 D 中的某一个
每个元素只出现一次,出现的
次序依次为 B 、 C 、 D
 小圈表示选择结构,星号表示重复结构。
6.4 面向数据结构设计方
            法
      一 . Jac ks o n 图

Jackson 图有下述优点:
1. 便于表示层次结构,而且是对结构进
行自顶向下分解的有力工具;
2. 形象直观可读性好;
3. 既能表示数据结构也能表示程序结构
( 因为结构程序设计也只使用上述 3 种基
本控制结构 ) 。
6.4 面向数据结构设计方
                 法
        二 . 改进的 Jac ks o n 图

 改进:
  选择条件或循环结束条件直接在图上表示
   出来,增强图的表达能力,容易直接把图
   翻译成程序
  框间连线为直线而不是斜线,从而容易在

   行式打印机上输出。
6.4 面向数据结构设计方法

         二 . 改进的 Jac ks o n 图


    A             A                 A        A

                   S(i)             S(i)      I(i)
B   C    D   B°   C°      D°   B°       —°   B*

    顺序            选择            可选           重复

在构成顺序结构的元素中不能有重复出现或选择出现的元素
 
即:第一个图中的BCD不能是在右上角有小圆圈或星
6.4 面向数据结构设计方
               法



 J a c ks o n 图、层次图和层次方框图的区别:

 图名     方框   连线      用途     阶段
                   设计模块内部   详细
Jackson 图 数据或程序 组成
                    处理过程    设计
                   描绘软件总体   总体
  层次图      模块   调用
                     结构     设计
                分析用户需要 需求
层次方框图   数据   抽象
                 的数据结构 分析
6.4 面向数据结构设计方法

三 . Jackson 方法
6.4 面向数据结构设计方法
三 . Jac ks o n 方法
 1 . 五个基本步骤
6.4 面向数据结构设计方法
三 . Jac ks o n 方法
 1 . 五个基本步骤
6.4 面向数据结构设计方法
           三 . Jac ks o n 方法
             1 . 五个基本步骤

总之,描绘程序结构的 J a c ks o n 图应该综合输入数
 据结构和输出数据结构的层次关系而导出来。

步骤 4 :列出所有操作和条件 ( 包括分支条件和循环结
 束条件 ) ,并分配到程序结构图的适当位置。


步骤 5 :用伪码表示程序 。
  伪码和 J a c ks o n 图是完全对应的。
6.4 面向数据结构设计方法
       三 . Jac ks o n 方法
        1 . 五个基本步骤
3 种基本结构对应的伪码

        A           A seq
                       B
                       C
   B    C   D          D
                    A end
       顺序
6.4 面向数据结构设计方法
     三 . Jackson 方法
     1. 五个基本步骤


     A               A select cond1
                        B
      S(i)           A or cond2
                        C
B°   C°      D°      A or cond3
                        D
     选择              A end
6.4 面向数据结构设计方法
     三 . Jackson 方法
     1. 五个基本步骤

         A iter until cond
A            B
         A end
 I(i)
B*
         A iter while cond
重复           B
         A end
6.4 面向数据结构设计方法
三 . Jackson 方法
  2. 实例分析
6.4 面向数据结构设计方法

               三 . Jac ks o n 方法
                    2. 实例分析
输入、输出的数据结构及对应关系分别为:
                输出表
    正文文件
                 格
           I
   字符串                                空格总
                *
                          表格体
                                       数
           I                  I
    字 符        *
                          串信息     *

           S

 空 格   °
           非空格      °
                        字符串   空格数
  输入数据结构                输出数据结构
6.4 面向数据结构设计方
                       法
      三 . Jac ks o n 方法
             2. 实例分析           统计空格

      输出表格
                           程序体              印总数
   表格体       空格总数              I
    I                   处理字符串           *
  串信息    *




字符串   空格数       印字符串    分析字符串                   印空格数
                               I
                        分析字符        *
3 导出程序                         S
 J a c kS o n 结构图                  处理非空格
                    处理空格   °
                                            °
6.4 面向数据结构设计方
                           法
          三   . Jac ks o n 方法 统计空
               2. 实例分析            格

3 导出程序                          程序体              印总数
 J a c kS o n 结构图                       I
                              处理字符串
  正文文件                              *

          I
                        印字符                          印空格
  字符串         *               分析字符串
                         串                            数
          I                             I
      字 符     *
                              分析字符           *
          S
                                        S
空 格   °
              非空格   °
                                            处理非空格
                         处理空格   °
                                                 °
6.4 面向数据结构设计方法
           三 . Jackson 方法
             2. 实例分析
1. 列出所有操作和条件,并且把它们分配到程
   序结构图的适当位置。
 (   1
     )停止                     ( 2 )打开文件
 (   3
     )关闭文件            ( 4 )印出字符串
 (   5
     )印出空格数目                 ( 6 )印出空格总数
 (   7
     ) sum:=sum + 1       // sum 是保存空格个数的变量
 (   8
     ) totalsum:=totalsum + sum// totalsum 保存空格总
    数
 ( 9 )读入字符串
 ( 10 ) sum:=0
 ( 11 ) totalsum:=0
 ( 12 ) pointer:=1      // 指示当前分析的字符在字符串中
    的位置
 ( 13 ) pointer:=pointer + 1
   I(1) 文件结束、                I(2) 字符串结束
6.4 面向数据结构设计方法
     三 . Jackson 方法
       2. 实例分析
 经过简单分
  析不难把这
  些操作和条
  件分配到程
  序结构图的
  适当位置。
5 、写出伪码。
统计空格 seq
   打开文件
   读入字符串
   totalsum∶=0
   程序体 iter until 文件结束
         处理字符串 seq
         印字符串 seq
              印出字符串
         印字符串 end
         sum∶=0
         pointer∶=1
         分析字符串 iter until 字符串结束
             分析字符 select 字符是空格
处理空格 seq
       sum∶=sum+1
       pointer∶=pointer+1
   处理空格 end
  分析字符 or 字符不是空格
   处理非空格 seq
       pointer∶=pointer+1
   处理非空格 end
  分析字符 end
分析字符串 end
印空格数 seq
   印出空格数目
印空格数 end
totalsum∶=totalsum+sum
         读入字符串
         处理字符串 end
   程序体 end
   印总数 seq
        印出空格总数
   印总数 end
   关闭文件
   停止
统计空格 end
6.4 面向数据结构设计方法
三 . Jac ks o n 方法
3. Jac ks o n 方法小结
6.5 程序复杂度定量度
            量
       程序复杂度

 程序复杂度主要指模块内程序的复杂性。它直
  接关联到软件开发费用的多少,开发周期的长
  短和软件内部潜伏错误的多少。
 减少程序复杂度,可提高软件的简单性和可理
  解性,并使软件开发费用减少,开发周期缩短
  ,软件内部潜藏错误减少。
6.5 程序复杂度定量度
             量
         程序复杂度
 定量度量程序复杂程度的用处:
    程序的复杂程度乘以适当常数估算出软件
     中错误的数量以及所需的开发工作量,可
     用于比较两个不同的设计或两个不同算法
     的优劣;
    可以作为模块规模的精确限度。
为了度量程序复杂性,要求复杂性
    度量应满足以下假设:


●    它可以用来计算任何一个程序的复杂
性;
● 对于不合理的程序,例如对于长度
动态增长的程序,或者对于原则上无
法排错的程序,不应当使用它进行复
杂性计算;
6.5 程序复杂度定量度
        量
一.   McCabe 方 法
6.5 程序复杂度定量度
             量
   一.     McCabe 方 法

什么是程序图?
6.5 程序复杂度定量度
           量
   一.   McCabe 方 法

程序图的基本元素
6.5 程序复杂度定量度
        量
一.   McCabe 方 法
6.5 程序复杂度定量度量

程序流程图与对应的流图
6.5 程序复杂度定量度量

            一 . Mc C ab e 方 法

 流图中的结点可能具有以下的含义:
    过程块:一组连续执行的无分支的语句。在过程块
     中,如果块中的某个语句被执行,那么块中的所
     有其它语句也将会被执行。
     例如:结点 2 和 3 、 4 和 5 。反例: 3 和 4 不
     是过程块;
    汇聚点:程序中控制流的结合点(如果程序流程图
     中这个结合点没有对应的处理框应该在流图中补上)。
     例如:结点 9 和 10
    判定点(谓词结点):程序中控制流的分叉点。
图 由 PDL 翻译成的流图
6.5 程序复杂度定量度
                     量
           一 . Mc C ab e 方 法

 环形复杂度 V(G): 强连通图 G 中线性无
  关的有向环的个数。三种计算方法:
    V(G) = 图中平面区域的个数
    V(G) = P (判定结点的个数) + 1
    V(G) = E( 边数 )–N( 结点数 )+2
6.5 程序复杂度定量度量

环形复杂性的计算方法
6.5 程序复杂度定量度量

环形复杂性的计算方法
6.5 程序复杂度定量度量

环形复杂性的计算方法
6.5 程序复杂度定量度量

        一 . Mc C ab e 方法

    1

    2

3       5

4       6




程序流程图
6.5 程序复杂度定量度量

             一 . Mc C ab e 方法

例:                   1,2         结点数:
     1                            N= 5
                                 边数:
     2                      5     E= 6

 3             3,4
         5
                                 判定结点数:
 4       6                  6     P= 2

          程序           7         区域数: 3
         流程图         流图         环型复杂度:
6.5 程序复杂度定量度量

             二 . Mc C ab e 方 法

 将复合条件分解成若干简单
条件。                                  a
 复合条件:在条件中包含了
一个或多个布尔运算符 ( 逻             False
                                          True
辑
OR , AND , NAND , NO
R) 。 a or b                  b     True
    If
                   False                    X
    Then X
    Else Y
                       Y
  End If
6.5 程序复杂度定量度量

        二.     McCabe 方 法

McCabe 的缺点是:
    对于不同种类的控制流的复杂性不能区分
    简单 IF 语句与循环语句的复杂性同等看待
    模块间接口当成一个简单分支一样处理
6.5 程序复杂度定量度
              量
     一 . Mc C ab e 方 法

 环形复杂度的用途:
   环形复杂度是对测试难度的一种定量

    度量
   对软件最终的可靠性给出一种预测

   模块规模以 V(G)≤10 为宜
6.5 程序复杂度定量度量

  二.   Halstead 方法

 Halstead 方法是另一个著名的
  方法,它根据程序中运算符和操
  作数的总数来度量程序的复杂程
  度。
令 : N1 为程序中运算符出现的总
次数, N2 为操作数出现的总次数
,程序实际长度 N 定义为:
            N = N1 + N2
6.5 程序复杂度定量度量

     二.     Halstead 方法

 详细设计完成之后,可以知道程序中
  使用的不同运算符 ( 包括关键字 ) 的
  个数 n1 ,以及不同操作数 ( 变量和常
  数 ) 的个数 n2 。 Halstead 给出预测
  程序长度 H 的公式如下:
      H = n1 log 2 n1 + n2 log 2 n2
 这里, H 是程序长度的预测值,并
  不等于程序中语句个数。
6.5 程序复杂度定量度量

     二.      Halstead 方法

 Halstead 的重要 结论 :

 程序的实际 Halstead 长度 N 可以由运算符、操作
  数 n 算出。即使程序还未编制完成,也能预先算出
  程序的实际 Halstead 长度 H , 虽然它没有明确
  指出程序中到底有多少个语句。

 经过多次验证,预测的 Halstead 长度与实际的
  Halstead 长度是非常接近的。
6.5 程序复杂度定量度量

       二.       Halstead 方法

程序的潜在错误
 Halstead 度量还可以用来预测程序中可能
  存在的错误 E 。预测公式为
    E = ( N 1+ N 2) ∗ log 2 ( n 1+ n 2) / 3000
 例如,一个程序对 150 个运算符共使用了
  1200 次,对 75 个数据库项共访问 1300 次
  ,那么预测该程序的错误数:
   E = (1200+1300) ∗ log 2 (150+75)/3000
  ≈ 6.5
   即预测该程序中可能包含 6 ~ 7 个错误
6.5 程序复杂度定量度量

  二.   Halstead 方法

 有人曾对从 300 条到 12000 条语句
范围内的程序核实了上述公式,发现
预测的错误数与实际错误数相比误差
在 8% 之内。
6.5 程序复杂度定量度量

   二.    Halstead 方法

 没有注意调用的深度。 Halstead 公式应当
  对调用子程序的不同深度区别对待。在计算
  嵌套调用的运算符和操作数时,应乘上一个
  调用深度因子。这样可以增大嵌套调用时的
  错误预测率。
 没有把不同类型的运算符,操作数与不同的
  错误发生率联系起来,而是把它们同等看待。
  例如,对简单 if 语句与 while 语句就没有
  区别。

Mais conteúdo relacionado

Semelhante a 软件工程 第六章

软件工程
软件工程软件工程
软件工程bill0077
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階Simen Li
 
Se2009 ch8
Se2009 ch8 Se2009 ch8
Se2009 ch8 浒 刘
 
软件工程 第八章
软件工程 第八章软件工程 第八章
软件工程 第八章浒 刘
 
软件设计原则、模式与应用
软件设计原则、模式与应用软件设计原则、模式与应用
软件设计原则、模式与应用yiditushe
 
面向数据流的软件设计方法
面向数据流的软件设计方法面向数据流的软件设计方法
面向数据流的软件设计方法happyjin2010
 
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計Leon Chuang
 
C語言 第一章 C語言簡介
C語言 第一章 C語言簡介C語言 第一章 C語言簡介
C語言 第一章 C語言簡介shademoon
 
06 函數與巨集
06 函數與巨集06 函數與巨集
06 函數與巨集shademoon
 
广联达造价软件教程
广联达造价软件教程广联达造价软件教程
广联达造价软件教程zhanglingling
 
Interactive Data Language
Interactive Data LanguageInteractive Data Language
Interactive Data Languagesiufu
 
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)JoXuZi
 

Semelhante a 软件工程 第六章 (20)

软件工程
软件工程软件工程
软件工程
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階[嵌入式系統] 嵌入式系統進階
[嵌入式系統] 嵌入式系統進階
 
Se2009 ch8
Se2009 ch8 Se2009 ch8
Se2009 ch8
 
软件工程 第八章
软件工程 第八章软件工程 第八章
软件工程 第八章
 
软件设计原则、模式与应用
软件设计原则、模式与应用软件设计原则、模式与应用
软件设计原则、模式与应用
 
面向数据流的软件设计方法
面向数据流的软件设计方法面向数据流的软件设计方法
面向数据流的软件设计方法
 
部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計部門會議 950619 Leon的錦囊妙計
部門會議 950619 Leon的錦囊妙計
 
C語言 第一章 C語言簡介
C語言 第一章 C語言簡介C語言 第一章 C語言簡介
C語言 第一章 C語言簡介
 
06 函數與巨集
06 函數與巨集06 函數與巨集
06 函數與巨集
 
广联达造价软件教程
广联达造价软件教程广联达造价软件教程
广联达造价软件教程
 
Interactive Data Language
Interactive Data LanguageInteractive Data Language
Interactive Data Language
 
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
Scrum gathering 2012 Shanghai_精益与持续改进分会场演讲话题: 大型企业ci平台建设和实施分享(陈小光)
 
C 1 c
C 1 cC 1 c
C 1 c
 
C 1 c
C 1 cC 1 c
C 1 c
 
C 1 c
C 1 cC 1 c
C 1 c
 
C 1 c
C 1 cC 1 c
C 1 c
 
C+
C+C+
C+
 
C#
C#C#
C#
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 

Mais de 浒 刘

软件工程 第九章
软件工程 第九章软件工程 第九章
软件工程 第九章浒 刘
 
软件工程 第四章
软件工程 第四章软件工程 第四章
软件工程 第四章浒 刘
 
软件工程 第三章
软件工程 第三章软件工程 第三章
软件工程 第三章浒 刘
 
软件工程 第十一章
软件工程 第十一章软件工程 第十一章
软件工程 第十一章浒 刘
 
Se2009 ch9
Se2009 ch9Se2009 ch9
Se2009 ch9浒 刘
 
软件工程 第五章
软件工程 第五章软件工程 第五章
软件工程 第五章浒 刘
 
Se2009 ch4
Se2009 ch4Se2009 ch4
Se2009 ch4浒 刘
 
软件工程 第二章
软件工程 第二章软件工程 第二章
软件工程 第二章浒 刘
 
软件工程 第一章
软件工程 第一章软件工程 第一章
软件工程 第一章浒 刘
 

Mais de 浒 刘 (9)

软件工程 第九章
软件工程 第九章软件工程 第九章
软件工程 第九章
 
软件工程 第四章
软件工程 第四章软件工程 第四章
软件工程 第四章
 
软件工程 第三章
软件工程 第三章软件工程 第三章
软件工程 第三章
 
软件工程 第十一章
软件工程 第十一章软件工程 第十一章
软件工程 第十一章
 
Se2009 ch9
Se2009 ch9Se2009 ch9
Se2009 ch9
 
软件工程 第五章
软件工程 第五章软件工程 第五章
软件工程 第五章
 
Se2009 ch4
Se2009 ch4Se2009 ch4
Se2009 ch4
 
软件工程 第二章
软件工程 第二章软件工程 第二章
软件工程 第二章
 
软件工程 第一章
软件工程 第一章软件工程 第一章
软件工程 第一章
 

软件工程 第六章

  • 2. 详细设计的基本任务  为每个模块进行详细的算法设计;  为模块内的数据结构进行设计;  对数据库进行物理设计;  其他设计: 确定程序模块间的详细接口,根据软件 系统的类型,还可能要进行代码设计、输入 输出格式设计、人机界面设计等设计;  编写详细设计说明书;  对详细设计进行评审。
  • 4. 第 6 章 详细设计(模块设计)  6.1 结构化程序设计(S P)  6.2 人机界面设计  6.3 过程设计工具  6.4 面向数据结构的设计方法  6.5 程序复杂程度的定量度量
  • 5. 6.1 结构化程序设计 一 . 结构化程序设计 (S P) 的主要思想 需求分析阶段 总体设计阶段 详细设计阶段 S A 方法 S D 方法 S P 方法  主要思想 设计方法:自顶向下、逐步求精  结构化程序设计:指导人们用良好的思想方法 开发出易理解、易验证的程序。
  • 6. 6.1 结构化程序设计 一 . 结构化程序设计 (S P) 的主要思想
  • 7. 6.1 结构化程序设计 二 . 结构化程序设计 (S P) 的三种基本控制结构  1966 年, C . B o hm 和 G . J a c o p ini 证明:只 用三种基本控制结构就能实现任何单入口单出口的 程序。  结构化程序设计的三种基本控制结构 exp F A T F exp T A B A B 顺序结构 分支结构 循环结构
  • 9. 6.1 结构化程序设计 开始  P141 习题 4 p  右侧程序流程图是 g 一个非结构化的程 序 q 停止
  • 10. 6.1 结构化程序设计 开始 开始 p p g g q q 停止 停止 当型循环? 直到型循 环?
  • 11. 6.1 结构化程序设计 三 . 结构化程序设计 (S P) 的设计准则  一个程序模块内的基本结构(即顺序、选 择和循环)应尽量少;  将一个基本结构组成一个容易识别的程序 块;  程序块的入 / 出口都只有一个
  • 12. 6.1 结构化程序设计 四 . 如何把非结构化的程序 转化成结构化的程序 1. 重复编码法: 1 1 2 4 2 4 goto 语句 3 3 4 非结构化程序 结构化程序
  • 13. 6.1 结构化程序设计 四 . 如何把非结构化的程序 转化成结构化的程序 2. 布尔标识法: WHILE p DO p F BEGIN   T   … F q T IF q THEN GOTO L1; A; A B B   END; L1 L1: … 非结构化程序
  • 14. 6.1 结构化程序设计 四 . 如何把非结构化的程序 转化成结构化的程序 b:=True bool := true; WHILE (p and bool) DO BEGIN   p&b F   … T IF q THEN bool := false F q T ELSE BEGIN A; A b:=False B END B END; L1 … 结构
  • 15. 6.1 结构化程序设计 四 . 如何把非结构化的程序 转化成结构化的程序 b:=True p F p&b F T T F q T F q T A b:=False A B B L1 L1
  • 16. 五、结构化程序设计  经典的结构程序设计:只允许使用顺序 、 IF-THEN-ELSE 型分支和 DO-WHILE 型 循环这 3 种基本控制结构。  扩展的结构程序设计:还允许使用 DO- CASE 型多分支结构和 DO-UNTIL 型循环结 构;  修正的结构程序设计:再加上允许在循 环体中使用 LEAVE( 或 BREAK) 结构。
  • 17. 6.1 结构化程序设计 六 . 结构化程序设计 (S P) 的优点  自顶向下、逐步求精:采用先整体后局部、先抽象 后具体的方法开发出来的软件具有良好的结构,且 开发出的程序易于理解;  单入口单出口:良好的结构特征,降低复杂度,增 强可读性,可维护性,可验证性等,从而提高软件 开发工程的成功率和生产率;  有利于程序正确性的证明。
  • 18. 6.2 人机界面设计 人机界面概述  人机界面( Huma n- C o mp ute r Inte rfa c e ,简称 HC I )又称人 - 机 接口或用户界面,它是用户与计算机 系统交换信息的媒介,更是用户使用 计算机系统的综合操作环境。  设计用户界面不仅需要计算机科学的 理论和知识,而且需要认知心理学以 及人 - 机工程学、语言学等学科的知 识。
  • 19. 最有影响的事件和成果  1963 年发明鼠标器的美国斯坦福研究所的 D.Engelbart ,他预言鼠标器比其他输入设备 都好,并在超文本系统、导航工具方面做了 杰出的成果 (Augmented Human Intellect project ) ,而获 1997 年 ACM 图灵奖。 10 年 后鼠标器经不断改进,成为影响当代计算机 使用的最重要成果。
  • 20. 最有影响的事件和成果  70 年代 Xerox 研究中心 的 Alan Kay 提出了 Smalltalk 面向对象程 序设计等思想,并发明 了重叠式多窗口系统。  1989 年 Tim Berners- Lee 在日内瓦的 CERN 用 HTML 及 HTTP 开发了 WWW 网,随后出现了各种浏 览器(网络用户界面) ,使互联网飞速发展起 来。
  • 21. 最有影响的事件和成果  90 年代美国麻省理工学 院 N.Negroponte 领导 的媒体实验室在新一代 多通道用户界面方面 (包括语音、手势、智 能体等),做了大量开 创性的工作。  90 年代美国 Xerox 公司 PARC 的首席科学家 Mark Weiser 首先提出 “无所不在计算 ( Ubiquitous
  • 22. 6.2 人机界面设计 人机界面概述 人机界面的风格 — — 四代。 第一代界面 — — 命令和询问方式。 通信完全以正文形式并通过用户命令和用户对 系统询问的响应来完成。例如: D > run p ro g 1. e xe /d e b ug =' o n' /o ut=p l /in=t1 /a llo c =1000k RUN A L L O C A TIO N TO B E Q UE UE D ? > > ye s A UTO MA TIC C HE C K PO INTING INTE RVA L ? >>5
  • 23. 6.2 人机界面设计 人机界面概述  第二代界面 — — 简单的菜单式,例如: c ho o s e p ro g ra m o p tio n tha t is d e s ire d : 1=inp ut d a ta ma nua lly 2=inp ut d a ta fro m e xis ting d a ta file 3=p e rfo rm s imp lifie d a na lys is 4=p e rfo rm d e ta ile d a na lys is 5=p ro d uc e ta b ula r o utp ut 6=p ro d uc e g ra p hic a l o utp ut 7=o the r o p tio ns c la s s e s s e le c t o p tio n? _ 这种方式与命令行方式相比不易出错,但使用起 来仍然乏味。
  • 24. 6.2 人机界面设计 人机界面概述 第三代界面 — — 面向窗口的点选界面 ( p o int a nd p ic k inte rfa c e ) 亦称为 WIMP 界面, 即:窗口( wind o ws )、 四位一体, 图标( ic o ns )、 形成桌面 ( d e s kto p ) 菜单( me nus )、 指示器( p o inting d e vic e )
  • 26. 6.2 人机界面设计 一 . 设计问题 设计人机界面,必须考虑四个方面: 系统的响应时间; 用户帮助设施; 出错信息处理; 命令方式。 1 )系统响应时间指当用户执行了某个控制动作后 (如,点击鼠标器等),系统做出反应的时间 (指输出信息或执行对应的动作)。 系统响应时间过长、不同命令在响应时间上的 差别过于悬殊,用户将难以接受。
  • 27. 6.2 人机界面设计 一 . 设计问题 2 )用户都希望得到联机帮助。 联机帮助设施有两类:集成式和附加式。 ① 集成式帮助一般都与软件设计同时考虑,上下文 敏感,整个帮助过程快捷而友好; ② 附加式帮助一般是在软件完成后附上一个受限的 联机用户手册。 此外,还要考虑诸如帮助范围(仅考虑部分还是 全部功能)、用户求助的途径、帮助信息的显示 、用户如何返回正常交互工作及帮助信息本身如 何组织等一系列问题。
  • 28. 6.2 人机界面设计 一 . 设计问题 3 )出错信息处理 出错信息应选用用户明了、含义准确的 术语描述,同时还应尽可能提供一些有关 错误恢复的建议。此外,显示出错信息时 ,若辅以听觉(如铃声)、视觉(专用颜 色)刺激,则效果更佳。
  • 29. 6.2 人机界面设计 一 . 设计问题 4 )命令交互 键盘命令曾经一度是用户与软件系统之 间最通用的交互方式,随着面向窗口的界 面的出现,键盘命令虽不再是唯一的交互 形式,但许多有经验的熟练的软件人员仍 喜爱这一方式,更多的情形是菜单与键盘 命令并存,供用户自由选用。
  • 30. 6.2 人机界面设计 二 . 设计过程 用户界面设计是一个迭代 初步设计 过程,直至与用户模型和 系统假想一致为止。 创建界面 创建新界面 原型 1 原型 用户评审界面 修改设计 设计人员分析 用户评审意见 界面设计 完毕 图 12-3-1 界面设计演进过程
  • 31. 6.3 过程设计工具 一 . 过程设计工具分类 详细设计 编码实现 •程序流程图 基于某种程序设 •盒图( N - S 图) 计语言的源程序 图形 代码 •问题分析图( PAD 图) •判定树 要求:无二义性描 表格 •判定表 述 语言 •过程设计语言 PDL 或伪码( Psudo- code )
  • 32. 6.3 过程设计工 具 二 . 程序流程图  历史最悠久 , 使用最广泛 ; 但使用最混乱 .  程序流程图中使用的符号
  • 34.
  • 35. 6.3 过程设计工 具 二 . 程序流程图  优点: • 简单易用、容易修改; • 对控制流程直观、易于理解、易于复审,便于初 学者掌握。  缺点: • 诱使程序员过早考虑控制流程,而不考虑程序的 全局结构;不是逐步求精的过程。 • 采用箭头表示控制流,随意转移控制 , 导致破坏 结构程序设计的精神; • 不易表示数据结构,数据的处理与变换不清楚;
  • 36. 6.3 过程设计工 具 三 . 盒图( N - S 图)  不允许违背结构化程序设计精神  没有箭头,因此不允许随意转移控制。  由美国 I.Nassi 和 B.Shneiderman,1973 年提出。  功能域(即一个结构的作用域)明确  不可能任意转移控制  易于确定局部和全局数据的作用域  易于表现嵌套关系和模块的层次结构 坚持使用盒图作为详细设计的工具,可以使程 序员逐步养成用结构化的方式思考问题和解决问题 的习惯。
  • 37. 6.3 过程设计工 具 三 . 盒图( N - S 图)  N - S 图的基本符号 循环条件 任务 F 条 T F 条件 T 1 2 任务 else件 then then do-while 部分 部分 部分 部分 任务 3 if-then-else 结构 if-then 结构 do-while 结构 顺序结构 case 条件 do-until 值1 值2 值n 部分 子程序 case1 case2 casen 循环条件 P 调用子程序 部分 部分 部分 do-until 结构 case 结构
  • 38. 6.3 过程设计工 具 三 . 盒图( N - S 图) 例 a b k: T x1 F x2 f x4 1 2 3 T F i g k Do-While x3 d e Do-Until x5 h c Do-Until x6 j
  • 39. 6.3 过程设计工 具 四 . 问题分析图( Problem Analysis Diagram 图)  PAD 图  日立公司, 1973 年发明  采用二维树形结构来表示程序的控制流。  它即克服了传统的流程图不能清晰表现程序 结构的缺点,又不像 N- S 图那样受到把全 部程序约束在一个方框内的限制,这就是其 优势所在。
  • 40. 6.3 过程设计工 具 四 . 问题分析图( Problem Analysis Diagram 图) P1 P1 def C P1 P2 P2 L1 L2 P2 P11 顺序结构 选择结构 X= ( if C the n P 1 e ls e P 2) Ln Pn WHILE C P Case 分支 While 型循环结构 与分层结构 ( 用 def 细化处理框 ) UNTIL C P 连接 ( 语句标号 ) Until 型循环结构
  • 41. 6.3 过程设计工 四. 问题分析图 具 ( Problem Analysis Diagram 图) 开始 始 f a Until x5 i b Until x6 x4 x1 g j k 结束 束 h While x3 c 1 k def x2 2 d 3 e
  • 42. 6.3 过程设计工 具 四 . 问题分析图( Problem Analysis Diagram 图)  主要优点:  ( 1 )由该图设计出的程序必为结构化的  ( 2 )结构非常清晰,竖线的条数即程序的层次 数  ( 3 )所表现的程序逻辑易读、易懂、易记  ( 4 )可利用软件工具自动转换为高级语言源程 序  ( 5 )既可表示程序逻辑,也可描绘数据结构  ( 6 )支持自顶向下、逐步求精(利用 def )  面向高级语言: FORTRAN , PASCAL 等都有相应
  • 43. 6.3 过程设计工 具 五. 判 定 表  判定表 复杂的条件组合 应做的动作 : 条件 条件组合项 (所有条件) (条件组合的矩阵) 操作 操作执行项 (所有可能的动作) (与每种条件组合相应的动作)
  • 44. 6.3 过程设计工 具 五. 判 定 表  建立判定表的步骤
  • 45. 6.3 过程设计工 具 五. 判 定 表  判定表的分析过程
  • 46. 6.3 过程设计工 具 五. 判 定 表  步骤 1 :求出各种判定条件可能的取 值;
  • 47. 6.3 过程设计工 具 五. 判 定 表  步骤 2 :根据条件取值数,计算条件 组合数
  • 48. 6.3 过程设计工 具 五. 判 定 表  步骤 3 :在判定表中列出所有条件组 合,求出各组合的操作判定值
  • 49. 6.3 过程设计工 具 五. 判 定 表
  • 50. 6.3 过程设计工 具 五. 判 定 表
  • 51. 6.3 过程设计工 具 五. 判 定 表
  • 52. 6.3 过程设计工 具 五. 判 定 表
  • 53. 6.3 过程设计工 具 五. 判 定 表
  • 54. 6.3 过程设计工 具 五. 判 定 表
  • 55. 6.3 过程设计工 具 五. 判 定 表
  • 56. 6.3 过程设计工 具 五. 判 定 表  下面以行李托运费的算法为例说明判定表的 组织方法。假设某航空公司规定,乘客可以 免费托运重量不超过 30kg 的行李。当行李 重量超过 30kg 时,对头等舱的国内乘客超 重部分每公斤收费 4 元,对其他舱的国内乘 客超重部分每公斤收费 6 元,对外国乘客超 重部分每公斤收费比国内乘客多一倍,对残 疾乘客超重部分每公斤收费比正常乘客少一 半。
  • 57. Rules Rule 五 .1 判 定 4 5 2 3 表 6 7 8 9 Condition rows 国内乘客 T T T T F F F F 头等舱 T F T F T F T F 残疾乘客 F F T T F F T T 行李重量 W ≤30 T F F F F F F F F 免费 × (W-30) ×2 × Action rows (W-30) ×3 × (W-30) ×4 × × (W-30) ×6 × × (W-30) ×8 × (W-30) ×12 × 用判定表表示计算行李费的算法
  • 58. 判定表  适合描述:包含复杂的条件组合,并要根据 这些条件选择动作执行的模块;  缺点:  不能表示:循环、顺序和选择。  当条件为多值条件时(如机票分为头等舱、二 等舱、经济舱等多种级别),判定表的简洁程 度也下降。  其含义不能一眼看出,初用者需要一个简短的 学习过程
  • 59. 六. 判 定 树 6.3 过程设计工 具 判定树:判定表的变种;形式简单,但简洁性不如判 定表 残疾乘 (W-30) × 2 头等舱 客 国内 正常乘 (W-30) × 4 乘客 客 残疾乘 (W-30) × 3 其他舱 客 行李重 正常乘 (W-30) × 6 量 W> 客 残疾乘 (W-30) × 4 行 30 头等舱 客 李 外国 正常乘 (W-30) × 8 费 乘客 客 算 残疾乘 (W-30) × 6 法 其他舱 客 行李重量 正常乘 (W-30) × 12 免费 客 W ≤ 30
  • 60. 判定树  形式简单: 不用任何说明,一眼可看出 含义;易学易用。  缺点:  简洁性较差: 同一个数据元素的值往 往要要重复写多遍。  分支的次序:对判定树的简洁程度有较 大影响
  • 61. 6.3 过程设计工 具 七 . 过程设计语言 PDL (伪码 )  伪码:一种以正文形式表示数据和处理过程的设 计工具,是一种混合语言。 伪码=严格的关键字外部语法+自然语言的词汇 C 、 PAS C AL ,借用 英语 / 汉语 某种结构化的程序设 ,某种自然语 计语言的语法控制框 言 架。 灵活表示实际 用于定义控制结 操作和条件 构和数据结构
  • 62. (1) 、数据说明 : 其功能是定义数据的类型和作用域 格式 : TYPE < 变量名 > AS < 限定词 1> < 限定词 2> 说明 : 1. 变量名 : 是一个模块内部使用的变量或模块间共用 的全局变量名。 2. 限定词 1 : 标明数据类型 3. 限定词 2 : 标明该变量的作用域 TYPE number AS STRING LENGTH (12) (2) 、程序块 : 的过程成分是由块结构构成的,而块将作为 PDL 一个单个的实体来执行。 BEGIN < 块名 > < 一组伪代码语句 > END
  • 63. 把 : (3) 、子程序结构 PDL 中的过程称为子程序。 PROCEDURE < 子程序名 > < 一组属性 > INTERFACE < 参数表 > < 程序块或一组伪代码语句 > END (4) 、基本控制结构 : READ/WRITE TO < 设备 > <I/O 表 > --- 输入 / 输出结构 IF < 条件 > THEN < 程序块 / 伪代码语句组 > ; ELSE < 程序块 / 伪代码语句组 > ; ENDIF --- 选择型结构
  • 64. DO LOOP < 条件描述 > DO WHILE < 条件描述 > < 程序块 / 伪代码语句组 > ; < 程序块 / 伪代码语句组 > ; EXIT WHEN ENDDO ENDLOOP REPEAT UNTIL < 条件描述 > DO FOR < 下标 = 下标表,表达式 > < 程序块 / 伪代码语句组 > ; < 程序块 / 伪代码语句组 > ; ENDREP ENDFOR --- 重复型结构 --- 重复型结构 CASE OF <case 变量名 > ; WHEN < case 条件 1> SELECT < 程序块 / 伪代码语句组 > ; WHEN < case 条件 2> SELECT < 程序块 / 伪代码语句组 > ; ---- 多路选择结构 … … DEFAULT: < 缺省或错误 case: < 程序块 / 伪代码语句组 > ; ENDCASE
  • 65. 6.3 过程设计工 具 七 . 过程设计语言 PDL (伪码 )  PDL 的特性
  • 66. 6.3 过程设计工 具 七 . 过程设计语言 PDL (伪码 )  示例:拼写检查程序
  • 67. 6.3 过程设计工 具 七 . 过程设计语言 PDL (伪码 )  使用 PDL 语言逐步求精
  • 68. 6.3 过程设计工 具 七 . 过程设计语言 PDL (伪码 )  使用 PDL 语言逐步求精
  • 69. 6.3 过程设计工 具 七 . 过程设计语言 PDL (伪码 )  PDL 的优点
  • 70. 6.3 过程设计工 具 八. 总 结  要求掌握:  程序流程图  N - S 图  PA D 图 相互转换  PD L 语言(伪码)  判定树  判定表
  • 71.
  • 72. 6.4 面向数据结构设计方 法 面向数据结构的设计方法  原理:重复出现的数据通常由循环控制结构处理 ;选择数据通常由分支控制结构。  缺点:没有足够重视和体现模块独立原理  适用范围:详细设计阶段  面向数据结构的设计方法:  Jackson 方法:英国人 M.Jackson 在 1973 年 提出  Warnier 方法:法国人 J.D.Warnier 在 1973 年提出
  • 73. 6.4 面向数据结构设计方 法 面向数据结构的设计方法 映射 程序过程表示 数据结构 程序结构 (Jackson 伪代码 (Jackson 图 ) (Jackson 图 ) ) 程序分析 程序设
  • 74. 6.4 面向数据结构设计方 法 一 . Jac ks o n 图  Jackson 图描述数据结构 A A A B C D B° C° D° B* 顺序结构 选择 结构 重复 结构 A 由 B 、 C 、 D 3 个元素顺序 根据条件, A 由 B 出现 N 次 (N≥0) 组成 组成 A 是 B 或 C 或 D 中的某一个 每个元素只出现一次,出现的 次序依次为 B 、 C 、 D  小圈表示选择结构,星号表示重复结构。
  • 75. 6.4 面向数据结构设计方 法 一 . Jac ks o n 图 Jackson 图有下述优点: 1. 便于表示层次结构,而且是对结构进 行自顶向下分解的有力工具; 2. 形象直观可读性好; 3. 既能表示数据结构也能表示程序结构 ( 因为结构程序设计也只使用上述 3 种基 本控制结构 ) 。
  • 76. 6.4 面向数据结构设计方 法 二 . 改进的 Jac ks o n 图  改进:  选择条件或循环结束条件直接在图上表示 出来,增强图的表达能力,容易直接把图 翻译成程序  框间连线为直线而不是斜线,从而容易在 行式打印机上输出。
  • 77. 6.4 面向数据结构设计方法 二 . 改进的 Jac ks o n 图 A A A A S(i) S(i) I(i) B C D B° C° D° B° —° B* 顺序 选择 可选 重复 在构成顺序结构的元素中不能有重复出现或选择出现的元素   即:第一个图中的BCD不能是在右上角有小圆圈或星
  • 78. 6.4 面向数据结构设计方 法  J a c ks o n 图、层次图和层次方框图的区别: 图名 方框 连线 用途 阶段 设计模块内部 详细 Jackson 图 数据或程序 组成 处理过程 设计 描绘软件总体 总体 层次图 模块 调用 结构 设计 分析用户需要 需求 层次方框图 数据 抽象 的数据结构 分析
  • 80. 6.4 面向数据结构设计方法 三 . Jac ks o n 方法 1 . 五个基本步骤
  • 81. 6.4 面向数据结构设计方法 三 . Jac ks o n 方法 1 . 五个基本步骤
  • 82. 6.4 面向数据结构设计方法 三 . Jac ks o n 方法 1 . 五个基本步骤 总之,描绘程序结构的 J a c ks o n 图应该综合输入数 据结构和输出数据结构的层次关系而导出来。 步骤 4 :列出所有操作和条件 ( 包括分支条件和循环结 束条件 ) ,并分配到程序结构图的适当位置。 步骤 5 :用伪码表示程序 。 伪码和 J a c ks o n 图是完全对应的。
  • 83. 6.4 面向数据结构设计方法 三 . Jac ks o n 方法 1 . 五个基本步骤 3 种基本结构对应的伪码 A A seq B C B C D D A end 顺序
  • 84. 6.4 面向数据结构设计方法 三 . Jackson 方法 1. 五个基本步骤 A A select cond1 B S(i) A or cond2 C B° C° D° A or cond3 D 选择 A end
  • 85. 6.4 面向数据结构设计方法 三 . Jackson 方法 1. 五个基本步骤 A iter until cond A B A end I(i) B* A iter while cond 重复 B A end
  • 86. 6.4 面向数据结构设计方法 三 . Jackson 方法 2. 实例分析
  • 87. 6.4 面向数据结构设计方法 三 . Jac ks o n 方法 2. 实例分析 输入、输出的数据结构及对应关系分别为: 输出表 正文文件 格 I 字符串 空格总 * 表格体 数 I I 字 符 * 串信息 * S 空 格 ° 非空格 ° 字符串 空格数 输入数据结构 输出数据结构
  • 88. 6.4 面向数据结构设计方 法 三 . Jac ks o n 方法 2. 实例分析 统计空格 输出表格 程序体 印总数 表格体 空格总数 I I 处理字符串 * 串信息 * 字符串 空格数 印字符串 分析字符串 印空格数 I 分析字符 * 3 导出程序 S J a c kS o n 结构图 处理非空格 处理空格 ° °
  • 89. 6.4 面向数据结构设计方 法 三 . Jac ks o n 方法 统计空 2. 实例分析 格 3 导出程序 程序体 印总数 J a c kS o n 结构图 I 处理字符串 正文文件 * I 印字符 印空格 字符串 * 分析字符串 串 数 I I 字 符 * 分析字符 * S S 空 格 ° 非空格 ° 处理非空格 处理空格 ° °
  • 90. 6.4 面向数据结构设计方法 三 . Jackson 方法 2. 实例分析 1. 列出所有操作和条件,并且把它们分配到程 序结构图的适当位置。 ( 1 )停止 ( 2 )打开文件 ( 3 )关闭文件 ( 4 )印出字符串 ( 5 )印出空格数目 ( 6 )印出空格总数 ( 7 ) sum:=sum + 1 // sum 是保存空格个数的变量 ( 8 ) totalsum:=totalsum + sum// totalsum 保存空格总 数 ( 9 )读入字符串 ( 10 ) sum:=0 ( 11 ) totalsum:=0 ( 12 ) pointer:=1 // 指示当前分析的字符在字符串中 的位置 ( 13 ) pointer:=pointer + 1 I(1) 文件结束、 I(2) 字符串结束
  • 91. 6.4 面向数据结构设计方法 三 . Jackson 方法 2. 实例分析  经过简单分 析不难把这 些操作和条 件分配到程 序结构图的 适当位置。
  • 92. 5 、写出伪码。 统计空格 seq 打开文件 读入字符串 totalsum∶=0 程序体 iter until 文件结束 处理字符串 seq 印字符串 seq 印出字符串 印字符串 end sum∶=0 pointer∶=1 分析字符串 iter until 字符串结束 分析字符 select 字符是空格
  • 93. 处理空格 seq sum∶=sum+1 pointer∶=pointer+1 处理空格 end 分析字符 or 字符不是空格 处理非空格 seq pointer∶=pointer+1 处理非空格 end 分析字符 end 分析字符串 end 印空格数 seq 印出空格数目 印空格数 end
  • 94. totalsum∶=totalsum+sum 读入字符串 处理字符串 end 程序体 end 印总数 seq 印出空格总数 印总数 end 关闭文件 停止 统计空格 end
  • 95. 6.4 面向数据结构设计方法 三 . Jac ks o n 方法 3. Jac ks o n 方法小结
  • 96. 6.5 程序复杂度定量度 量 程序复杂度  程序复杂度主要指模块内程序的复杂性。它直 接关联到软件开发费用的多少,开发周期的长 短和软件内部潜伏错误的多少。  减少程序复杂度,可提高软件的简单性和可理 解性,并使软件开发费用减少,开发周期缩短 ,软件内部潜藏错误减少。
  • 97. 6.5 程序复杂度定量度 量 程序复杂度  定量度量程序复杂程度的用处:  程序的复杂程度乘以适当常数估算出软件 中错误的数量以及所需的开发工作量,可 用于比较两个不同的设计或两个不同算法 的优劣;  可以作为模块规模的精确限度。
  • 98. 为了度量程序复杂性,要求复杂性 度量应满足以下假设: ● 它可以用来计算任何一个程序的复杂 性; ● 对于不合理的程序,例如对于长度 动态增长的程序,或者对于原则上无 法排错的程序,不应当使用它进行复 杂性计算;
  • 99. 6.5 程序复杂度定量度 量 一. McCabe 方 法
  • 100. 6.5 程序复杂度定量度 量 一. McCabe 方 法 什么是程序图?
  • 101. 6.5 程序复杂度定量度 量 一. McCabe 方 法 程序图的基本元素
  • 102. 6.5 程序复杂度定量度 量 一. McCabe 方 法
  • 104. 6.5 程序复杂度定量度量 一 . Mc C ab e 方 法  流图中的结点可能具有以下的含义:  过程块:一组连续执行的无分支的语句。在过程块 中,如果块中的某个语句被执行,那么块中的所 有其它语句也将会被执行。 例如:结点 2 和 3 、 4 和 5 。反例: 3 和 4 不 是过程块;  汇聚点:程序中控制流的结合点(如果程序流程图 中这个结合点没有对应的处理框应该在流图中补上)。 例如:结点 9 和 10  判定点(谓词结点):程序中控制流的分叉点。
  • 105. 图 由 PDL 翻译成的流图
  • 106. 6.5 程序复杂度定量度 量 一 . Mc C ab e 方 法  环形复杂度 V(G): 强连通图 G 中线性无 关的有向环的个数。三种计算方法:  V(G) = 图中平面区域的个数  V(G) = P (判定结点的个数) + 1  V(G) = E( 边数 )–N( 结点数 )+2
  • 110. 6.5 程序复杂度定量度量 一 . Mc C ab e 方法 1 2 3 5 4 6 程序流程图
  • 111. 6.5 程序复杂度定量度量 一 . Mc C ab e 方法 例: 1,2 结点数: 1 N= 5 边数: 2 5 E= 6 3 3,4 5 判定结点数: 4 6 6 P= 2 程序 7 区域数: 3 流程图 流图 环型复杂度:
  • 112. 6.5 程序复杂度定量度量 二 . Mc C ab e 方 法 将复合条件分解成若干简单 条件。 a 复合条件:在条件中包含了 一个或多个布尔运算符 ( 逻 False True 辑 OR , AND , NAND , NO R) 。 a or b b True If False X Then X Else Y Y End If
  • 113. 6.5 程序复杂度定量度量 二. McCabe 方 法 McCabe 的缺点是:  对于不同种类的控制流的复杂性不能区分  简单 IF 语句与循环语句的复杂性同等看待  模块间接口当成一个简单分支一样处理
  • 114. 6.5 程序复杂度定量度 量 一 . Mc C ab e 方 法  环形复杂度的用途:  环形复杂度是对测试难度的一种定量 度量  对软件最终的可靠性给出一种预测  模块规模以 V(G)≤10 为宜
  • 115. 6.5 程序复杂度定量度量 二. Halstead 方法  Halstead 方法是另一个著名的 方法,它根据程序中运算符和操 作数的总数来度量程序的复杂程 度。 令 : N1 为程序中运算符出现的总 次数, N2 为操作数出现的总次数 ,程序实际长度 N 定义为: N = N1 + N2
  • 116. 6.5 程序复杂度定量度量 二. Halstead 方法  详细设计完成之后,可以知道程序中 使用的不同运算符 ( 包括关键字 ) 的 个数 n1 ,以及不同操作数 ( 变量和常 数 ) 的个数 n2 。 Halstead 给出预测 程序长度 H 的公式如下: H = n1 log 2 n1 + n2 log 2 n2  这里, H 是程序长度的预测值,并 不等于程序中语句个数。
  • 117. 6.5 程序复杂度定量度量 二. Halstead 方法  Halstead 的重要 结论 :  程序的实际 Halstead 长度 N 可以由运算符、操作 数 n 算出。即使程序还未编制完成,也能预先算出 程序的实际 Halstead 长度 H , 虽然它没有明确 指出程序中到底有多少个语句。  经过多次验证,预测的 Halstead 长度与实际的 Halstead 长度是非常接近的。
  • 118. 6.5 程序复杂度定量度量 二. Halstead 方法 程序的潜在错误  Halstead 度量还可以用来预测程序中可能 存在的错误 E 。预测公式为 E = ( N 1+ N 2) ∗ log 2 ( n 1+ n 2) / 3000  例如,一个程序对 150 个运算符共使用了 1200 次,对 75 个数据库项共访问 1300 次 ,那么预测该程序的错误数: E = (1200+1300) ∗ log 2 (150+75)/3000 ≈ 6.5 即预测该程序中可能包含 6 ~ 7 个错误
  • 119. 6.5 程序复杂度定量度量 二. Halstead 方法 有人曾对从 300 条到 12000 条语句 范围内的程序核实了上述公式,发现 预测的错误数与实际错误数相比误差 在 8% 之内。
  • 120. 6.5 程序复杂度定量度量 二. Halstead 方法  没有注意调用的深度。 Halstead 公式应当 对调用子程序的不同深度区别对待。在计算 嵌套调用的运算符和操作数时,应乘上一个 调用深度因子。这样可以增大嵌套调用时的 错误预测率。  没有把不同类型的运算符,操作数与不同的 错误发生率联系起来,而是把它们同等看待。 例如,对简单 if 语句与 while 语句就没有 区别。

Notas do Editor

  1. 逻辑设计:设计数据库的逻辑结构,与具体的 DBMS 无关,主要反映业务逻辑。     物理设计:设计数据库的物理结构,就是根据数据库的逻辑结构,结合选定的 DBMS ,设计数据库的存储结构、存取方式等。   代码设计是一项重要的工作,合理的编码结构是使管理信息系统具有生命力的重要因素。 系统的详细 设计 过程是根据管理和用户的需要先进行 输出设计 ,然后反过来根据 输出 所要求获得信息来进行 输入设计 。 输出 信息的使用者是用户,故 输出 的内容与 格式 等是用户最
  2. (单入单出:一个模块只有 一个入口 以及 一个出口 )
  3. (单入单出:一个模块只有 一个入口 以及 一个出口 )
  4. 为 方便 起见
  5. xerox 是富士施乐, 2000 年被日本富士收购了。主要做打印机,复印机之类的买卖。
  6. 程序流程图中使用的符号: (a) 选择(分支); (b) 注释; (c) 预先定义的处理; (d) 多分支; (e) 开始或停止; (f) 准备; (g) 循环上界限; (h) 循环下界限; (i) 虚线; (j) 省略符; (k) 并行方式; (l) 处理; (m) 输入输出; (n) 连接; (o) 换页连接; (p) 控制流
  7. 程序流程图不易表示层次结构 ; · 程序流程图不易表示数据结构 和模块调用关系
  8. 基本过程结构清晰、易懂; 数据的处理与变换不清楚且不易修改;
  9. 不允许违背结构程序设计精神的图形工具 没有箭头,因此不允许随意转移控制。
  10. 使用表示结构化控制结构的 PAD 符号所设计出来的程序必然是结构化程序。
  11. Jackson 方法的 目标是获得简单清晰的设计方案 ,因为这样的方案易于理解、易于修改。为了达到这个目标, Jackson 方法的设计原则是:使程序结构同数据结构相对应。
  12. 第三个: A 或者是元素 B ,或者不出现 i :条件的编号
  13. 层次图中的一个方框通常代表一个模块;而 Jackson 图即使在描绘程序结构时 ,一个方框也并不代表一个模块,通常一个方框只代表几个语句。
  14. (注意:在导出程序结构图的过程中,由于改进的 Jackson 图规定在构成 顺序结构的元素 中不能有 重复出现或选择出现的元素 ,因此可能需要增加 中间层次的处理框 。)
  15. 第三个: A 或者是元素 B ,或者不出现 i :条件的编号
  16. 第三个: A 或者是元素 B ,或者不出现 i :条件的编号
  17. 第三个: A 或者是元素 B ,或者不出现 i :条件的编号
  18. 结构冲突:输入数据与输出数据找不到对应关系的情况就称为 结构冲突 。解决的办法就是 引入中间数据结构或中间文件 , 将冲突部分隔离开来 ,建立多个程序结构,再利用中间文件把它们联系起来,构成一个系统的整体。
  19.    利用 McCabe 环复杂度度量值时,有几点说明。     ( 1 ) 环路复杂度取决于程序控制结构的复杂度。当程序的分支数目或循环数目时其复杂度也增加。环路复杂度与程序中覆盖的路径条数有关。     ( 2 ) 环路复杂度是可增加的。例如,模块 A 的复杂度为 3 ,模块 B 的复杂度为 4 ,则模块 A 与模块 B 的复杂度是 7 。     ( 3 ) McCabe 建议,对于复杂度超过 10 的程序,应分成几个小程序,以减少程序中的错误。
  20. 当程序内分支数或循环个数增加时, 环形复杂度 也随之增加,因此它 是对测试难度的一种定量度量 ,也能对软件最终的可靠性给出某种预测
  21. 算术运算符、逻辑运算符、关系运算符