본문 바로가기
자격증/정보처리기사

[실기] 소프트웨어 구축 - SW 설계

by D.O.T 2024. 7. 25.
  • 소프트웨어 생명 주기 (Software Development Life Cycle, SDLC)
    • 프로젝트 계획 : 어떤 프로젝트를 만들 것인지?
    • 요구분석 : 해당 프로젝트에서 필요로 하는 기능, 기술, 지식 등이 어떻게 될 것 인지?
    • 설계 : 분석한 사항을 바탕으로 아키텍쳐, 디자인, DB 등을 설계
    • 구현 : 설계한 내용을 바탕으로 실제 구현
    • 테스트 : 기능 단위 혹은 전체 프로젝트를 테스트
    • 유지 보수 : 다른 기술의 도입, 효율성 측면, 기능 추가, 피드백 등의 유지보수
  • 폭포수 모델 (Waterfall Model)
    • 대규모에 사용되는 고전적인 SDLC 모델이다.
    • SDLC의 프로세스를 선형적으로 처리한다.
    • SW 프로세스는 선형적일 수 없다. 수정 사항이 생길 경우 이전 내역이 사라질 수 있다.
  • 프로토 타입 모델 (Prototype Model)
    • 인터페이스를 만들어둔다.
    • 인터페이스에 명시된 기능을 견본/시제품으로 각 구현한다.
    • 프로토타입(견본)을 제출하면서 변경되어야 할 요구사항을 빠르게 수정할 수 있다.
    • Dev Class와 Release Class
  • 나선형 모델 (Spiral Model)
    • 폭포수 모델, 프로토 타입 모델의 이점에 위험 분석 기능을 추가한 방법이다.
    • 계획 수립 : 프로젝트 계획 + 요구사항 분석
    • 위험 분석 : 위험식별, 정량적/정성적 평가, 그에 따른 결과 + 설계
    • 개발 및 검증 : 구현 + 테스트
    • 고객 평가 : 유지보수
  • 애자일 (Agile)
    • 일정한 짧은 주기(Sprint or Iteration)만큼 반복해서 개발을 진행한다.
    • 고객과의 소통을 중시해서 고객 요구사항에 유연하게 대응할 수 있다.
    • XP, Scrum, Function Driven Design, Lean, Dynamic System Development Method 등이 있다.
  • XP(eXtream Programming)
    • 5가지의 가치와 12개의 실천 항목이 있고 의사소통을 개선하고 즉각적인 피드백을 하기위한 설계 방법론
    • 즉, 고객 요구사항을 유연하게 대응하기 위해 24시간 상주할 수 있는 고객과 함께 신속한 개발을 한다.
    • 5가지 핵심 가치
      • 용기 (Courage)
      • 단순성 (Simplicty)
      • 의사소통 (Commnuication)
      • 피드백 (Feedback)
      • 존중 (Respect)
    • 12가지 기본 원리
      • Planning Process
      • Pair Programming
      • CI
      • Refactoring
      • On Suit Customer
      • Coding standard
      • TDD
      • Simple Design
      • Small Release
      • Metaphore
      • Collective Ownership
    • 하향식 설계 (Top-down)
      • 절차 지향의 순차적 설계법
      • 최상위 컴포넌트 -> 하위 기능 부여 -> 테스트 초기부터 사용자에게 구조 제시 가능
      • main 또는 객체에서 필요한 것들을 순서대로 코드로 작성하는 것
    • 상향식 설계 (Bottom-up)
      • 객체 지향의 설계
      • 최하위 모듈 설계 -> 결합 및 검사 -> 인터페이스 구조 변경 시 상위 모듈도 같이 변경이 필요
      • 사칙연산을 하는 프로그램은 숫자 2개의 입력을 필요로 한다. 제곱근을 구하는 모듈을 추가한다면 숫자 1개의 입력을 필요로 한다. 이로 인해 인터페이스의 구조가 변경되고 이를 사용하던 상위 모듈 또한 변경해줘야 한다.
# command 에 따라 사칙연산
def inputNum():
    a = int(input());
    b = int(input());
    return a, b;

command = input();
a, b = inputNum();
print(cal(a, b, command));

# 위 코드에서 command 제곱근을 추가했을 경우
def inputNum(command):
    a = int(input());
    if (command == 'sqrt') return a;
    b = int(input());
    return a, b;

if command == 'sqrt':
    num = inputNum(command);
    print(cal(num, 0, command));
else:
    a, b = inputNum(command);
    print(cal(a, b, command));

이런식으로 막 쓸데 없는 코드도 추가 된다. 이런 부분을 개선하기 위해 나타난게 디자인 패턴이다.