如何使测试工作更具可持续性
通过采用可持续的测试策略,你可以跳过那些不必要的测试,确保问题能够尽快被发现,并且只运行那些会受到代码变更影响的测试。记录每次测试所消耗的能量,同时利用静态代码分析工具,可以帮助你找出效率低下的地方,从而指导优化工作。 作者:本·林德斯

通过采用可持续的测试策略,你可以跳过那些不必要的测试,确保问题能够尽快被发现,并且只运行那些会受到代码变更影响的测试。记录每次测试所消耗的能量,同时利用静态代码分析工具,可以帮助你找出效率低下的地方,从而指导优化工作。
作者:本·林德斯相关文章
《消毒器使用手册:内存管理、初始化机制以及竞态条件问题》
一些最为危险的“原生故障”其实是由那些看似运行正常的程序所引发的。 加密操作会生成正确的密文,解析器也会拒绝处理格式错误的输入数据,缓存机制也能通过基准测试,候选发布版本也能通过所有的单元测试和集成测试。 然而,在这些看似正确的结果背后,某些组件仍然认为自己拥有已经被转移的对象控制权;某些成功路径在运行过程中并未初始化输出字段;有些终结器还在等待释放那些实际上已经由其他运行时机制控制的对象;还有两个线程会修改相同的状态,但调度器并没有选择那种会导致竞争条件出现的执行顺序。 然而,预期的输出结果中根本没有任何迹象能够揭示这些隐藏的问题。 第一次出现可观察到的故障可能要几个小时后才会发生:比如分配
阅读全文
如何在重构旧代码之前设计相应的特性测试用例
许多工程师在继承遗留代码后,首先想要做的就是改进这些代码。 你会遇到一些难以理解的函数,或者看到重复的逻辑、深度嵌套的条件语句、混合了业务规则的数据库调用,以及那些使得测试几乎无法进行的依赖关系。 你知道这些代码本可以做得更好,于是开始对其进行优化。 然而,随后就会出现问题。并不是因为新的实现方式存在明显的错误,而是因为旧的实现方式在背后做了某些人们之前根本不知道它在做的事情。 这就是在遗留代码现代化过程中最常出现的风险之一。 在修改代码之前,你需要有一种方法来回答一个简单的问题: 我是否保留了那些原本就重要的功能行为? 这时,特性测试就派上了用场。 特性测试并不是从“软件应该做什么”这个角度
阅读全文
如何测试Flutter应用程序:单元测试、组件测试、黄金标准测试以及集成测试详解
第一次在技术面试中被问到“你的测试覆盖范围是多少?”时,我并没有一个令人满意的答案。 那时我已经发布了几款真正的Flutter应用程序,它们可以正常运行,用户也在使用它们。但我的测试工作其实非常有限——仅仅是为某个定价功能编写了少量的单元测试而已,并没有其他测试内容。 几个月后,我对其中一个任务完成流程进行了重构,这个修改在代码差异对比中看起来完全没问题,但却破坏了用户真正关心的一个功能:当用户将某项任务标记为已完成时,该任务并不会从错误的列表中移除。虽然没有任何程序崩溃,也没有任何错误日志被记录下来,但用户却开始不再信任这款应用程序。而我直到有用户把这个问题告诉了一位也是测试人员的朋友,才发
阅读全文
演讲主题:持续重写Spotify的全部代码库
Jo Kelly-Fenton和Aleksandar Mitic介绍了Spotify是如何创建“Honk”这一人工智能编程工具的,该工具专门用于处理大规模代码库迁移工作。他们还分享了关于如何将持续集成测试的运行流程与人工智能工具分离、如何解决自动化拉取请求过程中出现的瓶颈问题,以及如何推动数千个工程代码仓库实现标准化的一些关键经验。 作者:Jo Kelly-Fenton, Aleksandar Mitic
阅读全文