OO第三单元总结体会

周运贵-22371276 学生 2024-05-19 13:07:08

OO第三单元总结体会

分析本单元的测试过程

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

    • 黑箱测试
      黑箱测试是一种基于需求和功能规格的测试方法。测试人员不需要了解系统内部的实现细节,只需要根据需求和功能规格进行测试,通过输入不同的数据或者触发不同的事件,来验证系统的输出是否符合预期。具体来说,黑箱测试不关心系统内部逻辑,而关注系统对测试数据的反馈输出是否合法。
    • 白箱测试
      白箱测试则是一种基于系统内部实现的测试方法。测试人员需要了解系统的内部结构和代码逻辑,通过分析代码来设计测试用例,以验证系统的各个部分是否正确执行。白箱测试关注的是系统内部的逻辑和结构,目的是验证系统的正确性和稳定性。
  • 对单元测试、功能测试、集成测试、压力测试、回归测试的理解

    • 单元测试
      单元测试是对程序中的最小可测试单元进行测试,通常是对函数、方法或类进行测试,以验证其功能是否正确。单元测试通常由开发人员编写,并且通常在开发过程中进行,以确保代码的质量和正确性。
    • 功能测试
      功能测试是对整个系统的功能进行测试,以验证系统是否符合用户需求和规格说明书中的功能。功能测试通常由测试人员编写,并且通常在开发完成后进行。
    • 集成测试
      集成测试是对系统中不同模块间的交互进行测试,以验证模块之间的集成是否正确。集成测试通常在开发完成后进行,通常由开发人员和测试人员一起进行。
    • 压力测试
      压力测试是对系统在极限条件下进行测试,以验证系统能否在高负载下正常工作。压力测试通常由专门的测试人员进行,用于评估系统的性能和稳定性。
    • 回归测试
      回归测试是对系统的变更部分进行测试,以验证变更后系统其他部分是否受到影响。回归测试通常在系统发生变更后进行,用于确保变更不会引入新的问题。
  • 数据构造有何策略
    junit测试数据都是随机生成,给点和边的数目都确保一定的下限,以此测试自己的程序;另外只用了dpo(在后两次作业都没测出bug)。

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

    除了JML本身要求实现的类和方法,我只新增了计数类Counter和封装了一个Relation类进行快速的查询(事实上应该是不必要的)。
    图的模型我基本还是按照JML来,除了三元环个数和tag的valuesum动态维护,其他大都使用图遍历或者Hashmap按照id索引来完成。其中或许blocksum值得一提,贴一下代码(queryBlockSum和它调用的MyPerson的dfs),因为每个点都使用相同的visit,能保证每个点只会遍历一次(遍历过的点显然在之前的连通块里)。

    public int queryBlockSum() {
          HashSet<Integer> visit = new HashSet<>();
          int block = 0;
          for (int i = 0;i < cnt;i++) {
              if (visit.contains(persons[i].getId())) {
                  continue;
              }
    
              block++;
              ((MyPerson)persons[i]).dfs(visit);
          }
    
          return block;
    }
    
    public void dfs(HashSet<Integer> visited) {
          if (!visited.contains(id)) {
              visited.add(id);
          }
          
          for (int i = 0;i < len;i++) {
              int now = acquaintance[i].getId();
              if (visited.contains(now)) {
                  continue;
              }
              visited.add(now);
              ((MyPerson)acquaintance[i]).dfs(visited);
          }
      }
    

    维护策略同上文所述,另外只需注意id唯一的类型可以使用Hashmap,另外qba所需的查询最大值我在MyPerson中使用额外的TreeSet维护(value,id的二元组),查询时直接查firstkey即可。

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

    出现了int比较时直接减的bug(菜),还有就是tag的valuesum一开始没维护直接暴力,另外其实我的MyEqualEmojiIdException类中的print方法是这样的:

    public void print() {
          String s = "eef-" + count.sum() + ", " + id + "-" + count.query(id);
          System.out.println(s);
      }
    

    还是过了强测(离谱),当然互测被hack了

    如何利用规格信息来更好的设计实现Junit测试,以及Junit测试检验代码实现与规格的一致性的效果

    我的想法基本都是每一句JML都单独验证(在相应位置加入assert断言),配合随机生成的,有一定下界的数据来保证Junit测试的完备。不过有的时候会出现生成person数量下界为100时运行时错误改成60又能过了,不是很清楚具体问题在哪(junit报错信息感觉这种时候就不太具体)

    本单元学习体会

    了解了JML规格和一些简单的语法;为了性能要求写了一些简单的算法;在junit写了一点简单的随机数据。
    一点小小的建议就是junit测试可以像普通中测一样给出一些数据点的错误代码。

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

301

社区成员

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

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