본문 바로가기

1. QA/1.1 Syllabus

3.3 Static analysis by tools (툴에 의한 정적 분석)

Terms 

Compiler, complexity, control flow, data flow, static analysis.


Background

The objective of static analysis is to find defects in software source code and software models.

Static analysis is performed without actually executing the software being examined by the tool; 

dynamic testing does execute the software code. Static analysis can locate defects that are hard to find in testing. As with reviews, static analysis finds defects rather than failures. Static analysis tools analyze program code (e.g. control flow and data flow), as well as generated output such as HTML and XML.


The value of static analysis is:

-    Early detecion of defects prior to test execution.

-    Early warning about suspicious aspects of the code or design, by the calculation of metrics, such as a high complexity measure.

-    Identification of defects not easily found by dynamic testing.

-    Detecting dependencies and inconsistencies in software models, such as links.

-    Improved maintainability of code and design.

-    Prevention of defects, if lessons are learned in development.


Typical defects discovered by static analysis tools include:

-    referencing a variable with an undefined value;

-    inconsistent interface between modules and components;

-    variables that are never used;

-    unreachable (dead) code;

-    programming standards violations;

-    secruity vulnerabilities;

-    syntax violations of code and software models.


Static analysis tools are typically used by developers (checking against predefined rules or programming standards) before and during component and intergration testing, and by designers during software modeloing. Static analysis tools may produce a large number of warning messages, which need to be well managed to allow the most effective use of the tool.


Compilers may offer some support for static analysis, including the calculation of metrics.


References

3.2 IEEE 1028

3.2.2 Gilb, 1993, Van Veenendaal, 2004

3.2.4 Gilb, 1993, IEEE 1028

3.3 Van Veenendaal, 2004




배경 설명

정적 분석의 목적은 소프트웨어의 소스코드와 모델에서 결함을 발견하는 것이다. 소프트웨어의 코드를 실행하여 수행하는 동적 테스팅에 비해, 정적 분석은 조사 대상 소소프트웨어를 실제적으로 실행하지 않는 상태에서 툴의 지원으로 수행하는 것이다. 정적 분석은 동적 테스팅으로 찾기 힘든 결함을 발견한다. 리뷰와 마찬가지로 정적 분석은 장애(Failures)보다는 결함(Defects)을 발견한다. 정적 분석 툴은 프로그램 코드 (예, 제어 흐름과 데이터 흐름)를 분석하는 것으 물론,  HTML이나 XML과 같은 산출 결과물도 분석함.



정적 분석의 가치:

-    테스트 실행 전에 조기 결함 분석.

-    높은 복잡도(Complexity) 측정치와 같은 메트릭을 계산하여 코드와 설계와 의심스러운 양상에 대한 조기 경보.

-    동적 테스팅으로는 발견하기 어려운 결함 발견.

-    소프트웨어 모델상의 의존도와 불일치성 발견

-    코드와 설계의 유지보수성 향상

-    결함 예방 가능



정적 분석 툴을 통해 발견되는 전형적인 결함:

-    정의되지 않은 값으로 변수 참조

-    모듈과 컴포넌트 간에 일관되지 않은 인터페이스

-    사용되지 않는 변수

-    사용되지 않는 코드

-    코딩 표준 위반

-    보안 취약성

-    코드와 소프트웨어 모델의 구문 규칙 위반


정적 분석 툴은 컴포넌트 테스팅과 통합 테스팅 동안이나 직전에 주로 개발자에 의해 사용되고 (기정의된 규칙이나 코딩 표준을 준수하는지 확인하는 용도), 소프트웨어 모델링하는 동안에는 설계자에 의해 사용된다. 툴을 효과적으로 사용하기 위해서는 정적 분석 툴이 생성하는 대량의 경고 메시지를 적절히 관리하는 것이 필요하다.


다양한 상용 또는 오픈소스의 정적 분석 툴이 존재하며, 컴파일러도 메트릭의 계산을 포함하는 정적 분석 기능의 일부를 지원할 수 있다.