加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 系统 > 正文

Linux kernel测试初探

发布时间:2016-09-25 18:57:40 所属栏目:系统 来源:百度质量部
导读:副标题#e# Linux基金会在4月3日公布了Linux开发年报,向我们展示了linux kernel作为世上最大开源合作项目之一的魅力。自2005年以来,共有800家公司7800名开发人员参与Linux kernel开发,最近一年也有200家公司共1000名开发人员参与。目前在Linus Torvalds的

Autotest是后启之秀,最早被用于Linux kernel自动化测试的框架,使用python语言,现在也被多个其它项目所应用。新case能较容易添加,ANSI-C或者Bash写的case也能较方便地融入此框架。针对Linux kernel的测试项目地址是http://test.kernel.org,用于交流、共享和分析测试数据。Autotest框架分服务端和客户端,在监听到有新版本发布(三位版本、四位版本、-rc版本、-git版本)时,会自动触发执行自动化,执行过程见下图四。

Linux kernel测试初探

图四 Autotest自动化执行流程

CrackerJack 是一个主要负责linux kernel兼容性测试的项目,找出不同内核版本系统调用的diff情况,已支持317个系统调用。它也是使用Autotest框架执行,diff结果是个矩阵可见下图五或者网址http://ossipedia.ipa.go.jp/crackerjack/compare_results.html。Diff比较是智能的,并非单独地比较输出结果,比如time时间调用每次系统返回都是不一样的,比较时就是检查两次调用之间的时间差。

Linux kernel测试初探

图五 CrackerJack diff结果

测试方式

测试手段是多样的:单测、集成测试、功能测试、性能测试、压力测试、回归测试等,但没有一种手段在任意时候都合适。质量保证是多方面的,除了要求开发者写出高质量代码外,静态代码检查、还要有频繁且严格的code review,下面列举一些针对Linux kernel特点的测试。

1. 开发者测试。鼓励开发者写单元测试,但很多时候有太多的依赖假设,单测等是很难的,比如要测试U盘在读写过程中被拔掉,再插上的情况,只有实际运行执行才能验证程序是否正确。无论开发人员使用何种方式,都需要保证负责的代码是经过测试了的。不需要在所有版本上运行,但需要确保代码质量,不能假定的字节序、字节长度,都应该使用标准接口。有些时候是修复别人报的bug,而开发人员又没有复现该bug的环境,此时修改也需要由bug提交者确认在其环境测试通过或者在其它能复现该bug的环境验证通过。对修改代码的质量保证方法还包括交由其它人评审通过或测试通过。编译器的报警也是需要修复的。

2. 社区测试。社区开发模式,也强调社区测试,鼓励大家在做好数据备份前提下使用最新发布的版本,类似软件正式发布前的试用版本,以确保在不同的机器不同的平台上能实际正常运行。对此类版本的使用是有风险的,有可能导致系统崩溃。通常在系统安装后,启动时也会比较小心,逐项加载启动,以检查每步都是正常的。还会做一些非常规的操作,也就是异常测试。

3. 配置测试。Linux kernel的配置也较复杂,以支持较好的灵活性和可扩展性,测试需要尽量地覆盖不同的配置组合条件。有的做法是随机配置,再编译运行启动,7*24小时重复不间断地做,以找出可能存在的问题。做的过程中也有优化,比如关闭一些不必要的选项,减少编译的时间。

有些配置项是有助于测试执行时监控问题和分析问题的,比如打印出debug日志,或者在出错时打印尽可能多的信息,kernel在某些设置下自身也会做一些运行过程中的检查,如CONFIG_DETECT_SOFTLOCKUP能检查出内核部分是否在内核模式中循环超过60秒的bug,这类配置通常会在测试时打开。

4. 硬件测试。验证kernel对不同平台的支持时,会使用些不常用的硬件,以及不常用的硬件组合,不同的体系架构。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读