1. 소프트웨어 형상관리의 개요
 가) 형상관리의 정의
     - 정의 : 소프트웨어 개발시점부터 유지보수 단계까지 발생되는 구성요소의 변경이력 관리
     - 필요성 : 가시성 미흡, 컨트롤 어려움, 추적성 미흡, 감시미비, 잦은 변경

 

 2. 형상관리 개념도 및 구성요소 
 가) 형상관리 개념도 

 나) 형상관리의 구성요소 

    -  기준선, 형상항목, 형상물, 형상정보

 

3. 형상관리 활동
 가) 형상관리 활동

    - 형상식별, 형상 컨트롤, 형상감사, 형상기록

 

 나) 형상관리의 효과

   - 소프트웨어 개발 및 관리 적용시 효과적 

 다) 형상관리 고려사항

   - 적절한 운영조직 구성, 관리 전문 도구 활용

   - 지속적 관리 및 기준, 해결방안 필요

   - 소규모 프로젝트시 형상관리 정도를 적절히 테일러링

   -  형상관리 항목 정하고 모든 변경사항 공식적인 합의에 의해 실시 

   - 운영중인 소프트웨어의 변경 신중히 진행



4. 형상관리도구
 가) 형상관리도구   


 나) 서브버전 (Subversion, SVN)

   - 정의 : 오픈소스 소프트웨어 버전관리 시스템

   - 사용 : 중앙 집중형 저장소시스템, 중앙서버로 부터 파일을 check-out 

 

 다) 분산형 저장소(Git)

   - 정의 :  클라이언트가 마지막 Snapshot을 직접 다운받지 안고 저장소 전부 복제, 서버 문제시 클라이언트 카피본으로 서버 복원 

 

 라) TFS(Team Foundation Server)

   - 정의 : 소스코드 관리, 보고,요구 사항관리, 프로젝트관리(에자일 소프트웨어 개발,, 폭포수 모델), 자동화 빌드, 랩관리, 테스트 및 출시 관리기능 제공하는 마이크로소프트의 제품

   - 목적 : 개발팀의 효과적인 협업을 위한 소스코드, 산출물, 개발활동등 소프트웨어 개발활동 모든 정보 저장

 

X. 소프트웨어 요구관리

핵심 키워드 : 요구사항 관리 프로세스, 요구사항 명세기법, 요구사항 변경 관리

 

01. 프로젝트 성공의 핵심요소, 요구사항 관리

  . 정의

    - 정의된 요구 사항의 반영과 진행을 확인하고, 요구사항의 변경에 대한 지속적인 관리를 수행하는 활동

    * 요구사항 공학(Requirement Engineering) 구성 : 요구사항 개발(목표 설정), 요구사항 관리(목표 관리)

 

 나. 요구사항 관리의 중요성

    - 의사소통 수단 제공, 납기지연 및 예산초과 방지, 사용자 요구 명세 수행 및 관리

 

 다. 요구사항 관리의 목적

    - 고객 요구의 명확한 파악 및 만족, 고품질 소프트웨어 일정내 생산

 

 라. 요구사항 관리 공정  

  - 소프트웨어 개발 생명주기 전체에서 명확한 요구 사항 정의 및 지속적인 관리 활동이 중요함

    

 . 요구사항 공정별 관리활동

공정 관리활동 산출물
요구 추출 - 비즈니스 요구사항 정의
- 참여자 식별, 초기 요구사항 추출
Candidate Requirement
요구 분석 - 후보 요구사항 모델링
- 요구사항 우선순위 산정, 요구사항 협의
Agreed Requirement
요구 명세 작성 - 요구사항 명세 기준 정의 및 작성
- 요구사항 추적성 관련 정보 저장
Formal Requirement
요구 명세 검증 - 명세서 검토, 용어 검증
- Baseline 설정
Baselined Requirement
변경 관리 - 변경제어, 추적성 제어
- 버전제어(이력관리)
Consistent Requirement

        - 실무측면에서는 변경제어, 추적성/버전 제어가 매우 중요하며 철저한 관리 원칙 준수가 필요함

 

  바. 요구사항 관리 원칙

    - 요구 우선순위 부여(고객 가치기반), 이해관계자의 동의

    - 요구 시스템의 목표 식별(기대/범위 관리)

    - CCB운영 통해 변경의 영향 분석 및 Baseline 설정

 

