测试于源码之施行,甚为要义。开发者需有法以保其源码之安,随其日益繁复。繁复增则测试或难察瑕疵。变体测试使开发者得以验其测试集之弱处,显何等边界情形需处置,何等约束须加以防他日之谬。
变异测试者,乃开发者所行之术也。其于源码中造弊,而运测试,使应败(测试败者,弊已现也)。测试既行,若弊得存,则所设之测,未足察其偏微之境。变异测试,属白箱测试之法,其状最佳者,乃察应用之内部机能者也。此法广用于如Java、XML(数据存储传输之器)之语。其旨在于:求代码或嵌套失宜者,发新弊,明弊于应用中蔓延之状。其志在防此弊于将来复现。
變異測試之器,多用於持續整合與持續交付。持續整合與持續交付,乃現代自動構建測試、發布應用之實踐也。此操作,須頻繁提交代碼於公共倉庫。常態下,無變異測試之持續整合與持續交付,需待時。通常,無變異測試之持續整合與持續交付任務,其待時之長,多由測試套件薄弱所致。變異測試,能令此過程大為高效,蓋因持續整合與持續交付任務之待時減矣。
首度实施测试(有文牍载之)者,乃提摩太·巴德(Timothy Budd)八十载,为其博士之研习,题曰《突变分析》。此议初立。理查德·利普顿(Richard Lipton)一九七一年。其后二零零四年,"Certess inc."(Certess公司)亦参与其中,作为硬件验证之要务。今,变异测试之术,本于二理;其一为能干程序员之假说者,此乃程序员所撰之程序近乎正确之处也。他者,耦合效应也,此乃简单之谬误可如雪球般滚雪球,渐成显著且/或普遍之谬误。
變異測試之類別可有多樣。其一謂之價值變異測試。此乃更改通常賦予常數之值,以測試測試是否失敗,或變異是否得以存續。測試失敗固佳,蓋因其示人以所施測試已能周詳察弊。然變異得存,則意反是也。
const num = 35;
changed:
const num = 3000005
变异测试之第二类为基于决策者。基于决策者之测试,乃变更算术运算符。时或变更细微,时或变更显明.
if(dog = cat)
changed:
if(dog >= cat)
类决策测试,语句变异测试者,更易一语或一变量,易以他语或他变量于再赋值时。此例中,长颈鹿乃所易之变量。
if(dog < cat)
let giraffe = 10;
else
let giraffe = 20;
changed:
if(dog < cat)
let bunny = 10;
else
let bunny = 20;
高阶变异测试者,乃更易于一操作或一值,使测试难察。此变之微,初视难辨,细察则知其弊所在。
let function (int a, int b){
if (dog = 1):
return cat < dog
return cat > dog
}
changed:
let function (int a, int b){
if (dog = 1):
return cat <= dog
return cat > dog
}
变异测试,可简而为之。初造源码,继而注入变异。择变异测试之一种,创微瑕,冀测试集能察之。次而运行测试。若测试于瑕疵所生之行而败,则此测试为坚。否则,瑕疵得存,是测试未周,不能防其染余码。计败者几何,于此,依边际之例或通例之约,重筑测试。
變異測試之妙,在於能更安全地更新測試。若BUG未察,開發者可確知所修之處及其更安全之法。發現單元測試所不能察之BUG,則能致程式更效。然其弊在費時甚巨,且不適於黑盒測試(不知應用程式源碼而評其功能)。加之,有變異過於複雜,致難於排錯,或難於實施糾正程式或對變異進行測試。總之,變異測試乃創造更安全程式、構築更安全測試套件之良法。
(https://www.computer.org/csdl/journal/ts/2024/05/10472898/1VpY3do6cyA)
https://stryker-mutator.io/docs/
https://www.computer.org/csdl/journal/ts/2024/05/10472898/1VpY3do6cyA("IEEE 软件工程汇刊";五月二零二四)
https://www.geeksforgeeks.org/software-testing/software-engineering-white-box-testing/
https://www.redhat.com/en/topics/devops/what-is-ci-cd("redhat.com";六月十日二零二五)
https://bell-sw.com/blog/a-comprehensive-guide-to-mutation-testing-in-java/
(https://www.geeksforgeeks.org/devops/what-is-ci-cd/))
https://www.diffblue.com/resources/what-is-mutation-testing/
https://en.wikipedia.org/wiki/Mutation_testing
(https://www.geeksforgeeks.org/software-testing/software-engineering-black-box-testing/)
https://www.sciencedirect.com/science/article/abs/pii/S0950584909000688
https://www.cs.cmu.edu/~ckaestne/pdf/fse20hom.pdf












