정적시험 실제사례

이유정·2023년 10월 5일
0

검증

목록 보기
3/7

1. 코딩 규칙 기법

ex. 메모리 동적 할당 → 대부분 "예외처리"
malloc, calloc, new 등

ex. #define 매크로상수 및 함수 금지 → "수정" or "예외처리"(多)

#define MAX 1024 
→ (const 형으로 변경) const int max = 1024; 

but 주로 "예외처리"
define 속도가 더 빠르고, 변수가 많은 경우가 대부분이기 때문

ex. const가 아닌 핸들 반환 금지

return (주소를 통해 변경 가능)

(1) 지역 변수를 넘겨주기
(2) getsetter 사용

ex. 라이브러리 함수 일부 사용 금지 strcpx 등
(1) 대체가능한 라이브러리 함수 사용 strncpy
(2) 라이브러리 함수 사용 결과와 같은 알고리즘 함수 직접 구현
(3) "예외처리" (보고서 사유: 해당 함수들 사이즈가 동일하다 ~)

ex. 위배 빈도가 높은 규칙들

  • else 삽입
if{
} // 삽입 안해도 ok
if{
} 
else if{
} 
else{ //else 무조건 삽입
}
  • == 연산자 사용 불가
pi == 3.14
→ pi <= 3.14
  • 한 줄에 한 구문만
int a = 0; b=0;
→ int a = 0;
int b = 0;
  • basic numerical type 사용 불가
int
→ int32_t    //signed 경우
→ UINT32_t     //unsigned 경우
  • void형 이외엔 모두 return 값 필수
(1) (void) 캐스팅
(2) return 명시
  • 만들어진 함수
window, visual studio 등 만들어진 함수 
→ "예외처리"

2. 메트릭 점검 (6종류 소스코드 메트릭 규칙)

→ 현재 대부분 "예외처리"

ex. 한 함수안에 실행가능한 코드 200줄 이상 시, 오류
복잡도 20 이상 시, 오류 
(복잡도 x, 가독성 o)

3. 취약점 점검 (의미기반)

CWE 658(C) / 659(C++) / 660(Java)
Buffer_Overrun/Underrun 등 → "예외처리"

ex. runtime error
(메모리 할당 오류, null 포인터 참조로 인한 die,
수학 연산식 내 0으로 나누기, 분모가 0 등)
profile
안녕하세요 이유정입니다. 반갑습니다.

0개의 댓글