소프트웨어 개발 생명 주기 - 3
- Playground File을 보고 싶으신 분은 Github
- 파일명 : C_and_JAVA_Programming_22.ipynb
소프트웨어 개발 생명 주기
상세 설계 (Detail Design)
-
이 글은 이렇게 하면 나도 프로그램을 잘 만들 수 있다 [C and JAVA 프로그래밍 입문] - 1 을 보고 학습하여 스스로 정리한 내용입니다
-
초보자가 해결하고자 하는 문제는 하나의 모듈(Module) 정도의 간단한 것으로 상세 설계 하면 된다
- 상세 설계
- 소프트웨어의 내부적인 특성에 집중하는 것으로 포괄적인 기능을 세부 기능으로 분활해서 세부 기능에 대해 내부처리 절차를 나타내고, 자료를 정의하는 단계
- 일반 설계에 의해서 정리된 각 기능별 모듈의 내부처리 절차를 순서도로 나타내는 단계
- 상세 설계에서 적용되는 기본적인 절차는 전체적인 소프트웨어 개발 생명 주기에 따라 진행되어 진다
- 즉, 요구사항 분석, 설계, 구현, 테스트 그리고 평가 순으로 이루어 지는 것이다
- 그 이유는 문제를 해결할 때 한 번에 생각해서 해결한다는 것은 매우 어려운 일이거, 합리적이라고 볼 수 없으며, 또한 체계적이라고 할 수 없다
- 또한, 한 번에 생각해서 해결할 수 있는 문제라면 그것 자체가 문제로 제시 되지 않을 것이다
- 따라서 문제가 주어지면 한 번에 생각하는 것이 아니라 나누어서 생각해야 한다
- 즉, 요구사항 분석, 설계, 구현, 테스트 그리고 평가 순으로 이루어 지는 것이다
-
우선 모듈이 무엇(What)을 해야 하는지를 생각해서 정리, 다음은 해야 할 무엇에 대해 어떻게(How)해야 하는지에 대해서 생각
- 상세 설계 단계
-
- 문제 이해 단계
-
- 자료명세서와 처리과정 작성 단계
-
- 순서도 작도 단계
-
- 구현
-
- 테스트
-
- 검토 및 평가
-
- 1. 문제 이해 단계
- 주어진 문제에 대하여 정확한 이해가 필요하다.
- 소프트웨어는 현실 세계에서 발생한 문제를 해결하기 위해 컴퓨터를 이용하여 처리하는 것이므로 우선 현실 세계의 문제에 대한 정확한 이해가 필요하다
- 특히 개발자가 문제를 수작업으로 해결할 능력이 있어야지만 개발할 수 있다
- 2. 자료명세서와 처리과정 작성 단계
- 소프트웨어 개발 과정에서 분석(Analysis)에 해당하는 단계로서 문제 이해의 결과와 수집된 요구사항에 대하여 소프트웨어가 무엇(What)을 할 것인가를 정리하는 단계이다
- 어떤 값들을 구할 것인가에 대해 집중하는 단계
- 3. 순서도 작도 단계
- 소프트웨어 개발 과정에서 설계(Design)에 해당하는 단계로서 작성된 자료명세서와 처리과정을 토대로 어떻게(How) 할 것인가를 구체화하는 단계
- 설계 도구로서 순서도(Flow Chart)나 나씨-슈나이더만 차트(Nassi-Schneiderman Chart)를 이용한다
- 4. 구현
- 설계된 내용을 실제 프로그래밍 언어로 표현하여 프로그램을 만들고 실행하여 확인하는 단계
- 5. 테스트(Test)
- 개발된 소프트웨어에 대하여 분석과 설계의 결과와 일치하는 결과물이 완성되었는지를 평가하는 단계
- 6. 검토 및 평가
- 제어논리를 검토하여 그에 따른 문제점을 찾고, 문제점에 대해 다른 대안을 마련하는 작업을 수행하는 단계
문제 이해 단계
- 주어진 문제에서 요구하는 결과(정보, Information)를 파악하고 결과를 얻기 위한 조건들을 수집하여 정리하는 단계
- 즉, 출력되는 값, 입력되는 값 그리고 수작업에 의한 처리 절차들을 정리하는 단계를 말한다
- 모듈 기술서라고 하는 표준화된 문서를 이용해서 정리한다
자료명세서 및 처리과정 작성 단계
- 수집된 요구사항을 바탕으로 파악한 데이터를 이용하여 어떤 처리를 어떤 순서에 의하여 할 것인가를 정리하는 단계
- 문제에서 처리해야 하는 데이터들을 찾고, 그 데이터들을 구하는 처리들을 결정하고, 처리들을 어떤 순서로 나열할 것인지를 정하여 정리하는 단계
- 이때는 처리에 대해서 어떤 처리를 수행할 것인지를 기술하는 것인지 어떻게 처리를 실행하도록 할 것인지를 기술하는 것이 아니다
순서도 작도 단계
- 분석된 내용의 각 처리 단계를 기억장소의 원리, 입력, 기억, 산술, 관계, 논리, 출력 그리고 3가지 기본 제어구조로 표현하는 단계
구현(Implementation)
-
설계한 내용대로 컴퓨터 프로그램을 만드는 단계
- 코딩(Coding)혹은 편집(Editing)
- 사람들에 의해서 이해되어지는 고수준 프로그래밍 언어로 제어논리를 편집하는 작업
- 컴파일(Compile)
- 고수준 언어로 작성된 원시 코드 프로그램을 기계어, 컴퓨터가 이해할 수 있는 저수준 언어로 된 목적 프로그램으로 번역하는 일이다.
- 링크(Link)
- 일부의 프로그래밍 언어들에서 필요한 단계로서 따로 작성되어 컴파일된 코드들을 모아 실행 가능한 하나의 단위, 실행 프로그램을 만드는 작업
테스트(Test)
- 프로그램을 실행시켜 분석한 내용이나 설계한 내용과 일치하는지 검사하는 단계
검토와 평가
- 처리되는 단계들에 있어서 정확성, 기억장소의 사용량, 처리 소요 시간, 간결성 등에 대해서 검토하고, 평가하는 작업
- 이러한 기준들에 대해 검토를 하는 방법에 대해서는 프로그램이 컴퓨터에서 실행되는 과정을 추적해 보면 정확히 확인할 수 있다.
- 검토와 평가는 기본적으로 각 단계마다 진행하는 것이 원칙
- 그러나 모든 단계마다 검토와 평가를 한다는 것은 비효율적일 수 있다
- 따라서 설계와 구현한 후에는 반드시 검토와 평가를 하여야 한다
- 순서도로 정리된 제어논리에 오류가 있는 경우 구현을 해도, 틀린 결과를 출력하게 될 것이다.
- 따라서 설계를 끝낸 다음에는 구현하기 전에 순서도와 검토표를 가지고 반드시 검토와 평가를 해야 한다
- 디버깅
- 다른 개발자들이 만든 제어논리가 잘못된 결과를 출력하는 경우, 원시 코드 수준에서 오류를 찾아서 고쳐야 할 것이다
- 구현을 한 후 메모리맵을 이용하여 검토와 평가를 해야 한다.
- 이러한 작업을 디버깅이라고 한다
학습 후 정리
- 아에 아무것도 모르고 그냥 코딩을 할때보다 훨씬 체계적으로 코딩을 할 수 있다는 생각을 했다
- 그냥 손이가는대로 코딩을 하다보면 내가 무엇을 만들었고 어느부분에서 오류가 났으며 유지보수를 하면서 왜 이렇게 코드가 실행되는지 모르거나 이해가 안될때가 많았는데 학습 후 코딩을 해보니 오류를 잡아내거나 유지보수 측면에서 굉장히 좋았다