[정보처리기사 실기 정리] 1-1. 소프트웨어 개발 방법론

전현준·2024년 4월 6일
1

정보처리기사 실기

목록 보기
1/12
post-thumbnail

1. 소프트웨어 개발 방법론

1. 소프트웨어 생명주기 모델

  • 소프트웨어 생명주기 : 시스템이 개발 될 때 어떠한 순서를 가지는지 작업 프로세스 모델화

    • 요구사항 분석 : 기능 요구사항 / 비기능 요구사항
    • 설계 : 시스템 구조 설계, 프로그램 설계
    • 구현 : 인터페이스 개발, 자료 구조 개발, 오류 처리
    • 테스트 : 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트
    • 유지보수
  • 소프트웨어 생명주기 모델

    • 폭포수 모델 : 고전적 모델, 단순, 요구사항 변경 어려움
      • 요구사항 변경이 어려움
    • 프로토타입 모델 : 프로토타입으로 개발하여 피드백을 반영
    • 나선형 모델 : 점진적으로 완벽한 시스템으로 개발, 위험 감소
      • 계획 → 위험 분석 → 개발 → 고객평가
    • 반복적 모델 : 병렬적 개발 후 통합, 반복적으로 개발
      • 병행 개발에 따른 관리 비용 증가

2. 소프트웨어 개발 방법론

  • 소프트웨어 개발 방법론 : 소프트웨어 개발 전 과정에 지속적으로 적용할 수 있는 방법, 절차

  • 종류

    • 구조적 방법론 : 전체 시스템을 기능에 따라 개발하고, 통합하는 분할과 정복 접근 방식
    • 정보공학 방법론 : 정보 시스템 개발에 필요한 작업 기법 체계화, 대형 프로젝트 수행
    • 객체 지향 방법론 : 객체 단위로 시스템 분석 및 설계, 객체, 클래스, 메세지 사용
    • 컴포넌트 기반 방법론 : 컴포넌트를 조립해서 응용프로그램 작성, 확장성, SW 재사용
    • 애자일 방법론 : 사람이 중심이 되어 효율적으로 시스템을 개발할 수 있는 경량 개발 방법
    • 제품 계열 방법론 : 특정 제품에 적용하는 기능 개발, 임베디드 소프트웨어 작성
  • 애자일 방법론

    • 개발 기간이 짧고, 신속, 직시 피드백 받아 유동적 개발 가능.
    • 등장 배경
      • 개발 트렌드 변화
      • 기존 개발 방법론의 한계

    • 애자일 유형
      • XP (eXtreme Programming)

        • XP의 5가지 가치
          • 용기 / 단순성 / 의사소통 / 피드백 / 존중
        • XP의 12가지 기본 원리
          • 짝 프로그래밍 : 개발자 둘이서 짝으로 코딩
          • 공동 코드 소유 : 누구든지 언제라도 수정 가능
          • 지속적인 통합(CI) : 매일 여러번씩 통합하고 빌드해야함
          • 계획 세우기 : 고객이 요구하는 비즈니스 가치를 정의, 계획에 대한 설명
          • 작은 릴리즈 : 짧은 단위로 업데이트 해야함
          • 메타포어 : 고객과 개발자 간의 의사소통을 원활하게 함
          • 간단한 디자인 : 가장 단순한 시스템 설계해야한다는 원리
          • 테스트 기반 개발 : 테스트를 먼저 수행하고, 실제 프로그램의 코드를 작성해야함
          • 리팩토링 : 기능을 바꾸지 않으면서 중복 제거, 단순화를 통해 시스템 재구성
          • 40시간 작업 : 피곤하지 않게, 40시간 이상을 일하지 말아야함
          • 고객 상주 : 즉각 대답해 줄 수 있는 고객을 상주해야함
          • 코드 표준 : 효과적인 공동작업을 위해, 코딩 표준을 정의해야함
      • 스크럼

        • 매일 정해진 시간, 장소에서 짧은 시간의 개발을 하는 팀을 위한 프로젝트
        • 개념
          • 백로그 : 제품과 프로젝트에 대한 요구사항
          • 스프린트 : 짧은 개발 기간으로 개발 품질 향상
          • 스크럼 미팅 : 매일 15분 정도의 미팅
          • 스크럼 마스터 : 프로젝트 리더, 문제 인지 및 해결하는 사람
          • 스프린트 회고 : 스프린트 주기를 되돌아보며, 정해놓은 규칙, 개선점 확인
          • 번 다운 차트 : 남아있는 백로그 대비 시간을 그래픽적으로 표현한 차트

      • : 도요차의 린 시스템 품질기법을 SW 개발 프로세스에 적용해서, 낭비 요소를 제거


