소프트웨어 개발 방법론

이해
소프트웨어 개발 생명 주기(SDLC)와 소프트웨어 개발 방법론은 구분해서 봐야 한다. SDLC가 상황에 따라 적절한 수단을 선택하는 전체 과정을 다룬다면, 개발 방법론은 그 안에서 구체적으로 어떻게 진행할지를 다룬다.

지하철과 지도에 비유하면 이해가 쉽다. 집에 가는 방법에는 버스, 택시, 자전거 등 여러 선택지가 있는데, 차가 막혀 지하철을 타기로 했다면(이것이 방법론 선택에 해당한다) 이제는 지하철역까지 어떻게 갈지 지도를 보고 찾아가야 한다(이것이 방법론 내부의 구체적 실행에 해당한다).
구조적 개발 방법론
구조적 분석은 무엇을 만들지 찾는 과정으로, 사용자의 요구를 파악해 문서로 정리하는 단계다. 1979년 Tom DeMarco가 정립한 전통적인 개발 방법으로, 자료흐름도, 자료사전, 소단위 명세서를 순서대로 작성하며 진행한다. 자료흐름도는 소프트웨어 내부의 프로세스, 자료 저장소, 자료의 흐름을 그래프로 나타낸 것이고, 자료사전은 자료흐름도에서 사용된 모든 자료를 모은 것이며, 소단위 명세서는 자료흐름도에서 작성한 프로세스의 작업 과정을 자세히 기술한 것이다.
구조적 설계는 요구사항을 기술적으로 어떻게 구현할지에 초점을 둔다. 전체 소프트웨어의 뼈대를 나타내는 구조도를 먼저 작성한 뒤, 프로그램 설계, 자료설계, 사용자 인터페이스 설계로 나누어 진행한다. 구조도는 각 소프트웨어 모듈을 사각형으로, 모듈 간 호출 관계를 화살표로 표시해 계층적 트리 모양으로 작성하고, 프로그램 설계는 프로그램 모듈별로 정확성·효율성·적합성을 갖춘 알고리즘을 설계하는 작업이며, 자료설계는 자료를 저장할 파일이나 데이터베이스 구조를 설계하는 작업이고, 인터페이스 설계는 입력장치를 통해 시스템에 명령을 전달하고 시스템으로부터 응답을 받는 방법을 설계하는 작업이다.
구현은 설계 단계에서 작성한 내용을 바탕으로 코드를 작성하는 단계이고, 테스트는 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트 순으로 진행한다.
객체지향 개발 방법론
**객체지향분석(OOA)**은 요구추출과 요구분석 두 단계로 나뉜다. 요구추출은 사용자의 요구를 유스케이스 다이어그램으로 작성하는 과정으로 액터 찾기, 시나리오 작성, 유스케이스 작성을 거치고, 요구분석은 추출된 요구를 클래스 다이어그램과 시퀀스 다이어그램으로 분석하는 과정으로 클래스/객체 찾기, 클래스/객체 사이의 상호작용 모형화, 클래스/객체 사이의 연관관계 찾기, 객체 속성 추가를 거친다.
객체지향설계는 앞서 설정한 객체를 구체화하는 작업이다. 객체에 속한 속성이나 기능을 정의하고, 각 객체 사이의 메시지 전달 과정에서 빠진 객체와 기능을 보완해 재정의한다.
구현은 설계한 클래스와 객체 사이의 메시지 전달 과정을 실제로 코딩하는 단계로, 효과적인 구현을 위해 디자인 패턴과 리팩토링 방법을 함께 활용한다.
테스트는 메소드 테스트, 클래스/객체 테스트, 객체집합 테스트, 시스템 테스트에 더해 웹 특성을 고려한 테스트까지 이루어진다.

