开发者区

高级软件开发与MATLAB

有你覆盖

覆盖都很好医保覆盖率良好手机覆盖良好连云覆盖都比太阳光线强度强好代码覆盖也给我们温暖模糊感, 仿佛冷日热饮一样。

常有良好理由代码覆盖能帮助我们看到代码中不以某种形式实现的领域,并大有帮助good-friend-that-can-be-brutally-honest-with-you排序方式它可以指点我们真正需要添加更多测试的地方等我们响应友方建议并增加更好的测试后,我们就都好起来了

快速一旁添加一些谨慎之序我们(所有)应记住代码覆盖量没有多少显示代码华府市覆盖代码is not覆盖.这是因为看到一块代码覆盖不表示它是如何覆盖的,它是否由专门针对该代码或某些偶发覆盖的测试覆盖,没有信息说明覆盖是否以任何方式验证正确结果取出使用覆盖显示代码区域不对测试切勿掉入陷阱并下结论 覆盖代码免窃听或甚至远程测试

说到此,它是一个伟大的工具,如果你有正确的思维模式,当结合测试和持续整合时,它能帮助我们确保测试完全失效。

好消息刚开始容易得多我们拥有CodeCoveragePlugin单元测试框架有段时间,但它生成了一份报告,该报告设计得更多,用于交互MATLAB环境,而不是CI系统工作流现在我们有选择 编入覆盖科伯图拉并获益于事物像Cobertura插件为Jenkins.

继续从建上回外加覆盖

导入'matlab.unittest.plugins.CodeCoveragePlugin')!导入'matlab.unittest.plugins.codecoverage.CoberturaFormat')!覆盖File=全文件覆盖.xml)!runner.addPlugin(CodeCoveragePlugin.forFolder(src,.制作程序, CoberturaFormat(coverageFile)));

易如反掌现在让我们看看CI构建像什么

糟透了忽略了其他发布程序 我们没有插件

无大故障,我们只需要打包插件安装到TestRunner并检查版本置入函数

函数显示addCoberturaCoverageIfPossible(runner, src, coverageFile)if~verLessThanmatlab,九点三分)导入'matlab.unittest.plugins.CodeCoveragePlugin')!导入'matlab.unittest.plugins.codecoverage.CoberturaFormat')!runner.addPlugin(CodeCoveragePlugin.forFolder(src,.制作程序, CoberturaFormat(coverageFile)));结束结束

我们可以从测试运行脚本中调用函数 :

试一试导入'matlab.unittest.TestRunner')!导入'matlab.unittest.plugins.XMLPlugin')!导入'matlab.unittest.plugins.ToFile')!ws=genvworkSPACE)!src=全文件源码)!adpath(src)测试=全文件测试)!套件=测试a%创建并配置选手运行者=测试运行者.withTextExput虚构性3;+%TAP插件结果Dir=全文件测试结果)!mkdir(resultsDir)!结果File=全文件'testResults.xml')!runner.addPlugin(XMLPlugin.producingJUnitFormat(resultsFile))!覆盖File=全文件覆盖.xml)!addCoberturaCoverageIfPossible(runner, src, coverageFile)!结果=跑者.run接头edep报告扩展式)退出(1);结束quit(强力);

MATLAB代码只是方程的二分之一并配置成跟踪覆盖在此简单添加它后构建动作并配置它查看结果文件夹,查找命名文件覆盖.xml.

注意,既然我们正在运行多发测试, 上发版本没有插件, 我们还需要通知插件不失效如果不能实现,所有早期发布都失败 因为找不到Cobeturaxml文件

OK,现在我们谈正事建材遍历所有发布

R2017b构建时可以看到覆盖报告

深入挖掘后,我们可以看到哪里需要添加测试

构造现在非常清晰地显示,我们忘记添加负测试来纠正一下下面测试我想写

函数显示testInvalidInput(testCase)%测试确保我们优异地以假输入失败testCase.verifyError(@() simulateSystem(unk).'simulateSystem:InvalidDesign:ShouldBeStruct');结束

再查源头,我发现可怕的事 我们无法测试提醒一下 代码模拟器

函数显示systemspringMassDamper设计创建设计变量ifspruct-deC,k})差错'simulateSystem:InvalidDesign:ShouldBeStruct',.设计应该是带字段C和k);结束设计变量C=设计ck=设计.k常量变量z0ss0]初始位置速度m=1500质量百分比Odefun=@(tz)k/m-c/m*zode45(defun,[0,3],z0+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++第一列位置(均衡变换)x=z(s:1);

.并设计:

m=1500需要知道质量判定临界阻塞设计.k=5e6spring常量%设计.c=2*m*sqrt%达平系数临界达米特清除m;

Yikes!无法把坏值输入代码测试正因如此 代码死if we want我们可以删除错误条件,因为我们知道脚本产生正确的设计格式然而,这忽略点之所以我们把设计从仿真脚本分离开来 完全是为了调整设计并探索我们真想模拟系统函数可复用多项不同设计,因此我们应该适当参数化软件测试能力大得多 即软性同义要做到这一点,我们所要做的就是使设计脚本函数并接受它为模拟函数输入

函数显示system模拟系统设计ifspruct-deC,k})差错'simulateSystem:InvalidDesign:ShouldBeStruct',.设计应该是带字段C和k);结束设计变量C=设计ck=设计.k常量变量z0ss0]初始位置速度m=1500质量百分比Odefun=@(tz)k/m-c/m*zode45(defun,[0,3],z0+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++第一列位置(均衡变换)x=z(s:1);函数显示设计=springMassDamper设计m=1500需要知道质量判定临界阻塞设计.k=5e6spring常量%设计.c=2*m*sqrt%达平系数临界达米特

做点测试更新

函数显示测试=函数测试结束函数显示testSettlingTime(testCase)测试系统2秒内 0.001零system(springMassDamper设计)位置Settling=位置(time>.002);% for this例子验证安顿时间后的第一个值verifyLessThan(testCase, abs(positionAfterSettling), 2);结束函数显示testOvershoot(testCase)%Test确保溢出小于0.01system(springMassDamper设计)超拍=最大值验证LessThan结束函数显示testInvalidInput(testCase)%测试确保我们优异地以假输入失败testCase.verifyError(@() simulateSystem(unk).'simulateSystem:InvalidDesign:ShouldBeStruct');结束

....检验构建和结果覆盖

不错改天吧

......Steve新博客深入学习脱机人真令人惊异多年世界类博客处理图像, 现在他把深入学习加进编程他甚至保证他将保持图像处理博客继续运行好家伙期望它,确定追上他 已经有几个柱子.




MATLABQR2017b发布

|
  • 打印

コメント

コメントを残すには、ここMathWorks MathWorks