2022년 고품질 SW개발 컨설팅 및 테스팅 지원 사업 테스팅 사례 공유 합니다.
(재)전주정보문화산업진흥원의 SW품질역량센터에서는
2011년 부터 전라북도 ICT/SW기업을 대상으로 품질 향상을 위한 컨설팅 및 테스팅을 지원하고 있습니다.
본 테스팅은 관공서에 납품하는 제품의 소스코드 품질 정적 분석을 지원한 사례입니다.
목차
1. 테스팅 개요
- 기업명 : 000 소프트
- 기업주소 : 전라북도 전주시 ***
- 테스팅 내용 : CMS 솔루션 소스코드 정적 분석 테스팅 지원
- 테스팅 목적 : 기업 개발 제품의 소스코드에 대한 품질 테스트를 통한 품질 진단 및 가이드를 진행하고, 품질을 강화를 통해서 고객에게 고품질 제품을 전달하기 위한 테스팅을 목표
2. 테스팅 일정
수 행 일 정 | 컨설팅 내용 | 담 당 자 |
2022년 3월 24일(목) | 테스팅 요청 | 기업담당자 |
2022년 3월 29일(화) | 신청서 접수 | 테스터(JICA) |
2022년 4월 1일(금) | - 제품 확인 - 스패로우 클라이언트 프로그램 설치 - 스패로우 사용법 가이드 등 |
기업담당자 테스터(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] 영향도 평가 기준
○ 소스코드 통계
- 소스 파일 개수 39개, 빌드 라인 수 24,646라인
....
○ Top 10 이슈 검출 파일
....
○ 체커 별 진단 결과
....
체커 상세 진단
진단(가이드) 내용
해결 방법 제공
진단 보고서 제공
'테스팅' 카테고리의 다른 글
[테스팅] 전라북도 소프트웨어 테스팅 지원 서비스 (수시 접수) (0) | 2023.07.11 |
---|---|
2022년 테스팅 사례 공유 - 농업0000 정보 시스템 소스코드 시큐어 코딩 분석 테스팅 지원 (0) | 2023.04.14 |
2022년 테스팅 사례 공유 - 한방0000 제품 관리자 서버 보안성 테스팅 (0) | 2023.04.14 |
2022년 테스팅 사례 공유 - 한방0000 제품 기능 적합성 테스팅 (0) | 2023.04.14 |
2022년 테스팅 사례 공유 - VR 0000 제품 성능효율성 테스팅 (0) | 2023.04.14 |