• Playground File을 보고 싶으신 분은 Github
  • 파일명 : C_and_JAVA_Programming_22.ipynb

소프트웨어 개발 생명 주기

상세 설계 (Detail Design)

  • 이 글은 이렇게 하면 나도 프로그램을 잘 만들 수 있다 [C and JAVA 프로그래밍 입문] - 1 을 보고 학습하여 스스로 정리한 내용입니다

  • 초보자가 해결하고자 하는 문제는 하나의 모듈(Module) 정도의 간단한 것으로 상세 설계 하면 된다

  • 상세 설계
    • 소프트웨어의 내부적인 특성에 집중하는 것으로 포괄적인 기능을 세부 기능으로 분활해서 세부 기능에 대해 내부처리 절차를 나타내고, 자료를 정의하는 단계
    • 일반 설계에 의해서 정리된 각 기능별 모듈의 내부처리 절차를 순서도로 나타내는 단계
  • 상세 설계에서 적용되는 기본적인 절차는 전체적인 소프트웨어 개발 생명 주기에 따라 진행되어 진다
    • 즉, 요구사항 분석, 설계, 구현, 테스트 그리고 평가 순으로 이루어 지는 것이다
      • 그 이유는 문제를 해결할 때 한 번에 생각해서 해결한다는 것은 매우 어려운 일이거, 합리적이라고 볼 수 없으며, 또한 체계적이라고 할 수 없다
      • 또한, 한 번에 생각해서 해결할 수 있는 문제라면 그것 자체가 문제로 제시 되지 않을 것이다
      • 따라서 문제가 주어지면 한 번에 생각하는 것이 아니라 나누어서 생각해야 한다
  • 우선 모듈이 무엇(What)을 해야 하는지를 생각해서 정리, 다음은 해야 할 무엇에 대해 어떻게(How)해야 하는지에 대해서 생각

  • 상세 설계 단계
      1. 문제 이해 단계
      1. 자료명세서와 처리과정 작성 단계
      1. 순서도 작도 단계
      1. 구현
      1. 테스트
      1. 검토 및 평가
  • 1. 문제 이해 단계
    • 주어진 문제에 대하여 정확한 이해가 필요하다.
    • 소프트웨어는 현실 세계에서 발생한 문제를 해결하기 위해 컴퓨터를 이용하여 처리하는 것이므로 우선 현실 세계의 문제에 대한 정확한 이해가 필요하다
    • 특히 개발자가 문제를 수작업으로 해결할 능력이 있어야지만 개발할 수 있다
  • 2. 자료명세서와 처리과정 작성 단계
    • 소프트웨어 개발 과정에서 분석(Analysis)에 해당하는 단계로서 문제 이해의 결과와 수집된 요구사항에 대하여 소프트웨어가 무엇(What)을 할 것인가를 정리하는 단계이다
    • 어떤 값들을 구할 것인가에 대해 집중하는 단계
  • 3. 순서도 작도 단계
    • 소프트웨어 개발 과정에서 설계(Design)에 해당하는 단계로서 작성된 자료명세서와 처리과정을 토대로 어떻게(How) 할 것인가를 구체화하는 단계
    • 설계 도구로서 순서도(Flow Chart)나 나씨-슈나이더만 차트(Nassi-Schneiderman Chart)를 이용한다
  • 4. 구현
    • 설계된 내용을 실제 프로그래밍 언어로 표현하여 프로그램을 만들고 실행하여 확인하는 단계
  • 5. 테스트(Test)
    • 개발된 소프트웨어에 대하여 분석과 설계의 결과와 일치하는 결과물이 완성되었는지를 평가하는 단계
  • 6. 검토 및 평가
    • 제어논리를 검토하여 그에 따른 문제점을 찾고, 문제점에 대해 다른 대안을 마련하는 작업을 수행하는 단계

