애자일

  • XP : 의사소통 개선과 즉각적 피드백
    • 5가지 가치 : 용기, 단순성, 의사소통, 존중, 피드백

    • 의사(소통)선생님 피(드백)존(중) 용기에 담(순성)아주세요 by 홍달쌤

    • 12가지 기본 원리

      • 짝 프로그래밍(Pair Programming) : 개발자 둘이서 같이하면 혼자와 같거나 적은 비용이 듬
      • 공동 코드 소유(Collective Ownership) : 공동 소유로 변경시 지연감소 효과
      • 지속적인 통합(Continuous Integration) : 매일 여러 번씩 통합, 빌드 해야함
      • 계획 세우기(Planning Process) : 개발자가 필요한 것은 무엇이며 어떤 부분에서 지연될 수 있는지를 알려줘야함
      • 작은 릴리즈(Small Release) : 작은 시스템 먼저 만들고 짧은 단위로 업데이트
      • 메타포어(Metathor) : 공통적인 이름 체계와 시스템 서술서를 통해 고객과 개발자간의 의사소통을 원활하게
      • 간단한 디자인(Simple Design): 요구사항에 적합한 가장 단순한 시스템 설계
      • 테스트 기반 개발(Test Driven Develop) : 테스트를 먼저하면서 개발하면 이미 테스트에서 요구사항을 충족
      • 리팩토링(Refactoring) : 프로그램의 기능은 바꾸지 않고 중복제거, 단순화 등을 위해 시스템 재구성
      • 주 40시간 작업 : 피곤한 개발자는 실수가 많아짐
      • 고객 상주(On Site Customer) : 의사소통 향상 및 문서의 양 감소
      • 코드 표준(Coding Standard) : 효과적인 공동 작업을 위해 코딩 표준을 정의
  • SCRUM : 매일 정해진 시간, 장소에서 짧은 시간의 개발
    • 백로그(Backlog) : 제품과 프로젝트에 대한 요구사항
    • 스프린트(Sprint) : 2~4주의 짧은 개발 기간을 반복함
    • 스크럼 미팅(Scrum Meeting) : 매일 15분 정도 미팅
    • 스크럼 마스터(Scrum Master) : 프로젝트 리더
    • 스프린트 회고(Sprint Retrospective) : 스프린트 주기를 되돌아보며 규칙 준수 여부와 개선점 확인
    • 번 다운 차트(Burn Down Chart) : 해당 스프린트가 계획된 대로 나아가고 있는지, 또는 정해진 목표를 달성하기 위해 팀 차원에서 조정이 필요한지 나타냄

소프트웨어 개발방법론

  • 구조적 방법론 : 전체 시스템을 기능에 따라 나누어 개발하고, 이를 통합함(하향식) 나씨-슈나이더만 차트 사용(도형식, 제어 논리 구조, 명확한 식별)
  • 정보공학 방법론 : 기업의 정보시스템을 구축하기 위한 계획(ISP), 분석, 설계 등의 전과정을 형상화
  • 객체지향 방법론 : 현실 세계의 개체(Entity)를 속성과 메소드가 결합된 형태의 객체로 표현
  • 컴포넌트 기반 방법론(CBD) : 컴포넌트를 조립해 하나의 새로운 응용 프로그램 작성
  • 애자일 방법론 : 절차보다는 사람이 중심, 변화에 유연하고 신속하게 적응하면서 효율적으로 시스템 개발
  • 제품계열 방법론 : 특정 제품에 적용하고 싶은 공통된 기능을 정의해 개발, 임베디드에 유용

비용산정 모형

  • 하향식
    • 델파이 기법 : 전문가의 경험적 지식을 통한 문제 해결 및 미래예측을 위한 기법
  • 상향식
    • LoC(Lind of Code) : 원시 코드 라인 수의 낙관치, 중간치, 비관치를 측정해 예측치를 구함
    • Man Month : 한 사람이 1개월 동안 할 수 있는 일의 양을 기준
      • = (LoC / 프로그래머 월간 생산성) / 프로젝트 인력
    • COCOMO : 보헴이 제안, 프로그램 규모에 따른 비용 산정
      • 조직형(Organic Mode) : 5만 라인 이하
      • 반 분리형(Semi-Detached Mode) : 30만 라인 이하
      • 임베디드형(Embedded Mode) : 30만 라인 이상
    • Putnam : 개발주기의 단계별로 요구할 인력의 분포를 가정하는 방식, 생명주기 예측 모형, Rayleigh-Norden 곡선
    • 기능점수(FP) : 요구 기능에 따른 가중치를 부여함

