본문 바로가기

테스팅

2022년 테스팅 사례 공유 - CMS 솔루션 소스코드 정적 분석 테스팅 지원

2022년 고품질 SW개발 컨설팅 및 테스팅 지원 사업 테스팅 사례 공유 합니다.

(재)전주정보문화산업진흥원의 SW품질역량센터에서는

2011년 부터 전라북도 ICT/SW기업을 대상으로 품질 향상을 위한 컨설팅 및 테스팅을 지원하고 있습니다.

본 테스팅은 관공서에 납품하는 제품의 소스코드 품질 정적 분석을 지원한 사례입니다.

 

목차

     

    1. 테스팅 개요

    - 기업명 : 000 소프트

    - 기업주소 : 전라북도 전주시 ***

    - 테스팅 내용 :  CMS 솔루션 소스코드 정적 분석 테스팅 지원

    - 테스팅 목적 : 기업 개발 제품의 소스코드에 대한 품질 테스트를 통한 품질 진단 및 가이드를 진행하고, 품질을 강화를 통해서 고객에게 고품질 제품을 전달하기 위한 테스팅을 목표

     

    2. 테스팅 일정

    수 행 일 정 컨설팅 내용 담 당 자
    2022324() 테스팅 요청 기업담당자
    2022329() 신청서 접수 테스터(JICA)
    202241() - 제품 확인
    - 스패로우 클라이언트 프로그램 설치
    - 스패로우 사용법 가이드 등
    기업담당자
    테스터(JICA)
    2022.5.9.
    ~
    2022.6.22.
    테스팅 기업담당자
    테스터(JICA)
    2022.6.27. 테스팅 보고서 작성 및 기업 제공 테스터(JICA)

     

    3. 테스팅 결과 요약

    본 테스팅의 지원 내용은 다음과 같습니다.

     

    1) 시험 환경

    No 구 분 기본정보
    1 사용 도구 SPARROW QCE
    2 프로그래밍언어 자바
    3 테스트 서버 OS Windows Server 2009
    4 분석 유형 소스코드 보안 약점

     

    2) 시험 장소

    신청기업 내 사무실

     

    3) 점검 항목

    점검 항목은 분석하여 검출하는 기준으로서 품질 (Quality) 특성 기반으로 35개 항목을 설정함

    순번 분류 체커 위험도 항목 내용
    1 Quality NULL_RETURN_USR 1 사용자가 작성한 library들 중에 널을 반환할 가능성이 있는 메소드들로부터 값을 특정 변수에 할당한 뒤, 이 변수의 널 확인을 하지 않고 바로 역참조하는 경우에 발생합니다.
    2 Quality DIVIDE_BY_ZERO 1 0으로 나눗셈을 수행할 때 발생합니다.
    3 Quality FORBIDDEN.TABLE.SQL 1 사용자가 옵션에서 지정한 테이블의 사용을 검출합니다.지정된 테이블을 사용하지 않아야 합니다.
    4 Quality FORBIDDEN.TABLE_COLUMN.SQL 1 사용이 금해진 테이블의 컴럼을 사용하지 말아야 합니다.
    5 Quality FORWARD_NULL 1 레퍼런스 변수의 널 확인을 하고 나서, 나중에 역참조되는 경우 발생합니다.
    6 Quality MISMATCH.COLUMN_VALUE.INSERT.SQL 1 INSERT 쿼리문에서 테이블 컬럼의 수와 입력의 수가 일치하지 않는 경우를 검출합니다. 컬럼의 수와 입력의 수를 일치시켜야 합니다.
    7 Quality MISSING.WHERE.DELETE_UPDATE.SQL 1 DELETE 또는 UPDATE 쿼리문에서 WHERE 절을 포함하지 않은 경우를 검출합니다. WHERE 절을 포함하는 것을 권장합니다.
    8 Quality MISSING.WHERE.SELECT.SQL 1 SELECT 문에서 WHERE 절이 존재하지 않는 경우를 검출합니다.
    9 Quality NULL_RETURN 1 널 값이 반환되는 경우 널 확인을 하지 않고 역참조하는 경우 발생합니다.
    10 Quality NULL_RETURN_STD 1 Java standard library들 중에 널을 반환할 가능성이 있는 메소드들로부터 값을 특정 변수에 할당한 뒤, 이 변수의 널 확인을 하지 않고 바로 역참조하는 경우에 발생합니다.
    11 Quality RESOURCE_LEAK 1 특정 자원이 할당이 되었지만, JVM의 가비지콜렉터에 의해서 빠르게 자원 회수가 되지 않을 경우에 발생합니다.
    12 Quality UNCHECKED_NULL 1 널 레퍼런스와 비교한 적이 있는 레퍼런스를 이후 비교 없이 사용 할 경우 발생합니다.
    13 Quality BAD_OPERATOR.ASSIGNMENT_IN_COND 1 조건 문에 비교 연산자(== )를 사용하는 곳에 대신 대입 연산자(= )을 사용한 경우를 검출합니다.
    14 Quality INCORRECT_SERIAL_PERSISTENT_FIELDS_MODIFIER 2 serialPersistentFields를 정적 private final로 선언 하지 않았을 경우를 검출합니다.
    15 Quality DO_NOT_USE_NOTIFY 2 notifiy()를 직접 호출하면 어떤 스레드를 깨울지 불명확하므로 사용하지 않는 것을 권장합니다.
    16 Quality DIRECT_MANAGEMENT_OF_CONNECTIONS 2 연결 직접 관리 DriverManager.getConnection을 호출하는 경우를 검출합니다.
    17 Quality IMPROPER_CHECK_FOR_UNUSUAL_OR_EXCEPTIONAL_CONDITION 2 프로그램 수행 중에 함수의 결과 값에 대한 적절한 처리 또는 예외상황에 대한 조건을 적절하게 검사하지 않을 경우, 예기치 않은 문제를 야기 할 수 있습니다.
    18 Quality DIRECT_USE_OF_THREADS 2 웹 응용프로그램에서 직접적으로 스레드를 사용할 경우 관리가 어렵고, 응용프로그램 container의 동작에 예기치 않은 영향을 미칠 수 있습니다.
    19 Quality DIRECT_USE_OF_SOCKETS 2 소켓을 직접 사용하는 경우를 검출합니다.
    20 Quality DOUBLE_CHECKED_LOCKING 2 중복 검사된 잠금(double-check locking)은 프로그램의 효율성을 높이기 위해 사용되지만, 의도한 대로 동작하지 않는다.
    21 Quality USE_OF_SOCKETS 2 EJB 규격에는 bean내부에서 서버 소켓(ServerSocket)을 직접 사용하여 클라이언트에 서비스를 제공하는 것을 금지하고 있습니다.
    22 Quality USING_SYSTEM_EXIT 2 VM을 종료시키는 System.exit()과 같은 메소드를 호출하는 경우 Denial of Service(DOS) 공격의 진입로를 만들어 줍니다.
    23 Quality RACE_CONDITION_STATIC_DATABASE_CONNECTION 2 Database Connection 객체를 정적으로 선언한 경우를 검출합니다.
    24 Quality SET_STATIC_IN_NON_STATIC 2 정적 필드가 정적이 아닌 메소드에서 값이 변경되는 경우를 검출합니다.
    25 Quality BAD_EQUALITY_EXPRESSION.FLOAT 3 부동소수점을 비교할 때 '==' 연산을 수행할 경우를 검출합니다.
    26 Quality UNNOTIFIED_OBJECT 3 클래스에서 wait메소드를 호출만 하였을 경우를 검출합니다. 클래스 내에서 notifyAll메소드와 같이 wait 메소드를 호출해야 합니다.
    27 Quality MISSING_BREAK_IN_CASE 3 switch 구문의 모든 케이스 블록 안에 최종적으로 break 구문이 존재하지 않는 경우를 검출합니다.
    28 Quality MISSING_SYNCHRONIZED_FOR_OVERRIDING 3 Synchronized 메소드를 오버라이딩 할 때 synchronized 제어자를 사용하지 않을 경우를 검출합니다.
    29 Quality NEVER_USE_RAW_TYPE 3 원시 타입을 사용하였을 경우를 검출 합니다.
    30 Quality ANDROID_GRANT_URI_PERMISSIONS 3 암묵적 intent 를 사용하면서 addFlags() 메소드로 permission 을 부여할 경우를 검출 합니다.
    31 Quality UNRELEASED_LOCK 3 메소드 내에서 잠금 객체를 사용하여 잠금을 했지만 해당 메소드 내에서 잠금 해제를 해주지 않았을 경우를 검출합니다.
    32 Quality BAD_OPERATOR.MULTIPLE_VARIABLE_ASSIGNMENT 3 하나의 값을 두 개 이상의 변수에 대입하는 경우를 검출합니다.
    33 Quality DO_NOT_USE_SHIFT_ON_SIGNED_VALUE 3 부호가 있는 타입들을 대상으로 시프트(shift) 연산을 수행한 경우를 검출합니다.
    34 Quality FORBIDDEN.EDIT.NATIVE_OBJECT_PROTOTYPE.JS 3 브라우저 네이티브객체의 프로퍼티를 수정할 경우 검출합니다.
    35 Quality TRANSACTION.SYNC.TOBE.JS 3 동기방식으로 트랜잭션 함수를 사용하였습니다.

     

    [6] 검출 항목

     

    4) 결과 요약

    본 소스코드 품질 테스팅은 ‘0000 솔루션을 대상으로 진행하였음. 품질에 대한 영향도 평가 기준에 따라 주의결함 주의보 확인.7] 영향도 평가 기준

    영향도 설 명
    위험 Level 1 ~ Level5 까지 21개 이상 결함이 발생할 경우. 시스템에 잠재적인 이슈로 인해 추후에 비즈니스 영역에 피해를 미칠 위험성이 존재
    주의 Level 1 ~ Level5 까지 10개 이상 ~ 21개 이내 결함이 발생할 경우. 시스템에 잠재적인 이슈로 인해 추후에 결함이 발생할 수 있는 상태
    안전 Level 1 ~ Level5 까지 10개 이내 결함이 발생할 경우. 서비스에 큰 영향을 미치지 않고 중요하지 않은 품질 정보가 노출된 상태

     

    소스코드 통계

    - 소스 파일 개수 39, 빌드 라인 수 24,646라인

    ....

    Top 10 이슈 검출 파일

    ....

    체커 별 진단 결과

    ....

    체커 상세 진단

    진단(가이드) 내용

    해결 방법 제공

     

    진단 보고서 제공