[μ½λλΆμ λꡬ]# 1 μ½λ 컀λ²λ¦¬μ§λ?
* μΈλ€μΌ μ΄λ―Έμ§λ λ§λ νκ² μμ΄μ μ ν¨μ€λ₯Ό κ°μ΄ μ¬μ©νκΈ°λ‘ νλ€.
# μ½λ 컀λ²λ¦¬μ§(Code Coverage)λ?
μ½λ 컀λ²λ¦¬μ§λ μννΈμ¨μ΄μ ν μ€νΈ μΌμ΄μ€κ° μΌλ§λ μΆ©μ‘±λμλμ§λ₯Ό λνλ΄λ μ§ν μ€ νλ.
ν μ€νΈλ₯Ό μ§ννμμ λ 'μ½λ μμ²΄κ° μΌλ§λ μ€νλμλκ°' μ λν μμΉ.
@ μ½λ 컀λ²λ¦¬μ§λ μ΄λ»κ² μΈ‘μ ν κΉ?
- λΈλλ°μ€ ν
μ€νΈ
- μννΈμ¨μ΄μ λ΄λΆ ꡬ쑰, μ리λ₯Ό λͺ¨λ₯΄λ μνμμ λμμ κ²μ¬νλ λ°©μ
- μ¬μ©μ κ΄μ μ ν μ€νΈ. μ΄μν κ°μ μ λ ₯νμ λ μ¬λ°λ₯Έ μΆλ ₯μ΄ λμ€λκ°? - νμ΄νΈλ°μ€ ν
μ€νΈ
- μμ© νλ‘κ·Έλ¨μ λ΄λΆ ꡬ쑰μ λμμ κ²μ¬νλ ν μ€νΈ λ°©μ.
- κ°λ°μμ κ΄μ μμ μννΈμ¨μ΄ λ΄λΆμ μμ€μ½λλ₯Ό ν μ€νΈ
@ μ½λ 컀λ²λ¦¬μ§λ₯Ό μΈ‘μ νλ κΈ°μ€κ°μ μ΄λ€κ²μ΄ μμκΉ?
- ꡬ문(Statement) λλ λΌμΈ(Line) 컀λ²λ¦¬μ§
- 쑰건μ λ°λ₯Έ λ‘μ§(μλ리μ€)λ₯Ό νμΈν μλ μμ§λ§, λͺ¨λ μ½λκ° μ€νλλμ§λ νμΈ κ°λ₯ν μ§ν
- νμ§λ§ μμ€μ½λλ₯Ό κΈ°μ€μΌλ‘ μ‘κ²λλ©΄ 컨벀μ μ μν₯μ λ°λλ€ -> λ°μ΄νΈμ½λ ꡬ문 컀λ²λ¦¬μ§ μ¬μ©
// ν
μ€νΈμμ μ 체(100%) μ½λ μ€, λͺ λΌμΈμ΄ μ€νλλκ°?
// 4κ°μ λΌμΈμ€ 3κ°κ° μ€νλ¬λ€λ©΄ ꡬ문 컀λ²λ¦¬μ§λ 75% (3/4)
void foo (int x) {
system.out("start line"); // ν
μ€νΈ 1λ²
if (x > 0) { // ν
μ€νΈ 2λ²
system.out("middle line"); // ν
μ€νΈ 3λ²
}
system.out("last line"); // ν
μ€νΈ 4λ²
}
- 쑰건(Condition) 컀λ²λ¦¬μ§
- 쑰건문μ λ΄λΆμ‘°κ±΄(if)κ° μ΄μν κ°μ΄ μλ true, falseλ₯Ό λ°ννλμ§ νμΈνλ μ§ν
// λͺ¨λ 쑰건μμ λ΄λΆμ‘°κ±΄(if)μ λν΄ μ»¨λμ
κ°μ΄ true λλ falseλ₯Ό λ°ννλμ§ ν
μ€νΈ
// λ¨, μ‘°κ±΄μ΄ μλ―Έμλ κ²½μ°(무쑰건 true)λ ν
μ€νΈ μ±κ³΅μΌλ‘ νκΈ°νλ€λ λ¨μ μ΄ μμ.
void foo (int x, int y) {
system.out("start line");
if (x > 0 && y < 0) { // ν
μ€νΈ. x,y μ¬λ¬κ°μ λμ
νλ©° true or falseκ° λμ€λμ§ νμΈ
system.out("middle line");
}
system.out("last line");
}
- κ²°μ (Decision) 컀λ²λ¦¬μ§ λλ λΈλ μΉ(Branch) 컀λ²λ¦¬μ§
- ν μ€νΈμ λν΄μ λͺ¨λ 쑰건μμ΄ true, falseλ₯Ό λ λ€ κ°μ ΈμΌν¨. μ¦ λ‘μ§μ λ°λΌ μ€ννλ¦μ΄ λ³νλμ§ νμΈνλ μ§ν
- λ¨ μ‘°κ±΄λ¬Έμ΄ μμΌλ©΄ μμ ν μ€νΈλ₯Ό νμ§ μλλ€λ λ¨μ μ΄ μμ. => κ·Έλμ λΌμΈ 컀λ²λ¦¬μ§λ₯Ό μ£Όλ‘ μ¬μ©.
@ μ΄κ² μ μ€μνμ£ ?
ν μ€νΈ μ½λλ λ°μν μ μλ λͺ¨λ μλ리μ€μ λν΄ μμ±λμ΄μΌνλ€. μ½λ 컀λ²λ¦¬μ§λ₯Ό ν΅ν ν μ€νΈμ μμΉνλ κ°λ°μκ° λμΉ λ‘μ§μ νλ¦μ΄λ μ½λλ₯Ό 보μν μ μκ² λ§λ€μ΄μ€λ€.
μ€μ νμ μμλ ν μ€νΈ μ½λμ μ€μμ±μ μΈμ§νκ³ , μ½λ 컀λ²λ¦¬μ§ λꡬλ₯Ό μ κ·Ήμ μΌλ‘ μ¬μ©νλ€. λνμ μΌλ‘ μλνλΈ(SonarQube)μ κ°μ μ μ μ½λ λΆμλꡬλ μ½λ 컀λ²λ¦¬μ§κ°μ΄ κΈ°μ‘΄λ³΄λ€ λ¨μ΄μ§λ κ²½μ° μ»€λ° μμ²΄κ° λΆκ°λ₯νκ² μ νν μ μλ€.
λ€μμκ°μλ Jacocoμ SonarQubeλ₯Ό μλ° μ€νλ§ νλ‘μ νΈμ μ μ©νλ λ°©λ²μ λ°°μ보μ