프로그램이 컴퓨터에 의해 실행되는 instruction들의 집합이라면, 소프트웨어는 프로그램을 비롯하여 소프트웨어 개발과 관련된 모든 문서들을 의미한다. 즉 테스팅 결과, 유저 매뉴얼, 각 개발단계별 문서들도 소프트웨어라고 할 수 있다.학계에서도 논문을 작성할 때 단순
1. SW Process 앞선 글에서와 같이, 소프트웨어 프로세스는 기본적으로 4가지 단계로 구성된다. 소프트웨어의 기능과 제약조건을 명세하는 단계, 실제 소프트웨어의 구현 단계, 소프트웨어 검증 단계, 그리고 계속해서 변화하고 진화하는 발전 단계이다. 소프트웨어 프
소프트웨어의 빠른 배포 VS 소프트웨어의 퀄리티는 상충되지만 모두 중요한 문제였다. 기존에는 폭포수 모델과 Plan-driven 방식이 주류였기에 세부적인 문서화가 필요한 방식이었지만, 문서화와 디자인에 초점을 맞추지 말고 소프트웨어 자체에 초점을 맞추자는 발상과 빠른
요구공학은 이러한 요구사항을 추출하고, 분석하고, 문서화하고, 확인하는 것을 의미한다.전체적인 소프트웨어공학 프로세스에서 가장 첫번째 단계라고 할 수 있다. (실제 현업에서는 Feasibility Study, 즉 기술의 실현가능성이나 타당성을 조사하는 것을 첫 단계로
각 모델은 시스템에 대한 서로 다른 관점을 보여준다.주로, 각 모델들은 UML의 다이어그램 타입을 통해 시스템을 나타난다.현존하는 시스템이 무엇을 하는 시스템인지 명확히 한다.현존하는 시스템의 강점과 약점에 대해 논의한다.다른 시스템 이해관계자들에게, 새로운 시스템의
시스템의 주요 구조적 컴포넌트와 그 관계를 밝히는 것이다. architecture는 system 타입, background, experience, specific requirements들에 따라 결정된다.individual program의 Architecturesyst
소프트웨어가 무수하게, 우리 사회의 어디에나 있는 만큼 동시에 소프트웨어 버그도 어디에나 있기 때문이다.Ariane 5는 가장 유명한 software failure다. 거의 10년이 걸려서 7조에 가까운 돈을 투자해서 만든 로켓인데, 매우 간단한 소프트웨어 버그(dat
symbolic 변수를 사용해서, 프로그램 input을 symbolic 변수로 교체하는 것이다.프로그램 input을 symbolic 변수로 교체하는 것에 넘어, 실제로 프로그램을 실행해 보는 것이다.프로그램의 실제 값을 저장하는 state이다.input = (22, 7
formula F를 입력받고, F가 Satisfiable한지 아닌지를 체크하는 역할을 한다.ex) F가 boolean formula라고 할 때,p와 q의 값이 F를 참으로 만드는 p와 q의 값이 존재한다면 F가 Satisfiable 하다 어떠한 p, q로도 F를 참으로
state 집합을 유지한다.state를 반복적으로 고르고, 실행하고, fork하는 프로세스를 반복한다.이 과정에서 state 집합을 유지하면서 특정 state를 고르고, 실행하고, fork한다.state S는 tuple (instr, store, PC)이다.instr
Dynamic Symbolic Execution의 해결하지 못한 두가지 난제프로그램의 탐험해야할 실행경로가 if/while statement 개수에 exponential하게 증가한다.ex. grep 프로그램이 3836개의 분기문을 가지고 있다면 worst case에 탐
프로그램 오류를 자동으로 고쳐주는 기술일반적인 모든 오류를 고치는 것임의의 오류에 대해서 모두 고치고자 한다.특정 오류를 고치는데 특화된 기술이 아니므로, 성능이 떨어진다.모든 오류를 고치는 것은 아니지만 특별한 종류의 오류에 대해 잘 고치는 것 -> 수업 중점사항!특
여기부터 다시 (강의)Automatically repair memory deallocation errors– memory-leak, double-free and use-after-free1) 이론적으로 patch된 code가 옳다는 것을 보장하고,2) 에러를 고침으로써
1\. 오류가 존재하는 프로그램을 Input으로 받고, 정적분석기(Infer)가 프로그램을 직접 실행하지 않고도 특정 부분에 에러가 있을것 같다는 Error Report를 낸다.2\. SAVER가 해당 오류를 자동으로 고친다.else 브랜치를 타면, free(q)만 될
블랙 박스와 화이트박스 테스팅의 장점을 합친 테스팅 기법white box는 전체 코드를 모두 보지만, grey box는 일부만을 본다.grey box는 해당 테스트케이스가 코드 커버리지를 높이는데 기여했는지, 아닌지에 대한 정보만으로 다음 테스트케이스를 생성한다.이미
좋은 입력을 만들어낼 수 있는 방법은, 프로그램의 주요 기능을 실행할 수 있게 하는 valid input을 변경해 가면서 하는 것이다.Seed Selection = seed를 고르는 기술. valid한 seed input 집합을 받는데, 이 중 변이를 가할 좋은 see
mutation based fuzzing은 기존에 program-agonistic fuzzing이었다. 그러나 요즘 program-adaptive fuzzing으로 변화하는 추세이다.타겟 프로그램과는 상관 없이 fuzzing을 하는 기법이다. ex) AFL어떤 프로그램
Mutation Based Fuzzing = valid한 seed의 입력이 중요하다.Generation Based Fuzzing = program의 grammer, 즉 spec이 중요하다.명세(specification)을 이용해서 테스트 케이스를 만드는 방법이다.타겟
배열에서 l 과 u 사이에 내가 찾고자하는 값 e가 있는지를 체크하는 프로그램이다.formal parameter = array a, integer l, int u, int e– ex) LinearSearch(1,3,5, 0, 2, 5) → true– ex) Linear