Static Analysis Report for Team 7 Project Team Team 7 Team Information 컴퓨터공학과 201111341 김성민컴퓨터공학과 201111345 김종우컴퓨터공학과 201211356 송원종
1 Code Scroll 2 Sonar Qube 3 PMD
1. CodeScroller CodeScroll Code Inspector 규칙규칙설명 CERT_Secure_Coding_Standard Java Platform standard edition, 6,7에대한시큐어프로그래밍을위한 Rule과 recommendation CODESCROLL_JAVA_RULES 일반적인자바프로그램에서지켜야할규칙과권고들 Sun_Code_Conventions_for_Java 파일이름,. 파일구성, 들여쓰기, 주석, 선언, 문장, 이름규칙, 프로그래밍 practice등 Sun에서따르기를권고하는표준코딩가이드라인 CodeScroll Code Inspector Violation 규칙 규칙모음 위배수 규칙설명 Sun_24 Sun 82 숫자상수사용금지 Sun_08 Sun 40 블록의시작부분에서만선언검사 Sun_16 Sun 38 메서드선언사이를빈칸으로구분 Sun_20 Sun 34 필드이름검사 Sun_19 Sun 32 메서드이름검사
Sun_04 Sun 14 파일에 package 선언이있는지검사 Sun_06 Sun 14 소스라인길이검사 Sun_03 Sun 12 소스파일시작의 C 스타일주석검사 Sun_14 Sun 10 한줄에한문장만존재하는지검사 Sun_15 Sun 10 class나 interface 선언사이를빈칸으로구분 Sun_10 Sun 7 지역변수선언시초기화검사 Sun_17 Sun 7 메서드내부의지역변수선언부와실행문장사이를빈줄로구분 Sun_26 Sun 5 괄호안의수식에연산자혼용금지 Sun_05 Sun 3 클래스또는인터페이스에서멤버의선언순서검사 Sun_13 Sun 1 Switch 문에 default case가존재하는지검사 Sun_09 Sun 1 필드 hide 제한 MET05-J CERT_SECURE 73 생성자에서 override 가능한메서드를호출하면안된다 OBJ04-J CERT_SECURE 27 mutable 클래스 (regular expression으로지정한이름의클래스. Default: all) 는신뢰할수없는코드에객체를안전하게전달하기위한복사기능을제공해야한다 OBJ10-J CERT_SECURE 14 public static nonfinal 멤버를사용하면안된다 OBJ01-J CERT_SECURE 14 데이터멤버 (non-static, non-final 필드 ) 는 private 으로선언하라. SER05-J CERT_SECURE 13 내부 (inner) 클래스들의인스턴스를직렬화하지마라. ERR02-J CERT_SECURE 2 로그를기록할때는예외가발생하지않도록하라 JAVA_72 CODESROLL_JAVA 70 메서드의설명주석이있어야함 JAVA_71 CODESROLL_JAVA 14 클래스의설명주석이있어야함 JAVA_49 CODESROLL_JAVA 13 static, local, anonymous가아닌내부클래스사용금지 JAVA_68 CODESROLL_JAVA 3 * 을이용한 import 구문의사용금지 JAVA_64 CODESROLL_JAVA 2 반복문안에서 String concatenation assignmet 연산자의사용금지 JAVA_61 CODESROLL_JAVA 1 switch 구문안의 default 검사 JAVA_70 CODESROLL_JAVA 1 변수 hiding 금지 Inspection Violation Summation Rules 규칙모음 포함된 위배수 무시된 설명 규칙수 위배수 Sun_Code_Conventions_for_Java 27 310 0 파일이름, 파일구성, 들여쓰기, 주석, 선언, 문장, 이름규칙, 프로그래밍 practice등 Sun에서
따르기를권고하는표준코딩가이드라인 CERT_Secure_Coding_Standard 99 143 0 Java Platform standard edition 6,7에대한시큐어프로그래밍을위한 Rule과 recommendation 제시 CODESCROLL_JAVA_RULES 72 104 0 일반적인자바프로그램에서지켜야할규칙과권고들 Total: 557 = CERT(143) + CODESCROLL(104) + SUN(310) Inspection Violation Summation Source Files 소스 위배 무시된 위배 *RCR **RVD 파일경로 수 위배수 규칙수 (%) Mainview.java 225 0 19 90.4 0.52 C:\Users\user\git\SM4\src\main\java Controller.java 85 0 15 92.42 0.46 C:\Users\user\git\SM4\src\main\java Payback.java 66 0 16 91.92 0.73 C:\Users\user\git\SM4\src\main\java Bank.java 43 0 17 91.41 0.54 C:\Users\user\git\SM4\src\main\java Account.java 28 0 10 94.95 1.03 C:\Users\user\git\SM4\src\main\java Commission.java 23 0 10 94.95 0.74 C:\Users\user\git\SM4\src\main\java PrintStatement.java 20 0 13 93.43 0.68 C:\Users\user\git\SM4\src\main\java Send.java 17 0 12 93.94 1.06 C:\Users\user\git\SM4\src\main\java CheckRemain.java 14 0 9 95.45 0.87 C:\Users\user\git\SM4\src\main\java Withdraw.java 11 0 9 95.45 0.68 C:\Users\user\git\SM4\src\main\java Deposit.java 9 0 07 96.46 0.81 C:\Users\user\git\SM4\src\main\java LibraryTest.java 6 0 6 96.97 0.75 C:\Users\user\git\SM4\src\Test\java Main.java 6 0 6 96.97 0.75 C:\Users\user\git\SM4\src\main\java Library.java 4 0 4 97.98 0.8 C:\Users\user\git\SM4\src\main\java 2. SonarQube Bugs & Weakness Bugs Weakness New Bugs New Weakness 3 35 3 35 Stink Codes Liability Stinking Codes New Liability New Stinking
Codes 8 Days 332 7 Days 329 Coverage Coverage Coverage on new Code 0.0 % 0.0 % Code reduplication Code Reduplication Duplicated blocks Code Reduplication New Code lines 2.7 % 2 2.7 % 1.3K New Code Lines 3. PMD Rule Basic rulesets/basic.xml Naming rulesets/naming.xml Unused code rulesets/unusedcode.xml Design rulesets/design.xml Import statements rulesets/imports.xml JUnit tests rulesets/junit.xml Strings rulesets/string.xml Description 대부분의개발자들이동의하는규칙 : catch 블록들은비어있어서는안되고, equals() 를오버라이딩할때마다 hashcode() 를오버라이드한다. 표준자바네이밍규약을위한테스트 : 변수이름들은너무짧아서는안된다 ; 메소드이름은너무길어서는안된다. 클래스이름은대문자로시작해야하고, 메소드와필드이름들은소문자로시작해야한다. 결코읽히지않은프라이빗필드와로컬변수, 접근할수없는문장, 결코호출되지않는프라이빗메소드등을찾기다양한좋은디자인원리체크, 이를테면 : switch 문장은 default 블록을갖고있어야하고, 심하게중첩된 if 블록은피해야하고, 매개변수들은재할당되어서는안되며, 더블 (double) 이동일함 (equality) 과비교되어서도안된다임포트문장에대한작은문제들점검. 같은클래스를두번반입하는것이나 java.lang 에서클래스를임포팅하는것등테스트케이스와테스트메소드관련특정문제검색. 메소드이름의정확한스펠링과 suite() 메소드가정적이고퍼블릭인지여부스트링관련작업을할때발생하는일반적인문제들규명. 스트링리터럴중복, String 구조체호출, String 객체에 tostring() 호출하기등.
Braces rulesets/braces.xml Code size rulesets/codesize.xml Javabeans for, if, while, else 문장이괄호를사용하는지여부검사. 과도하게긴메소드, 너무많은메소드를가진클래스, 리팩토링에대한유사한후보들을위한테스트. 직렬화될수없는 bean 클래스같이 JavaBeans 코딩규약을위배하는 JavaBeans 컴포넌트검사. rulesets/javabeans.xml Finalizers finalize() 메소드는 자바에서 일반적인 것은 아니기때문에사용법에대한규칙이비교적 익숙하지 않다. 이 그룹의 검사는 finalize() 메소드 관련한 다양한 문제들을 찾는다. 이를 테면, 비어있는 finalizer, 다른메소드를호출하는 finalize() 메소드 finalize() 로의호출등이그것이다 Clone rulesets/clone.xml Coupling rulesets/coupling.xml Strict exceptions rulesets/strictexception.xml Controversial rulesets/controversial.xml Logging rulesets/logging-java.xml clone() 메소드에대한규칙 : clone() 을오버라이드하는클래스는 Cloneable 을구현해야하고, clone() 메소드는 super.clone() 을호출해야하며,clone() 메소드는실제로던지지않더라도 CloneNotSupportedException 을던지도록선언되어야한다. 클래스들간과도한커플링표시검색. 지나치게많은임포트, supertype 또는인터페이스가충분한곳에서 subclass 유형사용하기, 너무적은필드, 변수, 클래스내의리턴유형등. 예외테스트 : 메소드는 java.lang.exception 을던지도록선언되어서는안되고, 예외는플로우제어에사용되어서는안되며, Throwable 은잡혀서는안된다. 일부 PMD 규칙들은유능한자바프로그래머가받아들일수있는것들이다. 하지만어떤것은논쟁의여지가충분하다. 이규칙세트에는좀더의심스러운검사들이포함되어있다. 변수에 null 할당하기, 메소드에서온다중의리턴포인트 sun 패키지에서임포팅등이포함된다 java.util.logging.logger 를위험하게사용하는경우검색 : 끝나지않고정적이지않은 logger 와한클래스에한개이상의 logger 등