BUAA-OO-Unit3-总结

张雯幻-22230609 学生 2024-05-16 11:58:23

BUAA-OO-Unit3-总结

目录

  • BUAA-OO-Unit3-总结
  • 一、分析本单元的测试过程
  • 1. 谈谈你对黑箱测试、白箱测试的理解
  • 2. 对单元测试、功能测试、集成测试、压力测试、回归测试的理解
  • 3. 数据构造有何策略
  • 二、梳理本单元的架构设计,分析自己的图模型构建和维护策略
  • 1. 架构设计:
  • 2. 图模型构建:
  • 3. 维护策略:
  • 三、分析作业中出现的性能问题及其修复情况,谈谈自己对规格与实现分离的理解
  • 1. 性能问题:
  • 2. 规格实现与分离:
  • 四、本单元中同学们实现了Junit测试方法,总结分析如何利用规格信息来更好的设计实现Junit测试,以及Junit测试检验代码实现与规格的一致性的效果
  • 五、本单元学习体会

一、分析本单元的测试过程

1. 谈谈你对黑箱测试、白箱测试的理解

白箱测试:
是测试人员要了解程序结构和处理过程,按照程序内部逻辑测试程序,检查程序中的每条通路是否按照预定要求正确工作.它主要的针对被测程序的源代码,测试着可以完全不考虑程序的功能.
白箱测试流程:
源程序-->分析程序内部逻辑结构-->流程图-->制定测试用例-->被测程序-->执行路径-->覆盖情况分析
黑箱测试:
是根据功能需求来测试程序是否按照预期工作,是要从用户的角度分析.尽量发现代码所表现的外部行为的错误.黑盒测试应该是由测试团队来完成的.根据某个给定的输入,应该能够理解并详细说明程序的预期输出.
黑箱测试流程:
功能需求-->产生测试用例-->被测程序-->输出实际结果-->与预期结果比较-->分析功能是否实现.

本单元编写的JUnit测试主要为黑箱测试,只关心方法的输入状态与输出时的状态是否满足要求,不关心内部代码的执行。

2. 对单元测试、功能测试、集成测试、压力测试、回归测试的理解

在软件测试过程中,不同的测试方法用于检测软件在不同阶段和不同方面的质量和性能。

  1. **单元测试 (Unit Testing)**:

    • 定义:单元测试是对软件系统的最小可测试部分(通常是单个函数或方法)进行验证,以确保其按照预期工作。
    • 目的:确保每个单元在单独情况下都能正常工作。
    • 特点:一般由开发人员编写和执行,通常使用自动化测试框架。
  2. **功能测试 (Functional Testing)**:

    • 定义:功能测试是基于软件功能规格说明书,对软件系统的功能进行验证,确保每个功能模块都能按照预期工作。
    • 目的:验证软件的各个功能是否符合需求。
    • 特点:通常是黑盒测试,不关心内部实现,只关注输入和输出。
  3. **集成测试 (Integration Testing)**:

    • 定义:集成测试是将多个单元模块组合在一起进行测试,以发现不同模块之间的接口和交互问题。
    • 目的:确保各模块在集成后能够正确协同工作。
    • 特点:可以是逐步集成测试,也可以是大爆炸集成测试。
  4. **压力测试 (Stress Testing)**:

    • 定义:压力测试是在软件超负荷运行条件下进行测试,以评估系统在极端情况下的表现。
    • 目的:确定软件的稳定性和可靠性,发现系统的性能瓶颈。
    • 特点:模拟高负载或不正常使用条件。
  5. **回归测试 (Regression Testing)**:

    • 定义:回归测试是对修改或更新过的系统进行再次测试,以确保新代码没有引入新的错误或破坏现有功能。
    • 目的:验证修复的问题和新功能没有对旧功能产生负面影响。
    • 特点:通常是重复执行之前的测试用例,自动化程度较高。

每种测试方法都有其特定的目的和应用场景,常常在软件开发生命周期的不同阶段组合使用,以确保软件的质量和稳定性。

3. 数据构造有何策略