일정관리 모델

  • 주 공정법(CPM) : 여러 작업의 수행 순서가 얽혀 있는 프로젝트의 일정 계산(임계 경로는 가장 오래 걸리는 경로)
  • PERT : 일의 순서를 계획적으로 정리하기 위한 수렴 기법, 비관치, 중간치, 낙관치의 3점 추정방식 이용
  • 주 공정 연쇄법(CCPM) : 자원제약사항을 고려해 일정 작성

소프트웨어 아키텍처

여러 가지 소프트웨어 구성요소와 그 구성요소가 가진 특성 중 외부에 드러나는 특성, 그리고 구성요소 간의 관계를 표현하는 시스템의 구조나 구조체

소프트웨어 아키텍처 패턴 유형

  • 계층화 패턴 : 서로 마주 보는 두 개의 계층 사이에서만 상호작용
  • 클라이언트-서버 패턴 : 하나의 서버와 다수의 클라이언트
  • 파이프-필터 패턴 : 데이터 스트림을 생성하고 처리하는 시스템에서 사용
  • 브로커패턴 : 분리된 컴포넌트들로 이루어진 분산 시스템에서 사용되고, 원격 서비스 실행을 통해 상호작용이 가능
  • MVC패턴 : Model(핵심 기능, 데이터 보관) + View(유저인터페이스) + Controller(요청입력 처리)

소프트웨어 아키텍처 비용 평가 모델 종류

  • SAAM : 변경 용이성, 기능성에 집중
  • ATAM : 아키텍처 품질 속성을 만족시키는지 판단
  • CBAM : 경제적 의사결정에 대한 요구를 충족하는지 판단
  • ADR : 응집도 평가 모델
  • ARID : 특정 부분 품질 요소

CMMI

  • 개발조직 업무 능력 및 조직 성숙도 평가 모델

SPICE (ISO/IEC 15504)

  • SW 프로세스 평가 및 개선에 관한 국제표준

CASE

  • CAD 와 같은 개념으로 소프트웨어개발에서 자동화를 도와주는 도구

디자인 패턴 (중요, 영문명도 다 외울 것)

SW설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴

생성 (bprofas)

  • builder : 복잡한 인스턴스를 조립해 만드는 구조
  • prototype : 처음에 원형을 만들어 놓고, 복사한 후 필요한 부분만 수정해 사용함
  • factory method : 상위 클래스에서 인터페이스 정의, 하위클래스에서 인스턴스 생성
  • abstract factory : 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공
  • singleton : 전역 변수 사용하지 않고 객체 하나만 생성, 그 객체는 어디서든지 참조가능

구조 (abcdffp)

  • adapter : 기존에 생성된 클래스를 재사용하도록 중간부 구현
  • bridge : 기능 계층과 구현 계층을 연결, 구현부에서 추상 계층 분리
  • composite : 객체들의 관계를 트리 구조로 구성
  • decorator : 기존에 구현되어 있는 클래스에 필요한 기능을 꾸며나감
  • facade : 복잡한 시스템에 대해 단순한 인터페이스 제공, 시스템 구조에 대한 파악 쉽게함
  • flyweight : 메모리 절약, 클래스의 경량화가 목적
  • proxy : 실체 객체에 대한 대리 객체

행위 (나머지)

  • Mediator : 수많은 객체들 간의 복잡한 상호작용(Interface)을 캡슐화하여 객체로 정의하는 패턴, 중재자라는 뜻임
  • Interpreter : 언어의 문법 표현을 정의함, SQL이나 통신 프로토콜과 같은 것을 개발할 때 사용
  • Iterator : 자료 구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴, 내부 표현 방법의 노출 없이 순차적인 접근이 가능
  • Template Method : 상위 클래스-추상, 하위 클래스-구체
  • Observer : 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락
  • State : 상태에 따라 다르게 처리할 수 있도록 행위 내용 변경
  • Visitor : 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업 수행
  • Command : 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴
  • Strategy : 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴
  • Memento : 특정 시점에서의 객체 내부 상태를 객체화함, Undo(작업취소)나 컨트롤+Z 기능 개발에 사용
  • Chain of Responsibility : 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴

