再次记录一下都写了什么作业
作业1:
- 题目
根据给定的程序,做等价类划分,边界值分析,并使用上面的两种策略选择测试用例。测试用例不要忘记有output。然后等价类划分的时候要做图(树)。然后使用Junit test实现。在计算coverage score。这里选择的覆盖策略不同,计算方法不同。最后对程序做mutant处理。并且讨论之前设计的测试用例是否可以覆盖mutant。最后得分是根据网站中的排名。也就是你的测试用例是否测试出别人设计的突变。
- 考察的点:
实际情况中的等价类划分和边界值分析
测试用例的实现
对编写的测试用例和选择的测试策略的评价
- 注意:
等价类划分的时候,树的划分。每一层在划分的时候输入域要覆盖全面但是不能有重叠,也就是保证每个输入都有明确的去处。
在撰写报告的时候需要详细的指出为什么进行如此的划分,主要就是侧重于分析,而不是结果。
同时,理论上等价类划分不应该过多的观察程序(虽然为本人认为只应该根据用户的需求,而不是分析最终完整的程序),但是可能出于作业的需要吧,需要详细的分析程序的每个函数的实现细节,因为只有这样,才可以全部理解用户的需求,其次由于是作业,等价类划分的结果会影响检测出他人修改的mutant的结果,因此也需要详细的观察程序(如果不是作业的话,我个人认为是不需要的)。
作业2:
题目
针对给定的C语言的项目,寻找多个容易被攻击的漏洞,并为其设计一个fuzzer。
这里的fuzzer不限定任何的方式,但是目的就是尽可能覆盖更多的漏洞。并且需要从多个方面对比分析performance。
寻找漏洞的时候,这里一般是指memory error。因此需要借助一些软件,判断寻找修改之处是否构成了常见的4-5种错误。
考察点
了解常见的memory error是什么,常见的例子是什么
如何使用第三方检测出memory error
了解构建fuzzer常见的方法和流程
注意
对于漏洞方面:
由于修改的漏洞需要通过第三方软件来判断是否构成一个memory error,而这个第三方软件自身存在一些缺陷,导致一直我们人为判断是漏洞的地方,无法被检测。
其次,修改的漏洞需要合理,也就是说是一般程序员常见的可能出错的地方。
对于fuzzer方面:
无论是否何种方法,但是核心就是覆盖几乎全部的function。