소프트웨어 공학(18)
-
소프트웨어 공학 (12), Project Management
Project Management 탑다운에 기반한 내용이기에 최근 소프트웨어 개발 방법론인 Agile과는 다른 면이 있어 논란의 여지가 있을 수 있다. - Project Planning 이전의 단계이지만 WaterFall 방식과 Agile 방식의 차이점이 너무 크기 때문에 이를 중심으로 Project Management를 설명하고자 한다. 1. Ice break - 프로젝트는 시작된다고 해서 모두 성공하는 것은 아니고, 망해가는 프로젝트를 통해 교훈을 얻을 수 있다. 이후 이러질 Project Planning을 하는 것이 매우 어렵고 WaterFall 방식과 Agile 방식의 차이점도 매우 크고, man-month라고 하는 투입되는 사람에 대해 차이점이 있다. 또한 프로젝트가 망해가는 것에 대한 특징을 ..
2022.06.10 -
소프트웨어 공학 (11), Software Evolution
Software Evolution 소프트웨어 출시 이후 나타나는 버그를 개선해 업데이트하는 과정 0. Software change 1) Software change란? - 해당 챕터에서 기저에 놓여있는 개발 방식은 top-down, waterfall 방식이다. - 소프트웨어는 출시 이후에 끝나는 것이 아니라 놓친 부분이나 새로운 피쳐의 등장, 비즈니스 환경의 변화 등등에 의해 새로운 기능이나 피쳐, 성능에 대한 부분, 기타 등등은 반드시 필요할 수 밖에 없다. 이는 소프트웨어의 변화를 이끈다. - 테스트는 프로그램이 완벽하다는 것을 증명하진 않는다. 이는 테스트 과정에서 걸러내지 못한 것을 이끌어내곤 한다. 이는 소프트웨어의 변화를 이끈다. - 하드웨어의 변화가 소프트웨어의 변화를 이끌수도 있다. 가상화..
2022.05.26 -
소프트웨어 공학 (10), Software Testing
Software Testing 1. Development testing 1) Program testing 큰 틀에서의 프로그램 테스트 (1) 주어진 input과 output에 대한 동작이 제대로 나오는지 확인라는 것이 목적 (2) 여러 이유로 프로그램이 비정상 동작을 할 때 어떤 상황에서 오류가 발생하는지 파악하고 이를 대응하는 것이 목적 - 테스트는 다양한 사람과 단계에 걸쳐서 테스트되고, 과거의 혹은 인위적으로 만든 데이터를 투입해서 동작하는지 확인하는 과정이 존재한다. 맨 마지막 단계에서 실 사용자 일부에게 테스트를 진행한다. - 테스트를 수행함으로서 잘못된 것에 대한 에러나 비정상적인 동작에 대한 예외상황 등, non-functional 부분 등에 대해서도 확인해야한다. - 무엇을 테스트하는지에 ..
2022.05.18 -
소프트웨어 공학 (9), Implementation
Design and Implementation 탑다운 방식이면 디자인과 구현을 명확하게 구현하곤 한다. 이를테면 설계는 한국에서 하되 구현은 외국에서 진행하는 등의 역할을 구분해 나눌 수 있다. 이러한 경우에는 디자인 단계에서 많은 문서가 나올 수 있다. 그러나 데브옵스와 인터넷 설계 등을 봤을 때 설계와 구현은 밀결합되어있는 경우가 많다. 소프트웨어에 대한 상세 설계와 구현은 프로그래밍 언어를 통해 만드는 과정을 의미한다. 결과적으로는 executable한 시스템을 만들 수 있다. 상세 설계와 구현은 매우 밀결합한 경우가 많다. 구현을 하다가 문제가 발생하는 경우에는 상세설계에 피드백을 줄 수도 있다. 둘은 매우 많이 인터렉션해야한다. 둘을 함께 진행하는 경우에는 일반적으로는 agile 기법이다. ag..
2022.04.25 -
소프트웨어 공학 (8), Architectural Design
Architectural Design 1. Architectural Design 앞서 정의한 시스템을 큰 틀에서 디자인 하는 것 0) 개요 - 성취하고자 하는 기능과 성능을 비롯해 보안, 신뢰성, 유지보수 가능성 등의 비기술적인 부분에 대한 뼈대를 결정하는 것 - 요구사항 엔지니어링의 다음 단계로 세부적인 사항을 디자인하기 이전 단계에 해당한다. 따라서 어떤 구성요소가 들어가는지, 구성요소들 간의 관계를 디자인하는 작업이 주 작업이 된다. - 시스템을 구성하는 구성요소와 구성요소간 상호작용이 정형화된 문서나 포맷의 결과물로 도출되어야한다. - 큰 틀을 디자인하는 것이기에 Agile 기법에서도 아키텍쳐에 대한 디자인은 중요하다. - 아키텍쳐를 잘못 만들면 incremental이 어려울 수 있다. 이를 실패..
2022.04.25 -
소프트웨어 공학 (7), System modeling
System modeling 개념적인 모델에서 상호작용하는 내용과, 세부적인 동작을, 시스템 구성 요소에 대한 정의하는 것 1. System modeling 1) System modeling이란? - 요구사항을 반영한 시스템을 모델링하는 것으로 다른 단계에서 사용할 수 있는 도구가 된다. - 상호작용도 반영한다. - 여러 기법들이 존재하며, 이는 요구사항을 구체적으로 풀어가기 위한 단계가 된다. - 각 모델의 특장점을 활용해서 적절하게 맞는 기법을 추출하는 것이 중요하다. - 구체적인 그림을 가지고 서로의 생각을 표현할 것이다. ex) UML(unified modeling language) - 방법 각각이 의미가 있으며 순차적으로 해도 의미있으며 requirement나 소프트웨어 디자인 등에서도 내용을 ..
2022.04.25