15、软件测试技术实验报告与面向对象系统验收测试方法

软件测试技术实验报告与面向对象系统验收测试方法

1. 软件测试工具介绍

在软件开发过程中,有多种工具可用于提高代码质量和测试效率。
- Ada Analyzer :由Little Tree Consulting开发、Rational Corporation分发的静态分析工具。它被宣传为“提高代码质量的多功能工具”,功能涵盖代码正确性分析、编程标准一致性检查以及代码效率评估等。该工具与Apex开发环境集成良好,保留了其用户界面的一致性。
- 选定分析功能
- 数据流分析 :旨在突出变量使用和设置中的差异。当前实现仅限于检测标量变量和记录中的数据流不一致。使用了两个功能来检测变量在设置前被使用或在使用前被多次设置的情况。
- 控制流分析 :能够检测函数中不返回值的路径以及异常传播超出其作用域的情况,但不检查不可执行代码。
- 静态约束分析 :可检测诸如除零和数组索引越界等静态约束错误,但并非在所有情况下都能检测到。
- 标准代码实践检查 :实现了规则以验证被分析软件是否符合软件生产力协会制定的Ada质量和风格编程标准,以及Little Tree Consulting制定的额外规则。例如,检测未检查的转换不匹配、不一致的表示规范、使用 Text io 包和使用未限定引用等。此功能被认为是Ada Analyzer中查找缺陷最有用的功能,检查了超过一百条规则,涵盖代码正确性、可维护性、效率、可读性和可移植性。
- 可定制性 :Ada Analyzer具有高度可定制性,使用Ada语义接口规范(ASIS)构建分析。ASIS是一个标准化且与编译器无关的接口,便于代码分析工具的开发和移植。由于分析的源代码作为产品的一部分分发,因此可以修改或添加分析。
- TestMate :一个完整的软件测试管理环境,在VERA实验中,其自动生成单元测试数据的功能备受关注。
- 功能特点 :可以生成满足代码或分支覆盖的数据,也可以为Rational的“功能测试”生成测试数据,即测试每个输入变量的下限、中间值和上限的组合。一旦测试人员设置了预期输出,TestMate可以创建相应的测试脚本,运行编译器,执行脚本并指示哪些测试用例通过或失败,以及获得的测试覆盖率。脚本以Ada语言生成,原则上可定制,但编辑脚本会使测试的维护和重新运行变得困难。
- 参数组合选项 :有三个选项(All、Each、Min)控制生成的参数值之间的组合级别。“All”选项生成每个变量的下限、中间值和上限的所有可能组合。自动生成测试用例的预期好处有两个方面:便于实现良好的代码覆盖;测试人员无需编写测试脚本,可以专注于生成特定的测试用例。

2. 不同测试方法的比较
  • 代码审查与Fagan检查的比较 :AMS在1996年采用了Fagan检查,VERA实验为评估其对测试生产力的影响提供了机会。目前,Fagan检查指标数据库和MARS(指标分析和报告系统)中已收集了511次代码检查数据。结果表明,更正式的Fagan检查过程比不太正式的代码审查过程能提供更高的代码质量和更一致的结果。平均而言,Fagan检查发现的主要缺陷数量是代码审查的2.5倍。这可能是由于Fagan检查中每个检查员有明确的角色,以及对审查速率和文档大小的限制。虽然Fagan检查比代码审查需要更多的资源,但在测试集成阶段可以收回成本,因为在测试集成阶段发现的缺陷修复成本是实现阶段的4到5倍。此外,工程师的经验对缺陷发现率有重要影响,经验丰富的工程师在语言和应用领域方面的经验越多,发现的缺陷就越多。
    | 测试方法 | 平均发现主要缺陷数量 | 资源需求 | 缺陷修复成本 |
    | ---- | ---- | ---- | ---- |
    | 代码审查 | 较少 | 较少 | 较低 |
    | Fagan检查 | 较多 | 较多 | 后期可收回成本 |

  • 静态分析与代码审查的比较 :静态分析是在不执行软件的情况下验证软件的活动。使用Ada Analyzer进行的静态分析实验中,三名参与者对基线代码进行了分析。与开发团队进行的代码审查相比,静态分析在不了解应用程序的情况下,完成分析的速度快34%,检测到的主要缺陷多26%。然而,相当数量的缺陷是实验人员在分析代码过程中发现的,而不是工具自动检测到的。代码审查和静态分析似乎是互补的,因为它们针对不同类型的缺陷,只有5%的缺陷是两种技术共同发现的。
    | 测试方法 | 完成时间 | 发现主要缺陷数量 | 针对缺陷类型 |
    | ---- | ---- | ---- | ---- |
    | 代码审查 | 249小时 | 较少 | 逻辑缺陷为主 |
    | 静态分析 | 140小时 | 较多 | 数据滥用为主 |

