continuous integration...

61
Continuous Integration 지속적인 검사 조영호 카페PJT2008.10.6 [email protected]

Upload: others

Post on 02-Jun-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

Continuous Integration

지속적인검사

조영호

카페PJT팀

2008.10.6

[email protected]

Page 2: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

1. 소프트웨어품질향상기법

2. 소프트웨어메트릭

목차

3. 정적코드검사도구

Page 3: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

1. 소프트웨어품질 향상기법

Page 4: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

4 / 문서의 제목

소프트웨어품질속성

외적인품질속성

정확성(Correctness)

유용성(Usability)

효율성(Efficiency)

신뢰성(Reliability)

무결성(Integrity)

적응성(Adaptability)

정밀성(Accuracy)

견고성(Robustness)

내적인품질속성

유지보수성(Maintainability)

유연성(Flexibility)

이식성(Portability)

재사용성(Reusability)

가독성(Readability)

테스트용이성(Testabiloty)

이해성(Understandability_

Page 5: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

5 / 문서의 제목

내적인품질속성

유지보수성(Maintainability)

유연성(Flexibility)

이식성(Portability)

재사용성(Reusability)

가독성(Readability)

테스트용이성(Testabiloty)

이해성(Understandability_

소프트웨어품질속성

외적인품질속성

정확성(Correctness)

유용성(Usability)

효율성(Efficiency)

신뢰성(Reliability)

무결성(Integrity)

적응성(Adaptability)

정밀성(Accuracy)

견고성(Robustness)

외적인품질속성사용자를위한편의성사용자가관심을갖는소프트웨어속성소프트웨어가사용하기쉬운가정확하게작동하는가

Page 6: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

6 / 문서의 제목

내적인품질속성외적인품질속성

협력적인구현기법의비교

정확성(Correctness)

유용성(Usability)

효율성(Efficiency)

신뢰성(Reliability)

무결성(Integrity)

적응성(Adaptability)

정밀성(Accuracy)

견고성(Robustness)

유지보수성(Maintainability)

유연성(Flexibility)

이식성(Portability)

재사용성(Reusability)

가독성(Readability)

테스트용이성(Testability)

이해성(Understandability)

내적인품질속성프로그래머를위한편의성코드가읽기쉬운가코드의구조가좋은가

Page 7: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

7 / 문서의 제목

품질향상기법의상대적효율성

제거단계 최하비율 최빈수비율 최고비율

비형식적인 설계 검토 25% 35% 40%

형식적 설계 정밀 검토 45% 55% 65%

비형식적 코드 검토 20% 25% 35%

형식적 코드 정밀 검토 45% 60% 70%

모델링 또는 프로토타이핑 35% 65% 80%

코드에 대한 개인 탁상 검사 20% 40% 60%

단위 테스트 15% 30% 50%

새로운 기능(컴포넌트) 테스트 20% 30% 35%

통합 테스트 25% 35% 40%

회귀 테스트 15% 25% 30%

시스템 테스트 25% 40% 55%

소량 베타 테스트 25% 35% 40%

대량 베타 테스트 60% 75% 85%

결함감지비율

Page 8: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

8 / 문서의 제목

결함발견비용

검사가테스트보다비용저렴

결함수정비용

오류를초기에찾아내는감지기법이더낮은수정비용을요구

검사

증상과원인을한번에발견

테스트

증상은찾아내지만원인발견을위해디버깅과같은별도의작업요구

품질향상기법의상대적효율성

효율적인소프트웨어 품질향상프로그램은 개발의

전과정에 적용되는기법들의 조합을 모두포함해야 한다

Page 9: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

9 / 문서의 제목

결함이발생한단계

결함을수정한단계

요구사항

아키텍처

상세설계

구축

요구사항 아키텍처 상세설계 구축 유지보수

결함발생/수정단계별비용

Page 10: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

10 / 문서의 제목

협력적인구현기법의비교

특성 짝프로그래밍 형식적인정밀검사비형식적인검토

(워크-쓰루)

정의된 참석자 역할 있음 있음 없음

역할을어떻게수행하는지에대한형식적인훈련

코치를 통해서 있음 없음

협력을 이끄는 사람 키보드를 갖고 있는 사람 중개자 일반적으로작성자

협력의 초점설계, 코드 작성, 테스트, 결함 수정

오로지결함의발견 다양함

중점적인 검토 노력-가장 빈번하게 발생하는 오류의 종류 찾기

비형식적 있음 없음

잘못된 수정을 줄이기 위한 후속 조치 있음 있음 없음

개별적인 프로그래머에 대한 상세한 오류피드백을 통해서 더 적은 오류 발생

부수적 있음 부수적

결과의 분석으로부터 프로세스 효율성 향상

없음 있음 없음

구현 이외의 활동에의 유용함 가능 있음 있음

전형적인 결함 발견율 40 ~ 60 % 45 ~ 70 % 20 ~ 40 %

Page 11: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

11 / 문서의 제목

정적코드분석

정적코드분석(Static Code Analysis)

프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

대부분소스코드를대상으로실행

오브젝트코드를분석하기도함

일반적으로자동화도구를사용하여수행되는분석을지칭

Page 12: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

12 / 문서의 제목

검사와정적코드분석

검사와정적분석도구의차이점

정적분석도구는비용이저렴해서자주실행가능

개관적인분석

용도에맞게커스터마이징가능

코드베이스가클때 효과적

사람은중요한요소의품질에만관여

80%는분석도구가처리하고사람은나머지 20%에 노력집중

사람이하는검토를완전히대체하는것은불가능

두가지기법모두적절히활용하는것이중요

Page 13: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

13 / 문서의 제목

자동화된통합빌드

피드백주기

소프트웨어품질을향상시키고위험을줄이기

| \ \

}]

