• 검색 결과가 없습니다.

How much is your bug?

N/A
N/A
Protected

Academic year: 2024

Share "How much is your bug?"

Copied!
28
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

Fly to the Green Code – Detect software bugs

automatically

Kyujin Cho, Ph.D.

(2)

How much is your bug?

(3)

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

(4)

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

(5)

SW테스트, 어떻게 하시나요?

SW 기획 SW 개발 SW QA SW 출시

구현 시험 완료

기획

마스터 기능 평가 스펙 검증 및 자문

시험 항목 및 시나리오 설계 시스템 구축

기능 검증 환경 시험 시나리오 평가

인수 시험 배포판 설치 시험

SW제품의 품질관리 체계

(6)

SW 품질 검증 절차

접수 분석/설계/

구현 단위 테스트 QA 요청

요구사항 및 오류 접수

제품 기능 사양서 오류 수정 내역서 설치 가이드 사용 설명서 개발 영역

QA 영역 지원/영업 영역

산출물 세부작업 내용

QA 접수/협의 품질 검증 계획 수립

환경 구축 시나리오 작성 및 통합 테스트

검증결과분석

전체 일정표

협의 회의록 전체 일정표

품질 검증 계획서 품질 검증 시나리오 결함 보고서

완료 보고서

• 개발-QA 협의 -제품 및 기능 특성 -품질 검증 방법 -일정 협의

• 품질 검증 계획 수립

• 세부 일정 수립

• 일정 공지

• 환경 구축

• 품질 검증 시나리오 작성

• 통합 테스트

• 품질 검증 결과 분석

산출물 관리

형상 관리 대장

• 품질 검증 활동 산출물 관리

배포

배포요청서

NO YES

검증 결과 분석

(7)

-

쫒기는 개발 일정에

-

열악한 QA 체계 및 환경에

-

부족한 개발 및 테스팅 인력으로 고생하시진 않나요?

현실은 어떤가요?

-

QA팀을 갖추었다 하더라도

-

테스트 시나리오 만으로는 잡히지 않는 Bug들은 여전하고

-

납품 일정은 여전히 쪼여오기 때문에

-

불안정한 상태로 제품을 출시하시진 않나요?

또는,

(8)

늦게 발견될 오류일수록 수정하는데 드는 비용이

급상승한다는 사실, 알고 계셨습니까?

(9)

처음부터 안정적인 프로그램을 만드는 것!

그러나, 어쩔 수 없이 발생하는 오류라면, 최대한 빨리 발견하고 확실하게 수정하는 것이 최대한 빨리 발견하고 확실하게 수정하는 것이

오류 발생으로 인한 비용을 최소화 할 수 있는 방법입니다.

(10)

HOW?

(11)

소스 코드만 있으면 실행하기 전에 미리 모든 실행 가능 상황을

마치 사람이 눈으로 분석하는 것처럼 깊고 상세한 방법으로

Semantic based Static Program Analysis

마치 사람이 눈으로 분석하는 것처럼 깊고 상세한 방법으로 반드시 고쳐야 하는 오류만을 검출해서

프로그램 오류 수정 비용을 절감하고 시간을 단축할 수 있습니다.

(12)

Step into the technology - a sematic based static program

analysis

analysis

(13)

UNDERSTANDING PROGRAM WORLD

Possible program states are nearly infinite Program doesn’t even terminate

13

The Analysis covering all possibilities is infeasible

without abstraction

(14)

SEMANTIC BASED PROGRAM ANALYSIS – AN OVERVIEW

Abstract Interpretation

Solve equations

Mathematical Modeling based on Graph

(15)

ABSTRACT INTERPRETATION - I

The framework which guarantees soundness

It estimates program semantics without actual running

15

-2 x 52930 – (106548 + 86) x 10

Negative >> Between -10,000,000 and -100,000 >> -1,172,200

(16)

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)

(17)

ABSTRACT INTERPRETATION IN REAL WORLD

Interval value analysis

17

(18)

Experience A Static Program Analysis – SPARROW

Analysis – SPARROW

(19)

SPARROW – An Overview

SPARROW system

19

(20)

Experiencing SPARROW (I)

20

(21)

Experiencing SPARROW (II)

21

(22)

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

(23)

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에 다른 값이 할당되지 않음

(24)

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

(25)

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);

}

(26)

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 분석 방식과의 결합 시도

비고: 정적 보안 취약점 분석 도구 증가 추세 (보안 영역)

(27)

Q & A

Q & A

(28)

Thank you!

Thank you!

참조

관련 문서