02. 요구사항 명세

  . 요구사항 명세 기법

구분 명세기법 설명
정형 명세 - VDM - Vienna Development Method
- 상태 기반 그래픽 명세 방법
- 수학적 기반 기술 - 명세 개발 및 체계적 시스템 검증 프레임워크 제공
비정형 명세 - FSM - Finite State Machine
- 입력 신호에 의한 상태 전이 표현
- SADT - Structured Analysis and Design Technique
- 그래픽 기반의 구조적 분석모델
- Usecase - 사용자 기반 모델링
- Decision Table - 의사결정을 위한 확률과 사례표기
- ER 모델링 - Entity 관계표현

      - 명세 방식에 따라 정형 명세, 비정형 명세로 구분 가능

 

  나. 명세 원칙

     - 명확성, 검증성, 추적성, 수정성, 일관성, 완전성, 정확성, 이해성, 해석성

 

  다. IEEE 표준 요구사항 명세서 목차

구분 목차 내용
Overview 1. 개요 - 목적, 관련부서/관계자, 개발범위
2. 전체 개관 - 프로젝트 개요, 제품 기능(List), 사용자 특성, 운영환경, 규약과 배포, 가정과 의존성, 데이터 요구사항, 사용 시나리오
상세요구사항 3. 인터페이스 - 사용자 인터페이스, HW 인터페이스, SW 인터페이스
4. 기능 요구사항 - Function Name
5. 비기능 요구사항 - 성능 / 보안 / SW품질 요구사항, 비즈니스 룰

      - 공공 SW 사업의 경우 ‘요구사항 상세화 실무 가이드’ 참조 필요

 

03. 요구사항 변경 및 추적 관리

  . 요구사항 변경 관리 개요

     - 정의 : 요구사항의 Baseline 기준, 모든 변경의 공식적 통제 프로세스

     - 목적 : 변경에 대한 일관성, 무결성 확보

 

  나. 요구사항 변경에 따른 오류 발생 원인

구분 원인 설명
환경 측면 이해, 지식 변화 - 참여자의 새로운 이해, 지식 증가
시스템, 조직 변화 - 운영환경 및 조직의 변화
요구 측면 충돌, 불일치 - 요구사항의 상호 충돌/불일치
에러, 불충분 - 요구사항의 오류 및 상세화 부족
자원 측면 기술, 시간, 비용 문제 - 변경에 따른 필요 자원 변화 및 부족

    - 요구 사항 추적성을 통해 오류 감소 및 예방

 

 다. 요구사항 변경의 추적성 관리

   - 정의 : 요구 사항 문서내의 요구사항 단위별로  추적성을 정의하고 구성하는 프로세스

   - 특징 : 수직적/수평적 추적성, 순방향/역방향 추적성

  라. 추적 관리의 효과

구분 효과 설명
비용 - 재작업 감소 - 요구사항 누락 방지
- 생산성 증대 - 변경의 영향, 범위 검증
품질 - 요구사항 품질 향상 - 요구 사항의 명확성, 추적성, 테스트 가능성 향상
- 제품 품질 증가 - 요구사항과 테스트케이스 커버리지 확보
의사소통 - 일관성 확보 - 산출물 일관성 확보
- 협업 촉진 - 이해관계자간 의사소통 명확

 

[참고]

    * VDM (Vienna Development Method)

      - 시스템의 기능적인 요구사항만 한정하여 요구 명세와 검증 설계에 관한 검증 방법 제공하는 정형 명세 기법

 

   *  수학적 기반 기술

      - 수리, 논리 기반으로 시스템을 명세하는 기법, Z notation, B method, 수학적 기호 사용

 

   * FSM(Finite State Machin, 유한 상태 기계)

      - 여러 제한된 상태가 존재하며, 그 존재들이 특정 조건에 따라 상태 전이하는 개념적 모델

         . 장점 : ① 가질 수 있는 상태가 한정되며 한 번에 한 가지 상태만 보유

                      ② 내부 구조와 구현 용이

                      ③ 오류의 수정 용이, 유연성 보유

          . 단점 : 규모가 커지면 설계가 복잡, 제한된 범위의 문제에만 적용 가능

   * SADT(Structured Analysis and Design Technique, 구조적 분석 및 설계기법)

        -  시스템을 기능의 계층 구조로 설명하기 위한 시스템 엔지니어링 및 소프트웨어 엔지니어링 방법론

           . 장점 : 대규모 복잡한 문제 구조적 접근, 분할/통합 가능, 명료한 표기

 

