엔지니어의 꿈 Fmt 최종본

Preview:

Citation preview

엔지니어의 꿈FMT

PA 개발 2팀 정영범2012년 12월 17일

148m

99.85m

705m

바람의 영향을 고려한 디자인나선형을 그리며 하중 분산30층 단위 대피처 설치GPS를 통한 수직 측정콘크리트 쏘아올리기

척추 역할을 하는 엘리베이터54만톤을 견디는 고강도 콘크리트65cm 줄어드니 층별 2~4mm 높임

...

수천년 축적된 기술

건축가들이 건물을 만든다.완벽한 설계 -> 빈틈 없는 구현

빈틈없는 설계와 완벽한 구현엔지니어의 꿈!

소프트웨어 엔지니어의 꿈

•빈틈없이 설계하고

•완벽하게 구현해서

•문제없이 돌아가는 프로그램을 만들어

•프로그램 사용자가 행복하게 쓰도록 만드는 것

완벽한 소프트웨어가 어려운 이유

•프로그램은 실체가 보이지 않는다.

•요구사항을 명확히하기 어렵다.

•프로그래밍은 창의적인 활동이다.

•소프트웨어가 잘 구현되었는지 확인하기 어렵다.

요구 사항과 설계

•요구사항은 작성하는 사람도 다 알 수가 없다.

•구현하면서 구체화되는 요구 사항이 많다.

•소프트웨어 구현은 일을 쪼개기 어렵다.

•설계가 미치지 않는 범위가 많다.

1부터 100까지의 합을 구하는 프로그램을 만드세요

요구사항

1+2+3+4+5+....

+95+96+97+98+99+100

그냥 냅다 쓰자

s = 0;for(i=1;i<=100;i++){s = s + i;

}

반복문 사용

n = 100;s = n*(n+1)/2;

실행속도 고려nX

k=1

k =n · (n+ 1)

2

5050

나는 이미 답을 알고 있다

int sum(int n){int s = n*(n+1)/2;return s;

}

sum(100); sum(1000);

재사용성을 고려하자

int sum(int n){ if (n < 0) error();int s = n*(n+1)/2;return s;

}

에러상황도 대비 해야지

1부터 100까지의 합을 구하는 프로그램을 만드세요

요구사항

1부터 100까지의 합을 구하는 프로그램을 만드세요

최종 요구사항

근데 빨랐으면 좋겠고, 나중에 다른 수까지의 합도 구할 수

있었으면 좋겠어.또, 에러상황 처리도 해야지.

프로그래밍의 특징

•유한하게 표현된 문법이지만 무한한 종류의 소프트웨어

•개발자마다 다른 창의적인 활동

•완벽한 검증이 불가능

완벽한 소프트웨어는 만들기 어렵다!

소프트웨어 개발 프로세스

코딩 단계에서의 테스팅

PA 사업부에서 하는 일은 어려워!

DRM이 더 어려워요.

Spa (Static Program Analysis) + Arrow

Static Program Analysis?

정적 프로그램 분석

•프로그램을 실행시키지 않고

•프로그램이 할 수 있는 일을 어림잡아

•프로그램의 성질을 예측하는 기술

정적 분석 기술

정적 분석 기술

정적 분석 기술

프로그램 정적 분석

컴파일러가 하는 일

•문법에 맞지 않는 프로그램을 알려준다.

•타입에 맞지 않는 프로그램을 알려준다.

if (x > 0) {y = 1;} for { y = 2;}

if (x > 0) { y = “string”;} else { y = 100;}

소스만 보고 판단

Sparrow가 하는 일

•실행 중 프로그램이 의도치 않은 동작을 하거나 비정상 종료하는 오류를 찾아준다.

•프로그램의 보안 취약성을 찾아준다.

if (x != 0) {y = x*y;} else { y = y/x;}

data = UserInput();SQL_execute(“insert into table”+ data);

int buffer[MAX];

void buffer_access(int len){if (len < 0) return;if (len > 98){len = MAX - 4;

}buffer[len] = 0; buffer[len + 1] = 1;buffer[len + 2] = 2;buffer[len + 3] = 3;

}

Sparrow 오류 검출 사례

int buffer[MAX];

void buffer_access(int len){if (len < 0) return;if (len > 98){len = MAX - 4;

}buffer[len] = 0; buffer[len + 1] = 1;buffer[len + 2] = 2;buffer[len + 3] = 3;

}

Sparrow 오류 검출 사례

근데 len 값이 98이라면

buffer-overrun!

잠깐 보시죠!

!

"

#

!$ ���)3 %&"�( &/# %*5�' $)7� 7� �2� ��0� 6�

"$& 0��� ���� %&'()*+,-)&.-/0,)12&3,13/,13+&��2&0� 7) )4 ,�

#$& .+ �1 %&�9( %* .+2&0� .+ :� �82�-� !� �� ,�

�9 ;*

�� �

!"

!# "�� � $%��# "�� �� � ��

"# �� � $%�� �� � &%'()%!*%�$ � �� � ��

+# �%� � �$ � $%�%�� � � ��

,# !����� �� � $%-./0-/1'02.34506743%� �� !� �� � ��

�% ��

!

"

!# �� # $%�$� � � �% �� ���� ��

"# �% �� $%��&��'&��&�� � �%� & ! � �"� �� !�

� �� ���

!

"

#

!$ !��� �� %& �" !��� �� �� ��

"$ �� �� %& � �� ��'&()*&!+&�# � �� �� ��

#$ �$� � �# �� %&�$�� �� ��

,$ ����� � �� %&-./0-/1(02.34506743&� �� � � �� ��

,

결론

•엔지니어의 꿈: 빈틈없는 설계와 완벽한 구현

•완벽한 소프트웨어는 만들기 어렵다.

•그 꿈을 실현하도록 돕는 일이 PA 사업부가 하는 일

좀 더 알고 싶으신 분은 Vital Day에 참석해주세요!