3. 객체 지향 분석 방법론

  • 객체 지향 : 실세계의 개체를 속성과 메서드가 결합한 형태의 객체로 표현

  • 구성요소

    • 클래스 : 객체 내에 있는 변수와 메소드 정의, 데이터를 추상화하는 단위
    • 객체 : 물리적, 추상적으로 자신과 다른 것을 식별 가능한 대상, 실제 메모리에 할당
      • 객체와 인스턴스 차이? (내가 이해하기로는..?)
        • 객체 : 클래스 상태로 존재하는 상태
        • 인스턴스 : new를 이용하여 실제 객체를 만든 상태
    • 인스턴스 : 실제로 생성된 객체
      • UserVO user = new UserVO()
    • 속성 : 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위별로 정의
    • 메소드 : 객체를 사용하는 방법, 함수
    • 메세지 : 객체 간 상호 작용을 하기 위한 수단, 어떤 행위를 하도록 지시하는 방법

  • 객체 지향 방법

    • 캡슐화 : 서로 연관된 데이터와 함수를 함께 묶어 외부와 경계를 만듬, 필요한 인터페이스만
      • 결합도가 낮아지고, 재사용 용이 / 정보 은닉과 관계가 깊음

    • 정보 은닉 : 코드 내부 데이터와 메소드를 숨기고, 접근이 가능하도록 하는 코드 보안 기술
      • ex) 내부의 동작 방법을 숨기고, 부품의 사용법만 노출하는 것!
      • 데이터에 직접 접근 한다면, 내가 설계한 로직이 무너져 버릴 수 있음.
        public class UserVO{
        	private String userName;       // 내부 데이터는 숨기고
        	
        	public String getUserName(){   // 메소드를 접근 가능하도록 설정.  
        		return userName;
        	}
        	
        	public void setUserName(String name){
        		userName = name;
        	}
        }
        • 캡슐화와 정보은닉의 차이?
          • 캡슐화는 하나의 클래스로 데이터와 함수를 묶는 과정.
          • 캡슐화를 통해 정보은닉을 실현하면서, 객체 지향을 실현시키는 것

    • 상속성 : 상위 클래스의 속성과 메소드를 하위 클래스에서 상속 받는 기법
    • 다형성 : 상속받은 여러개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용
      • 오버로딩 : 매개변수의 유형과 개수를 다르게 함
      • 오버라이딩 : 상위 클래스의 메소드를 무시하고 재정의 할 수 있는 기법
    • 관계성 : 두개 이상의 데이터를 차조하는 관계를 나타내는 기법
      • 연관화 : 같은 계층에 속하는 클래스 사이에 상호 의존성
      • 집단화 : 서로 관련 있는 여러 객체를 묶어, 상위 객체로 만듬
      • 분류화 : 공통된 속성에 의해 정의된 객체 구성원들의 인스턴스
      • 일반화 : 클래스들 간의 개념적인 포함 관계
      • 특수화 : 상위 클래스의 특성을 상속받으며, 하위 클래스에서 수정하고 고유 특성을 가짐

  • 객체 지향 설계 원칙

    • SRP (단일 책임의 원칙) : 클래스는 하나의 목적을 위해 생성
    • OCP (개방 폐쇄 원칙) : 확장에는 열려있어야하며, 변경에는 닫혀있어야함.
    • LSP (리스코프 치환 원칙) : 하위 클래스는 어디서나 상위 클래스로 교체할 수 있어야함
    • ISP (인터페이스 분리 원칙) : 사용하지 않는 인터페이스는 구현하지 말아야함
    • DIP (의존성 역전의 원칙) : 클래스 직접 참조❌ 추상 클래스나 인터페이스로 참조하기

  • 객체 지향 분석 : 요구 사항을 분석하여 클래스, 속성과 연산, 관계를 정의하여 모델링하는 기법

    • OOSE (Object Oriented SW Engineering) : 유스케이스에 의한 접근 방법, 기능적 요구사항 중심
    • 럼바우 OMT (Object Modeling Technology) : 그래픽 표기법, 객체 모델링 → 동적 모델링 → 기능 모델링
      • 객체 모델링 : 객체를 찾고, ER 다이어그램 만들기, 객체 다이어그램 활용
      • 동적 모델링 : 시간의 흐름에 따라 제어 흐름, 동적인 행위 표현, 상태 다이어그램
      • 기능 모델링 : 자료 흐름을 중심으로 처리 과정 표현, 자료 흐름도
    • ODD : 설계 문서화를 강조하여, 다이어그램 중심으로 개발, 분설과 설계 분리 불가능


