提高大型软件项目质量的一些实用型技术分享

摘要:提高软件产品质量一直是开发人员所追求的目标,而世上并没有什么绝招可以保证程序员开发的产品不存在质量问题。但实践出真知,一些开发者总结平时项目开发经验,通过提高测试覆盖率和使用一些质量工具提高产品质量。

金无足赤,人无完人。在软件行业里,想要开发出一件没有bug的产品简直是天方夜谭,甚至开发出一款高质量的产品也会难于上青天。但是实践出真知,一些开发者总结平时项目开发经验,通过提高测试覆盖率和使用一些质量工具来提高产品质量。

当项目经理开始着手一个大型软件项目时,就得思考产品质量问题了,并且从测试就要开始关注。然而并非所有的测试都是一样的,下面提供一些常见的测试类型:

  1. 单元测试
  2. 不变条件测试(断言等)
  3. 功能测试
  4. 压力测试
  5. 性能测试
  6. 可伸缩测试
  7. 基于用户的负载测试
  8. 场景测试

下面,本文将讨论提升测试覆盖率以及如何使用力量倍增器(force multipliers:对现有测试套件进行改进,再以新的方式测试产品)来成功测试长尾浮现的稀有bug( the long tail of rarely surfaced bugs)。

把测试计划写在纸上:测试矩阵

编写测试时,最困难的事情之一莫过于决定测试什么?当产品有很多功能的时候,大家都可以随意用,真正关键的难题是你如何将这些功能有系统的组织(串联)起来。

大家可以编写测试矩阵,最后把所有的功能大小都写下来,并且汇总到一个大的电子表格中,然后再移交到工程团队。

投资一个测试执行系统

你可能会编写许多测试,但集成测试允许开发者排除陷入瘫痪的异常来做出更深的修改。这样的集成应该做到快速、可伸缩,你需要stellar测试基础设施来自动执行添加、管理以及运行测试等操作。一个构建良好的执行系统,其执行功能测试的速度会安全快速地提升。

构建一个良好的测试基础设施类似于为开发团队编写消费类产品。一个完美的测试执行系统在每次推送后,会运行整个测试套件。

Psyduck平台可以运行任何测试子集,并且无需担心代码的版本问题。此外,如果你想运行本地不断变化的代码,Psyduck可以打补丁,所以,一般在运行Psyduck之前都会执行如下代码:

memcompute1:~/memsql/memsqltest nikita(arcpatch-D2497)$ ./psy test --filter=.nikita
Compressing patch...done.
Sending 5340 bytes to S3.....done.
patch id = 901be82c33ee4b07b142d102660e3206Psyduck uses a combination of in-house hardware along with hundreds of Amazon spot instances to run tests as fast as possible in parallel.

去年夏天,一个MemSQL的实习生创建了一个名为Liveduck的实时虚拟化层。下面这个界面显示了所有正在运行的和最近刚完成测试的元数据,比如相关工程师、通过/失败数:

 


一个优秀的测试系统所具备的一个特性是,无论在开发者电脑上还是在平台上,每次的运行情况都应该是一样的。此外,每个测试都应该是独立的,以至于它需要零安装。这也有助于测试套件的维护,并且加快故障排查。

力量倍增器(Force Multipliers)

下面列出了一些力量倍增器清单,使用其中的任意一个技巧都可以把MemSQL带到一个新的水平。

1. Transforms

MemSQL拥有许多Transforms,这里列了几个:

  • 复制Transform
  • 子查询Transform
  • 备份恢复Transform

2. 随机生成查询

这里有一些力量倍增器用来随机生成查询:

  • 产生许多不同的查询,但结果一样。
  • 创建智能生成器,来逐步增加生成测试的复杂性。
  • 发现bug后会自动降低查询的复杂性,并且创建一个最小的可再生测试用例。

3. Functional Stress

4. 堆栈散列器

5. 生成故障

6. 通过代码审查来提高透明度和代码质量

使用一个好的代码审查工具乃是必须的,比如像Phabricator,它可以集成工作流,并且使用起来非常轻松有趣。


总结

在开发一个大型项目时,为了提高产品质量来投资测试基础设施是完全值得的,并且你会收获到许多意想不到的惊喜:

  • 使用stellar工具和力量倍增器可以减轻许多人力劳动,并且对长尾bug的测试非常有帮助。
  • 要时刻意识到当前产品所处的质量状态
  • 快速稳定的运送产品

来自:MemSQL.DEVELOPER BLOG

posted on 2013-04-29 10:06  Java码界探秘  阅读(126)  评论(0编辑  收藏  举报

导航