3. 自动化测试用例生成的经验

在许多大型项目中,单元测试通常被认为是繁琐且昂贵的。VERA实验的目标是评估自动生成测试数据是否能提高单元测试的生产力。目前,TestMate(版本2.4.6)的自动测试用例生成功能仅适用于Ada的有限子集。基线软件使用了完整的Ada语言,导致了技术难题,严重限制了实验的范围,只有7%的单元进行了单元测试。在总共130小时的工作中,99小时用于解决TestMate与基线软件之间的问题和不兼容性,在剩余的31小时内发现了四个主要缺陷。这表明,对于使用完整Ada语言特性的软件,TestMate自动生成测试用例的好处有限。

4. 面向对象系统验收测试方法

在面向对象系统的验收测试中,提出了一种严谨的方法,该方法结合了用例进行需求建模和因果图进行测试用例设计。
- 用例 :功能需求通过参与者(actor)和用例(use case)进行建模。参与者是与系统直接交互的外部实体,可以是人类用户或其他软件或硬件系统。用例是系统与一个或多个参与者之间的一组交互,旨在实现特定的业务相关目标。用例图是参与者、用例、参与者与用例之间的通信关联以及用例之间的泛化关系的图形表示。场景是指通过用例的单个流程,展示了用例内特定的条件组合。为了使描述更清晰,可以提取一些子流程形成新的用例,新用例可以扩展旧用例或与旧用例共享子流程。使用两个模板来描述用户需求,一个用于用例级别,另一个用于场景级别,用例和场景进行了标签标记以方便追溯。
- 用例模板
- 名称
- 类型
- 主要参与者
- 次要参与者
- 与其他用例的关系
- 描述

这种方法的正式特性保证了完整的功能覆盖,在金融领域的面向对象应用程序中得到了应用,并且与实现语言无关。通过用例建模的用户需求为制定验收测试计划提供了良好的起点,使用因果图技术将用例场景严格转换为使用有限逻辑运算符符号表示的形式逻辑模型。

综上所述,在软件开发和测试过程中,不同的工具和方法各有优劣。Fagan检查和静态分析在提高代码质量方面表现出色,而自动化测试用例生成工具在某些情况下可能受到限制。面向对象系统的验收测试方法为确保系统的功能正确性提供了一种有效的途径。在实际应用中,应根据项目的特点和需求选择合适的工具和方法,以达到最佳的测试效果和成本效益。

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(Ada Analyzer):::process --> B(数据流分析):::process
    A --> C(控制流分析):::process
    A --> D(静态约束分析):::process
    A --> E(标准代码实践检查):::process
    F(TestMate):::process --> G(自动生成单元测试数据):::process
    H(代码审查):::process --> I(发现逻辑缺陷):::process
    J(Fagan检查):::process --> K(发现更多主要缺陷):::process
    L(静态分析):::process --> M(发现数据滥用缺陷):::process
    N(面向对象系统验收测试):::process --> O(用例建模):::process
    N --> P(因果图设计测试用例):::process

软件测试技术实验报告与面向对象系统验收测试方法

5. 各测试方法的优势总结
  • Fagan检查的优势
    • 提升代码正确性 :Fagan检查通过明确的角色分工和严格的流程约束,促使检查员专注于特定任务,从而显著提高了代码的正确性。这种正式的流程有助于发现更多的主要缺陷,确保代码质量达到较高水平。
    • 推动过程改进文化 :Fagan检查不仅仅是发现缺陷,更重要的是它促进了一种过程改进的文化。在执行检查的过程中,团队成员不断反思和优化流程,从而提高整个软件开发过程的效率和质量。
    • 成本效益 :虽然Fagan检查在初期需要投入更多的资源,但从长远来看,它能够在测试集成阶段收回成本。因为在早期发现并修复缺陷,避免了后期更昂贵的修复工作,从而降低了整体的开发成本。
  • 静态分析的优势
    • 高效性 :静态分析在不执行软件的情况下进行验证,能够快速发现代码中的潜在问题。与代码审查相比,它可以在更短的时间内完成分析,并且发现更多的主要缺陷。例如,在VERA实验中,静态分析完成的速度比代码审查快34%,检测到的主要缺陷多26%。
    • 互补性 :静态分析与代码审查互补,能够发现不同类型的缺陷。代码审查主要关注代码的逻辑,而静态分析则侧重于数据的使用和控制流的异常。两者结合使用,可以更全面地发现软件中的问题。
    • 适用性 :使用Ada Analyzer进行的静态分析可以由经验相对较少的工程师完成,即使他们对应用程序的领域知识了解有限。这在缺乏领域专家的情况下尤为有用,能够提高团队的整体测试能力。
  • 面向对象系统验收测试方法的优势
    • 功能覆盖完整性 :该方法结合用例建模和因果图设计测试用例,保证了系统的功能覆盖完整性。通过用例对用户需求进行建模,能够全面考虑系统的各种使用场景;而因果图技术则将用例场景转换为形式逻辑模型,确保测试用例的设计严谨且全面。
    • 独立性 :这种验收测试方法与实现语言无关,适用于各种面向对象的系统。无论使用何种编程语言实现系统,都可以采用该方法进行验收测试,提高了方法的通用性和适用性。
