SYSTEM TEST & STATIC ANALYSIS 2013 SPRING SOFTWARE VERIFICATION TEAM 1 200711460 이상열 200711470 정재호 201111344 김재엽 201211350 박주광
CONTENTS System Test Customer s View Reference 2013-06-07 2
Functional Analysis Functional Analysis 2013-06-07 3
System Testing System Test Result (cont.) 202.306 아무거나불러온후직선을그린다. Pass 202.307.131 아무거나불러온후채우기를선택하고동그라미를그린다. Pass 202.307.132 아무거나불러온후채우기를선택하지않고동그라미를그린다. Pass 202.308.131 아무거나불러온후채우기를선택하고네모를그린다. Pass 202.308.132 아무거나불러온후채우기를선택하지않고네모를그린다. Pass 203.411.401.301 게임시작후이름에아무것도입력하지않고확인버튼을누르고연필로그린다. Pass 203.411.401.301.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고연필로그리고채점한다. Pass 203.411.401.302 게임시작후이름에아무것도입력하지않고확인버튼을누르고지우개로지운다. Pass 203.411.401.302.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고지우개로지우고채점한다. Pass 203.411.401.303 게임시작후이름에아무것도입력하지않고확인버튼을누르고색채우기를한다. Pass 203.411.401.303.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고색채우기를하고채점한다. Pass 203.411.401.304.411 게임시작후이름에아무것도입력하지않고확인버튼을누르고텍스트를선택하고아무것도입력하지않는다. Pass 203.411.401.304.411.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고텍스트를선택하고아무것도입력하지않고채점한다. Pass 203.411.401.304.412 게임시작후이름에아무것도입력하지않고확인버튼을누르고텍스트를선택하고많이입력한다. Pass 203.411.401.304.412.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고텍스트를선택하고많이입력한후채점한다. Pass 203.411.401.305 게임시작후이름에아무것도입력하지않고확인버튼을누르고스포이드를사용한다. Pass 203.411.401.305.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고스포이드를사용하고채점한다. Pass 203.411.401.306 게임시작후이름에아무것도입력하지않고확인버튼을누르고직선을그린다. Pass 2013-06-07 4
System Testing System Test Result (cont.) 203.411.401.306.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고직선을그리고채점한다. Pass 203.411.401.307.131 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하고원을그린다. Pass 203.411.401.307.131.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하고원을그린후채점한다. Pass 203.411.401.307.132 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하지않고원를그린다. Pass 203.411.401.307.132.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하지않고원을그린후채점한다. Pass 203.411.401.308.131 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하고네모를그린다. Pass 203.411.401.308.131.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하고네모를그린후채점한다. Pass 203.411.401.308.132 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하지않고네모를그린다. Pass 203.411.401.308.132.204 게임시작후이름에아무것도입력하지않고확인버튼을누르고채우기를선택하지않고네모를그린후채점한다. Pass 203.411.402.301 게임시작후이름에아무것도입력하지않고 x버튼을누르고연필로그린다. Pass 203.411.402.302 게임시작후이름에아무것도입력하지않고 x버튼을누르고지우개로지운다. Pass 203.411.402.303 게임시작후이름에아무것도입력하지않고 x버튼을누르고색채우기를한다. Pass 203.411.402.304.411 게임시작후이름에아무것도입력하지않고 x버튼을누르고텍스트를선택하고아무것도입력하지않는다. Pass 203.411.402.304.412 게임시작후이름에아무것도입력하지않고 x버튼을누르고텍스트를선택하고많이입력한다. Pass 203.411.402.305 게임시작후이름에아무것도입력하지않고 x버튼을누르고스포이드를사용한다. Pass 203.411.402.306 게임시작후이름에아무것도입력하지않고 x버튼을누르고직선을그린다. Pass 2013-06-07 5
System Testing System Test Result (cont.) 203.411.402.307.131.308 게임시작후이름에아무것도입력하지않고 x버튼을누르고채우기를선택하고네모를그린다. Pass 203.411.402.307.132.308 게임시작후이름에아무것도입력하지않고 x버튼을누르고채우기를선택하지않고네모를그린다. Pass 203.412.401.301 게임시작후임의의이름을입력하고확인버튼을누르고연필로그린다. Pass 203.412.401.301.204 게임시작후임의의이름을입력하고확인버튼을누르고연필로그리고채점한다. Pass 203.412.401.302 게임시작후임의의이름을입력하고확인버튼을누르고지우개로지운다. Pass 203.412.401.302.204 게임시작후임의의이름을입력하고확인버튼을누르고지우개로지우고채점한다. Pass 203.412.401.303 게임시작후임의의이름을입력하고확인버튼을누르고색채우기를한다. Pass 203.412.401.303.204 게임시작후임의의이름을입력하고확인버튼을누르고색채우기를하고채점한다. Pass 203.412.401.304.411 게임시작후임의의이름을입력하고확인버튼을누르고텍스트를선택하고아무것도입력하지않는다. Pass 203.412.401.304.411.204 게임시작후임의의이름을입력하고확인버튼을누르고텍스트를선택하고아무것도입력하지않고채점한다. Pass 203.412.401.304.412 게임시작후임의의이름을입력하고확인버튼을누르고텍스트를선택하고많이입력한다. Pass 203.412.401.304.412.204 게임시작후임의의이름을입력하고확인버튼을누르고텍스트를선택하고많이입력한후채점한다. Pass 203.412.401.305 게임시작후임의의이름을입력하고확인버튼을누르고스포이드를사용한다. Pass 203.412.401.305.204 게임시작후임의의이름을입력하고확인버튼을누르고스포이드를사용하고채점한다. Pass 203.412.401.306 게임시작후임의의이름을입력하고확인버튼을누르고직선을그린다. Pass 203.412.401.306.204 게임시작후임의의이름을입력하고확인버튼을누르고직선을그리고채점한다. Pass 203.412.401.307.131 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하고원을그린다. Pass 2013-06-07 6
System Testing System Test Result (cont.) 203.412.401.307.131.204 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하고원을그린후채점한다. Pass 203.412.401.307.132 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하지않고원를그린다. Pass 203.412.401.307.132.204 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하지않고원을그린후채점한다. Pass 203.412.401.308.131 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하고네모를그린다. Pass 203.412.401.308.131.204 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하고네모를그린후채점한다. Pass 203.412.401.308.132 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하지않고네모를그린다. Pass 203.412.401.308.132.204 게임시작후임의의이름을입력하고확인버튼을누르고채우기를선택하지않고네모를그린후채점한다. Pass 203.412.402.301 게임시작후임의의이름을입력하고 x버튼을누르고연필로그린다. Pass 203.412.402.302 게임시작후임의의이름을입력하고 x버튼을누르고지우개로지운다. Pass 203.412.402.303 게임시작후임의의이름을입력하고 x버튼을누르고색채우기를한다. Pass 203.412.402.304.411 게임시작후임의의이름을입력하고 x버튼을누르고텍스트를선택하고아무것도입력하지않는다. Pass 203.412.402.304.412 게임시작후임의의이름을입력하고 x버튼을누르고텍스트를선택하고많이입력한다. Pass 203.412.402.305 게임시작후임의의이름을입력하고 x버튼을누르고스포이드를사용한다. Pass 203.412.402.306 게임시작후임의의이름을입력하고 x버튼을누르고직선을그린다. Pass 203.412.402.307.131.308 게임시작후임의의이름을입력하고 x버튼을누르고채우기를선택하고네모를그린다. Pass 203.412.402.307.132.308 게임시작후임의의이름을입력하고 x버튼을누르고채우기를선택하지않고네모를그린다. Pass 203.412.401.204.402 게임시작후임의의이름을입력하고채점후 x버튼을누른다. Pass 203.412.304.412.204.304 게임시작후임의의이름을입력하고텍스트박스를쓰고채점한뒤텍스트박스를누른다. Pass 304.412.203.304 텍스트입력후게임상태에서텍스트박스를누른다. Pass -> 92 개의 Test Case 모두통과 2013-06-07 7
System Testing Brute Force Testing Result #1 크기가큰 jpg 파일을불러오면임의로파일을잘라내는현상 2013-06-07 8
System Testing Brute Force Testing Result #1 (cont.) - 현재보여지는화면만잘라내어저장하는현상으로보여진다. - 아래앞서 < 원본그림 > 은 9999x9999 규격으로저장한파일이며오른쪽 < 저장 1> 과 < 저장 2> 는프로그램을사용 < 원본그림 > 을불러서프로그램창의크기를다르게하여저장기능을수행한것이다. < 저장 1> < 저장 2> < 원본그림 > 2013-06-07 9
System Testing Brute Force Testing Result #2 특정작업을수행하면화면이아래로내려가는현상 ( 특정작업은연필, 지우개, 페인트등을칭함 ) -> 똑같은작업을시행해도발생할때가있고발생하지않을경우가있다. 4 대의노트북에서동일한현상을목격. 정확한원인규명은하지못함. 2013-06-07 10
System Testing Brute Force Testing Result #3 텍스트입력시왼쪽위편에텍스트색상과같은색상의점발생 2013-06-07 11
2013-06-07 12
Sonar + CruiseControl http://docs.codehaus.org/display/sonar/installing+and+configuring+sonar+ant+task 에서 ant-task.jar 파일을받아적절한위치에저장 Sonar 와연계할 ant build file 을다음과같이수정하여연동을함 (build.xml) 06/05/13 13 1
Sonar + CruiseControl (cont.) ant 명령어로 sonar target 을지정하여테스트 성공적으로작동됐을시엔위와같이프로젝트가추가됨 06/05/13 14 1
Sonar + CruiseControl (cont.) CruiseControl 에서모든작업을처리 06/05/13 15 1
Sonar + Jacoco + JUnit jacoco 란 clover 와같은 java code coverage library sonar + clover 도가능하지만 License Key 가없어서 free library 인 jacoco 사용 www.eclemma.org/jacoco 에서다운로드받아서적당한곳에저장 Sonar 와연계할 ant build file 을다음과같이수정하여연동을함 (build.xml) 06/05/13 16 1
Sonar + Jacoco + Junit (cont.) 06/05/13 17 1
Sonar + Jacoco + Junit (cont.) 06/05/13 18 1
Sonar TroubleShooting 위와같은에러가난다면 ant build 파일에서 sonar.binaries 부분이잘못설정된것예제에는 <property name="sonar.binaries" value="build/*.jar" /> 와같이돼있는데이렇게하면위와같이에러가난다. 그냥폴더명만써주면해결. 위와같은경우엔 target jacoco 를설정했음에도위와같이잘못된 build output directory 를찾는다면 ant build 파일에서 sonar 와관련된 property 를맨위에올려두고선처리를하도록하면정상적으로찾아줌 06/05/13 19 1
TroubleShooting (Cont.) Sonar TroubleShooting (cont.) 위에러는 ant build 에서해당소스코드의 encoding 을설정하지않았을때발생하는오류 위와같은 property 를넣어서처리를해주면해결됨 <sonar:sonar />, <jacoco:coverage /> 를찾지못한다면 namespace 를설정하지않아서생기는문제이다. 다음과같이수정하면해결됨 <sonar:sonar xmlns:sonar= antlib:org.sonar.ant /> <jacoco:coverage xmlns:jacoco= antlib:org.jacoco.ant /> 06/05/13 20 2
Sonar - Dashboard 2013-06-07 21
Sonar Dashboard(cont.) Lines of code 해당프로젝트의총라인수 Statements : Number of statements as defined in the Java Language Specification but without block definitions (ex: if, while, etc.) Classes 클래스의개수 Number of methods/functions. Accessors (ex: getter, setter) 2013-06-07 22
Sonar Dashboard(cont.) Comments 주석의비율및라인수 Documented API 는라이브러리상에선언된주석을의미한다 Duplication 중복된라인수또는블록수 해당중복이발생한 file 의개수 2013-06-07 23
Sonar Dashboard(cont.) Example of duplication File: Interface.java Class: interface Method: public void DrawShapeReleased(MouseEvent arg0) 중복이발생하는부분을줄여서라인수를줄이고효율을높일수있지만, 가독성이떨어져유지보수에어려움이발생할수있다. Trade-off 를고려하여적절한대안을제시할수있다. 2013-06-07 24
SONAR Dashboard(cont.) Complexity Keyword 에따라 complexity 가증가한다.(ex: if, for, while, case, catch, throw, return, &&,,?) Method, class, file 의평균 complexity 를출력한다. 막대그래프는복잡도에따른 method 또는 file 이나 class 의분포도를보여준다. 2013-06-07 25
Sonar Dashboard(cont.) Example of Complexity File: interface.java Complexity : 165 Complexity/method : 4.9 2013-06-07 26
Sonar Dashboard(cont.) Violations 주로 code quality 와관련된내용들이다. 각항목들을 severity 에따라 5 개의레벨로나누어보여준다. 각항목마다 severity 설정을바꾸어줄수있으며 comment 를달아줄수도있다. 2013-06-07 27
Sonar Dashboard(cont.) Example of Violations 해당 violation 의상태에따라 comment, assign, false-positive 등과같은피드백을줄수있다. False-positive 는해당결과가잘못나왔을경우에대한설명을쓸수있다. Change severity 는 severity 를변경하고왜변경하였는지에대한설명을쓸수있다. 2013-06-07 28
Sonar Dashboard(cont.) Coverage Unit test 결과를통한 coverage 를나타낸다. Clover 나 Jacoco 와같은 coverage 측정툴과같이사용하여측정한다. Unit test success 는 unit test case 의성공률을나타낸다. 다음 coverage 분석을통해해당팀의 unit test coverage 가현저히낮은것을확인할수있다. 2013-06-07 29
Sonar Dashboard(cont.) Example of coverage 오른쪽상단에각파일마다 coverage 를나타낸다. 좌측라인에초록색라인이있는부분은 unit test 가거친부분이고, 빨간색으로나타난부분은 unit test 를거치지않은부분이다. 2013-06-07 30
Sonar Hotspot Violation, duplication, complexity 등과같이이슈가되는부분에서수치가높게나타나있는순서대로내림차순으로나타내어보여준다. 2013-06-07 31
Sonar Quality Profiles Setting -> quality profiles 를선택하였을때나타나는페이지다. 모든 violation 에대해관리할수있으며, severity 를바꾸어주거나해당 violation 을체크할것인지안할것인지에대해선택할수있다. 좀더확장하여, 문자열에대한정규식이나묵인할개수에대한설정도바꿀수있다. 2013-06-07 32
Eclipse TPTP 도형그리기 2013-06-07 33
Eclipse TPTP 도형그리기 (cont.) 2013-06-07 34
Eclipse TPTP 도형그리기 (cont.) 2013-06-07 35
Eclipse TPTP 연필그리기 ` 2013-06-07 36
Eclipse TPTP 연필그리기 (cont.) 마우스 press 와 dragged 부분만정의되어있고 release 부분은정의되어있지않음 2013-06-07 37
Eclipse TPTP 게임시작하기 ShowSketch 이후에 getsketch 가시작됨 2013-06-07 38
Eclipse TPTP 게임시작하기 (cont.) 2013-06-07 39
Eclipse TPTP 채점하기 2013-06-07 40
Eclipse TPTP 채점하기 (cont.) 2013-06-07 41
Eclipse TPTP 채점하기 (cont.) 2013-06-07 42
Reference Reference 2013-06-07 43
Reference Address Sonar http://www.sonarsource.org/ http://docs.codehaus.org/ TPTP http://antop.tistory.com/135 http://javacan.tistory.com/entry/125 2013-06-07 44
Q & A Q & A 2013-06-07 45