内核的测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内核的测试相关的知识,希望对你有一定的参考价值。
参考技术A 测试背景
过去,Linux内核测试方法围绕开放源代码开发模型进行。由于代码一经发布后就公开给其他开发者进行审查,因此从来没有出现过一个与其他形式的软件开发类似的正式的验证周期。这种方法背后的理论依据是“TheCathedralandtheBazaar”中所谓的“Linus法则”(请查阅参考资料以获得相关的参考),这一法则的内容为“众人的眼光是雪亮的”。换句话说,高力度的审查可以找出大部分真正的大问题。
然而实际上,内核有很多复杂的相互联系。即使进行了足够力度的审查,还是会漏过很多严重的缺陷。此外,最新的内核一经发布,终端用户可以(也经常是)下载并使用。2.4.0发布时,社区中很多人都提议进行更有组织的测试,以保证特定测试和代码审查的强度。有组织的测试包括运用测试计划、测试过程中的可重复性等等。使用所有的三种方法比最初只使用两种方法会带来更高的代码质量。
测试项目
最早对Linux开始进行有组织测试的贡献者是Linux测试项目(LinuxTestProject,LTP)。这个项目的目的是通过更有组织的测试方法提高Linux的质量。这个测试项目的一部分是自动测试套件的开发。LTP开发的主要测试套件也叫做Linux测试项目。2.4.0内核发布时,LTP测试套件只有大约100个测试。随着2.4和2.5版本Linux的发展与成熟,LTP测试套件也正在发展和成熟。当前,Linux测试项目包括超过2000个测试,而且这个数字还在增长。 在2.5的开发周期中,Linux测试项目所采用的另一个项目是,用LTP测试套件对Linux内核执行持续多日的回归测试。人们用BitKeeper创建了一个实时的、集中的档案库,以随时可以获得Linux内核的快照。在没有使用BitKeeper和快照时,测试人员不得不等到内核发布后才可以开始测试。内核只要发生了改变,测试人员就可以进行测试。
使用自动化工具来执行持续多日的回归测试的另一个优点是,和上一次测试相比变化较小。如果发现了一个新的回归缺陷,通常会容易地检测出这个缺陷可能是哪个改变导致的。
同样,由于是最新的改变,因此它在开发者的脑海中印象还比较深——希望这能让他们更容易地记起并修订相应的代码。或许Linus法则应该有这样一个结论,有一些缺陷比其他缺陷更容易被发现,因为那些正是持续多日的内核回归测试所发现并处理的那些。在开发周期中和实际发布之前能够每天进行这些测试,这就使那些只关注完整发行版本的测试者可以将精力集中于更严重和耗时的缺陷。 自从2.4发布以来,对Linux内核的有组织测试最大的改进之一是缺陷追踪。过去,在Linux内核中发现的缺陷会报告给Linux内核邮件列表,报告给特定组件或者特定体系的邮件列表,或者直接报告给维护发现缺陷的那部分代码的个人。随着开发和测试Linux的人数的增加,这个系统的不足之处很快就暴露了出来。在以前,除非人们对缺陷的报告可以惊人地维持下去,缺陷经常被遗漏、遗忘或者忽略。
OSDL安装了一个缺陷追踪系统,来报告和追踪Linux内核的缺陷。系统经过了配置,这样当某个组件的缺陷被报告时,那个组件的维护者就会得到通知。维护者既可以接受并修复那个缺陷,或重新指定缺陷(如果最终确定实际上那是内核另外一部分的缺陷),也可以排除它(如果最终确定并不是真正的缺陷,比如错误配置的系统)。报告给邮件列表的缺陷还有丢失的危险,因为越来越多的电子邮件涌向那个列表。然而,在缺陷追踪系统中,始终有对每一个缺陷及其当前状态的记录。
对内核模块代码进行单元测试是不是可行?
【中文标题】对内核模块代码进行单元测试是不是可行?【英文标题】:Is it feasible to unit test kernel module code ?对内核模块代码进行单元测试是否可行? 【发布时间】:2016-02-06 16:44:08 【问题描述】:如果是这样,我应该使用什么技术? 我正在考虑使用 hippomock,因为它们可以用来模拟“C”方法。有没有更好的方法?如果是这样,任何人都可以提供建议,还是您认为内核单元测试是一种矫枉过正?
【问题讨论】:
你搜索过这个主题吗?周围有很多论坛问题。 是的,我做了,看起来内核开发不使用任何单元测试(因为很难这样做),但是我认为它仍然可以完成,尤其是使用模拟框架 对内核进行单元测试确实很难,linux-kernel的主要测试方法是一个庞大的社区,执行大量测试和相关文档。 这当然不容易,但你可以将some techniques for testing in embedded programming 应用于内核模块。这在很大程度上取决于您的模块依赖于内核其余部分的多少功能,因为您可能需要模拟这些功能,这可能变得不切实际。 ***.com/questions/3177338/how-is-linux-kernel-tested/… 【参考方案1】:由于 Linux 内核版本 5.5 KUnit 可用。它是一个轻量级的内核单元测试框架。
更多详情请看
https://www.kernel.org/doc/html/latest/dev-tools/kunit/index.html https://kunit.dev/ https://lwn.net/Articles/780985/【讨论】:
以上是关于内核的测试的主要内容,如果未能解决你的问题,请参考以下文章
内核配置配置一个新的暂时性测试用的内核并下载到单板SDRAM测试
Java 并发编程线程池机制 ( 测试线程开销 | 启动线程分析 | 用户态 | 内核态 | 用户线程 | 内核线程 | 轻量级进程 )