ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 소프트웨어 공학(1)
    Computer Science/SW Engineering 2021. 12. 9. 23:05

    소프트웨어

    -   개발 비용은 소프트웨어 프로세스에서 적은 비중을 차지
    -   유지 보수 비용이 개발 비용보다 크다.
    -   요구사항은 지속적으로 바뀐다.

    소프트웨어 제품의 유형

    -   일반 소프트웨어 → 어떤 고객이던 구매 가능, 현재는 맞춤식 SW도 반영
    -   맞춤식 소프트웨어 → 특정 고객에게 맞춤, 고객이 SW 명세를 개발하고 통제

    좋은 소프트웨어의 특성

    -   수용성 : 설계 목적에 부합하는 사용자를 수용할 수 있어야 한다.
    -   확실성 : 시스템에 장애가 발생하더라도 경제적 피해를 야기하면 안된다.
    -   보안성 : 악의적인 사용자가 시스템에 피해를 입힐 수 없어야한다.
    -   효율성 : 시스템 자원을 낭비하면 안된다.
    -   유지보수성 : 고객의 요구를 충족시킬 수 있도록 진화할 수 있어야한다.

    공통의 기본 소프트웨어 프로세스 활동

    1.  소프트웨어 명세(Specification) : 기능, 제약사항 정의
    2.  소프트웨어 개발(Development) : 명세를 충족하는 설계 및 구현
    3.  소프트웨어 검증(Validation) : 고객의 요구에 일치하는지 검증
    4.  소프트웨어 진화(Evolution) : 고객 요구의 변화에 따라 수정

    소프트웨어 프로세스 모델 → 프로세스를 추상적으로 표현

    -   폭포수 모델 (The waterfall model)
        -   계획주도 모델 (plan-driven model) → 개발 시작 전 모든 활동 및 일정을 계획
        -   각 단계 별 결과로 하나 이상의 문서가 산출
        -   각 단계 결과물을 점검하여 다음 단계 이전에 피드백
        -   요구사항이 명확한 설계일 때 관리가 쉽다.
        -   프로세스가 엄격하여 변화 대응이 어렵다.
        -   단계
            -   요구사항 분석 및 정의 : 서비스, 제약조건, 목표를 설정하고 구체화하여 명세서로 사용
            -   시스템/소프트웨어 설계 : 요구사항을 통해 전체 시스템 아키텍처와 관계를 파악
            -   구현 및 단위 테스트 : 여러 기능과 각 기능 별 단위 테스트 진행
            -   통합 및 시스템 테스트 : 프로그램을 통합하고 요구사항에 만족하는지 전체 시스템 검사
            -   운영 및 유지보수 : 오류 수정 및 개선, 새로운 요구사항 발견
    -   V-model
        -   폭포수 모델에서 파생
        -   각 단계 별 테스트 강화, 변화 대응 불가
    -   점증적 개발 (Incremental development)
        -   여러 버전을 거쳐 소프트웨어를 진화시킴
        -   변화 대응 비용과 폭포수 대비 재작업 비중이 낮아진다.
        -   고객의 피드백 반영이 보다 쉽고 빠른 소프트웨어 개발 및 배포가 가능하다.
        -   결과물 판단이 어려워 일정 관리에 문제가 있다. → 정기적 산출물 필요
        -   증가분이 반영되면 시스템 구조의 품질이 낮아진다. → 정기적 리팩토링이 필요
        -   단계
            -   개요 설명 : 시스템 요구사항을 대략적으로 정의
            -   주기적 반복
                -   명세화
                -   개발
                -   검증
    -   통합 및 환경 설정 (Integration and configuration)
        -   기존의 코드를 찾아 수정하고 새로운 코드와 통합한다. (재사용)
        -   소프트웨어 개발 비용 및 위험 감소
        -   빠른 개발 및 배포(전달) 가능
        -   요구사항을 명확하게 만족하지 못하고 실 수요를 위해 계속 변경해야할 수 있다.
        -   시스템 진화의 주도권 상실
        -   사용할 수 있는 컴포넌트
            -   통합 가능한 컴포넌트나 패키지
            -   스탠드얼론 시스템
            -   표준 웹 서비스
        -   단계
            -   요구사항 명세화 : 시스템에 대한 초기 요구사항 제안, 간략한 설명
            -   소프트웨어 발견 및 평가 : 필요한 기능을 가지는 후보군 평가
            -   요구사항 정제 : 발견한 컴포넌트를 통해 요구사항을 수정 및 재정의, 필요한 경우 컴포넌트 재탐색
            -   어플리케이션 시스템 설정 : 요구사항을 만족하는 독립 시스템이 있다면 설정하여 사용
            -   컴포넌트 수정과 통합 : 없다면 재사용 가능한 컴포넌트를 수정하여 통합

    프로세스 액티비티

    -   소프트웨어 명세
        -   서비스가 요구하는 바가 무엇인지 확립
            1.  요구사항 도출과 분석 : 이해관계자의 요구 파악
            2.  요구사항 명세화 : 분석 결과로 상세한 문서 작성
            3.  요구사항 검증 : 현실성 및 일관성 검사
    -   소프트웨어 설계 및 구현
        -   구현할 구조, 사용할 데이터 모델, 컴포넌트 간 인터페이스 및 알고리즘
            -   아키텍처 설계 : 전체 구조, 주요 컴포넌트 및 그 관계
            -   데이터베이스 설계 : 시스템 데이터 구조 설계
            -   인터페이스 설계 : 컴포넌트 간 인터페이스 정의
            -   컴포넌트 선택 및 설계 : 재사용 컴포넌트 발견 및 새로운 컴포넌트 설계
    -   소프트웨어 검증
        -   소프트웨어 명세와 고객 요구사항 반영을 검증
        -   V & V (verification & validation) 과정은 대부분 테스팅
            -   컴포넌트 테스트 : 개별 컴포넌트 테스트
            -   시스템 테스트 : 전체 및 상호작용 테스트
            -   고객 테스트 : 고객 요구사항 확인 및 오류 탐색
    -   소프트웨어 진화
        -   개발과 유지보수의 구분이 모호 → 연속적 활동
            -   기존 시스템 평가 → 변경 제안 및 수정 → 기존 시스템으로 통합

    변화 대응 (Copying with change)

    -   큰 SW일 수록 보수가 필요하다.
    -   비즈니스 환경 변화가 시스템 요구사항에 영향을 미친다.
    -   재작업에 대한 비용 감소 방안
        -   변경 예측 : 프로토타입을 통해 미리 요구사항 변화를 예측하고 개선
            -   프로토타입 (Prototype)
                -   고객은 개발 결과를 모름
                -   시스템의 일부나 한 버전을 빠르게 개발하여 사용자에게 인도
                -   요구 공학에서 요구사항 도출 및 검증에 도움을 줄 수 있다.
                -   UI 개발에 사용할 수 있다.
                -   프로토타입의 목표와 기능을 명확히 해야한다.
                -   유용성, 설계 품질, 유지보수성 향상
                -   실수요 충족 및 개발 비용 감소
                -   기능 요구사항에 초점을 맞춰 품질이 저하 → 검증 이후 폐기
                -   설계 문서 X
        -   변경 허용 : 점증적 개발을 통해 시스템 변경이 쉽도록 설계
            -   점증적 인도 (Increment delivery)
                -   변경 회피와 허용 모두 제공
                -   높은 우선 순위의 서비스 우선 구현 및 전달
                -   개발을 마친 증가분을 고객에게 전달 (점증적 개발과의 차이점)
                -   추가 요구사항 분석 및 다음 증가분에 적용
                -   우선 사용으로 재학습 비용 감소 및 빠른 이용
                -   중요한 서비스를 많이 테스트하여 오류 감소
                -   기존 시스템의 대체에는 부적절
                -   최종 증가분을 명세할 때 까지 완전한 시스템 명세 확보 불가 → 입찰 불가
                -   단계
                    -   요구사항 정의 → 요구사항 배정 → 설계 → 개발 → 기능 검증 → 기능 병합 → 시스템 검증 → 배포 → 개발 지속 or 완료

    애자일 기법

    -   계획 주도 개발은 신속한 개발에 부적합 → 애자일 주목
        -   계획, 설계, 문서화의 오버헤드가 크다.
        -   계획 > 개발
    -   애자일 기법 특징
        -   명세 - 설계 - 구현이 중첩 → 요구사항와 설계가 분리되지 않고 함께 발전
        -   문서를 최소화하여 개발 품질에 집중
        -   이해 당사자가 개발에 참여
        -   증가분의 연속으로 개발 (점증적 개발)
        -   여러 도구 사용
        -   중소 규모 개발, 외부 영향이 적은 조직에 적절
    -   애자일 기법 원칙
        -   고객 참여
        -   변화 수용
        -   점증적 인도
        -   단순성
        -   사람 우선
    -   사용자 스토리
        -   요구사항 대신 사용
        -   여러 카드로 표현, 카드는 태스크로 분할
        -   태스크 별 일정 및 비용 측정
        -   고객이 스토리를 선택하여 우선순위 결정
    -   리팩토링
        -   변경 및 코드 개선을 위해 리팩토링을 꾸준히 함
        -   다만 리팩토링이 전체에 영향을 주는 경우도 있다.
    -   테스트 우선 개발
        -   시나리오 기반의 점증적 테스트 개발
        -   테스트 자동화
        -   테스트 개발 및 검증에서 고객이 참여 (실 사례 기반)
        -   테스트 작성이 시스템을 암묵적으로 명세
    -   애자일 프로젝트 관리
        -   스크럼 애자일
            -   소규모 개발팀
            -   스크럼 회의
            -   스프린트
            -   백로그 : 할 일 목록
        -   스크럼 장점
            -   진척 사항 판단이 어려운 애자일에 유용
            -   불안정한 요구사항으로 인한 지연이 없다.
            -   의사소통 향상
            -   고객이 증가분을 제때 전달받고 피드백을 줄 수 있다.
    -   애자일의 단점
        -   법적 계약 등에 부적절
        -   유지보수에 부적절
        -   소규모에 적절
        -      제품 문서의 부족
        -   고객 참여나 개발팀이 지속적으로 유지될 때만 유용 → 장기 프로젝트에 부적절

    요구 공학

    -   사용자 요구사항 : 고객이 충분히 이해할 수 있어야 한다.
    -   시스템 요구사항 : 시스템 기능이나 제약사항을 상세히 기술해야 한다.
    -   시스템 이해 당사자
        -   실 사용자
        -   시스템 관리자, 소유자
        -   법, 규제
    -   기능적 요구사항
        -   시스템이 동작 해야하는 방식 기술 (무엇을?)
        -   이해가 쉬운 자연어로 작성
        -   시스템 입출력, 예외상황 설명
        -   완전성과 일관성 필요 → 자세하고 모순없이
    -   비 기능적 요구사항
        -   일반적인 목표 제시 → 모호하고 어려움 → 최소한의 척도를 제공
        -   서비스와 기능에 대한 제약 조건 (성능 등)
        -   개발 언어 및 방법을 명세할 수도 있다.
        -   시스템 전체의 속성이나 제약에 대해 정의
            -   성능, 보안, 신뢰도 등
        -   비기능적 요구사항에서 기능적 요구사항 파생 가능
        -   제품 요구사항 : 성능, 신뢰성, 보안, 사용성
        -   조직 요구사항 : 조작, 개발 언어 및 프로세스, 표준, 운영 환경
        -   외부 요구사항 : 규제, 법, 윤리
    -   요구공학 프로세스
        -   요구사항 도출(elicitation)
            -   이해관계자는 일반적 용어, 자기들의 용어로 표현
            -   서로 다른 요구사항, 정치적 요소
            -   경제-비즈니스 환경에 따라 바뀌는 요구사항
            -   프로세스
                1.  요구사항 발견 (이해 당사자들과의 상호작용)
                    1.  인터뷰
                        -   개방적 인터뷰, 폐쇄적 인터뷰 혼용
                    2.  관찰 또는 문화기술적 연구
                        -   사람들의 실제 일하는 방식 연구 → 잘 드러나지 않는 요구사항 발견
                    3.  스토리와 시나리오
                        -   실생활의 사례와 연관짓기
                        -   스토리 : 이야기하는 방식으로 작성(고수준)
                        -   시나리오 : 입출력, 정상흐름, 예외흐름, 시작 및 종료 등의 정보를 구조화
                2.  요구사항 분류 및 구성 (정리 및 조직화)
                3.  요구사항 우선순위 결정 및 협상
                4.  요구사항 문서화
        -   요구사항 명세(specification)
            -   사용자 및 시스템 요구사항을 문서로 작성
                -   설계 문서가 아님 → 시스템이 무엇을 할지 기술(어떻게X)
            -   사용자 요구사항 : 이해가 쉽고 기술적 배경 없음
            -   시스템 요구사항 : 기술적 정보를 자세히 작성
            -   계약에 사용될 수 있다 → 최대한 완벽하게 작성
            -   작성법
                -   자연어 명세
                    -   표현력이 높고 직관적, 범용적
                    -   전문용어를 피하고 기준 용어를 사용
                    -   요구사항의 근거 및 출처 기록
                    -   문제점
                        -   모호할 수 있다.
                        -   기능적, 비기능적 요구사항이나 여러 다른 요구사항이 혼합될 수 있다.
                -   구조적 명세
                    -   표준화돤 방식을 따라 작성
                    -   기능 정의, 입출력 설명, 동작, 사전-사후조건, 부작용 등
                -   시각적 자료, 수치표
                    -   보조 형태로 사용
                    -   테이블, 유즈케이스 다이어그램(상호작용)
        -   요구사항 검증(validation)
            -   점검 항목
                -   유효성 : 사용자의 실제 요구를 반영하는지?
                -   일관성 : 요구사항에 모순이 없는지?
                -   완전성 : 모든 기능과 제약사항이 포함되어 있는지?
                -   실현성 : 기술, 예산, 시간의 부족함이 없는지?
                -   검증가능성 : 문서 및 테스트로 검증 가능한지?
            -   점검 기법
                -   요구사항 검토
                -   프로토타입
                -   테스트 케이스
            -   요구사항 리뷰
                -   정기적으로 이해관계자를 포함하여 의사소통
                    -   정형적 or 비정형적

    시스템 모델링

    -   요구공학 중에 사용
    -   UML 사용
    -   엔지니어에게 설명하기 위해 사용
    -   모델
        -   컨텍스트 모델(외부 관점)
            -   시스템의 경계를 결정 → 시스템 요구사항에 영향을 미침
            -   시스템 동작, 기능의 범위를 결정
            -   사회-조직적 관심에 따라 달라질 수 있다.
            -   시스템과 연관된 다른 시스템 간의 관계
            -   액티비티 다이어그램
        -   상호작용 모델(상호작용 관점)
            -   유저, 시스템 간, 컴포넌트 간 상호작용 존재
            -   시스템 성능, 의존성을 충족시킬 수 있는지?
            -   유스케이스 다이어그램, 시퀀스 다이어그램
        -   구조적 모델(구조 관점)
            -   내부 컴포넌트 간의 관계 표현
            -   정적 모델, 동적 모델
            -   시스템 아키텍처 설계
            -   클래스 다이어그램
        -   행동 모델(동작 관점)
            -   시스템이 자극에 대해 반응할 때 무엇이 일어나는지, 무엇이 의도되었는지
            -   자극 : 데이터, 이벤트
            -   데이터 주도 모델링
                -   데이터 처리에 중점
                -   데이터 입력에 영향 액션의 순서(연속적으로)로 표현
                -   직관적, 이해당사자들의 접근 용이
                -   액티비티 다이어그램, 시퀀스 다이어그램
            -   이벤트 주도 모델링
                -   유한한 수의 상태의 전이를 기반으로 한다.
                -   내부-외부 이벤트에 대한 반응을 표현
                -   실시간 시스템에 유용
                -   상태 다이어그램
    -   다이어그램
        -   액티비티 : 프로세스, 데이터 처리
            -   액션으로 이루어진 state
            -   분기
            -   경계
        -   유즈케이스 : 시스템과 환경 간의 상호작용
            -   상호작용을 개략적으로 표현
        -   시퀀스 : 액터, 시스템 컴포넌트 간 상호작용
            -   유즈케이스를 액터, 객체 기반으로 순서대로 자세히 표현
        -   클래스 : 클래스 간 연관
            -   객체 지향 시스템에서 사용
            -   1대1, 1대다, 다대다 관계
            -   클래스, 속성, 오퍼레이션
            -   일반화 관계 : 상속
            -   집합 관계 : 독립적 구성요소
            -   복합 관계 : 종속적 구성요소
        -   상태 : 내-외부 이벤트 반응
            -   상태 변화를 표현
            -   이벤트를 선택하지 않고 그 선택에 반응
            -   노드 = 현재 상태
            -   행동 결과를 표현
    -   모델 주도 계획

    댓글

Designed by Tistory.