22373480张俊华面向对象课程第三单元总结
测试相关
黑箱测试与白箱测试
- 黑箱测试:数据生成难度较低,对数据生成的量要求比较高,针对性不高。主要靠数据生成的量来尽可能囊括数据生成的质。
- 白箱测试:数据针对性强,对数据编写的质要求比较高,针对性强。如果数据的质不够全面,则会导致测试不充分。
本次作业中,我主要使用黑箱测试。
针对代码结构的数据编写,效率太低。而程序编写迭代次数多,结构也会发生调整。比较适合黑箱测试。
单元测试
单元测试是软件开发中的一种测试方法,旨在验证代码中的各个独立单元(通常是函数、方法或类)是否按照预期进行工作。它们是自动化测试的一部分,通常由开发人员编写,并在代码编写过程中频繁运行,以确保代码的质量和稳定性。在单元测试中,针对每个单元编写测试用例,用于检查输入和输出是否符合预期,以及代码是否符合规范和需求。通过单元测试,开发人员可以快速发现和修复代码中的问题,提高代码的可维护性和可靠性。
单元测试具有多个优势,包括:
- 及早发现问题:通过在开发过程中频繁运行单元测试,可以及早发现代码中的问题,避免它们在后续阶段导致更严重的错误。
- 提高代码质量:单元测试促使开发人员编写更模块化、更清晰、更可测试的代码,从而提高代码的质量和可读性。
- 支持重构:有了单元测试,开发人员可以在重构代码时更有信心,因为他们可以通过运行单元测试来验证重构后的代码是否仍然符合预期。
- 节省时间:尽管编写和维护单元测试需要一定的时间和精力,但它们最终可以帮助节省整体开发时间。通过捕获问题并防止代码退化,单元测试可以避免花费大量时间在调试和修复问题上。
- 增强开发团队信心:有了一套健全的单元测试,开发团队会更有信心地进行代码更改和迭代,因为他们知道单元测试将在每次更改后验证代码的行为。
- 支持持续集成和持续部署:单元测试是持续集成和持续部署过程中的重要组成部分。它们可以确保新代码的集成不会破坏现有功能,并且可以在自动化构建和部署流程中提供快速反馈。
功能测试
功能测试是一种软件测试方法,旨在验证软件系统的功能是否符合预期,以及是否满足用户需求和规格说明。它测试的是整个系统的行为,而不仅限于单个组件或单元。功能测试通常从用户的角度出发,测试系统的各种功能和特性,例如用户界面、输入和输出、数据处理、业务逻辑等。
功能测试具有以下特点:
- 用户导向:功能测试从用户的角度出发,验证系统是否满足用户的需求和期望,关注系统的功能性。
- 综合性:功能测试覆盖系统的各个功能和特性,包括用户界面、输入输出、业务逻辑、数据处理等方面,以确保系统的整体功能正常。
- 系统级别:功能测试测试的是整个系统的行为,而不仅限于单个组件或单元,因此涉及多个组件之间的交互和集成。
- 黑盒测试:功能测试通常作为黑盒测试进行,测试人员不需要了解系统的内部实现细节,只需根据需求和规格说明进行测试。
- 可测性:功能测试用例通常基于需求和规格说明编写,测试人员可以根据这些文档设计测试用例,以确保系统的功能满足预期。
- 易于自动化:功能测试可以通过自动化测试工具进行自动化执行,节省时间和人力成本,并提高测试效率和覆盖范围。
- 验收标准:功能测试的结果通常作为系统验收的标准之一,用于评估系统是否可以交付给最终用户使用。
集成测试
集成测试是软件开发过程中的一种测试方法,用于验证多个组件或模块在集成后的协作和交互是否正确。在集成测试中,开发人员将已经单独测试通过的模块组合在一起,然后测试它们之间的集成点和接口,以确保整个系统的各个部分能够协同工作,并符合系统设计和规格说明。
集成测试可以分为自底向上和自顶向下两种方法。自底向上的集成测试从最底层的模块开始,逐步向上集成,直到整个系统完成;而自顶向下的集成测试则从最高层的模块开始,逐步向下集成,直到整个系统完成。无论采用哪种方法,集成测试都是确保系统各部分能够正确协作的重要环节,有助于发现和解决集成过程中的问题和缺陷。
集成测试具有多个优点,包括:
- 发现集成问题:集成测试可以检测到在组件集成时可能出现的问题和错误,如接口不匹配、数据传递错误等,有助于在系统发布之前解决这些问题。
- 确保系统整体功能性:通过集成测试,可以验证系统的各个部分在集成后是否能够正确协作,以确保整个系统的功能性能够实现。
- 提高系统稳定性:集成测试有助于发现并解决系统集成过程中的问题和缺陷,从而提高系统的稳定性和可靠性。
- 节省时间和成本:通过及早发现和解决集成问题,可以避免在后续阶段花费大量时间和资源来修复这些问题,从而节省开发成本和时间。
- 促进团队协作:集成测试涉及多个开发人员和团队之间的协作和交互,有助于加强团队之间的沟通和合作,提高整体开发效率。
- 支持持续集成:集成测试是持续集成过程中的重要组成部分,可以确保新代码的集成不会破坏现有功能,并且提供快速反馈,有助于保持软件的稳定性和可靠性。
回归测试
回归测试是软件测试的一种类型,用于确保在进行修改、修复缺陷或添加新功能后,已经存在并且已经通过测试的软件部分仍然按照预期工作,而不受修改影响。回归测试的目的是确保修改或新增功能不会破坏现有功能,以及发现由于修改引入的新错误或缺陷。
回归测试是软件开发过程中非常重要的一环,它有助于确保软件质量和稳定性,防止因为修改引入的新问题影响到现有的功能,保证软件的可靠性和可维护性。
回归测试具有以下特点:
- 重复性:回归测试是在软件发生变化后重复执行的测试过程。它需要在每次软件修改或更新后进行,以确保软件的功能稳定性。
- 全面性:回归测试通常需要覆盖整个软件系统或受到修改影响的部分。它旨在验证整个系统的功能是否按照预期工作,而不仅仅是修改部分。
- 周期性:回归测试是软件开发周期中的常规活动。它可能会在每个迭代周期、版本发布或重大修改后进行,以确保软件的质量和稳定性。
- 验证稳定性:回归测试的主要目的是验证软件的稳定性,即在修改后仍然能够按照预期工作,以及确保新功能的添加不会破坏现有功能。
- 发现潜在问题:回归测试有助于发现由于修改引入的新错误或未解决的问题,以及确保已经修复的问题不会再次出现。
- 与自动化结合:由于回归测试需要频繁执行且覆盖范围广泛,因此通常与自动化测试结合使用,以提高效率和减少人力成本。
- 灵活性:回归测试应该灵活适应软件开发的变化,可以根据需求和优先级调整测试范围和频率。
数据构造
全面
数据生成要有足够的随机性。
生成数据时要保证数据约束内的值都有几率被生成。
针对
应当针对容易出错的数据值,调高其生成概率。
图模型
构建
每一个人相当于一个节点。
每一条关系相当于一条无向边。
以节点为切入点进行构建。
因为每个人的id都是唯一的,因此可以利用hashmap建立映射关系。
维护
增加边
两个点均增加一条有向边。
删除边
两点均删除一条通向对方的有向边。
性能问题
某些查询操作过于频繁导致时间开销过大。
因此采用维护法,以空间换时间。
例如平均值计算不是现场统计总值,而是提前维护好总值变量,直接除以数量。时间复杂度直接降为O(1)。
Junit相关
有了规格,我们编写junit测试代码时,只需要逐条检测规格中的要求即可。
既不能缺少步骤,也不必检测多于的东西。因为junit是严格的。它对方法的正确性负责。
心得体会
多个好的算法聚合到一起时,需要好的架构来安排算法的位置。否则算法容易出现互相干扰的情况。就算能正常运行。也需要一个好的架构。以保证后续的迭代开发。