Preface
대학교에 입학한 후 교양 수업을 듣던 어느 날 한 가지 궁금증이 떠올랐다.
"왜 공대생들은 항상 죽을상일까?"
얼마 전까지 나는 "공대생이 아무리 바쁘다고 해도 같은 대학생들끼리 다르면 얼마나 다르겠어"라고 생각하며 의아함을 느꼈었다.
집에 도착한 택배 상자를 뜯어본 후 모든 일엔 다 이유가 있다는 것을 다시 한 번 느꼈다.
생각했던 것보다 두꺼운 책 속에 다양한 내용이 빼곡히 적혀있었다.
잠시 마음을 추스른 후 "그래도 내가 흥미를 느껴 시작한 공부니까 너무 걱정하지 말자, 재밌을 수도 있잖아?"라고 스스로를 다독이며 첫 장을 공부했다.
역시 사람은 마음가짐이 중요하다.
막상 공부를 시작하자 끝판왕 보스가 기다리고 있을 것이라 걱정했던 마음과 달리 심히 난해한 내용은 없었다.
물론, '심히' 난해하지 않았을 뿐, '공학'이란 학문에 처음 입문한 나는 모든 것이 새로웠다.
책 속엔 처음 보는 용어들이 가득했으며, 새로운 지식들이 끝도 없이 쏟아졌다.
그러나 다행히도 나는 이런 상황이 싫지 않았다. 아니, 오히려 생각할 부분이 많아 흥미로웠다.
비록 지금은 학기 중 공부를 병행하느라 많은 시간을 투자하진 못하지만, 정상을 향해 조금씩 조금씩 꾸준히 전진할 생각이다.
마지막으로 소프트웨어 개발의 공정 과정을 공부하다 보니 실무 현장에 있는 친구가 프로젝트만 시작하면 골골대는 이유를 이해할 수 있을 것 같다.
1. 과학과 공학
- 자연과학은 자연의 법칙을 탐구하는 것인 반면, 공학은 자연 법칙을 응용하여 인류의 편익을 위해 무엇인가를 생산하는 전문 분야이다.
- 공학은 무엇인가를 만드는 활동이기에 현실적으로 접근해야 하며, 경제성 및 효율성과 연관되어 계획·관리 분야와 연결되어야 한다.
2. 시스템 공학
- 시스템 : 어떤 목적과 기능을 수행하기 위해 유기적 관계를 맺으며 함께 작용하고 서로 의존하는 요소들의 집합
- 소프트웨어 프로그램 구성 요소 : 함수(function), 클래스(class), etc.
- 객체지향 시스템 : 각각의 구성 요소들이 수평적 구조를 이루는 관계
- 시스템 공학 : 시스템의 개발, 운용 및 유지보수를 위한 모든 방식 (기술적 측면 + 관리적 측면)
3. 건축 공학의 예
- 건축 공학 라이프 사이클
① 계획
② 건축물 사용자 요구사항 분석
③ 건축물 설계
④ 시공(구현)
⑤ 감리(시험)
⑥ 운용과 유지보수
→ 각 단계를 프로세스(process)라 한다.
- 프로젝트는 활동의 진행 절차인 프로세스의 흐름으로 나타낼 수 있다.
4. 소프트웨어 개발의 일반적 공정과정
① 프로젝트 계획
- 프로젝트에 대하여 고객, 개발 회사가 추상적 목적이 담긴 '제안서'를 통해 계약을 맺는 과정
- 구체화 작업, 조사 및 연구가 필요
- 발주자 요구 사항
⑴ 프로젝트 관리 계획서
⑵ 품질 보증 계획서
⑶ 검증 및 확인 계획서
⑷ 형상 관리 계획서
② 요구사항 분석 = 업무 분석 (What)
- 질문 목록을 바탕으로 고객의 요구사항을 규명하는 과정
- 다양한 이해 관계자가 참여해야 하며 프로젝트 전 과정에 영향을 미침
- 수행 내용
⑴ 요구사항 규명 : 기능, 성능, 인터페이스, 고객의 내적·외적 요구사항 등
⑵ 타당성 조사 : 경제적, 기술적, 법적 타상성 및 대체 방안 등 (위험을 분석)
⑶ 비용과 일정에 대한 제약 설정 : 자원, 임무, 기간, 이정표 등
⑷ 요구사항 정의 문서화 : 요구사항 명세서 = 기능 명세서 = 목표 문서
※ 목표를 기술하는 것이지 어떻게 수행할 것인지를 기술하는 것이 아님
③ 설계 (How to)
- 모아진 요구사항을 설계 도면에 옮기는 과정
- 분석 과정은 '개념적', 설계 과정은 '물리적'단계
- 결과물 : 설계 문서
- trade off 개념 사용
※ 서브시스템 간의 소통이 최소화되고 독립성을 유지시켜야 함
④ 구현 = 프로그래밍 = 코딩
- 설계 문서를 실체화 시키는 과정
- 결과물 : 프로그램
⑤ 시험
- 제품의 오류를 발견, 수정하는 과정
- 전 과정에서 일어나며 개발 비용의 큰 부분을 차지함
- 수행 내용
⑴ 단위 시험 : 프로그램 기본 단위인 모듈 테스트
⑵ 통합 시험 : 모듈들을 통합하여 프로그램에 대한 테스트
⑶ 시스템 시험 : 기능들의 조화 및 시스템의 기능 테스트
⑷ 인수 시험 : 고객 참여 만족도 테스트
- 시험 단계
⑴ 시험 계획
⑵ 테스트 설계
⑶ 테스트 실행
⑷ 평가
⑥ 유지보수
- 사용 중 발생하는 사항에 적응 및 대비하는 과정
- 종류 : 수정, 적응, 추가, 관리
- 소프트웨어 시스템은 개발할 때 부터 유지보수에 대비하여 만들어져야 함
5. 모든 것은 두 번 창조된다
- 첫 번째 창조(분석) : 목표를 정하는 것, 사용자 관점(논리 모델), What → 분석가
- 두 번째 창조(개발) : 실제로 만드는 것, 엔지니어 관점(물리 모델), How → 개발자
- 두 창조는 다른 조직에 의해 이루어지는 것이 좋다.
→ 분석(계획 포함) 과정과 개발(설계, 구현, 시험 포함) 과정이 분리되어야 한다.
참고 문헌 : 윤청, 『소프트웨어 공학 에센셜』(생능출판), 2019, p.20~40.
'CS > 소프트웨어 공학 에센셜' 카테고리의 다른 글
프로젝트 관리 (0) | 2021.05.28 |
---|---|
소프트웨어 개발방법론(2) (0) | 2021.05.27 |
소프트웨어 개발방법론(1) (2) | 2021.05.25 |
소프트웨어 개발에 대한 오해와 실체 (0) | 2021.05.24 |
소프트웨어 공학 에센셜 출처 (0) | 2021.05.21 |
댓글