Fly to the Green Code – Detect software bugs
automatically
Kyujin Cho, Ph.D.
How much is your bug?
A Bug Costs You
More Than You Think.
Cost Spent on Finding One
= Cost of a Bug
Cost Spent on Finding One + Cost Spent on Fixing One
+ Cost to your brand
To Reduce the Cost of a Bug, You Should,
Reduce Cost to Find One
= Reduced Cost of a Bug
Reduce Cost to Find One
& Reduce Cost to Fix One
+ At least before production
SW테스트, 어떻게 하시나요?
SW 기획 SW 개발 SW QA SW 출시
구현 시험 완료
기획
마스터 기능 평가 스펙 검증 및 자문
시험 항목 및 시나리오 설계 시스템 구축
기능 검증 환경 시험 시나리오 평가
인수 시험 배포판 설치 시험
SW제품의 품질관리 체계
SW 품질 검증 절차
접수 분석/설계/
구현 단위 테스트 QA 요청
요구사항 및 오류 접수
제품 기능 사양서 오류 수정 내역서 설치 가이드 사용 설명서 개발 영역
QA 영역 지원/영업 영역
산출물 세부작업 내용
QA 접수/협의 품질 검증 계획 수립
환경 구축 시나리오 작성 및 통합 테스트
검증결과분석
전체 일정표
협의 회의록 전체 일정표
품질 검증 계획서 품질 검증 시나리오 결함 보고서
완료 보고서
• 개발-QA 협의 -제품 및 기능 특성 -품질 검증 방법 -일정 협의
• 품질 검증 계획 수립
• 세부 일정 수립
• 일정 공지
• 환경 구축
• 품질 검증 시나리오 작성
• 통합 테스트
• 품질 검증 결과 분석
산출물 관리
형상 관리 대장
• 품질 검증 활동 산출물 관리
배포
배포요청서
NO YES
검증 결과 분석
-
쫒기는 개발 일정에-
열악한 QA 체계 및 환경에-
부족한 개발 및 테스팅 인력으로 고생하시진 않나요?현실은 어떤가요?
-
QA팀을 갖추었다 하더라도-
테스트 시나리오 만으로는 잡히지 않는 Bug들은 여전하고-
납품 일정은 여전히 쪼여오기 때문에-
불안정한 상태로 제품을 출시하시진 않나요?또는,
늦게 발견될 오류일수록 수정하는데 드는 비용이
급상승한다는 사실, 알고 계셨습니까?
처음부터 안정적인 프로그램을 만드는 것!
그러나, 어쩔 수 없이 발생하는 오류라면, 최대한 빨리 발견하고 확실하게 수정하는 것이 최대한 빨리 발견하고 확실하게 수정하는 것이
오류 발생으로 인한 비용을 최소화 할 수 있는 방법입니다.
HOW?
소스 코드만 있으면 실행하기 전에 미리 모든 실행 가능 상황을
마치 사람이 눈으로 분석하는 것처럼 깊고 상세한 방법으로
Semantic based Static Program Analysis
마치 사람이 눈으로 분석하는 것처럼 깊고 상세한 방법으로 반드시 고쳐야 하는 오류만을 검출해서
프로그램 오류 수정 비용을 절감하고 시간을 단축할 수 있습니다.
Step into the technology - a sematic based static program
analysis
analysis
UNDERSTANDING PROGRAM WORLD
Possible program states are nearly infinite Program doesn’t even terminate
13
The Analysis covering all possibilities is infeasible
without abstraction
SEMANTIC BASED PROGRAM ANALYSIS – AN OVERVIEW
Abstract Interpretation
Solve equations
Mathematical Modeling based on Graph
ABSTRACT INTERPRETATION - I
The framework which guarantees soundness It estimates program semantics without actual running15
-2 x 52930 – (106548 + 86) x 10
Negative >> Between -10,000,000 and -100,000 >> -1,172,200
ABSTRACT INTERPRETATION - II
Abstraction is not omission
…, -6, -4, -2, 0, 2, 4, 6, …
16
Integer GOOD 2n EXCELLENT 4n WRONG
Abstraction should always have original informaiton ( + garbages)
ABSTRACT INTERPRETATION IN REAL WORLD
Interval value analysis
17
Experience A Static Program Analysis – SPARROW
Analysis – SPARROW
SPARROW – An Overview
SPARROW system
19
Experiencing SPARROW (I)
20
Experiencing SPARROW (II)
21
SPARROW Features
Linux AIX Solaris HP-UX Windows Platform
Compiler Defects Types
gcc ARM CC AIX CC Sun CC HP-UX CC KEIL MS visual C (Plan)
C C++ (Plan) Java (Plan)
Compiler
Language
22
…
200: static int mbtrf_oder_933r_m000_process(wk_mbtrf_oder_933r_t *p_wk) 201: {
202: int rc = 0;
Case Study I – Covering wider ranges of codes
Background
단위 테스트 후 정적 분석 실행
분석 소스파일 개수: C source file: 888개 (header file: 3017개) 분석 소스 총 라인 수: 284,559 lines
총 18개 오류 검출 : 단위 테스트 혹은 실행테스트의 낮은 code coverage 때문에 놓친 오류들 Real Codes
202: int rc = 0;
203: int i_idx = 0;
204: int o_idx = 0;
205: long l_tot_fee = 0;
206: double futs_spead_marg = 0;
...
486: if(...){
...
505: } 506: else {
507: if (( sstp_strbcmp(p_wk->guv.unas_code, "01", 2) == 0 ) || ( sstp_strbcmp(p_wk->guv.unas_code, "03", 2) == 0 )) { 508: p_wk->guv.oder_able_qty = sstp_trunc_n(
p_wk->guv.oder_bef_oder_able_ttam / futs_spead_marg,
0);509: } 510: else {
511: p_wk->guv.oder_able_qty = p_wk->guv.oder_bef_oder_able_ttam /
512: sstp_round_n(p_wk->guv.unas_prc * total_mgrt * spead_mgrt * p_wk->guv.tr_mltl, 0);
513: } 514: }
futs_spead_marg에 다른 값이 할당되지 않음
Case study II – Understanding deep call chains (I)
금융권 프로그램
Framework 기반 : Framework에서 전체 시스템 memory 관리
문제 : SITE open 을 위한 통합 실행 테스트 중 memory 부족으로 시스템 down 현상 발생
진단
Batch 작업 중 과대 메모리 사용이 원인으로 예측됨
다수 개발자(약 500 명)들이 작성한 대규모 코드(1000만라인 이상)
메모리 누수 오류의 원인과 관련해서 많은 개발자들이 관여 : 코드 리뷰로 파악 어려움 SPARROW 를 이용한 메모리 누수 검출
SPARROW Engine 수정 SPARROW Engine 수정
약 2000여개의 memory leak 검출
Memory 변수 선언 Batch 함수 호출
Batch 함수 실행 Memory 할당
Batch 함수 종료 전 memory full 발생
• Service part • Batch part
Case study II – Understanding deep call chains (II)
long mivabiz_21_011(mivabiz_21_011_in *input, mivabiz_21_011_out *output) {
mivabiz_21_011Context __context;
mivabiz_21_011Context *context = &__context;
bzero(context, sizeof(mivabiz_21_011Context));
context->input = input;
context->output = output;
{
PFM_TRY(c000_main_proc(context));
}
return RC_NRM;
PFM_CATCH:
return rc;
}
long mivabiz_71_001(mivabiz_71_001_in *input, mivabiz_71_001_out *output) {
mivabiz_71_001Context __context;
mivabiz_71_001Context *context = &__context;
context->input = input;
context->output = output;
{
PFM_TRY(c000_main_proc(context));
}
Real Codes
}
static long c000_main_proc(mivabiz_21_011Context *context) {
long rc = RC_NRM;
{
PFM_TRY(c100_base_data_inq(context));
}
return RC_NRM;
PFM_CATCH:
return rc;
}
static long c100_base_data_inq(mivabiz_21_011Context *context) {
long rc = RC_NRM;
{
PFM_TRYNJ(pfmDlCall("mivabiz_71_001", "mivabiz_71_001",
&context->inCtxmivabiz_71_001, &context->outCtxmivabiz_71_001));
} ...
}
static longc000_main_proc(mivabiz_71_001Context *context) {
… {
PFM_TRY(c130_main_proc(context));
} }
static long c130_main_proc(mivabiz_71_001Context *context) {
….
pfmVarrayAppend(OUTPUT->irt_dtls_list, &structVar1);
}
Strategic considerations - Is it really a blue ocean?
Program size 증가 / Programming Language 증가 Program error 발견 자동화 필요
소프트웨어 품질 자동화 도구 시장: 2010년 약 8조원 (1% = 8백억원)
해외 제품 동향
매출 규모: 2009년 약 5~600억원 (추정)
C/C++, Java => C#, PHP 등으로 지원 언어 확대 Concurrency (dead lock 등) 오류 분석 추가
Application LifeCycle Mang. 의 한 부분으로 확대 Dynamic 분석 방식과의 결합 시도
비고: 정적 보안 취약점 분석 도구 증가 추세 (보안 영역)
Q & A
Q & A
Thank you!
Thank you!