{[

“‘ Integrate

?/

shift?/

P ㅖㅔ

통합하기

소스코드컴파일하기

테스트돌리기

검사수행하기

소프트웨어배포하기

데이터베이스통합하기

Page 14: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

2. 소프트웨어 메트릭

Page 15: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

15 / 문서의 제목

코드속의나쁜냄새

긴메소드(Long Method)

코드를이해하기어려움

주석을달아야할때마다메소드추출

조건문과루프가있을때마다메소드추출

메소드에의도를잘나타내는이름을지을것

메소드가하는일과일을처리하는방법사이의의미적거리가핵심

거대한클래스(Large Class)

지나치게많은인스턴스변수를가지는클래스

지나치게많은코드를가진클래스

코드중복이나타날확률이높음

Page 16: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

16 / 문서의 제목

대칭성

대칭성(Symmetric)

하나의아이디어를프로그램전체에서일관된방식으로표현하는통일성

대칭성을찾으면코드의중복제거가능

구현과관련된 How가 아닌 Why에따라의도를표현하도록메소드추출

void process() {

input();

count++;

output();

}

void process() {

input();

incrementCount();

output();

}

void process() {

input();

totally();

output();

}

Page 17: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

17 / 문서의 제목

테스트용이성

긴메소드

메소드가길수록 많은 if문, switch문, for문을포함

결함발생가능성증가

테스트경로의수가증가

메소드가길수록테스트가어려움

많은패턴과리팩토링기법은메소드의길이와제어문의수를감소시키기위한방법

public RevenueRecognition[] recognize(

DayOfYear whenSigned, Money wons) {

if (name.equals("워드프로세서")) {

...

}else if (name.equals("스프레드시트")) {

...

} else if (name.equals("데이터베이스")) {

...

}

return new RevenueRecognition[0];

}

public RevenueRecognition[] recognize(

DayOfYear whenSigned, Money wons) {

return revenueRecognitionStrategy

.recognize(whenSigned, wons);

}

Page 18: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

18 / 문서의 제목

순환복잡도(Cyclomatic Complexity)

순환복잡도(Cyclomatic Complexity)

메소드에포함된경로의수측정

메소드의길이가길수록순환복잡도증가

public int getValue(int param1) {

int value = 0;

if (param1 == 0) {

value = 4;

} else {

value = 0;

}

return value;

}

계산방법

•루틴을통과하는직선형경로에대해서 1로시작

• if, while, for, and, or 또는이와동등한키워드에대해 1을 추가

• case문의 각케이스에대해 1을 추가. 만약 default가없다면 1을추가

CCN=2

Page 19: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

19 / 문서의 제목

순환복잡도(Cyclomatic Complexity)

순환복잡도(Cyclomatic Complexity)

일반적으로 CCN이 10보다 크면복잡한메소드

리팩토링대상

순환복잡도가높을수록결함발생비율이증가

최소테스트케이스의수 = CCN

순환복잡도를낮추는가장효과적인방법

Extract Method 리팩토링

Page 20: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

20 / 문서의 제목

테스트커버리지

테스트커버리지(Test Coverage)

테스트된코드의비율측정

테스트케이스실행시실행된코드의비율로측정

단위테스트보완

단위테스트는테스트된코드가예상대로실행됐는지에관한정보제공

테스트커버리지는테스트되지않은코드부분에관한정보제공

Statement Coverage

메소드/클래스내부의어떤문장이실행됐는지여부측정

복합조건문, 연속적인 switch 레이블과같은제어흐름에대한부정확한측정값제공

Branch Coverage

의사결정부분의테스트여부측정

의사결정부분만을테스트하기때문에 조합을테스트하지못함

Path Coverage

의사결정부분의모든조합을테스트

순환복잡도수(CCN) 만큼의테스트케이스작성

Page 21: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

21 / 문서의 제목

Statement Coverage

public int returnInput(int x, boolean condition1, boolean condition2, boolean condition3) {if (condition1){

x++;}if (condition2){

x--;}

if (condition3){x=x;

}

return x;}

@Testpublic void testReturnInput() {int methodReturn = new MyClass().returnInput(0, true, true, true);assertEquals(0, methodReturn);

}

Statement Coverage 100%

Test Case

Target Code

Page 22: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

22 / 문서의 제목

Branch Coverage

@Testpublic void testReturnInput() {int methodReturn = new MyClass().returnInput(0, true, true, true);assertEquals(0, methodReturn);

}

@Testpublic void testReturnInput2() {int methodReturn = new MyClass().returnInput(0, false, false, false);assertEquals(0, methodReturn);

}

Branch Coverage 100%

public int returnInput(int x, boolean condition1, boolean condition2, boolean condition3) {if (condition1){

x++;}if (condition2){

x--;}

if (condition3){x=x;

}

return x;}

Test Case

Target Code

Page 23: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

23 / 문서의 제목

테스트커버리지

테스트커버리지레포트에

현혹되지말라

CCN=4

Page 24: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

24 / 문서의 제목

Cobertura

Page 25: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

25 / 문서의 제목

안정성(Stability)

Page 26: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

26 / 문서의 제목

안정성(Stability)

<

안전성은변화를만들기위해필요한일의양과관련되어있다.

Page 27: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

27 / 문서의 제목

안정성(Stability)

x

Y

Page 28: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

28 / 문서의 제목

안정성(Stability)

x

Y

X : 안정적인 패키지

Y : 불안정한 패키지

Page 29: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

29 / 문서의 제목

불안정성(Instability)

Ca(Afferent Coupling) 이패키지에포함된클래스에의존하는외부클래스의수

Ce(Efferent Coupling) 패키지외부클래스에의존하는패키지내부클래스

I(Instability)

Ca Ce

Ce

Ce + Ca

I =

Page 30: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

30 / 문서의 제목

SDP(Stable-Dependencies Principle)

A

B

C

SDP의존성은안정적인 방향으로 향해야 한다

IA > IB > IC

Page 31: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

31 / 문서의 제목

<<interface>>

Action

<<interface>>

Interceptor

{abstract}

AbstractInterceptor

MyAction MyInterceptorAnotherAction AnotherInterceptor

프레임워크

Page 32: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

32 / 문서의 제목

프레임워크

<<interface>>

Action

<<interface>>

Interceptor

{abstract}

AbstractInterceptor

MyAction MyInterceptorAnotherAction AnotherInterceptor

안정적인패키지

불안정한패키지

Page 33: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

33 / 문서의 제목

추상성(Abstractness)

Nc 패키지에포함된구체적인클래스의수

Na 패키지에포함된인터페이스/추상클래스의수

A(Abstctness)

Na

Nc

A =

<<interface>>

MyInterface

{abstract}

MyAbstractClassMyConcreteClass

Page 34: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

34 / 문서의 제목

SAP(Stable-Abstractions Principle)

SAP안정적인패키지는 확장가능하도록 추상적이어야 한다

A

B

C

AA < AB < AC

Page 35: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

35 / 문서의 제목

A

B

C

SDP & ADP

IA > IB > IC

AA < AB < AC

Page 36: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

36 / 문서의 제목

A-I 그래프

A

I

(0,1)

(1,0)

Page 37: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

37 / 문서의 제목

이상적인패키지위치

A

I

(0,1)

(1,0)

Page 38: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

38 / 문서의 제목

A

I

(0,1)

(1,0)

비정상적인패키지위치

Page 39: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

39 / 문서의 제목

주계열로부터의거리

A

I

(0,1)

(1,0)

주계열로부터의거리가가까울수록이상적인패키지구조에근접

Page 40: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

40 / 문서의 제목

주계열로부터의거리

A

I

(0,1)

(1,0)

D = |A + I – 1|

D가 0에근접할수록좋음

Page 41: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

41 / 문서의 제목

ADP(Acyclic-Dependencies Principle)

ADP패키지의존관계 그래프에 순환을 허용하지 마라

MyApplication

MessageWindow

TaskWindow

MyTasks

Windows

Tasks MyDialogs

Database

Page 42: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

42 / 문서의 제목

ADP(Acyclic-Dependencies Principle)

ADP패키지의존관계 그래프에 순환을 허용하지 마라

MyApplication

MessageWindow

TaskWindow

MyTasks

Windows

Tasks MyDialogs

Database

Page 43: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

43 / 문서의 제목

bo{A=0.4, I=0.78}

operation{A=0.36, I=1}

invoker{A=0.5, I=0.8}

aspect{A=0,I=1}

recovery{A=0.12, I=1}

model{A=0.58, I=0.3}

support{A=0, I=1}

action{A=0.18, I=1}

더추상적인패키지가

더구체적인패키지에의존

A : 패키지추상성I : 패키지불안정성

패키지의존성예제 – Cafe Bridge 멀티퍼블리싱

Page 44: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

44 / 문서의 제목

bo{A=0.5, I=0.89}

model{A=0.58, I=0.27}

support{A=0, I=0.86}

action{A=0.18, I=1}

message{A=0.73, I=0.58}

operation{A=0.12, I=1}

aspect{A=0,I=1} jms

{A=0, I=1}

http{A=0, I=1}

recovery{A=0.12, I=1}

A : 패키지추상성I : 패키지불안정성

패키지의존성예제 – Cafe Bridge 멀티퍼블리싱

Page 45: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

45 / 문서의 제목

JDepend

Page 46: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

46 / 문서의 제목

3. 정적코드검사도구

Page 47: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

47 / 문서의 제목

PMC-CPD

코드중복검사

Copy-and-Paste Detector(CPD)

http://maven.apache.org/plugins/maven-pmd-plugin/

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-pmd-plugin</artifactId>

<configuration>

<minimumTokens>100</minimumTokens>

<targetJdk>1.5</targetJdk>

<outputDirectory>

${project.reporting.outputDirectory}/pmd

</outputDirectory>

<targetDirectory>

${project.reporting.outputDirectory}/pmd

</targetDirectory>

</configuration>

</plugin>

Page 48: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

48 / 문서의 제목

Cobertura

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>cobertura-maven-plugin</artifactId>

<version>2.2</version>

<configuration>

<formats>

<format>xml</format>

<format>html</format>

</formats>

<instrumentation>

<excludes>

<exclude>**/*TestSuite.class</exclude>

</excludes>

</instrumentation>

</configuration>

</plugin>

테스트커버리지측정

Statement Coverage

Branch Coverage

순환복잡도(Cyclomatic Complexity)

http://mojo.codehaus.org/cobertura-maven-plugin/

Page 49: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

49 / 문서의 제목

CheckStyle

코딩표준검증

명명규칙, 메소드길이, 라인길이, 예외처리규칙등

http://maven.apache.org/plugins/maven-checkstyle-plugin/

검증가능한항목

http://checkstyle.sourceforge.net/availablechecks.html

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-checkstyle-plugin</artifactId>

<configuration>

<outputDirectory>

${project.reporting.outputDirectory}/checkstyle

</outputDirectory>

<outputFile>

${project.reporting.outputDirectory}/checkstyle/checkstyle-result.xml

</outputFile>

<configLocation>

${basedir}/checkstyle.xml

</configLocation>

</configuration>

</plugin>

Page 50: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

50 / 문서의 제목

CheckStyle

코딩표준검증 규칙

xml 파일로작성

<?xml version="1.0" ?>

<!DOCTYPE module PUBLIC

"-//Puppy Crawl//DTD Check Configuration 1.2//EN"

"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

<module name="Checker">

<module name="TreeWalker">

<!-- private 이상의 클래스(즉, 모든 클래스)에 주석이 있는지 체크 -->

<module name="JavadocType"/>

<!-- protected 이상의 메소드에 주석이 있는지 체크 -->

<module name="JavadocMethod">

<property name="scope" value="protected"/>

</module>

</module>

</module>

Page 51: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

51 / 문서의 제목

JDepend

아키텍처정합성검증

패키지의존성검증

http://mojo.codehaus.org/jdepend-maven-plugin/

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>jdepend-maven-plugin</artifactId>

<configuration>

<outputDirectory>

${project.reporting.outputDirectory}/jdepend

</outputDirectory>

</configuration>

</plugin>

Page 52: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

52 / 문서의 제목

Bamboo

Bamboo Plugin 설치

<BAMBOO_HOME>/webapp/WEB-INF/lib에 복사

Coberura

http://confluence.atlassian.com/display/BAMEXT/Cobertura+plugin

CheckStyle

http://confluence.atlassian.com/display/BAMEXT/CheckStyle+Plugin

PMD

http://confluence.atlassian.com/display/BAMEXT/PMD+plugin

JDepend

없음

Page 53: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

53 / 문서의 제목

Bamboo

Artifacts 설정

각 플러그인의출력결과를 Bamboo에서 조회

Page 54: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

54 / 문서의 제목

Bamboo

Artifacts 조회

Page 55: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

55 / 문서의 제목

Cobertura

Page 56: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

56 / 문서의 제목

CheckStyle

Page 57: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

57 / 문서의 제목

PMD-CPD

Page 58: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

58 / 문서의 제목

JDepend

Page 59: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

59 / 문서의 제목

Eclipse Plugin

툴 목적 Plugin URL

CheckStyle 코딩표준분석 http://eclipse-cs.sourceforge.net/update/

Coverlipse 코드커버리지테스트 http://eclipse-cs.sourceforge.net/update/

CPD Copy/Paste 탐지 http://pmd.sourceforge.net/eclipse/

JDepend 패키지의존성분석 http://andrei.gmxhome.de/eclipse/

Metrics Complexity/Monitoring http://metrics.sourceforge.net/update

Page 60: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

Thank you.

Page 61: Continuous Integration 지속적인검사pds17.egloos.com/pds/201002/17/18/7.Continuous_Inspection.pdf · 정적코드분석 정적코드분석(Static Code Analysis) 프로그램을실행하지않은채수행되는컴퓨터소프트웨어분석

Question.