문제 이해 단계

  • 주어진 문제에서 요구하는 결과(정보, Information)를 파악하고 결과를 얻기 위한 조건들을 수집하여 정리하는 단계
  • 즉, 출력되는 값, 입력되는 값 그리고 수작업에 의한 처리 절차들을 정리하는 단계를 말한다
  • 모듈 기술서라고 하는 표준화된 문서를 이용해서 정리한다

자료명세서 및 처리과정 작성 단계

  • 수집된 요구사항을 바탕으로 파악한 데이터를 이용하여 어떤 처리를 어떤 순서에 의하여 할 것인가를 정리하는 단계
  • 문제에서 처리해야 하는 데이터들을 찾고, 그 데이터들을 구하는 처리들을 결정하고, 처리들을 어떤 순서로 나열할 것인지를 정하여 정리하는 단계
  • 이때는 처리에 대해서 어떤 처리를 수행할 것인지를 기술하는 것인지 어떻게 처리를 실행하도록 할 것인지를 기술하는 것이 아니다

순서도 작도 단계

  • 분석된 내용의 각 처리 단계를 기억장소의 원리, 입력, 기억, 산술, 관계, 논리, 출력 그리고 3가지 기본 제어구조로 표현하는 단계

구현(Implementation)

  • 설계한 내용대로 컴퓨터 프로그램을 만드는 단계

  • 코딩(Coding)혹은 편집(Editing)
    • 사람들에 의해서 이해되어지는 고수준 프로그래밍 언어로 제어논리를 편집하는 작업
  • 컴파일(Compile)
    • 고수준 언어로 작성된 원시 코드 프로그램을 기계어, 컴퓨터가 이해할 수 있는 저수준 언어로 된 목적 프로그램으로 번역하는 일이다.
  • 링크(Link)
    • 일부의 프로그래밍 언어들에서 필요한 단계로서 따로 작성되어 컴파일된 코드들을 모아 실행 가능한 하나의 단위, 실행 프로그램을 만드는 작업

테스트(Test)

  • 프로그램을 실행시켜 분석한 내용이나 설계한 내용과 일치하는지 검사하는 단계

검토와 평가

  • 처리되는 단계들에 있어서 정확성, 기억장소의 사용량, 처리 소요 시간, 간결성 등에 대해서 검토하고, 평가하는 작업
  • 이러한 기준들에 대해 검토를 하는 방법에 대해서는 프로그램이 컴퓨터에서 실행되는 과정을 추적해 보면 정확히 확인할 수 있다.
  • 검토와 평가는 기본적으로 각 단계마다 진행하는 것이 원칙
    • 그러나 모든 단계마다 검토와 평가를 한다는 것은 비효율적일 수 있다
    • 따라서 설계와 구현한 후에는 반드시 검토와 평가를 하여야 한다
  • 순서도로 정리된 제어논리에 오류가 있는 경우 구현을 해도, 틀린 결과를 출력하게 될 것이다.
    • 따라서 설계를 끝낸 다음에는 구현하기 전에 순서도와 검토표를 가지고 반드시 검토와 평가를 해야 한다
  • 디버깅
    • 다른 개발자들이 만든 제어논리가 잘못된 결과를 출력하는 경우, 원시 코드 수준에서 오류를 찾아서 고쳐야 할 것이다
    • 구현을 한 후 메모리맵을 이용하여 검토와 평가를 해야 한다.
    • 이러한 작업을 디버깅이라고 한다

학습 후 정리

  • 아에 아무것도 모르고 그냥 코딩을 할때보다 훨씬 체계적으로 코딩을 할 수 있다는 생각을 했다
  • 그냥 손이가는대로 코딩을 하다보면 내가 무엇을 만들었고 어느부분에서 오류가 났으며 유지보수를 하면서 왜 이렇게 코드가 실행되는지 모르거나 이해가 안될때가 많았는데 학습 후 코딩을 해보니 오류를 잡아내거나 유지보수 측면에서 굉장히 좋았다