2. 프로젝트 관리

1. 프로젝트 관리

  • 프로젝트 관리 : 소프트웨어 생명 주기를 따라 수행할 작업의 범위, 필요한 자원, 수행 업무, 비용, 추진 일정을 관리해야 함.

  • 프로젝트 관리 대상 : 계획 관리(일정, 비용, 조직) / 품질 관리 / 범위 관리(요구사항 분석 및 필요한 작업 관리)

  • 프로젝트 관리 3대 요소 : 3P (사람, 문제, 프로세스)

2. 비용산정 모형

  • 비용산정 모형 분류

    • 하향식 산정 방법 : 전문가가 비용 산정 (전문가 판단, 델파이 기법)
    • 상향식 산정 방법 : 세부 요구사항과 기능에 따라 필요한 비용 계산
      • (LoC, Man-Month, COCOMO, 푸트남, 기능점수)

  • 비용 산정 모형 종류

    • LoC : 원시 코드 라인 수의 낙관치, 중간치, 비관치를 측정하고 예측치를 구함
      • 예측치 = (비관치 + 4*중간치 + 낙관치) / 6
    • Man-Month : 한 사람이 1개월 동안 할 수 있는 일의 양을 기준으로 프로젝트 비용 산정
      • Man-Month = (LoC)/(프로그래머의 월간 생산성)
    • COCOMO : 프로젝트 규모에 따라 비용 산정, 비용 산정 경과는 프로젝트를 완성하는데 Man-Month로 산정
      • 조직형 : 기관의 소규모 소프트웨어 (5만 라인 이하)
      • 반 분리형 : 트랜잭션 처리 시스템, DB관리 시스템, 컴파일러 등 (30만 라인 이하)
      • 임베디드형 : 초 대형 규모의 시스템, 운영체제, 실시간 처리 시스템 (30만 라인 이상)
    • 푸트남 모형 : 소프트웨어 개발주기의 단계별로, 요구할 인력의 분포 가정
    • 기능 점수 : 총 기능점수 * [0.65 + (0.1 * 총 영향도)]

3. 일정관리 모델

  • 일정관리 모델

    • 주 공정법 (CPM) : 여러 작업의 순서가 얽혀있는 프로젝트의 일정 계산
      • 임계 경로 : 제일 오래 걸리는 경로
        ✨ 최적의 경로를 찾는 것이 아니다. 모든 작업을 수행해야 한다.
        임계 경로를 파악하고, 어떻게 모든 작업을 임계 경로 내에 수행할 수 있을까? 라는 고민
    • PERT : 일의 순서를 비관치, 중간치, 낙관치의 3점 추정방식으로 일정관리
    • 중요 연쇄 프로젝트 관리 (CCPM) : 주 공정 연쇄법으로 자원제약사항 고려하여 일정 작성

4. 위험 관리

  • 위험 관리
    • 프로젝트에 내제된 위험 요소를 인식하여, 영향 분석 및 관리

  • 위험의 종류
    • 알려진 위험 : 프로젝트 계획서, 기술적 환경, 정보등에 의해 발견될 수 있는 위험
    • 예측 가능한 위험 : 과거 경험으로 예측 가능한 위험
    • 예측 불가능한 위험 : 사전 예측이 어려운 위험

  • 위험 대응 전략 : 회피, 전가, 완화, 수용
profile
백엔드 개발자 전현준입니다.

0개의 댓글

관련 채용 정보