6. 实际应用中的注意事项
  • 工具选择
    • 考虑项目特点 :在选择测试工具时,需要充分考虑项目的特点和需求。例如,如果项目使用了完整的Ada语言特性,那么TestMate自动生成测试用例的功能可能会受到限制,需要谨慎使用。
    • 工具的可定制性 :像Ada Analyzer这样具有高度可定制性的工具,可以根据项目的具体要求进行修改和扩展。在选择工具时,应考虑其可定制性,以满足项目的特殊需求。
  • 人员因素
    • 经验的重要性 :在测试过程中,工程师的经验对缺陷发现率有重要影响。经验丰富的工程师在语言和应用领域方面的经验越多,发现的缺陷就越多。因此,在组建测试团队时,应尽量安排有经验的工程师参与。
    • 培训与学习 :对于新的测试工具和方法,需要对团队成员进行培训,使其熟悉工具的使用和方法的流程。例如,在使用Ada Analyzer进行静态分析时,需要给实验人员一定的时间进行熟悉和学习。
  • 流程控制
    • 遵循规则 :无论是Fagan检查还是其他正式的测试流程,都需要严格遵循规则。只有这样,才能保证流程的一致性和有效性,从而获得可靠的测试结果。
    • 工具使用控制 :在使用自动化工具时,需要对工具的使用进行控制。例如,制定代码实践规范,确保工具的使用符合项目的要求,从而保证测试结果的可重复性。
7. 未来展望

随着软件系统的不断发展和复杂化,软件测试技术也需要不断创新和改进。未来,我们可以期待以下几个方面的发展:
- 更智能的测试工具 :随着人工智能和机器学习技术的发展,测试工具将变得更加智能。它们能够自动学习和适应不同的软件系统,提高缺陷检测的准确性和效率。
- 集成化的测试平台 :未来的测试平台将更加集成化,能够将各种测试工具和方法整合在一起,提供一站式的测试解决方案。这将大大提高测试的效率和质量。
- 基于模型的测试方法 :基于模型的测试方法将得到更广泛的应用。通过建立系统的模型,可以更全面地分析系统的行为和特性,从而设计出更有效的测试用例。

总之,软件测试是确保软件质量的重要环节。通过合理选择测试工具和方法,充分发挥人员的作用,严格控制测试流程,我们能够提高软件的质量和可靠性,满足用户的需求。同时,我们也应关注测试技术的发展趋势,不断探索和应用新的方法和工具,以适应不断变化的软件环境。

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(选择测试方法):::process --> B{Fagan检查}:::process
    A --> C{静态分析}:::process
    A --> D{自动化测试用例生成}:::process
    A --> E{面向对象系统验收测试}:::process
    B --> F(提升代码正确性):::process
    B --> G(推动过程改进):::process
    B --> H(成本效益):::process
    C --> I(高效性):::process
    C --> J(互补性):::process
    C --> K(适用性):::process
    D --> L(效率提升):::process
    D --> M(功能覆盖):::process
    E --> N(功能覆盖完整性):::process
    E --> O(独立性):::process

以下是一个总结表格,展示了不同测试方法的优势和适用场景:
| 测试方法 | 优势 | 适用场景 |
| ---- | ---- | ---- |
| Fagan检查 | 提升代码正确性、推动过程改进、成本效益 | 对代码质量要求较高的项目 |
| 静态分析 | 高效性、互补性、适用性 | 代码规模较大、需要快速发现潜在问题的项目 |
| 自动化测试用例生成 | 效率提升、功能覆盖 | 部分功能简单、可自动化测试的项目 |
| 面向对象系统验收测试 | 功能覆盖完整性、独立性 | 面向对象的软件系统验收 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值