요구공학

사용자 요구사항에 대한 도출, 분석, 명세 , 확인 및 검증하는 구조화된 활동

기능적 요구사항

시스템이 제공하는 기능, 서비스에 대한 요구사항(사용자UI)

비기능적 요구사항

시스템이 수행하는 기능 이외의 사항(백엔드)

요구사항 개발 단계

  1. 도출

    • 인터뷰 : 이해 관계자와 직접 대화
    • 설문조사 : 설문지, 여론조사
    • 브레인스토밍 : 말을 꺼내기 쉬운 분위기로 만들어 비판 없이 수용할 수 있도록 하는 회의
    • 델파이 기법 : 전문가의 경험적 지식을 통한 문제 해결 방법
    • 롤 플레잉 : 여러 사람이 각자가 맡은 역을 연기
    • 워크숍 : 단기간에 다양하고 전문적인 정보를 획득하고 공유
  2. 분석

    • 청취 기술
    • 인터뷰와 질문 기술
  3. 명세

    • 비정형 명세 기법
      • 자연어 기반
      • 사용자와 개발자 이해 용이
      • 명확성 및 검증 문제
    • 정형 명세 기법
      • 수학적인 원리와 표기법, Z-스키마, Petri Nets
      • 표현 간결, 명확성 및 검증 용이
      • 기법 이해 어려움
  4. 확인 및 검증

    • 정형 기술 검토
      • 동료 검토 : 2~3명이 진행, 작성자가 설명하고 이해관계자들이 설명을 들으면서 결함 발견
      • 워크스루 : 검토자료를 회의 전에 배포해서 사전검토한 후 짧은 시간동안 회의 진행
      • 인스펙션 : 다른 전문가 또는 팀이 검사하여 오류를 찾아내는 공식적 검토 방법

UML(Unified Modeling Language)

객체지향 소프트웨어 개발 과정에서 산출물을 명세화, 시각화, 문서화 할 때 사용되는 모델링 기술과 방법론을 통합해서 만든 표준화된 범용 모델링 언어

UML구성요소

사물, 관계, 다이어그램

UML 다이어그램

  • 구조적(정적) 다이어그램

    • 클래스(Class) : 클래스 간 정적인 관계를 표현
    • 객체(Object): 클래스에 속한 사물, 인스턴스
    • 컴포넌트(Component) : 현실에 구현될 실물요소의 관계를 표현
    • 배치(Deployment) : 컴포넌트 사이의 종속성, 실물요소들의 위치
    • 복합체 구조(Composite Structure) : 복합체 구조의 내부 구조를 표현
    • 패키지(Package) : 모델 요소들을 그룹화한 패키지들의 관계를 표현
  • 행위적(동적) 다이어그램

    • 유스케이스 : 시스템 외부 요소를 사용자의 관점에서 표현
    • 시퀀스 : 시간적 개념을 중심으로 메시지 흐름으로 표현
    • 커뮤니케이션 : 객체들의 관계와 주고받는 메시지를 표현
    • 상태 : 상태(ON/OFF 등)가 어떻게 변화하는지 표현
    • 활동 : 어떤 기능을 수행하는지, 처리 로직이나 처리 흐름
    • 타이밍 : 객체 상태 변화와 시간 제약을 명시적으로 표현

클래스 다이어그램

  • 접근제어자

    • public + : 클래스 외부 접근 허용
    • private - : 클래스 내부 접근 허용
    • protected # : 동일 패키지/파생 클래스에서 접근
    • default ~ : 동일 패키지 클래스에서 접근
  • 클래스 간의 관계

    • 연관 : 실선, 2개 이상의 사물이 서로 관련되어 있는 상태
    • 집합 : 속이 빈 마름모 (차/엔진, 바퀴, 운전대), 하나의 객체에 여러 개의 독립적인 객체들이 구성
    • 복합(=포함) : 속이 채워진 마름모, 집합 보다 더 강한 관계
    • 일반화 : 부모-자식, 속이 빈 화살표 (차/버스,택시,자가용), 상속 관계
    • 의존 : 점선 화살표, 서로 연관은 있으나 필요에 따라 짧은 시간동안만 연관을 유지