svn update 先.
测试约定
在 test 目录下, 有一坨 test-X.jerry 和 test-X.expect 文件, X=0, 1, 2, 3. 前者是 Jerry 源文件, 而 .expect 文件的则是, 当这个源文件被编译并执行以后应该输出的结果 (确实, 这些例子中没有对输入的测试).
test 目录下还有一个 c 源文件 result-verify.c, 它独立编译后将得到一个用于测试的小工具. 在这个文件中, main 函数会循环 4 次, 每次会编译并执行 Jerry 文件, 然后比较执行输出是否符合预期.
/* 循环体代码 */
/* 拼装文件名 */
sprintf(filename[0], TEST_DIR "test-%d.result", i);
sprintf(filename[1], TEST_DIR "test-%d.expect", i);
/* 编译代码指令 */
sprintf(command, "./Jerry.out " TEST_DIR "test-%d.jerry", i);
execWithCheck(command);
/* 执行代码指令 */
sprintf(command, "./JerryVM.out "
TEST_DIR "test-%d.jerry.jry -output %s",
i, filename[0]);
execWithCheck(command);
if (NULL == (output = fopen(filename[0], "r"))) {
fprintf(stderr, "error occurs when accessing %s\n", filename[0]);
return 1;
}
if (NULL == (expect = fopen(filename[1], "r"))) {
fprintf(stderr, "error occurs when accessing %s\n", filename[1]);
fclose(output);
return 1;
}
int t = verify(output, expect);
if (t) { /* 如果验证失败 */
fprintf(stderr, "result is WRONG in test-%d\n", i);
fclose(output);
fclose(expect);
return 1;
}
fclose(output);
fclose(expect);
辅助的函数有三个, execWithCheck 执行 system 调用并检查返回值; numericCmp 用于比较两个数值字符串是否相等; verify 对比两个文件. 这里隐含了测试的规则, 那就是测试案例源文件名必须是 test-X.jerry, 而期望的输出文件必须是 test-X.respect. 所以如果要添加测试案例, 请遵循这个规则或者修改 result-verify.c 好了.
测试案例
现有的 test-X 系列测试案例涵盖了基本的运算, 赋值, 逻辑条件短路, 分支和循环, 当然, 还有输出的测试. 不过测试力度比较小 (比如, 死循环的情况就没有测, 在这个测试框架内也没办法测).
另外有 leap.jerry, 可以用来判别输入的年份是否是闰年; bubble-sort.jerry 对输入的实型数进行排序.
这次的更新还包括对分支和循环的一些优化. 在有了测试之后, 优化可以在较为安全的环境下进行. 不过这也引出了一个问题: 运算也可以只进行输出对比测试, 而不需关心它们具体生成的指令, 而目前它们的测试两者都有, 如果不放弃直接的指令对比测试, 有其它方法优化吗? 当然, 从现在这个状况看来, 还不如废除原有的指令对比测试, 仅进行输出对比测试.
这个问题我就留个坑在这里吧. (我很懒的, 很多东西都懒得去优化了, 大家自己研究那些虎/鲸等动物系列的书吧 :-)
分享到:
相关推荐
学习Python不仅可以提升个人技能,也有助于在职场中提升竞争力,尤其在测试开发领域,Python已成为必备技能。随着学习的深入,你可以逐步进阶到自动化测试框架的构建,进一步提升工作效率。记得随时关注相关的学习...
在软件测试领域,黑盒测试和白盒测试是两种常用的方法,它们分别关注于软件功能和内部结构。本实验旨在让学生掌握这...这种综合性的测试方法是软件开发过程中的关键步骤,确保了软件在发布前达到预期的功能和性能标准。
在IT行业的软件开发过程中,白盒测试是一种重要的测试方法,它侧重于检查程序的内部结构和逻辑,确保每个部分都能按预期工作。标题“一个完整的白盒测试用例”及描述“通过一个程序模块设计白盒测试用例,并详细介绍...
在软件开发过程中,测试是确保产品质量的关键环节。本主题聚焦于两种主要的测试方法:黑盒测试和白盒测试,特别是在解决三角形问题时的应用。三角形问题是软件测试中的一个经典案例,它涉及到数学和逻辑判断,能很好...
在软件开发过程中,测试是确保代码质量和功能正确性的重要环节。本实验主要关注的是基于JUnit4的测试技术,包括黑盒测试中的等价类划分和边界值分析,以及白盒测试中的路径覆盖方法,用于验证个人所得税计算的逻辑。...
### 浙江大学软件开发课堂测试知识点解析 #### 一、选择题知识点解析 **1. 数据结构基础知识** - **栈和队列**: 栈和队列都是线性结构的一种,其中栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出...
- **代码、函数级测试**:通常由白盒测试人员执行,他们专注于源代码,检查逻辑路径、条件分支和循环,确保每个函数和方法按预期工作。 - **模块、组件级测试**:灰盒或黑盒测试人员负责,关注程序的接口和模块间...
系统测试有效性度量方案是软件开发过程中的一个重要环节,它旨在评估测试的质量和效率,确保测试用例能够有效地发现潜在的缺陷。以下是对这个主题的详细解析: 首先,我们需要理解为何进行测试有效性度量。在实际...
单元测试是软件开发过程中的重要环节,它主要目的是确保代码的正确性和稳定性。代码走读是一种审查技术,通过检查代码的各个部分来发现潜在的问题。以下是对这些测试项的详细解释: 1. **J1 下标变量越界**:确保...
3. **自动化测试**:在软件开发中,脚本可以用来自动化执行测试用例,提高测试效率。 4. **系统管理**:Bash脚本在Linux系统中广泛用于自动化系统维护任务,如备份、日志分析等。 5. **社交媒体自动化**:例如,...
6. **流程图遍历**:流程图遍历问题需要具体图示才能给出准确解答,但通常涉及顺序、分支和循环结构,需要考虑所有可能的执行路径。 7. **Java 题目**:程序输出是"I can answer this question"。程序逻辑是创建了...
与`while`类似,`do...while`循环也会在满足某个条件时重复执行一段代码,但其区别在于`do...while`循环体至少会被执行一次,即使测试条件最初就是假的。例如: ```c++ do { digitalWrite(13, HIGH); // 点亮LED ...
6. **循环和分支测试**: 指令`j`和`beq`用于分支和跳转,它们的正确性是CPU测试的关键部分。`j`指令用于无条件跳转,`beq`则是条件分支。在波形图中,应看到PC的值正确改变,反映出指令的跳转行为。 通过以上步骤...
在期末总结中,我们关注了几个关键知识点,包括结构化程序设计、软件测试理论和技术、计算机系统故障种类以及软件开发过程的不同模型。 1. 结构化程序设计:这是一种编程方法论,旨在创建清晰、易于理解和维护的...
标题“开发零”可能指的是在软件开发过程中从零开始创建一个项目或系统,这通常涉及到初始的规划、设计和编码工作。在这个过程中,开发者需要掌握各种编程语言和技术,以实现功能完整、性能优异的应用程序。在给定的...
与开发人员在测试组环境多次重复以上步骤,发现11群的计次表话单有时正常,有时其出中继群号就为一个随机值,发生异常的频率比较高。为什么其它群的话单正常,唯独11群不正常呢?11群是四个群中最小的群,其中继计...
6. **控制流**:程序的流程控制,包括条件分支(if-else语句)和循环(可能在连续运算时用到),使得计算器可以根据用户的选择执行不同的计算。 7. **字符串处理**:用户输入的数字可能以字符串形式存在,需要使用...
- **TDD流程**:详细解释“编写测试 - 编写代码 - 重构”的循环过程。 - **实践案例**:通过具体的例子展示TDD的实际操作流程。 ##### 7. 调试技巧 - **浏览器开发者工具**:利用Chrome DevTools等工具进行高效...
例如,当用户输入非法数据或计算过程中出现除零错误时,程序应有适当的提示和处理方式。 8. **测试与调试**:为了确保游戏功能的正确性,需要编写测试用例并进行调试。单元测试可以帮助验证单个组件的功能,集成...