IX. 소프트웨어 테스팅과 리팩토링

01. 테스팅 개념 및 프로세스

가) 테스팅 개념

①  테스팅 정의

    - 테스팅이란 어플리케이션 또는 시스템의 동작과 성능, 안정성이 사용자나 고객이 요구하는 수준을 만족하는지 확인이나 검증하기 위해 결함을 발견하는 방법

② 테스팅 원리

원리 설명
결함의 존재성을 밝히는 활동 - 결함을 발견하는 활동이기에 무결성 증명은 거의 불가능함
완벽한 테스팅 불가능 - 모든 경우에 수에 대한 테스팅은 불가능함
개발 초기 테스팅 수행 - 개발 기간 단축, 결함 예방, 비용감소 가능
살충제 패러독스 - 반복적인 동일한 테스트로는 새로은 버그 발견이 불가능함
정황 의존적 테스팅 - 분야에 따라 접근 방법, 우선 순위, 심각도 상이
오류-부재의 궤변 - 사용자의 기대에 부응하지 않는 경우 테스트를 통한 결함 발견, 수정이 무의미함

- 테스트를 통해 결함 예방, 비용감소 등의 긍정적인 영향도 있지만, 테스트를 한다고 해서 모든 프로그램이 완벽하다고 신뢰할 수 는 없다.

 

나) 테스팅 프로세스

프로세스 주요활동
테스트 계획과 통제 - 테스트 목적/목표 설정 및 대상 연구
- 테스트 전략 개발 및 리스크 분석
- 전략 수립 및 테스트 완료 조건
테스트 분석과 설계 - 테스트 베이시스 검토
- 테스트 상황/요구사항/데이터 식별
-테스트 기법 할당
- 테스트 용이성(Testability) 평가
- 테스트 환경 구축
테스트 구현과 실행 - 테스트 케이스 명세화 : 우선순위 선정, 데이터 생성, 프로시저 작성
- 선행 테스팅
- 테스팅 실행 및 결과 기록
- 기대결과와 비교
완료 조건의 평가와 리포팅 - 완료 조건의 달성 여부 확인
- 최초 테스트 보고서 작성
테스트 마감활동 - 산출물 확인, 테스트웨어 보관
- 테스트 프로세스 평가

*테스트 웨어? 테스트를 계획, 설계, 실행하는 프로세스 동안 생성된 산출물

- 테스팅은 다양한 구성요소를 포함하는 프로세스를 중심으로 조정되고 관리되어야 함

 

다) 테스트 설계

①  테스트 설계 개요

    - 테스트 케이스를 도출/수행하여 테스팅의 진행사항을 보장하기 위해 사용 됨

 

②  테스트 케이스의 구성

구성항목 내용
테스트케이스 ID - 테스트케이스를 식별하기 위한 번호나 식별자
테스트케이스명 - 테스트 내용을 간단 명료하게 표현한 설명
사전조건 - 테스트 수행에 필요한 구동환경이나 테스트 데이터 등 사전조건에 대한 정보
테스트 수행절차 - 구체적인 테스트 수행 단계로 최대 7단계 이내로 작성
기대결과 - 테스트 수행 후 의도한 대로 동작 했는지 판단하는 근거
결과(합격/불합격) - 테스트 케이스의 수행 결과
추적성 - 테스트 케이스와 관련된 요구사항 및 적용된 기법 등에 대한 정보
중요도 - 시간적 제약이 있을 경우 테스트 대상을 선별하기 위한 기준
비고 - 테스트 케이스 작성 의도 및 목적 등에 대한 관련 내용 기술

 - 테스트 케이스는 특정 테스트 조건을 확인하기 위해 작성됨

 

③ 테스트 케이스 설계 기법