在软件测试过程中,数据构造策略是确保测试覆盖全面性和有效性的重要方面。不同的测试阶段和类型可能需要不同的数据构造策略。

  1. **边界值分析 (Boundary Value Analysis)**:

    • 定义:边界值分析是选择接近边界条件的数据进行测试,这些边界条件通常是输入域的最小值、最大值及其附近的值。
    • 目的:捕获边界条件的错误,这些错误通常比中心值更容易出现。
    • 示例:如果输入域是1到100,那么测试数据应包括0, 1, 2, 99, 100, 101。
  2. **等价类划分 (Equivalence Partitioning)**:

    • 定义:将输入数据划分为若干等价类,每个等价类代表一组对程序有相似作用的输入数据,从每个等价类中选取代表性数据进行测试。
    • 目的:减少测试数据量的同时保证测试覆盖面。
    • 示例:对于年龄输入域,如果有效范围是18到65岁,可以划分为低于18、18到65、以及高于65三类。
  3. **错误猜测 (Error Guessing)**:

    • 定义:基于经验和对程序的了解,猜测可能会导致程序出错的输入数据进行测试。
    • 目的:发现那些可能未被覆盖的隐蔽错误。
    • 示例:输入空字符串、特殊字符、大量数据、非法格式数据等。
  4. **正交试验设计 (Orthogonal Array Testing)**:

    • 定义:使用正交数组来系统地创建测试用例,确保在组合测试中能够覆盖所有因素及其组合。
    • 目的:通过较少的测试用例组合来覆盖尽可能多的场景。
    • 示例:多因素多水平组合测试,如不同操作系统、浏览器、和网络条件的组合测试。
  5. **随机测试 (Random Testing)**:

    • 定义:随机选择输入数据进行测试,输入数据可以由随机数生成器或其他随机机制产生。
    • 目的:覆盖大量的输入数据组合,发现不常见的错误。
    • 示例:对于一个数值输入,可以随机生成大量的整数或浮点数进行测试。
  6. **基于场景的测试 (Scenario-Based Testing)**:

    • 定义:根据实际使用场景设计测试数据,模拟用户在现实环境中的操作。
    • 目的:确保软件在实际使用中能够正确工作。
    • 示例:用户注册、登录、购物车操作等实际业务流程测试。
  7. **数据驱动测试 (Data-Driven Testing)**:

    • 定义:使用外部数据源(如数据库、文件、电子表格)驱动测试,测试逻辑和测试数据分离。
    • 目的:提高测试的复用性和维护性。
    • 示例:将不同的输入数据保存在CSV文件中,通过测试脚本读取这些数据并执行测试。

每种策略都有其独特的优点和适用场景,通常在实际测试过程中需要根据具体情况综合运用,以保证测试的全面性和有效性。

二、梳理本单元的架构设计,分析自己的图模型构建和维护策略

1. 架构设计:

架构设计与JML一致。

2. 图模型构建:

HashMap存储Personid和对象,以及其他所有有Id的数据都可以使用HashMap进行存储。这样查询时的时间复杂度都为O(1)

3. 维护策略:

这单元的维护是这单元的重点,因为存在很多查询和计算的方法,很容易导致CTLE。因此需要对计算量大的方法和可能频繁访问的方法进行维护。

  • 第一次作业:
    这次作业中的tripleSumblockSum是重点维护的对象。而isCircle方法需要进行数据结构的优化。
    • 对于isCircle我使用了并查集的数据结构,所有在同一个关系网中的Person共有同一个祖先,当查询是否isCircle时,只需要判断祖先是否相同。
    • 对于tripleSumblockSum当进行addPerson时,使blockSum加一。但执行addRelation时如果id1的祖先和id2的祖先不同,则令blockSum减一。然后遍历其他Persons如果有和id1id2
      isLinkedPerson则令tripleSum减一。进行modifyRelation时如果id1id2的关系删除,则判断是否导致blockSum增加。tripleSum判断方法与addRelation相同。
  • 第二次作业:
    这次作业主要维护valueSumbestId
    • 对于valueSum需要在Tag类中的addPersondelPerson方法进行valueSum的维护,并在Network中的modifyadd时进行维护判断。
    • 对于bestId,每个Person都增加一个bestId属性,只有当bestAcquaintance结果可能发生改变时,才更新bestId
  • 第三次作业:
    这次作业按照JML实现即可,难点在于理解,没有需要维护的对象。

三、分析作业中出现的性能问题及其修复情况,谈谈自己对规格与实现分离的理解

1. 性能问题:

性能问题主要为大量执行计算指令,产生CTLE,将需要计算的量进行动态维护即可,同上文虎策略。

2. 规格实现与分离:

JML中阐述的只是程序的功能,只有最简单的逻辑,而在进行实现是只要满足其要求的功能即可,实现方法可以自行决定。对方法进行数据结构和算法上的优化。

四、本单元中同学们实现了Junit测试方法,总结分析如何利用规格信息来更好的设计实现Junit测试,以及Junit测试检验代码实现与规格的一致性的效果

  • 利用JML编写JUnit时应该确保覆盖所有的normal_behaviorexception_behavior
  • 保证没有assignable的属性不能被修改。
  • 利用ensures保证返回结果的正确性。

五、本单元学习体会

在这个单元的学习中,初步了解了JML的作用,学习了JML的基本语法。

体会到了测试在项目工程中的重要作用,以及规格统一的重要性。

对代码设计的提升也有一定的帮助。

...全文
30 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

301

社区成员

发帖
与我相关
我的任务
社区描述
2023年北航面向对象设计与构造
学习 高校
社区管理员
  • YannaZhang
  • CajZella
  • C_ecelia
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