301
社区成员
发帖
与我相关
我的任务
分享谈谈你对黑箱测试、白箱测试的理解
对单元测试、功能测试、集成测试、压力测试、回归测试的理解
数据构造有何策略
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了
我的想法基本都是每一句JML都单独验证(在相应位置加入assert断言),配合随机生成的,有一定下界的数据来保证Junit测试的完备。不过有的时候会出现生成person数量下界为100时运行时错误改成60又能过了,不是很清楚具体问题在哪(junit报错信息感觉这种时候就不太具体)
了解了JML规格和一些简单的语法;为了性能要求写了一些简单的算法;在junit写了一点简单的随机数据。
一点小小的建议就是junit测试可以像普通中测一样给出一些数据点的错误代码。