구분 기법 설명
명세 기반 기법 동등 분할
(Equivalence Partitioning)
- 동등하게 분할된 영역에서 대표 값으로 수행하도록 테스트 케이스를 설계하는 기법
경계값 분석
(Boundary Value Analysis)
- 경계부분에서 결함이 발견될 확률이 높기 때문에 경계값을 포함하여 테스트 케이스를 설계하는 기법
페어와이즈 조합 테스팅
(Pairwise Testing)
- 테스트에 필요한 각 값들이 다른 값들과 최소 한번씩 조합을 이루게 테이블을 만들고, 그에 따라 테스트를 수행하는 기법
결정 테이블 테스팅
(Decisiion Table Testing)
- 텟트 케이스가 결정 테이블에 표시된 입력값과 원인의 조합을 테스트하도록 설계하는 기법
상태전이 테스팅
(State Transition Testing)
- 상태 전이도를 기반으로 이벤트, 액션, 활동, 상태, 상태전이 사이의 관계를 설계하는 기법
유스케이스 테스팅
(Use Case Testing)
- 시스템이 유스케이스로 모델링 되어있을 때, 유스케이스에서 테스트 케이스를 도출하는 기법
구조 기반 기법 제어흐름 테스팅
(Control Flow Testing)
- 컴포넌트나 시스템을 통해 실행될 때 모든 가능한 이벤트 흐름(경로) 구조를 테스트할 수 있게 설계하는 기법
커버리지 테스팅
(Coverage Testing)
- 시스템 또는 소프트웨어의 구조가 테스트 스위트(Test Suite)에 의해 테스트된 정도인 커버리지를 달성학 위해 테스트 케이스를 설계하는 기법
최소비교 테스팅
(Elementary Comparison Testing)
- 변형 조건/결정(Modified Condition/Decision) 개념을 사용하여 입력 값의 조합을 테스트하도록 테스트 케이스를 도출하는 테스트 설계기법
경험 기반 기법 탐색적 테스팅
(Exploratory Testing)
- 테스터가 테스트를 수행하면서 테스트를 수행하는 동안 얻은 정보를 활용하여 비공식적인 테스트를 설계하는 기법
분류 트리 기법
(Classification Tree Method)
- 분류 트리로 표현된 테스트 케이스를 입력 및 출력 도메인의 대표 값을 조합하여 수행하도록 설계하는 기법

  - 테스트 설계 기법은 테스트 베이시스의 참조 기준으로 기법이 분류됨

 

02. 테스팅 유형 및 기법

가) 테스팅 유형

①  테스트 레벨 유형

 - 각 유형 별 테스트에서 테스트 수행의 주체, 목적, 환경 등을 고려하여 테스트를 수행

 

②  테스트 유형

테스트 유형 목적 수행 주체 환경
인수 테스트 - 요구사항과 일치성 확인 - 사용자 - 사용자 환경
시스템 테스트 - 실제환경과 유사한 환경에서 전체 기능, 비기능적 테스트 확인 - 테스트 조직 - 실제 사용자 환경과 유사한 환경
통합 테스트 - 단위 모듈 간의 인터페이스에서 결함 발견 - 개발 조직 또는 테스트 조직 - 개발 환경 또는 테스트 환경
단위 테스트 - 단위 모듈 내의 결함 발견 - 개발 조직 - 개발 환경

  - 테스트 레벨 별로 목적, 수행주체, 환경에 따라 테스트 케이스를 도출하기 위해 참조되는 개발 산출물을 상세하게 정의해야 함

 

나) 테스팅 기법

- 테스팅 기법은 화이트 박스 테스팅과 블랙박스 테스팅 기법으로 구분됨

 

① 화이트 박스 테스팅 기법

 - (정의)  원시코드를 보고 실행을 변경하면서 검사를 수행하는 기법

종류 설명
기초 경로 검사
(Base Path Testing)
- 코드의 복잡성을 측정하도록 하는 테스트 기법
제어 구조 검사
(Control Structure Testing)
- 논리적 조건, 반복 구조, 데이터 흐름 테스트
- 조건 검사(Condition Testing) : 논리적 조건 테스트 수행
- 반복 검사 (Loop Testing) : 반복 구조에 초점을 맞추어 테스트 수행
- 데이터 흐름 검사(Data Flow Testing) : 변수 정의, 사용 위치 초첨

 - 화이트 박스 테스트의 검증 기준은 문장, 분기, 조건, 분기/조건 으로 분류됨

 

