코드커버리지(Code Coverage)

박상수
6 min readMay 26, 2019

* 개인적으로 kotlin js공부 중이라 JS위주로 작성

코드커버리지(Code Coverage)란?

  • 소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표중 하나
  • 말 그대로 코드가 얼마나 커버되었는가
  • 소프트웨어 테스트를 진행했을 때 코드 자체가 얼마나 실행되었냐 수치화 가능

측정기준

  • 코드의 구조[구문(statement), 조건(Condition), 결정(Decision)]를 얼마나 잘 커버하였느냐가 기준
    - 구문 : 실행 코드라인이 한번 이상 실행되면 충족
    - 조건 : 각 내부 조건 참 혹은 거짓을 가지면 충족
    - 결정 : 각 분기의 내부조건 자체가 아닌 전체의 결과가 True or False 면 충족
  • 쉽게 생각하면 100줄의 코드가 있으면 80줄이 테스트가 진행되면, 80% 라고 보면 된다.
1 function test(text){
2 var result;
3 if("A" == text){
4 result = "success";
5 console.log(result);
6 }else{
7 result = "fail";
8 console.log(result);
9 }10 return result;11 }
console.log(assertEqual(test("aa"),"aa"));
/*
* 5/7 = 0.71 * 100 = 71%;
* 7,8 커버되지 않음
*/

도구

  • Qunit
    - QUnit은 자바스크립트 유닛 테스트 프레임워크
    - JQuery, jQuery UI, jQuery Mobile을 테스트하기 위해 개발
    - 모든 자바스크립트 코드를 테스트하기 위한 제네릭 프레임워크
    - JQuery 의 일부로 처음 개발 되었으나, 점점 프로젝트가 확장됨으로써 독립
    - https://qunitjs.com
//test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>QUnit Example</title>
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.9.2.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="https://code.jquery.com/qunit/qunit-2.9.2.js"></script>
<script src="tests.js"></script>
</body>
</html>
//test.js
QUnit.test( "hello test", function( assert ) {
assert.ok( 1 == "1", "Passed!" );
});
Qunit 테스트 결
  • jasmine
    - Pivotal Labs의 개발자들에 의해 만들어진 Behavior-driven development (BDD) 테스트 프레임워크
    - 자동화된 자바스크립트 유닛테스트를 작성할 수 있게 해줍니다
    - npm으로 설치
    - ruby, python, node.js지원
//index.html
<html>
<head>
<link rel="shortcut icon" type="image/png" href="jasmine/lib/jasmine-2.0.0/jasmine_favicon.png">
<link rel="stylesheet" type="text/css" href="jasmine/lib/jasmine-2.0.0/jasmine.css">
</head>
<body>
<script type="text/javascript" src="src/test.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine-html.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/boot.js"></script>
</body>
</html>
//test.js
function test(){
return "test!";
}
// /jasmine/spec/test.spec.js
describe("test", function(){
it("is success", function() {
expect(test()).toEqual("test!");
});
});
  • mocha
    - npm으로 설치
$ npm install mocha
$ mkdir test
$ $EDITOR test/test.js # or open with your favorite editor

//test.js

var assert = require('assert');
describe('String', function() {
describe('indexOf', function() {
it('문자가 존재 할까?', function() {
assert.equal("문자가 존재하지 않음".indexOf("테"), -1);
});
});
});

terminal:

$ npm test

String
#indexOf()
✓ 문자가 존재하지 않음


1 passing (9ms)
// jest 설치
> npm install jest
//mul.js
function mul(a,b){
return a*b;
}
module.exports = mul;// mul.test.js
const mul = require('./mul');

test('mul 1 * 2 to equal 2', () => {
expect(mul(1, 2)).toBe(2);
});
// jest 테스트
> npm ./sum.test.js
PASS ./sum.test.js
✓ mul 1 * 2 to equal 3 (3ms)

참고

--

--