37
엔지니어의 FMT PA 개발 2정영범 20121217

엔지니어의 꿈 Fmt 최종본

  • Upload
    -

  • View
    216

  • Download
    4

Embed Size (px)

Citation preview

Page 1: 엔지니어의 꿈   Fmt 최종본

엔지니어의 꿈FMT

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

Page 2: 엔지니어의 꿈   Fmt 최종본

148m

99.85m

Page 3: 엔지니어의 꿈   Fmt 최종본

705m

Page 4: 엔지니어의 꿈   Fmt 최종본

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

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

...

수천년 축적된 기술

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

Page 5: 엔지니어의 꿈   Fmt 최종본

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

Page 6: 엔지니어의 꿈   Fmt 최종본

소프트웨어 엔지니어의 꿈

•빈틈없이 설계하고

•완벽하게 구현해서

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

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

Page 7: 엔지니어의 꿈   Fmt 최종본

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

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

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

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

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

Page 8: 엔지니어의 꿈   Fmt 최종본

요구 사항과 설계

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

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

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

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

Page 9: 엔지니어의 꿈   Fmt 최종본

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

요구사항

Page 10: 엔지니어의 꿈   Fmt 최종본

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

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

그냥 냅다 쓰자

Page 11: 엔지니어의 꿈   Fmt 최종본

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

}

반복문 사용

Page 12: 엔지니어의 꿈   Fmt 최종본

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

실행속도 고려nX

k=1

k =n · (n+ 1)

2

Page 13: 엔지니어의 꿈   Fmt 최종본

5050

나는 이미 답을 알고 있다

Page 14: 엔지니어의 꿈   Fmt 최종본

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

}

sum(100); sum(1000);

재사용성을 고려하자

Page 15: 엔지니어의 꿈   Fmt 최종본

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

}

에러상황도 대비 해야지

Page 16: 엔지니어의 꿈   Fmt 최종본

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

요구사항

Page 17: 엔지니어의 꿈   Fmt 최종본

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

최종 요구사항

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

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

Page 18: 엔지니어의 꿈   Fmt 최종본

프로그래밍의 특징

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

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

•완벽한 검증이 불가능

Page 19: 엔지니어의 꿈   Fmt 최종본

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

Page 20: 엔지니어의 꿈   Fmt 최종본

소프트웨어 개발 프로세스

코딩 단계에서의 테스팅

Page 21: 엔지니어의 꿈   Fmt 최종본

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

DRM이 더 어려워요.

Page 22: 엔지니어의 꿈   Fmt 최종본

Spa (Static Program Analysis) + Arrow

Page 23: 엔지니어의 꿈   Fmt 최종본

Static Program Analysis?

정적 프로그램 분석

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

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

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

Page 24: 엔지니어의 꿈   Fmt 최종본

정적 분석 기술

Page 25: 엔지니어의 꿈   Fmt 최종본

정적 분석 기술

Page 26: 엔지니어의 꿈   Fmt 최종본

정적 분석 기술

Page 27: 엔지니어의 꿈   Fmt 최종본

프로그램 정적 분석

Page 28: 엔지니어의 꿈   Fmt 최종본

컴파일러가 하는 일

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

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

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

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

소스만 보고 판단

Page 29: 엔지니어의 꿈   Fmt 최종본

Sparrow가 하는 일

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

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

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

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

Page 30: 엔지니어의 꿈   Fmt 최종본

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 오류 검출 사례

Page 31: 엔지니어의 꿈   Fmt 최종본

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!

Page 32: 엔지니어의 꿈   Fmt 최종본

잠깐 보시죠!

Page 33: 엔지니어의 꿈   Fmt 최종본

!

"

#

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

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

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

�9 ;*

Page 34: 엔지니어의 꿈   Fmt 최종본

�� �

!"

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

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

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

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

Page 35: 엔지니어의 꿈   Fmt 최종본

�% ��

!

"

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

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

Page 36: 엔지니어의 꿈   Fmt 최종본

� �� ���

!

"

#

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

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

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

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

,

Page 37: 엔지니어의 꿈   Fmt 최종본

결론

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

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

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

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