② 블랙 박스 테스팅 기법

 - (정의)  사용자의 요구사항 명세에 따라 각 기능이 정상적으로 작동되는지 입증하는 기능 테스트 기법

종류 설명
동치분할 테스트
(동치 클래스 분해)
(Equivalence Partitioning Testing)
- 어떤 값이 입력되었을때 예상되는 결과값을 테스트케이스로 잡고 실제로 테스트 했을때 예상되는 결과값이 나오는지 확인하는것
경계값 분석
(Boundry Value Analysis)
- 입력 조건의 중간값 보다 경계값에서 오류발생 확률이 높기 때문에 경계값을 테스트 케이스로 선정하여 검사하는 기법
원인-효과 그래프 검사
(Cause-Effect Graphing Testing)
- 여러 입출력 데이터를 분석해서 영향을 미치는 상황을 체계적으로 분석한 다음 효율성이 높은 테스트 케이스를 선정하는 기법
오류 예측 검사
(Error Guessing)
- 과거의 경험이나 확인자의 감각으로 테스트 수행
비교 검사
(Comparison Testing)
- 동일한 테스트 케이스를 여러 버전의 프로그램에 적용하여 동일한 결과가 출력되는지 비교하는 테스팅 기법

 - 요구사항 명세대로 소프트웨어가 동작하는지 초점을 맞춘 테스트 기법

 

03. 리팩토링

가) 리팩토링 개념 

① 리팩토링 개요

 - (정의) 소프트웨어의 외부적 기능은 수정하지 않고, 내부 구조, 관계 등을 단순화 하여 유지보수성을 향상시키는 품질 향상 기법

 - (목적) 유지보수성 향상, 유연한 시스템, 생산성 향상, 품질 향상

 

② 리팩토링 수행 절차

대상 선정 유지보수, Inspection, XP 방법론 적용
조직 구성 - 멘토 역할의 선임자와 복합 구성
수행 통제 - 변경 관리, 형상관리 수행, CCB 통제
수행 기법 - 디자인 패턴, AOP 수행
테스트 - 단위/통합 테스트, 회귀 테스트
결과 정리 - 문서화, 현행화, 운용 시스템 적용

- 리팩토링은 소규묘 변경 후 동작 여부를 테스트 하고, 정상 동작하는 경우 다음 리팩토링 단계로 전진하는 방식으로 진행

 

나) 코드스멜(Code Smell) 개념

① 코드스멜의 정의

 - 읽기 어렵거나 중복된 로직을 가진 프로그램처럼 개발자가 이해하거나 유지보수하기 어려워 리팩토링의 대상이 되는 소스코드

 

② 코드스멜의 종류

종류 설명
중복된 코드 - 기능이나 데이터 코드가 중복 작성
너무 긴 메소드 - 메소드 내부의 과도한 길이
방대한 클래스 - 한 클래스에 너무 많은 속성과 메소드 존재
과다한 매개변수 - 하나의 메소드가 받는 다수의 매개 변수
두가지 이유로 수정되는 클래스 - 한 클래스의 메소드가 2가지 이상의 이유로 수정될 경우, 해당 클래스는 한가지 종류의 책임만을 수행하지 않음
여러 클래슬를 동시에 수정 - 특정 클래스를 수정하면 그때마다 관련된 여러 클래스들 내에서 자잘한 변경 수행 필요
데이터 뭉치 - 합쳐서 다뤄야 할 데이터가 한 클래스에 존재하지 않음
기본 타입 집착 - 클래스를 만들지 않고 int 같은 기본 타입만 사용
스위치 문 - swich 문이나 if 문으로 동작을 나눔
게으른 클래스 - 클래스의 역할 없음
의심스러운 일반화 - 과도한 일반화
클래스 인터페이스 불일치 - 클래스 인터페이스(API) 부적절성
불완전한 라이브러리 클래스 - 기존 라이브러리 클래스 사용의 어려움
평행상속 - 하위 클래스를 만들면 클래스 계층의 다른 곳에도 하위 클래스를 만들어야 함
주석 - 코드의 모자란 부분을 설명하기 위한 너무 자세한 주석

- 코드의 복잡도 및 이해하기 쉽게하기 위한 클린 코드의 필요성 증대

