我有一个代码非常混乱的项目 - 这里和那里有很多重复和死代码.
前一段时间单元测试的代码覆盖率为零,但现在我们尝试以TDD方式编写所有新代码,并通过单元测试覆盖"旧"代码来降低技术债务(测试最后技术).
业务逻辑的复杂性非常高,有时候没有人可以回答是否使用了某些方法.
如何找到这种死代码方法?广泛的伐木?更高的测试覆盖率?(这不是很容易,因为客户想要新的功能出来)
受到这个问题的解决方案的启发,我尝试使用与XCTest相同的方法.
我设置了'Generate Test Coverage Files = YES'和'Instrument Program Flow = YES'.
XCode仍然不会生成任何gcda文件.任何人有任何想法如何解决这个问题?
码:
#import <XCTest/XCTestLog.h>
@interface VATestObserver : XCTestLog
@end
static id mainSuite = nil;
@implementation VATestObserver
+ (void)initialize {
[[NSUserDefaults standardUserDefaults] setValue:@"VATestObserver"
forKey:XCTestObserverClassKey];
[super initialize];
}
- (void)testSuiteDidStart:(XCTestRun *)testRun {
[super testSuiteDidStart:testRun];
XCTestSuiteRun *suite = [[XCTestSuiteRun alloc] init];
[suite addTestRun:testRun];
if (mainSuite == nil) {
mainSuite = suite;
}
}
- (void)testSuiteDidStop:(XCTestRun *)testRun {
[super testSuiteDidStop:testRun];
XCTestSuiteRun *suite = [[XCTestSuiteRun alloc] init];
[suite addTestRun:testRun];
if …Run Code Online (Sandbox Code Playgroud) 我是Gradle和Android测试的新手,但我已经将我的Android项目转换为使用Gradle构建.
现在,我正在尝试使用Gradle的JaCoCo插件执行Android项目的测试覆盖.
我已将以下内容添加到build.gradle文件中:
apply plugin: 'jacoco'
Run Code Online (Sandbox Code Playgroud)
当我运行"gradle jacocoTestReport"时出现以下错误:
Task 'jacocoTestReport' not found in root project '<project name>'.
Run Code Online (Sandbox Code Playgroud)
从文档我应该也应用插件'java'但它与插件'android'冲突.
有没有解决的办法?
提前致谢.
我是新来的报道并遇到了一个奇怪的问题.我的报道是将我的虚拟环境站点包考虑在内.以下是覆盖率运行的输出:
coverage run test.py
....................
----------------------------------------------------------------------
Ran 20 tests in 0.060s
OK
(atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -jmfrank63@fullstack-audio-text-catalog:~/workspace (git master) [19:58:45]
$ coverage report
Name Stmts Miss Cover
-----------------------------------------------------------------------------------------------------
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/__init__ 18 0 100%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/_compat 38 20 47%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/app 528 255 52%
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/blueprints 156 118 24%
.
.
.
/home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/urls 412 215 …Run Code Online (Sandbox Code Playgroud) 我正在寻找代码覆盖的一些不良副作用的真实世界的例子.
我注意到最近在工作中发生了这种情况,因为有一项政策可以实现100%的代码覆盖率.代码质量肯定在提高,但相反,测试人员似乎正在编写更宽松的测试计划,因为"代码完全经过单元测试".因此,一些逻辑错误成功.它们是一个非常难以调试的因为"代码完全经过单元测试".
我认为这部分是因为我们的工具只进行了声明覆盖.不过,它本来可以花更多时间.
如果有任何人有代码覆盖政策的其他负面影响请分享.我想知道在现实世界中发生了什么样的其他"问题".
提前致谢.
编辑:感谢所有非常好的回应.有一些我会将其标记为答案,但遗憾的是我只能标记一个.
最近我有一些关于软件开发指标的有趣对话,特别是它们如何在一个相当大的组织中使用,以帮助开发团队更好地工作.我知道有一些关于哪些指标可以使用的Stack Overflow问题 - 比如这个,但我的问题更多的是关于哪些指标对哪些利益相关者有用,以及在什么级别的聚合.
作为一个例子,我的观点是代码覆盖率在以下方面(也可能是其他方式)是一个有用的指标:
但我不认为高级管理层在逐个团队的基础上看到这一点是有用的,因为这鼓励人为尝试通过仅运用而不是测试代码的测试来支持覆盖.
我在一个管理层次结构中有几个级别的组织中,但绝大多数管理人员都具有技术头脑和能力(许多人仍然沾沾自喜).一些开发团队在推动敏捷开发实践方面处于领先地位,但其他开发团队则落后,现在有一个严格的要求从最高层开始,以便组织的工作方式.我们中的一些人正在启动一项计划来鼓励这一点.在这种组织中,您认为哪种指标有用,对谁,为什么以及在什么级别的聚合?
我不希望人们根据他们可以人为影响的指标来评估他们的表现.与此同时,高级管理层将需要某种证据证明正在取得进展.根据您自己组织的经验,您可以提供哪些建议或警告?
编辑
我们绝对希望将指标用作组织改进的工具,而不是作为个人绩效评估的工具.
在Eclipse中,大多数覆盖插件,显示带有不同颜色的覆盖/部分覆盖/未覆盖的线(即整条线涂有颜色)
在IntelliJ Idea中,我找不到用描述性颜色绘制整条线的方法,在左侧只添加一个小的,几乎察觉不到的标记,使得部分覆盖/未覆盖线的可视化非常困难.
任何的想法?
我目前尝试使用模拟库在python中编写一些基本的鼻子单元测试.
在完成了一些基本的例子后,我现在尝试使用nosetests --with-coverage,现在我有了模拟包,我试图'模拟掉'的包显示在覆盖率报告中.是否有可能排除这些?
这是我要测试的类:
from imaplib import IMAP4
class ImapProxy:
def __init__(self, host):
self._client = IMAP4(host)
Run Code Online (Sandbox Code Playgroud)
和测试用例:来自模拟导入补丁
from ImapProxy import ImapProxy
class TestImap:
def test_connect(self):
with patch('ImapProxy.IMAP4') as imapMock:
proxy = ImapProxy("testhost")
imapMock.assert_called_once_with("testhost")
Run Code Online (Sandbox Code Playgroud)
我现在得到以下输出 nosetests --with-coverage
.
Name Stmts Miss Cover Missing
------------------------------------------
ImapProxy 4 0 100%
imaplib 675 675 0% 23-1519
mock 1240 810 35% [ a lot of lines]
Run Code Online (Sandbox Code Playgroud)
有没有办法排除模拟包和imaplib包,而不必手动将除了那些包之外的所有包列入白名单--cover-package=PACKAGE
感谢Ned Batchelder,我现在知道.coveragerc文件了,谢谢!
我创建了一个包含以下内容的.coveragerc文件:
[report]
omit = *mock*
Run Code Online (Sandbox Code Playgroud)
现在我在覆盖率报告中的模拟输出是:
mock 1240 1240 0% 16-2356 …Run Code Online (Sandbox Code Playgroud) 我正试图用业力运行覆盖,我得到警告:WARN [preprocess]:无法加载"覆盖",它没有注册!
当我跑'npm install -g karma-coverage --save-dev'时,我以为我安装了报道
这是我的配置文件:
module.exports = function(config) {
config.set({
// base path, that will be used to resolve files and exclude
basePath: '',
frameworks: ['jasmine'],
// list of files / patterns to load in the browser
files: [
bunch of files..
],
// list of files to exclude
exclude: [],
// use dots reporter, as travis terminal does not support escaping sequences
// possible values: 'dots', 'progress'
// CLI --reporters progress
reporters: ['progress', 'coverage'],
junitReporter: { …Run Code Online (Sandbox Code Playgroud) 我需要在Gitlab中看到java maven项目的代码覆盖率报告.根据这个,这个和其他一些来源:
jacoco到插件列表中pom.xml..gitlab-ci.yml文件中添加了页面作业.Total.*?([0-9]{1,3})%到项目设置中的代码覆盖解析.但是没有任何报道报道,或者至少我看不到它.没有覆盖百分比或覆盖率报告页面.
.gitlab-ci.yml文件内容:
image: maven:latest
variables:
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
cache:
paths:
- .m2/repository/
build:
stage: build
script:
- mvn $MAVEN_CLI_OPTS compile
test:
stage: test
script:
- mvn $MAVEN_CLI_OPTS test
artifacts:
paths:
- target/site/jacoco/
pages:
stage: deploy
dependencies:
- test
script:
- mkdir public
- mv target/site/jacoco/index.html public
artifacts:
paths:
- public
deploy:
stage: deploy …Run Code Online (Sandbox Code Playgroud) code-coverage ×10
jacoco ×2
python ×2
testing ×2
android ×1
gitlab ×1
gitlab-ci ×1
gradle ×1
ios7 ×1
javascript ×1
karma-runner ×1
legacy-code ×1
maven ×1
metrics ×1
mocking ×1
nose ×1
php ×1
python-mock ×1
refactoring ×1
unit-testing ×1
virtualenv ×1
xcode5 ×1