SW Verification 201211387 하헌규 201211337 김재현 201211354 성현구 201211369 이병찬
목차 Specification Review (2nd) System Test (2nd) Brute Force Test Category Partitioning Test Pairwise Combination Test Result & CTIP Static Analysis JDepend Code Scroll Findbugs SonarCloud 18-1 소프트웨어검증 T2 2
Test Model 2018 년 6 월 1 일업로드된파일을기준으로진행 ( 이후 SMA 팀의지속적인변경발생 ) 18-1 소프트웨어검증 T2 3
Specification Review 전체적인문서완성도우수 미비했던형식정의가해결되고명세됨 수수료에대한명세를표기할수있는문서를찾지못한듯 18-1 소프트웨어검증 T2 4
System Test - Brute Force Test 동일한테스트결과 Pass 의비율이 65% 에서 91% 로증가 18-1 소프트웨어검증 T2 5
System Test - Category Partitioning Test 18-1 소프트웨어검증 T2 6
System Test - Category Partitioning Test 1,813,985,280,000 7,776,025 [Error] 43,241 [Single][Error] 89 [Single][Error][Property] 18-1 소프트웨어검증 T2 7
System Test - Category Partitioning Test 테스트결과 Pass 의비율이 80% 에서 91% 로증가 18-1 소프트웨어검증 T2 8
System Test - Pairwise Test 테스트결과 Pass 의비율이 78% 에서 94% 로증가 18-1 소프트웨어검증 T2 9
System Test 오류 복권당첨 : 복권의주차형식을 0 이상인정수로정의하였으나 0 및현재존재하지않는주차를정상적인형식으로인식하고, 복권번호의형식도 1~45까지로정의되었으나 0을정상적인형식으로인식한다. 날짜 : 경계값을무시한다 (ex. 각날짜의 00시 00분을무시한다 ) 메시지 : Invalid와 Incorrect에따른행동이일관적이지않다. 언어변경 : 언어변경시 Admin이로그아웃된다. 18-1 소프트웨어검증 T2 10
System Test - Result System Test 결과 18-1 소프트웨어검증 T2 11
System Test - Result Brute Force Test : 65%(28/43) 91%(39/43) Category Partitioning Test : 80%(71/88) 91%(81/89) Pairwise Combination Test : 74% (25/32) 94%(32/34) 18-1 소프트웨어검증 T2 12
System Test in CTIP 18-1 소프트웨어검증 T2 13
Static Analysis - JDepend JDepend Summary 18-1 소프트웨어검증 T2 14
Static Analysis - JDepend 18-1 소프트웨어검증 T2 15
Static Analysis - JDepend 추상화된클래스안정성이높은것이권장된다. = Ce 가적고 Ca 는많은편이좋다. = 다른클래스의영향을적게받는것이좋다. 구체적인클래스안정성이낮은것이권장된다. = Ce 가많고 Ca 는적은편이좋다. = 다른클래스에영향을적게미치는것이좋다. 18-1 소프트웨어검증 T2 16
Static Analysis - JDepend Instability Abstraction Abstraction Instability Metrics 18-1 소프트웨어검증 T2 17
Static Analysis - JDepend 1/(2+1) = 0.33 D=1-(A+I)=0.67 5/(1+5) = 0.83 D=1-(A+I)=0.17 com.swad.cppatm 패키지가더이상적 com.swad.cppatm.exception 패키지는추상화하거나 Instability 를높여야함 18-1 소프트웨어검증 T2 18
Static Analysis - JDepend - 상호의존적인관계 - 재사용성을저해함 - 코드변경시도미노효과발생가능 - 메모리누수발생가능 18-1 소프트웨어검증 T2 19
Static Analysis Code Scroll 3874 개규칙위반발견 18-1 소프트웨어검증 T2 20
Static Analysis Code Scroll EGOV JAVA SUN CERT_SECURE_CODING EGOV_01_EMPTYCATCHBLOCK JAVA_44 SUN_13 ERROR 매우높음 EGOV_12_SWITCHSTMTSSHOUDHAVEDEFAULT JAVA_65 SUN_10 ERROR00-J 높음 EGOV_14_FINALFIELDCOULDBESTATIC JAVA_61 SUN_26 ERROR02-J 낮음 EGOV_25_SYSTEMPRINTLN JAVA_63 SUN_27 ERROR08-J 매우낮음 EGOV_26_VARIABLENAMINGCONVENTIONS JAVA_64 SUN_24 NUM EGOV_28_AVOIDARRAYLOOPS JAVA_71 SUN_22 NUM02-J EGOV_33_STRINGTOSTRING JAVA_72 SUN_20 NUM06-J EGOV_37_UNUSEDPRIVATEFIELD JAVA_68 SUN_19 VNA EGOV_39_UNUSEDFORMALPARAMTER SUN_17 VNA04-J SUN_14 OBJ SUN_03 OBJ05-J SUN_05 OBJ01-J SUN_06 OBJ03-J SUN_07 OBJ04-J SUN_08 META SUN_11 META04-J META05-J 18-1 소프트웨어검증 T2 21
Static Analysis - Findbugs Summary 18-1 소프트웨어검증 T2 22
Static Analysis - Findbugs 번호 탐지유형 사례및설명 1 Bad practice 클래스명명규칙. Null 처리실수등개발자의나쁜습관을탐지 2 Correctness 잘못된상수, 무의미한메소드호출등문제의소지가있는코드를탐지 3 Dodgy code int의곱셈결과를 long으로변환하는등부정확하거나오류를발생시킬수있는코드를탐지 4 Experimental 메소드에서생성된 stream이나리소스가해제하지못한코드를탐지 5 Internatinalization Default 인코딩을지정하지않은경우등지역특성을고려하지않은코드탐지 6 Maclicious codevulnerability 보안코드에취약한가변적인배열이나콜렉션, Hashtable 탐지 7 Multithreaded correctness 멀티쓰레드에안전하지않은객체사용등을탐지 8 Performance 미사용필드, 비효율적객체생성등성능에영향을주는코드를탐지 9 Security CSS, DB 패드워드누락등보안에취약한코드를탐지 18-1 소프트웨어검증 T2 23
Static Analysis - Findbugs DE DE_MIGHT_IGNORE: Method might ignore exception 예외처리를하지않음. 빈 catch 절이존재. OS RV SW OS_OPEN_STREAM: Method may fail to close stream stream close 하지않음. OS_OPEN_STREAM_EXCEPTION_PATH: Method may fail to close st stream 예외처리를하지않음 ream on exception RV_RETURN_VALUE_IGNORED_BAD_PRACTICE: Method ignores ex 확인되지않은값을리턴함. ceptional return value SW_SWING_METHODS_INVOKED_IN_SWING_THREAD: Certain swin Swing thread를호출해야함. g methods needs to be invoked in Swing thread RpC RpC_REPEATED_CONDITIONAL_TEST: Repeated conditional tests 조건부테스트가중복수행됨. Dm DM_STRING_TOSTRING: Method invokes tostring() method on a Str ing DM_DEFAULT_ENCODING: Reliance on default encoding String 이 tostring() 을사용할필요가없음. byte to string or string to byte 변환을수행할때 Charset 객체를명시적으로지정해야함. EI EI_EXPOSE_REP: May expose internal representation by returning reference to mutable object 객체의필드중하나에저장된변경가능한객체값에대한참조를반환하면객체의내부표현이노출됨. MS MS_SHOULD_BE_FINAL: Field isn't final but should be static 변수가 public 이라서위험. Final 을명시하여야함. 18-1 소프트웨어검증 T2 24
Static Analysis - Findbugs LI LI_LAZY_INIT_STATIC: Incorrect lazy initialization of static field multi-thread 환경에서초기화를보장하지못함. SIC DB SIC_INNER_SHOULD_BE_STATIC_ANON: Could be refactored into a 내부클래스이지만, 이를만든객체에대한내부참조를사용하 named static inner class 지않음. DB_DUPLICATE_SWITCH_CLAUSES: Method uses the same code fo 코드가중복사용됨. r two switch clauses PZLA_PREFER_ZERO_LENGTH_ARRAYS: Consider returning a zero PZLA length array rather than null null 을사용하는것이적절한지검토해봐야함. 0 을사용하는게나은경우가있다. REC REC_CATCH_EXCEPTION: Exception is caught when Exception is no t thrown 하나의 catch 로여러예외를처리하고있음. Throw 하지않은 Exception 까지 catch 하려함. SF UwF SF_SWITCH_NO_DEFAULT: Switch statement found where default case is missing SF_SWITCH_FALLTHROUGH: Switch statement found where one ca se falls through to the next case UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR: Field not initiali zed in constructor but dereferenced without null check swtich 문에 default case 가없음. swtich 문에특정 case 가수행후, 다음 case 로 fall though 중임. 생성시초기화되지않은값이 null check 없이참조해제됨. 18-1 소프트웨어검증 T2 25
Static Analysis - SonarCloud Summary 18-1 소프트웨어검증 T2 26
Static Analysis - Cyclomatic Complexity java 파일별 Cyclomatic Complexity 18-1 소프트웨어검증 T2 27
Static Analysis JAVA_44 : printstacktrace 메서드가사용됨. 시스템내부데이터나디버깅관련정보가공개되면공격의빌미가될수있다. printstacktrace 메서드를사용하지말아야한다. 18-1 소프트웨어검증 T2 28
Static Analysis OBJ05-J : PUBLIC 메서드에서 PRIVATE 필드리턴시레퍼런스를그대로리턴한다. 객체내부의상태를외부에서수정하도록해서는안되므로 MUTABLE 멤버에대한레퍼런스를외부에노출해서는안된다. CLONE 을리턴한다 18-1 소프트웨어검증 T2 29
Static Analysis EGOV_01_EMPTYCATCHBLOCK / JAVA_65 / ERROR00-J / SonarCloud / Findbugs DE : 빈 CATCH 절이존재한다. 의도한것이라면 COMMENT 로표시하는것을권장한다. CATCH BLOCK 에반드시예외를다루는코드를작성한다. 18-1 소프트웨어검증 T2 30
Static Analysis EGOV_12_SWITCHSTMTSSHOULDHAVEDEFAULT / JAVA_61 / SUN_13 / SonarCloud / Findbugs SF : DEFAULT 없는 SWITCH 구문사용을금지한다. SWITCH 구문에반드시 DEFAULT LABEL 이있어야한다. 18-1 소프트웨어검증 T2 31
Static Analysis EGOV_14_FINALFIELDCOULDBESTATIC / JAVA_63 / SonarCloud / Findbugs MS : 클래스의 FINAL 멤버필드가 STATIC 이아니다. FINAL FIELD 를 STATIC 으로전환해서 OVERHEAD 를줄인다. 18-1 소프트웨어검증 T2 32
Static Analysis EGOV_25_SYSTEMPRINTLN / SonarCloud : PRINTLN 메서드가사용되었다. 전용로거를사용할것을권장한다. 18-1 소프트웨어검증 T2 33
Static Analysis EGOV_33_STRINGTOSTRING / SonarCloud / Findbugs DM : TOSTRING 메서드가사용되었다. 불필요한 TOSTRING 메서드사용을금지한다. STRING 객체에서 TOSTRING 함수를사용하는것은불필요하므로해당코드를제거한다. 18-1 소프트웨어검증 T2 34
Static Analysis SonarCloud / Findbugs OS : Buffer 를 Close 하지않았다. Buffer 를 Close 해야한다. 18-1 소프트웨어검증 T2 35
Static Analysis SonarCloud / Findbugs RpC : 조건부테스트가중복수행되었다. 조건부를하나로합친다. 18-1 소프트웨어검증 T2 36
Static Analysis ERROR08-J / SonarCloud / Findbugs REC : 하나의 catch 로여러개의예외를처리하고있다. 여러가지예외를명시해야한다. 18-1 소프트웨어검증 T2 37
Static Analysis SonarCloud / Findbugs SF : case 문에 break; 가없다. break; 를추가한다. 18-1 소프트웨어검증 T2 38
Static Analysis in CTIP CTIP 환경에 Issue 등록 18-1 소프트웨어검증 T2 39
Static Analysis in CTIP Project Management 18-1 소프트웨어검증 T2 40
감사합니다 :) 18-1 소프트웨어검증 T2 41