实际例子

  一个新版本2.6.20的发布过程如下图二。在每一个版本开始时,Linus会打开合并窗口(merge window),从那时起,被认为是可靠稳定的代码会被合并到内核主线,新的功能或驱动等得以加入进来,合并窗口会开启两周,然后Linus会宣布窗口关闭,并发布第一个rc版本,如下图2.6.20-rc1。此-rc1版本的发布意味着新功能的加入已经完成,以后再加入的补丁只能是修复问题,以确保此版本的稳定,但也有即少数包含新功能的补丁会被认为是不友好的。问题修复的代码不断进入主线,Linus接下来大约每周发布一个新的rc版本,通常会在6-9个rc版本后认为此版本已经稳定并且终发布2.6.20版本,再进入下一个三位版本的迭代。发布之后,此2.6.x版本移交给稳定组(stable team),稳定组时而会再发布2.6.x.y版本,每个四位版本的发布会有两个条件:(1)修复重大的bug;(2)该补丁也已被融入到下个三位版本开发的主线中了。稳定组通常维护一个稳定版本6个月左右,之后由使用该版内核的发行版发行商负责。

图二 一个版本的发布过程

  测试

  对Linux kernel测试面临的挑战巨大:如前面的数据所显示,(1)其快速活跃的开发;(2)经常性的版本发布,每次发布都包含大量修改,以及内核本身支持配置的灵活性、可扩展性,待测点太多(3)需要覆盖各种平台,Linux已支持二十多种平台体系,是支持平台广的系统;(4)过时的case需要维护以及大量遗留代码。

  与松散的开发流程相对应,没有看到正式的测试流程,开源软件很大一部分的测试执行是依靠用户实际运行使用。如下图三所示。

图三 开源测试的大体流程

  测试项目简介

  Linux kernel与测试相关较出名的开源项目有:

  LTP:Linux Test Project http://ltp.sourceforge.net/

  Autotest:http://autotest.github.com/

  CrackerJack Project:http://ossipedia.ipa.go.jp/crackerjack/index.html

  LTP是一个联合项目主要验证Linux系统的可靠性、健壮性和稳定性,先由SGI?启动,并由IBM?负责维护。2012年4月发布的新稳定版本已拥有3000+的case(case增长并不多,06年时有2900+的case),用于测试Linux kernel以及相关功能。使用的编程语言主要是ANSI-C(占94%),以及Bash脚本(占5%),还有Perl(占0.62%)。它也有一套使用ANSI-C和Bash写case的模板。