Contents
  1. 1. 一、 软件设计
    1. 1.0.1. 1. 模块化
    2. 1.0.2. 2. 模块的独立性
    3. 1.0.3. 3. 耦合的分类
    4. 1.0.4. 4. 去除模块间控制耦合的方法
    5. 1.0.5. 5. 如何降低模块间的耦合度
    6. 1.0.6. 6. HIPO图
    7. 1.0.7. 7. 结构图(SC)
    8. 1.0.8. 8. 改进的IPO图
    9. 1.0.9. 9. SC图举例
  • 2. 二、概要设计
    1. 2.0.1. 1. 数据流图类型
    2. 2.0.2. 2. 变换分析设计方法
  • 3. 三、测试
    1. 3.0.0.1. 基本概念
  • 3.0.1. 1. 软件测试的对象
  • 3.0.2. 2. 测试的基本原则
  • 3.0.3. 3. 测试的方法和技术
  • 3.0.4. 两种典型的测试:
  • 3.0.5. 4. 逻辑覆盖准则
  • 3.0.6. 5. 黑盒法的测试用例设计
  • 3.0.7. 6. 实用策略
  • 3.0.8. 7. 集成测试方法
  • 一、 软件设计

    • 总体设计(概要设计,结构设计)
      确定软件系统由哪些模块构成,以及模块间相互之间的关系
    • 详细设计(过程设计)
      确定每个模块中的具体处理过程
      基本概念

    1. 模块化

    在这里插入图片描述

    2. 模块的独立性

    基本概念:
    开发具有独立功能且和其它模块之间没有过多的相互作用的模块,可以做到模块的独立
    特点:
    具有特定的子功能,接口简单
    衡量标准:
    衡量模块的独立性:高内聚,低耦合

    • 耦合:(块间联系)衡量不同模块间相互依赖的紧密程度,为独立性的直接衡量
    • 内聚:(块内联系)模块内各部分(语句或段落)之间结合的紧密程度

    3. 耦合的分类

    1. 非直接耦合
      两个模块之间没有直接联系,模块独立性最强
      非直接耦合
    2. 数据耦合(松散耦合)
      一个模块调用另一个模块时,被调用模块的输入,输出都是简单的数据
    3. 标记耦合(特征耦合)
      例如:两个模块通过传递数据结构(不是简单数据,而是记录,数组等)加以联系,或者都与一个数据结构有关系,则称这两个模块间存在标记耦合
    4. 控制耦合
      一个模块通过开关量,标志,名字等控制信息,明显的控制一模块的功能
      增加了理解和编程的复杂性,调用模块必须知道被调用模块的内部逻辑,增加了相互依赖
    5. 公共耦合
      一组模块引用同一个公用数据区

    公共数据区(全局数据区或公共数据环境)

    • 全局数据结构
    • 共享通讯区
    • 内存公共覆盖区
    1. 内容耦合
      一个模块直接访问另一个模块的内部信息(程序代码或者数据)

      4. 去除模块间控制耦合的方法

    2. 将被调用模块内部的判定上移到调用模块中进行
    3. 被调用模块分解成若干单一功能模块

    5. 如何降低模块间的耦合度

    1. 如果模块必须存在耦合,选择适当的耦合类型

    原则:

    • 尽量使用数据耦合
    • 少用控制耦合
    • 限制公共耦合的范围
    • 坚决避免使用内容耦合
    1. 降低模块间接口的复杂性

    6. HIPO图

    H图(层次图)中的每一个模块都有一张IPO图对应
    HIPO

    7. 结构图(SC)

    SC图是SD方法在概要设计中使用的主要表达工具,用来显示软件的模块组成以及其调用关系

    • 方框代表模块,框内注明模块的名字或主要功能
    • 方框之间的箭头或直线表示调用关系
    • 带注释的箭头表示模块调用过程中来回传递的信息
      • 空心:数据
      • 实心:控制信息
        SC中的四种模块:
        四种模块

    8. 改进的IPO图

    在这里插入图片描述

    在这里插入图片描述

    9. SC图举例

    在这里插入图片描述

    二、概要设计

    概要设计的方法:SD(结构化设计方法)
    以数据流图为基础,定义了把数据流图变换成软件结构的不同映射方法,所以这种方法也称为面向数据流的设计方法
    面向数据流设计方法的任务:
    在这里插入图片描述

    1. 数据流图类型

    1. 变换型
      特点:
      具有较明显的输入,变换(主加工),和输出界面的数据流图
      该类数据流图分为输入,朱加工,输出三部分
    2. 事务型
      特点:
      某个加工将它的输入分离成一串发散的数据流,形成许多的活动路径,并根据输入的值选择其中的一条路径。
      在这里插入图片描述

    大型系统DFD中,变换型和事务型往往共存

    2. 变换分析设计方法

    1. 区分输入,变换中心,输出部分,在DFD上标明分界线
    • 输入边界:从物理输入端开始,一步步向系统内部移动,直到某个数据不能被看做是系统的输入为止,则这个数据流的前一个数据流就是系统的逻辑输入
    • 输出边界:从物理输出端开始,一步步的向系统内移动,同样找到逻辑输出
    • 主加工:逻辑输入与逻辑输出之前的部分
      在这里插入图片描述
    1. 第一级分解(建立初识SC框架)
      设计顶层和第一层模块
      在这里插入图片描述
      or
      在这里插入图片描述

    2. 第二级分解(分解SC各分支)
      自顶向下分解,设计出每个分支的中,下层模块
      在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    中心加工分支的分解
    在这里插入图片描述

    例题:
    在这里插入图片描述

    1. 流程图
      在这里插入图片描述

      三、测试

      软件测试是软件开发工作的最后一个环节,是保证软件质量,提高软件可靠性的关键。
      软件产品最大的成本是检测软件错误,修改软件错误的成本。
      在这里插入图片描述

      基本概念

    2. 预防错误:几乎不可能实现
    3. 发现错误:软件测试目的
      测试的目的是为了证明程序有错,而不是证明程序无错
      把证明程序无错当做测试目的不仅是不正确的也是完全做不到的,而且对做好测试没有任何益处,甚至是十分有害的。

      1. 软件测试的对象

      软件测试不等于程序测试,软件测试应贯穿于软件定义与开发的整个期间

      2. 测试的基本原则

    4. 开发和测试队伍分别建立
    5. 测试用例(测试用的一组数据,环境平台和运行条件)应由输入数据和预期的输出结果两部分组成
    6. 兼顾合理的输入和不合理的输入数据
    7. 应检查程序是否做了不该做的事
    8. 程序修改后要回归测试
    9. 应长期保留测试用例,直至系统废弃

    例题:
    在这里插入图片描述

    在这里插入图片描述

    3. 测试的方法和技术

    在这里插入图片描述

    • 静态测试:
      基本特征是在对软件进行分析、检查和测试,不实际运行被测试的软件
      静态测试可以找出30%~70%的逻辑设计错误
      对需求规格说明书,软件设计说明书,源程序做结构分析、流程图分析、符号执行来找错
    • 动态测试
      通过运行软件来检验软件的动态行为和运行结果的正确性

    动态测试的两个基本要素

    1. 被测试程序
    2. 测试数据(测试用例)

    动态测试的方法:

    1. 选取定义域有效值,或者定义域外无效值
    2. 对已选取值决定预期的结果对已选取值决定预期的结果
    3. 用选取值执行程序
    4. 执行结果与2步骤进行比较,不吻合则程序有错
    

    两种典型的测试:

    1. 黑盒测试(功能测试,数据驱动测试,基于规格说明书测试)
      黑盒测试是从用户观点,按规格说明书要求的输入数据与输出数据的对应关系设计测试用例,是根据程序外部特征进行测试
      在这里插入图片描述

    2. 白盒测试(结构测试,玻璃盒测试,基于覆盖的测试)
      根据被测试程序的逻辑结构设计测试用例,力求提高测试覆盖率
      白盒测试是根据程序内部逻辑结构进行测试
      在这里插入图片描述
      在这里插入图片描述


    1. 穷举测试
      不论黑盒还是白盒测试都不能进行穷举测试,所以软件测试不可能发现程序中存在的所有错误,因此需要精心设计测试方案,用尽可能少的次数,测出尽可能多的错误

    4. 逻辑覆盖准则

    1. 语句覆盖
      语句覆盖是最弱的逻辑覆盖
      在这里插入图片描述
      在这里插入图片描述
    2. 判定覆盖
      判定覆盖仍然是最弱的逻辑覆盖
      在这里插入图片描述
      在这里插入图片描述
    3. 条件覆盖
      使每个判定的每个条件可能取值至少执行一次
      条件覆盖不一定包含判定覆盖
      判定覆盖不一定包含条件覆盖
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    4. 判定/条件覆盖
      选取足够多的测试用例,使判断中的每个条件的所有可能取值至少执行一次,同时每个判断本身神的所有可能判断结果至少执行一次
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
    5. 条件组合覆盖
      所有可能的条件取值组合至少执行一次
      在这里插入图片描述
      在这里插入图片描述
    6. 路径覆盖
      覆盖每一个可能的路径
      (测试用例越少越好,所以下面的不如上面的)
      在这里插入图片描述
      路径测试法:
      借助程序控制流图设计测试用例的白盒测试法
    • 点覆盖
      测试路径至少经过程序控制流图
      在这里插入图片描述
    • 边覆盖
      测试路径至少经过程序控制流图
      在这里插入图片描述

    5. 黑盒法的测试用例设计

    无论是黑盒测试还是白盒测试都不可能使用所有有效和无效的输入数据进行测试,所以我们只能选择少量且具有代表性的输入数据,以最小代价暴露出程序较多的错误

    1. 等价类划分方法
      把所有可能的输入数据(有效的和无效的)划分成若干个等价的子集(称为等价类),使得每个子集中的一个典型值在测试中的作用与这一子集中的所有其他值的作用相同
      可以从每个子集中选取一组数据来测试程序即可。
      等价类的分类:
    • 有效等价类(合理等价类)
    • 无效等价类(不合理等价类)
      划分等价类的规则:
      1. 如果规定了输入值的范围时,可定义一个有效等价类和两个无效等价类
        在这里插入图片描述
      2. 当规定了输入的规则时,可以划分出一个有效的等价类(符合规则)和若干无效的等价类(从不同角度违反规则)
        在这里插入图片描述
      3. 如规定了输入数据的一组值,且程序对不同输入值做不同处理,则每个允许的输入值是一个有效等价类,并有一个无效等价类(所有不允许的输入值的集合)
        在这里插入图片描述
      4. 如规定了输入数据是整型,则可划分出正整数,零,负整数三个有效等价类
      5. 当处理表格时:有效类可分为空表、含一项的表、含多项的表
        设计测试用例步骤
        (1)形成等价类表,每一等价类规定一个唯一的编号;
        (2)设计–测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这-步骤, 直到所有有效等价类均被测试用例所覆盖;
        (3)设计–新测试用例,使其只覆盖-个无效等价类,重复这-步骤直到所有无效等价类均被覆盖 (通常程序执行一个错误后不继续检测其它错误,故每次只测一个无效类)
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        例2
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
    1. 边界值分析法
      边界值分析法与等价类分析法的区别
      在这里插入图片描述
      边界值分析法原则:
      1. 如果输入条件代表以a和b为边界的范围,测试用例应包含a,b,略大于a和略小于b的值
        在这里插入图片描述
      2. 如果输入条件代表一组值,测试用例应当执行其中的最大和最小值,还应当测试略大于和略小于最小值的值
        在这里插入图片描述
      3. 如规格说明中提出输入输出的有序集(顺序文件,有序表),取有序集的第一个和最后一个元素做测试用例
      4. 如程序数据结构有预定的边界,应测试其边界的数据项
        在这里插入图片描述
      5. 如输出条件规定了取值范围,取边界上下浮动值做测试用例
        在这里插入图片描述
    2. 错误推测法
      思路:(以此为基础设计测试方案)
    3. 列出可能有的错误
    4. 列出容易发生错误的特殊情况
      根据: 直觉,经验
      工具: 常见错误清单,判定表

      6. 实用策略

      黑盒设计+白盒补充
    5. 在任何情况下都应该使用边界值分析的方法
    6. 必要时用等价划分法补充
    7. 必要时用错误推测法补充
    8. 对照程序逻辑,检查测试方案,根据对程序可靠性的要求采用不同的逻辑覆盖标准,必要时补充一些测试方案
      即使使用以上综合策略设计的测试方案,仍然不能保证发现一切错误

    软件测试的步骤:
    在这里插入图片描述

    7. 集成测试方法

    通常采用黑盒测试技术

    • 非渐增式测试
      一次就把所有通过了单元测试的模块组合在一起进行全程序的测试
    • 建增式测试
      从一个模块开始,测一个添加一个模块,边组装边测试,以发现与接口联系的问题

    渐增式和非渐增式比较:

    • 渐增式可以较早发现模块间的接口错误
      非渐增式最后才组装,因此错误发现的晚
    • 渐增式中,出现的错误往往跟最新加入的模块有关
      非渐增式中发现错误后难以诊断定位
    • 渐增式在不断集成的过程中使模块不断在新的条件下受到新的检测,测试更彻底
    • 渐增式较非渐增式费时。非渐增式可以同时并行检测所有模块,能充分利用人力
      总的来说,渐增式测试方法较好

    渐增式的几种策略

    • 自顶向下结合:
    1. 主控模块为驱动模块,所有直属主模块的下属模块全用桩模块代替,测试主模块
    2. 根据所选用结合方法(先深度或先广度),每次用一实际模块替换相应桩模块
    3. 模块结合一个,测试一个
    4. 完成一组测试后,用实际模块替换另一个桩模块
    5. 为保证不引入新错误,进行回归测试
      在这里插入图片描述
      在这里插入图片描述
    • 自底向上结合:
    1. 对叶模块配以驱动模块对其测试, 也可把最底层模块组合成实现某一特定软件功能的簇, 由驱动模块对它测试。
    2. 用实际模块代替驱动模块,与它已测试的
      直属模块组装成子系统。
    3. 为子系统配备驱动模块,进行新的测试。
    4. 判断是否已组装到达主模块是则结束,否则执行2
      在这里插入图片描述

    混合集成测试方法:

    • 一般对软件的上层使用自顶向下的结合方法
    • 对下层使用自底向上的结合的方法

    在这里插入图片描述

    Contents
    1. 1. 一、 软件设计
      1. 1.0.1. 1. 模块化
      2. 1.0.2. 2. 模块的独立性
      3. 1.0.3. 3. 耦合的分类
      4. 1.0.4. 4. 去除模块间控制耦合的方法
      5. 1.0.5. 5. 如何降低模块间的耦合度
      6. 1.0.6. 6. HIPO图
      7. 1.0.7. 7. 结构图(SC)
      8. 1.0.8. 8. 改进的IPO图
      9. 1.0.9. 9. SC图举例
  • 2. 二、概要设计
    1. 2.0.1. 1. 数据流图类型
    2. 2.0.2. 2. 变换分析设计方法
  • 3. 三、测试
    1. 3.0.0.1. 基本概念
  • 3.0.1. 1. 软件测试的对象
  • 3.0.2. 2. 测试的基本原则
  • 3.0.3. 3. 测试的方法和技术
  • 3.0.4. 两种典型的测试:
  • 3.0.5. 4. 逻辑覆盖准则
  • 3.0.6. 5. 黑盒法的测试用例设计
  • 3.0.7. 6. 实用策略
  • 3.0.8. 7. 集成测试方法