[1] 요구사항의 정의
- 요구사항 (requirements)
- 시스템이 제공해야 할 역량 (capability)
- 외형적으로 나타내는 기능이나 성능
- SW 시스템이 수행해야 할 것과 SW 시스템에 있어야 할 특성을 명시적으로 기술한 문장
- SW 개발 기준
- 여러 이해 당사자 (stakeholder)의 이해 관계와 관련되어 있다.
- SW가 무엇을 해야 하는가를 표현해야 한다.
- 프로젝트 실패의 가장 중요한 이유는 명확하지 못한 요구사항 정의이다. 요구 사항은 각각의 position에서 해석해도 문제가 없게끔 정의해야 한다.
[2] 요구사항의 분류
- 기능 요구
- 고객이 요구하는 시스템이 처리할 기능
- 업무 절차나 기계 동작을 실현한 것
- 동사로 표현된다.
- 쉽게 파악된다.
- 제품 기능을 의미한다.
- 사용 사례로 정리할 수 있다.
- UML : 객체 지향 방법론이 제공하는 양식
- UseCase : 기능 설명 시 사용
- 기능적 요구 (functional requirements)
- 시스템이 외형적으로 나타내는 기능과 동작
- 시스템과 외부 요소들 간의 interaction (어떤 상태일 때 외부의 데이터나 명령을 받아들여 어떤 반응을 하는지 기술하는 것이다.)
- 구현 기술과는 독립적이어야 한다.
- Ex. 도서관 정보 시스템
- 사용자가 전체 도서 데이터베이스 또는 선택한 일부 데이터베이스에서 검색이 가능해야 한다.
- 모든 도서 대출은 고유번호가 주어지고, 사용자 정보에 저장되어야 한다.
- 비기능 요구
- 요청된 기능 이외에 시스템이 갖추어야 할 조건, 특징
- 응답 속도, 고장에서 회복되는 기간, 보안 등
- 기능보다 더 중요한 사안이 될 수 있다.
- 형용사로 표현된다.
- 파악하기 어렵다
- 주로 제품 속성을 이야기 한다.
- 비기능적 요구 (non-functional requirements)
- 성능, 사용용이성, 보안 등 기능 이외의 사항
- 시스템 구축이나 동작에 대한 제한 사항들
- 요구분석 이후 설계 단계에서 결정해야 언어, 플랫폼, 구현의 선택을 까다롭게 할 수 있다.
- 기능적 요구사항보다 더 중요할 수 있다.
[3] 요구사항 정의 품질
- 요구사항 정의 시 나타나는 치명적 과실
- 노이즈 발생 : 관련 없는 정보 포함, 모호한 표현
- 침묵 발생 : 언급되어야 할 사항의 누락
- 과도한 스펙 명세 : 결정되지 않은 구현 관련 사항 포함
- 모순 발생 : 전후 내용에 일관성이 없는 것
- 모호성 : 하나의 표현이 여러가지 의미로 해석
- 전방 참조 : 아직 정의하지 않은 사항을 참조
- 사실이 아닌 기대 사항 : 막연한 추측과 기대에 근거
- 요구사항 품질
- 원자적 (atomic) : 단일 목표를 가진 기능으로 표현, 간단한 문장으로 기술되어야 한다.
- 완전성 (complete) : 필요한 정보가 다 기술되어야 한다.
- 비모호성 (unambiguous) & 일관성 (consistent) : 앞뒤말이 다르지 않아야 한다.
- 추적성 (traceable) : 생성하는 모든 항목에 대해 번호를 부여하여 나중에 거슬려 올라갈 수 있게끔 해야 한다.
- 우선순위화 (prioritize) : 일정 관리에도 사용한다.
- 테스트 가능성 (testable) : 검증 가능한 요구사항이어야 한다.
[4] 요구사항 수집 기법
- 시스템이 수행하여야 할 것들에 대한 정보를 많은 정보원(information source)를 통해 수집
- 개인과의 인터뷰
- 작업자 관찰
- 업무 문서/양식 조사
- JAD (Joint Application Design)
- 프로토타이핑
[4.1] 인터뷰
- 인터뷰 및 탐문
- 운영과 현 시스템의 이슈, 앞으로의 조직 활동에 따른 시스템에 대한 요구사항 등에 관해서 인터뷰 수행
- 진술, 의견, 견해 등을 수집
- 몸짓과 감정을 관찰 (이것이 직접 만나는 이유이다.)
- 인터뷰 질문
- 개방형 질문 (Open-Ended) : 사전에 정의된 답변이 아닌, 예기치 못한 답변을 이끌어 내는 데에 사용한다.
- 폐쇄형 질문 (Close-Ended) : 응답자는 사전에 정의된 응답 중에서 답을 선택하도록 요청 받는다. 질문에 대한 흔한 답변이 알려져 있을 때 매우 유용하다. 많은 시간이 필요하지 않기 때문에 많은 수의 토픽들을 다룰 수 있다.
- 효과적인 인터뷰를 위한 지침
- 인터뷰 일정의 수립 : 대상자들에게 인터뷰 목적을 설명하고 일정을 약속, 인터뷰를 위한 체크리스트, 의사일정, 질문 등을 준비
- 중립적인 인터뷰 : 유도심문을 피해야 한다.
- 인터뷰 내용의 기록과 검토 : 인터뷰 수행 후 48시간 이내에 인터뷰 일지를 검토해야 한다.
- 다양한 관점을 유지 : 잠재적 사용자와 관리자 등 넓은 폭의 사용자들을 대상으로 인터뷰를 수행해야 한다.
[4.2] 작업자 관찰
- 사용자 직접 관찰하기
- 정해진 시간에 작업자를 관찰하여 데이터가 어떻게 다루어 지고, 업무를 위해 필요로 하는 정보가 무엇인지를 파악
- 인터뷰를 보완하는 좋은 방법
- 대부분 편견이 없는 데이터를 얻기가 어렵다. 사람들은 관찰을 당하고 있으면 대부분 본심과 다르게 행동하기 때문이다.
[4.3] 업무 문서의 분석
- 조직에서 사용하는 데이터와 정보에 대한 구체적인 사례, 보고된 이슈, 정책, 규칙 등을 발견하기 위함이다.
- 문서를 통해 찾을 수 있는 정보의 유형
- 기존 시스템의 문제 (결여된 정보, 중복된 절차 등)
- 조직이 추구하는 방향 (Ex. 고객 및 공급자와의 긴밀한 관계)
- 주요 사용자들의 직위와 이름 (Ex. 고객 행위 분석을 담당하는 영업 관리자)
- 조직의 가치 판단 기준 (Ex. 수익보다는 시장 점유율)
- 데이터, 데이터 처리 규칙, 조직의 운영 원리
[4.4] JAD
- 합동응용시스템설계 (Joint Application Design)
- 회의 유형
- 최종 사용자와 정보시스템 전문가가 한자리에 모인 대화의 자리에서 시스템 설계를 논의 (조율, 일주일 정도 내내)
- 주 사용자, 관리자, 시스템 분석가를 모이게 한다.
- 목적 : 주요 사람들로부터 시스템 요구사항을 동시에 수집하기 위함이다.
- 사용자 참여를 유도하여 시스템 설계를 가속화 환다.
- 최종 결과 형태
- 기존 시스템에 대한 자세한 문서
- 제안된 시스템의 특성에 대한 자세한 문서
- JAD 회의를 위한 일반적인 회의실 상태은 토론 형식이다.
- 문제점 : 비용, 시간, 편향
- 최근에는 e-JAD로 그룹웨어를 이용한 JAD를 실현
[4.5] 프로토타이핑 (Prototyping)
- 시스템 초기 버전이 빠르게 구축될 수 있다.
- 요구사항 조사 프로세스를 강화시킬 수 있다.
- 요구사항을 구체화 할 수 있다.
- 목적 : 최종 시스템을 개발하는 데에 있는 것이 아니고 최종 시스템의 구체적인 세부 내역을 개발하는 것에 있다.
- 가장 유용한 상황
- 사용자의 요구사항이 명확하지 않은 경우
- 적은 수의 사용자들이 관련되어 있는 경우
- 설계가 복잡해서 평가를 하기 위해서는 구체적으로 볼 수 있는 형태가 요구되는 경우
- 분석가와 사용자 간의 의사소통 문제가 발생했던 경험이 있는 경우
- 프로토타입을 만들 수 있는 도구들이 구비되어 있는 경우
- 사용자의 적극성에 따라 양상이 다를 수도 있다. 따라서 사용자의 참여가 중요하다.
[5] 요구사항 정의서
- SRS (SW requirement Specification)
- 사용자의 요구사항과 개발 관련 요구사항을 정의한 문서
- IEEE803 요구명세 표준을 따른다.
- 준수해야 할 사항
- 모든 요구사항에 유일한 식별자를 부여해야 한다.
- 각 요구사항은 문장의 5형식에 따라 그 의미를 정확히 표현해야 한다.
- 각 요구사항을 정의하는 문장은 복문이 아닌 단문으로 작성해야 한다.
- 요구사항에 대해 우선순위를 부여해야 한다.
- 요구사항을 그룹핑하여 체계화 해야 한다.
[6] SW 개발 방법론
- SW 개발에 관한 계획, 분석, 설계 및 구축에 관련된 방법과 절차, 도구 등 공학적인 기법으로 체계적으로 정리하여 표준화한 이론
- 필요성
- 작업의 표준화와 모듈화
- 효과적인 프로젝트 관리
- 표준화가 되면 관리하기 용이
- 정형화된(작게 분리된) 절차와 표준용어의 제공으로 의사소통 수단 제공
- 발전
- 주요 방법론
- 구조적(Structured) 방법론
- 프로세스 중심 (Process-oriented)
- 논리적 모델과 물리적 모델에서 분할하여 기능적 분해를 먼저 한 후 모듈로 구조화
- 정보공학 방법론
- 데이터 중심 (Data-oriented) 개발
- ER 모델링 (Entity-Relationship Modeling)
- 객체지향 (Object-oriented) 방법론
- SW를 데이터와 로직이 통합된 객체로 보고, 객체들의 정적 관계와 동적인 상호 작용을 모델링하는 방법
- 객체를 시스템 구성의 단위로 본다.
- 구조적(Structured) 방법론
분석 방법 | 프로그램 관점 | 분석 시 강조점 |
구조적 방법론 | 자료 + 함수 | 자료보다는 함수에 중점 프로세스를 먼저 정하고 프로세스에 대한 입출력을 나중에 정함 |
객체지향 방법론 | 객체 + 객체 | 객체와 객체 간의 관계 파악이 중요 객체가 가지는 자료와 연산 |
정보공학 방법론 | 자료 | 자료 및 자료들 간의 관계를 먼저 파악 자료에 대한 연산 패턴으로 프로세스를 그룹화 |
[6.1] 구조적 방법론
- Structured Development Mehodology
- 프로세스 중심 모델링
- 절차지향 언어들이 있었다.
- 전통적인 데이터 처리 시스템 개발에 적절한 기법
- 사용자의 요구분석 사항을 파악하기 위하여 자료의 흐름과 가공절차(프로세스)를 표현한다.
- 구조적 분석 : 실세계의 문제를 처리 관점으로 모델링 → DFD (data flow diagram) 을 사용한다.
- 구조적 설계 : DFD를 모듈 사이의 관계를 나타내는 구조도 (Structure chart) 로 변경하는 과정
- 구조적 방법론의 특징
- 그림 중심
- 모듈의 분할과 정복에 의한 하향식 설계 방식으로 기능이 시스템 분석, 설계, 구현의 근간
- 사용자의 업무 요구사항을 쉽게 문서화할 수 있고 사용자 개발자 간의 의사소통이 용이
- 철저한 모듈화로 추상화와 정보 은닉을 이루어 프로그램의 구조를 읽기 쉽게 단순화
- 구조적 방법론의 원칙
- 추상화(Abstraction)의 원리
- 형식화(Formality)의 원리 : 간소화
- 분할정복의 개념 : 작게 나누어 해결
- 계층화 원칙 : 모듈화 원칙, 작게 나누어 그룹화하고 계층 구조로 표현한다, 하위 계층일수록 상세화이고 상위 계층일수록 개략적이다.
- 구조적 분석 방법의 3가지 모형화 도구
- 자료흐름도(DFD) : 기능적 측면에서 프로세스 단위로 분할하고 프로세스 사이의 자료 흐름을 표시
- 자료 사전(DD) : DFD에 나타난 자료의 내용과 속성을 정의
- 소단위 명세서(Mini-spec) : 더이상 분할 할 수 없는 최하위 레벨의 프로세스에 대한 상세한 처리과정을 기술
- 구조적 분석에 가장 중요한 모형화 도구
- 시스템의 기능을 자료로 변환하는 처리와 처리를 자료의 흐름으로 연결한 네트워크형 구조로 모델링
- 비즈니스 프로세스를 하위 프로세스로 쉽게 분해할 수 있어 매우 유용 = 하향식 분할
- 작성 산출물
- 배경도 (context diagram)
- 여러 단계 분할된 DFD
- 데이터 사전
- DFD 구성요소
[6.1.1] DFD - 프로세스
- 데이터가 변형/저장/분배 되기 위해 데이터에 수행되는 작업 또는 행위
- 프로세스는 입력 데이터를 출력 데이터로 변환
- 프로세스가 수작업이든 컴퓨터에 의해 수행되든 문제가 되지 않는다.
- 프로세스의 이름과 함께 고유번호를 표현한다. (단계와 출처를 알 수 있다.)
[6.1.2] DFD - 자료흐름
- 자료흐름은 변형되어 이동중인 자료군을 표현한다.
- 시스템 내에서 한곳에서 다른 곳으로 이동하고 움직이는 데이터를 기술한다.
- 이동방향을 화살표로 나타내고 그 위에 이름을 붙인다.
- 자료의 내용과 형식 등은 자료사전에 명시한다. (DFD에는 표기하지 않는다.)
[6.1.3] DFD - 자료저장소
- 머물고 있는 데이터를 표현한다.
- 파일 폴더, 컴퓨터 기반 파일, 노트북과 같은 상이한 물리적 장소를 의미한다.
- 데이터의 조작을 위한 물리적 구성은 중요하지 않다.
[6.1.4] DFD - 단말
- 시스템 밖에서 의사 전달하는 사람, 부서 또는 다른 시스템
- 데이터의 기원과 목적지를 기술하므로 source 또는 sink라고도 한다.
- 단말들 사이에 자료흐름이 나타나면 안된다.
[7] DFD 작성 절차
- 배경도 작성
- 개발하려는 시스템과 외부세계와의 인터페이스를 식별
- 시스템 분석의 범위를 설정 (주고 받을 데이터 단말 지정)
- 단계적 분할
- 중간 단계의 DFD : DFD 내의 하나 이상의 프로세스가 하위 DFD로 분할한다.
- 최하위 단계의 DFD : DFD 내의 모든 프로세스가 더이상 분할되지 않는다.
[7.1] 배경도
- 배경도(최상위 DFD) 작성
- 시스템 경계의 입출력 식별
- 시스템 분석의 범위를 결정
- 시스템 전체를 나타내는 하나의 프로세스(우리의 개발 목표인 SW)와 관련된 단말들 표시
[7.2] DFD 분해
- 배경도의 프로세스를 여러 하위 프로세스들로 구체화
- 자료원과 도착지를 나타낼 필요는 없다. (옵션)
- 최하위 DFD : 상위레벨 DFD의 프로세스 구체화
- A를 분할하게 되면 B와 C도 분할이 될텐데 A, B, C를 다 연결하여 그려주면 level 2가 된다.
[7.3] DFD 작성지침
- 모든 DFD에 적용되는 기본 규칙
- 프로세스로 들어가는 입력은 그 프로세스로부터 나오는 출력과는 다르다.
- 자료흐름은 프로세스를 거쳐 변환될 때마다 새로운 이름을 부여
- DFD 상의 객체는 유일한 명칭을 가진다 (프로세스, 데이터 모두)
- 프로세스
- 출력만 있는 프로세스와 입력만 있는 프로세스는 작성하지 않는다.
- 프로세스는 동사구를 사용해 명명한다.
- 두 개의 동사가 필요하다면 처리를 분할해야 한다. 최하위 프로세스는 1가지 일만 한다.
- 어떤 경우에도 적용되는 포괄적인 명칭은 피해야 한다.
- 자료저장소 : 관련 데이터를 모아두는 곳
- 데이터는 한 자료 저장소에서 다른 자료 저장소로 직접 이동할 수 없음, 반드시 프로세스를 거쳐야 한다.
- 데이터는 외부 소스에서 자료저장소로 또는 자로저장소에서 외부 싱크로 직접 이동할 수 없다.
- 입력만 되는 자료저장소 (black hole)와 출력만 되는 자료저장소 (white hole)은 없어야 한다.
- 자료흐름
- 기호 사이에 오직 한 방향의 흐름만 가진다.
- 데이터흐름은 한 번 지나간 동일한 프로세스로 직접적인 역행이 불가능
- 자료저장소로 향하는 자료흐름은 쓰기를 의미, 자료저장소에서 나오는 자료흐름은 읽기를 의미
- 데이터흐름의 분기와 결합
- 동일한 위치에서 정확히 같은 데이터가 둘 이상의 다른 프로세스, 데이터저장소, 또는 소스/싱크로 이동으로 분기
[7.4] DFD 분할 규칙
- 기능적 분해 (functional decomposition)
- 기능 중심
- 하나의 시스템으로부터 많은 구성 프로세스들로 분리하는 행동
- 반복적인 절차
- 레벨 n 다이어그램
- 배경도에서 n번의 연속된 하부 프로세스 분할 결과 생성된 DFD
- level n DFD라고 불린다.
- 자료흐름의 균형
- DFD를 분해할 때 하위 레벨에서 프로세스로의 입력과 출력은 보존되어야 한다는 법칙
- terminal과 자료는 그대로여야 한다.
- 프로세스만 작게 분할되어 나타나야 한다.
[8] 논리 모델링
- DFD는 자료의 흐름을 나타냄, 프로세스 내부의 논리를 보여주지 않는다.
- 중간은 상관없지만, 마지막에는 어떤 처리를 통해 결과가 나오는지 알아야 한다.
- 논리 모델링은 내부 구조 표현과 DFD에 표현된 프로세스의 기능을 포함한다.
- 논리 모델링
- 소단위 명세서를 작성하는 방법
- 구조적 언어, 의사 결정 테이블, 선행/선후 조건 표시
- 구조적 언어 : 알고리즘처럼 if/then을 사용해 표현한다, 주로 사용한다.
- 선행/선후 조건 표시 : 프로세스 시작 전/처리 후에 필요한 조건을 표현, 프로세스가 단순할 때 사용한다.
- 의사결정 테이블
- 분석 단계에서 많이 사용하는 것
- 주로 사용
- 의사결정하는 경우의 수가 많을 때 사용
- 의사결정 논리를 행렬과 같은 테이블로 표현
- 가능한 조건들과 결과적인 행위들 규정
- 복잡한 의사결정 논리에 적합
- 테스트 케이스 작성에도 사용
- 간단하지만 표현력이 좋음
- 3 부분으로 구성
- 조건부(condition stubs) : 의사결정에 유의한 조건들을 나열
- 행동부 (action stubs) : 주어진 조건들의 집합에 대한 결과적인 행동
- 규칙 (rules) : 주어진 조건들의 집합에 대해 어떠한 행동들이 수반되어야 하는지 규정, 조건에 따라 행동을 어떻게 해야 하는지 표현하는 것
- 조건에 따른 행동을 규칙에 따라 표현한 테이블
- 의사결정 테이블을 구성하는 표준 절차
- 각각의 조건이 가정할 수 있는 조건과 값의 이름 붙이기
- 발생 가능한 모든 행동에 이름 붙이기
- 모든 가능한 규칙을 나열
- 각각의 규칙을 위한 행동을 정의
- 의사결정 테이블을 간단하게 하기 (마지막 단계)
[9] 자료사전
- Data Dictionary = DD
- 시스템 분석의 중요한 요소
- 사용자가 이해하지 못하는 어휘들을 찾아 볼 수 있는 사전과 같은 기능
- DFD에 기술된 모든 자료에 대해 다음 사항들을 정의
- 자료흐름을 구성하는 자료항목 정의 → 데이터를 구성하는 항목
- 자료에 대한 의미 정의 → 데이터가 의미하는 것 (Ex.학번의 규칙)
- 자료저장소를 구성하는 자료항목 정의 → 자료들이 모여 있는 규칙(연관성)
- 자료원소의 단위 및 값 정의 → (Ex. 몇 자리, 소수 점 아래, 몸무게 단위, 값의 범위 등)
- 자료의 하향식 분할
- 어떤 항목에 대한 정의는 구성요소들의 결합형태로 표시
- 구성요소가 더 이상 세분화되지 않을 때까지 하향식 분할
- 계단식
- 자료흐름의 표현
- 단순할 때 : "A = A11 + A12 + A21 + A22 + A31 + A32" 처럼 나열
- 복잡할 때 계단식/하향식으로 표현
[9.1] 자료사전 표기법
- 자료사전에 사용되는 기호
기호 (Symbol) | 의미 (Meaning) |
= | 정의 (is composed of) |
+ | 구성 (and, along with) |
{ } | 반복 (iteration of) |
[ ] | 택일 (choose only one of) |
( ) | 생략가능 (optional) |
* * | 주석(comment) (의미 설명 시) |
- '정의' 작성법
- 주석(* *)을 사용해 의미 기술
- 자료흐름과 자료저장소에 대한 구성내역 설명
- 자료원소에 대해 값이나 단위를 나타낸다.
- '반복 작성법'
- 여러 번 반복되는 자료항목은 { } 안에 기술
- { }의 좌측에는 최소 반복횟수를 기록하고, 우측에는 최대 반복횟수를 기록
- 반복횟수를 기록하지 않을 때는 디폴트로 최소는 0, 최대는 무한대를 나타냄 (생략 가능)
- '선택'과 '생략가능' 작성법
- 선택기호 [ | ] : | 로 분리된 항목들 중 하나가 선택되었다는 것을 표시
- 생략 가능 기호( ) : 괄호 안의 자료항목이 기술될 수도, 생략될 수도 있음을 표시
- '자료원소' 작성법
- 자료원소는 더 이상 분할되지 않는 자료항목으로 특정한 값이나 값의 범위를 취함
[9.2] 자료사전 작성원칙
- 자료의 의미 기술
- 자료의 의미는 주석을 통해서 기술
- 중복이 없어야 간결하고 이해하기 쉬운 자료사전
- 중복 기술 회피 방법
- 자료의 구성 내역을 설명하지 않는다.
- 구성항목의 의미나 자료의 이름을 반복 설명하지 않는다.
- 자료 구성항목의 기술
- 구성항목을 그룹으로 묶음
- 각 그룹에 대해 의미 있는 이름을 부여
- 이름이 붙여진 각 그룹을 다시 정의
- 보기에 깔끔
- 동의어(Alias)
- 자료사전에 이미 정의된 자료항목에 대한 또 다른 이름
- 동의어가 많아지면 자료의 명칭에 혼동이 생길 우려가 있음
- 흔히 쓰는 단어 때문에 발생 가능
- 동의어 확인이 중요
'Computer Science > Software Engineering' 카테고리의 다른 글
[CS][소프트웨어공학] (0) | 2024.01.20 |
---|---|
[CS][소프트웨어공학] 객체지향방법론, UML, 유스케이스 다이어그램 (0) | 2023.10.16 |
[CS][소프트웨어공학] SW 기능 산정 (기능점수, 간이법) (0) | 2023.10.16 |
[CS][소프트웨어공학] SW 개발 프로젝트 관리 기법(일정/비용/위험 관리), SW 개발 프로젝트 조직 유형 (0) | 2023.10.14 |
[CS][소프트웨어공학] SW 개발 프로세스, 전통적 프로세스 모델, SW 프로세스 개선 (0) | 2023.10.08 |