`
NeuronR
  • 浏览: 59008 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[开发过程]分支/循环/零零散散的测试

阅读更多

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 对输入的实型数进行排序.

这次的更新还包括对分支和循环的一些优化. 在有了测试之后, 优化可以在较为安全的环境下进行. 不过这也引出了一个问题: 运算也可以进行输出对比测试, 而不需关心它们具体生成的指令, 而目前它们的测试两者都有, 如果不放弃直接的指令对比测试, 有其它方法优化吗? 当然, 从现在这个状况看来, 还不如废除原有的指令对比测试, 仅进行输出对比测试.

 

这个问题我就留个坑在这里吧. (我很懒的, 很多东西都懒得去优化了, 大家自己研究那些虎/鲸等动物系列的书吧 :-)

分享到:
评论
1 楼 lwwin 2009-12-12  
编译就是一个字节都不能差呢- -

相关推荐

    python全栈测试开发基础.pdf

    学习Python不仅可以提升个人技能,也有助于在职场中提升竞争力,尤其在测试开发领域,Python已成为必备技能。随着学习的深入,你可以逐步进阶到自动化测试框架的构建,进一步提升工作效率。记得随时关注相关的学习...

    软件测试 黑盒 白盒测试用例 源代码

    在软件测试领域,黑盒测试和白盒测试是两种常用的方法,它们分别关注于软件功能和内部结构。本实验旨在让学生掌握这...这种综合性的测试方法是软件开发过程中的关键步骤,确保了软件在发布前达到预期的功能和性能标准。

    一个完整的白盒测试用例

    在IT行业的软件开发过程中,白盒测试是一种重要的测试方法,它侧重于检查程序的内部结构和逻辑,确保每个部分都能按预期工作。标题“一个完整的白盒测试用例”及描述“通过一个程序模块设计白盒测试用例,并详细介绍...

    软件测试:三角形问题 黑盒 白盒

    在软件开发过程中,测试是确保产品质量的关键环节。本主题聚焦于两种主要的测试方法:黑盒测试和白盒测试,特别是在解决三角形问题时的应用。三角形问题是软件测试中的一个经典案例,它涉及到数学和逻辑判断,能很好...

    基于JUnit4的关于个人所得税计算的等价类与边界值分析黑盒测试和路径覆盖白盒测试

    在软件开发过程中,测试是确保代码质量和功能正确性的重要环节。本实验主要关注的是基于JUnit4的测试技术,包括黑盒测试中的等价类划分和边界值分析,以及白盒测试中的路径覆盖方法,用于验证个人所得税计算的逻辑。...

    浙江大学软件开发课堂测试

    ### 浙江大学软件开发课堂测试知识点解析 #### 一、选择题知识点解析 **1. 数据结构基础知识** - **栈和队列**: 栈和队列都是线性结构的一种,其中栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出...

    测试考试题目借鉴.pdf

    - **代码、函数级测试**:通常由白盒测试人员执行,他们专注于源代码,检查逻辑路径、条件分支和循环,确保每个函数和方法按预期工作。 - **模块、组件级测试**:灰盒或黑盒测试人员负责,关注程序的接口和模块间...

    系统测试有效性度量方案.pptx

    系统测试有效性度量方案是软件开发过程中的一个重要环节,它旨在评估测试的质量和效率,确保测试用例能够有效地发现潜在的缺陷。以下是对这个主题的详细解析: 首先,我们需要理解为何进行测试有效性度量。在实际...

    单元测试代码走读的一些需要注意的内容

    单元测试是软件开发过程中的重要环节,它主要目的是确保代码的正确性和稳定性。代码走读是一种审查技术,通过检查代码的各个部分来发现潜在的问题。以下是对这些测试项的详细解释: 1. **J1 下标变量越界**:确保...

    热乎乎的从零学习脚本开发系列教程[视频课程].txt打包整理.zip

    3. **自动化测试**:在软件开发中,脚本可以用来自动化执行测试用例,提高测试效率。 4. **系统管理**:Bash脚本在Linux系统中广泛用于自动化系统维护任务,如备份、日志分析等。 5. **社交媒体自动化**:例如,...

    中科软测试工程师笔试题

    6. **流程图遍历**:流程图遍历问题需要具体图示才能给出准确解答,但通常涉及顺序、分支和循环结构,需要考虑所有可能的执行路径。 7. **Java 题目**:程序输出是"I can answer this question"。程序逻辑是创建了...

    ARDUINO语言

    与`while`类似,`do...while`循环也会在满足某个条件时重复执行一段代码,但其区别在于`do...while`循环体至少会被执行一次,即使测试条件最初就是假的。例如: ```c++ do { digitalWrite(13, HIGH); // 点亮LED ...

    (18级)关于测试单周期CPU的简单方法11

    6. **循环和分支测试**: 指令`j`和`beq`用于分支和跳转,它们的正确性是CPU测试的关键部分。`j`指令用于无条件跳转,`beq`则是条件分支。在波形图中,应看到PC的值正确改变,反映出指令的跳转行为。 通过以上步骤...

    软件工程期末总结 1

    在期末总结中,我们关注了几个关键知识点,包括结构化程序设计、软件测试理论和技术、计算机系统故障种类以及软件开发过程的不同模型。 1. 结构化程序设计:这是一种编程方法论,旨在创建清晰、易于理解和维护的...

    开发零

    标题“开发零”可能指的是在软件开发过程中从零开始创建一个项目或系统,这通常涉及到初始的规划、设计和编码工作。在这个过程中,开发者需要掌握各种编程语言和技术,以实现功能完整、性能优异的应用程序。在给定的...

    华为编程开发规范与案例

    与开发人员在测试组环境多次重复以上步骤,发现11群的计次表话单有时正常,有时其出中继群号就为一个随机值,发生异常的频率比较高。为什么其它群的话单正常,唯独11群不正常呢?11群是四个群中最小的群,其中继计...

    基于C#开发的简易计算器

    6. **控制流**:程序的流程控制,包括条件分支(if-else语句)和循环(可能在连续运算时用到),使得计算器可以根据用户的选择执行不同的计算。 7. **字符串处理**:用户输入的数字可能以字符串形式存在,需要使用...

    Javascript Testing Beginner's Guide

    - **TDD流程**:详细解释“编写测试 - 编写代码 - 重构”的循环过程。 - **实践案例**:通过具体的例子展示TDD的实际操作流程。 ##### 7. 调试技巧 - **浏览器开发者工具**:利用Chrome DevTools等工具进行高效...

    基于java开发的游戏24点

    例如,当用户输入非法数据或计算过程中出现除零错误时,程序应有适当的提示和处理方式。 8. **测试与调试**:为了确保游戏功能的正确性,需要编写测试用例并进行调试。单元测试可以帮助验证单个组件的功能,集成...

Global site tag (gtag.js) - Google Analytics