*클린코드(Clean Code) ? 코드를 작성한 의도와 목적이 명확하여 다른 사람이 쉽게 읽을 수 있도록 설계자의 의도를 반영하여 단순하고 직접적으로 작성된 코드

 

다) 대표적인 리팩토링 기법

리팩토링 기법 설명
메소드 정리 Extract Method - 그룹으로 함께 묶을 수 있는 코드 조작이 있을 때 코드의 목적이 잘 드러나도록 메소드 이름을 지어 별도의 메소드로 뽑아내는 작업
Replace Parameter with Method - 객체가 메소드를 호출한 다음, 결과를 다른 메소드에 매개변수로 넘기면 수신자가 그 메소드를 호출하도록 작업
객체 간 기능 이동 Extract Class -  두개의 클래스가 할 일을 하나의 클래스가 하는 경우 새로운 클래스를 만들어 관련있는 필드와 메소드를 예전 클래스에서 이전
Extract Subclass - 어떤 클래스가 일부 인스턴스에 의해서만 사용되는 기능을 가지고 있는 경우 인스턴스만 사용하는 기능을 담당하는 서브클래스를 생성
Extract Interface - 여러 클라이언트가 한 클래스의 인터페이스의 동일한 부분 집합을 사용하고 있는 경우 부분 집합을 인터페이스로 뽑아내는 방법
이름 Rename Method - 타입이 내장되어 있는 이름은 타입에 연관되지 않으면서 의도를 잘 전달할 수 있는 이름으로 변경
추측성 일반화 Inline Method - 메소드의 본문이 메소드 이름만큼 명확하다면 해당 본문을 메소드를 호출하는 호출자 안으로 옮기고 메소드를 삭제
Collapse Hierarchy - 수퍼클래스와 서브클래스가 별로 다르지 않다면 하나로 통합하는 방법

- 리팩토링 시 코드에 대한 과도한 수정이 필요하거나, 적합하지 않은 인터페이스에 대해서는 무리한 리팩토링은 시스템의 불안정성을 유발할 수 있음

01. 사용자 인터페이스(User InterFace) 개요

  . 정의

    - 사용자와 시스템이 정보를 주고받는 상호 작용이 잘 이루어지도록 하는 장치 혹은 소프트웨어

  나. 설계시 고려사항

    - 일관성 필요 : 사용자 인터페이스가 일관성을 가지기 위해 표준안을 만들고, 이를 점검하여 오류를 수정

    - 사용자 중심 설계 : "입력 및 출력 언어"를 사용자가 쉽게 배울 수 있도록 설계

    - 피드백 : 사용자가 잘못 버튼을 누르거나 잘못된 연산을 수행하고자 할때 자신의 잘못을 쉽게 파악 가능

    - 파괴적인 행동에 관한 확인 : 사용자가 자료 또는 파일을 지우려고 하면 이를 실행에 옮기기 전에 확인 필요

 

02. 사용자 경험(User Experience) 개요

  . 정의

    - 사용자의 환경을 개선하려는 설계자의 사고와 행동

    - 사용자가 어떤 시스템, 서비스를 통해 목적을 이루려 할 때 느끼는 경험, 감정, 지각, 태도, 반응의 종합적인 경험을 말하고, 사용자를 위해 편리한 화면 설계와 환경을 연구하고 서비스를 기획하는 과정

  나. UX와 UI의 차이점

UX UI
과정 결과
그룻 음식
기획 디자인
감성 이성

    - UX는 보이는 것에 대한 경험을 말하고, UI는 사용자에게 보이는 인터페이스 그 자체

 

03. UI/UX 설계 도구

분류 상세분류 도구
MAKE 팀 운영 및 관리(Organizing Information) GitHubTrello
와이어 프레임(Wire-frames) Microsoft Visio, moqups
프로토타이핑(Prototyping) Adobe Photoshop, ketch3
Check 시각적 분석(Visual Analytics) BeusableClicktale
분석 및 매트릭스(Analytics & Metrics) Google Analytics, Mixpanel
AB테스팅(AB Testing) Google Optimize, Optimizely
행위기록(Record Users) Beusable, hotjar
Think 사용자 모집(Recruiting Users) Pivot Planet, Clarity
온라인 설문(Online Surveys) Polldaddy, hotjar
사용자 피드백(Capture In-Site Feedback) LiveChatmouseflow
원격테스팅(Testing layouts Remotely) ChalkmarkUsabilityHub

 

 

 

관련 링크

 1. Topic >  사용자 경험(UX, User Experience)

[TOPCIT 목차]

 

1. 객체 지향 분석과 모델링 개념

- 객체 지향 분석 : 주어진 요구 사항을 실세계에 존재하는 객체의 집합으로 보고 컴퓨터 세계로 가상화하는 과정

- 모델링 : 대상 시스템의 성능 또는 동작과정을 간단히 도식화하거나 수학적으로 표현하는 과정

- 객체 지향 모델링의 세가지 관점

- UML등의 툴을 사용하여 모델링한 후 설계에서 연속적으로 사용

- 기능 모델링 : Activity Diagram

- 동적 모델링 : Sequence Diagram

- 정보 모델링 : Class Diagram 

 

2. 객체 지향 설계와 원리

분석은 고객 관점의 개념적 차원이며, 설계는 구현 세부 사항 및 물리적 실현 방법 제시

 

가) 객체와 클래스

  - 객체: 독립적으로 존재하는 실세계의 사물로 속성 정보를 포함

  - 클래스 : 동일 속성 정보를 가지는 객체들의 집합

  - 클래스와 객체의 관계 : 객체 = 클래스의 인스턴스 (ex. 학생(클래스), 객체(김철수, 이영희))

 

나) 캡슐화(Encapsulation)

  - 정보의 은닉을 통한 추상화, 독립성 향상 방법으로 속성과 오퍼레이션을 함께 묶어 보호하는 방법

 

다) 상속(Inheritance)

 - 일반화된 속성을 가지는 상위 클래스가 하위 클래스에게 속성을 상속

 - 상위 클래스 : 사람 (이름, 주민번호) => 하위 클래스 : 학생(+ 학번), 교수(+직원번호) 

 

라) 다형성(Polymorphism)

 - 동일한 이름의 오퍼레이션이 다른 동작을 하는 것

 - 오버로딩과 오버라이딩이 있음

 - 오버로딩 : 다중 메소드로 구현, 입력 변수와 타입을 달리함

 - 오버라이딩 : 하위 클래스에서 상속받은 메소드를 재정의

3. 정적 모델링과 동적 모델링

가) 정적 모델링

 - 시간의 개념이 개입되지 않은 객체의 정적인 정보

- 객체의 속성과 객체들 사이의 연관성을 나타내는 관계가 대표적임

나) 동적 모델링

 -  객체의 상태나 동작의 변화, 객체들 사이의 상호 작용을 표현

 

 

4. 디자인 패턴

가) 디자인 패턴 개념

 - 소프트웨어 설계의 특정한 맥락에서 반복해서 해결해야 할 문제에 대해서 일반적이고 재사용이 가능한 해결 방법

 - 목적 및 범위에 따른 분류

나) 대표적인 디자인 패턴

[부록] 객체지향설계원칙 (SOLID)

 

① 단일 책임 원칙(SRP: Single-Responsibility Principle)

클래스를 변경해야 하는 이유는 오직 하나여야 한다.

② 개방 폐쇄의 원칙(OCP: Open-Closed Principle)

확장(상속)에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.

리스코프 교체의 원칙(LSP: Liskov Substitution Principle)

기반 클래스는 파생 클래스로 대체할 수 있어야 한다.

=> 모든 메소드를 상속받도록 설계할 것. 이 경우 상호 대체 가능하며, 변경이 최소화된다. 

④ 의존 관계 역전의 원칙(DIP: Dependency Inversion Principle)

클라이언트는 구체 클래스가 아닌 추상 클래스(인터페이스)에 의존해야 한다.

=> 슈퍼클래스 자체를 추상화하거나 메소드만 추상화(인터페이스)하면, 실제 사용시 슈퍼클래스가 하위클래스를 참조하는 "의존관계역전"이 생기므로 이런 이름이 붙었음

⑤ 인터페이스 분리의 원칙(ISP: Interface Segregation Principle)

하나의 일반적인 인터페이스보다는 구체적인 여러 개의 인터페이스가 낫다.

+ Recent posts