0_ch4n
기계쟁이\n개발자
0_ch4n
0chn.xxx@gmail.com @0ch._.n
전체 방문자
오늘
어제

공지사항

  • All (282)
    • 🖥 CS (21)
      • 네트워크 (12)
      • 운영체제 (3)
      • 자료구조 (2)
      • Web (4)
    • 🧠 Algorithm (185)
      • [C] BOJ (93)
      • [JAVA] Programmers (91)
    • 📚 Study (69)
      • HTML&CSS (19)
      • MySQL (11)
      • JAVA (22)
      • Servlet&JSP (8)
      • Thymeleaf (2)
      • Spring (5)
      • JPA (2)
    • 📖 Book (1)
    • 📃 Certification (6)
      • 정보처리기사 (6)

인기 글

최근 글

최근 댓글

태그

  • til
  • kakao
  • 코딩테스트
  • 프로그래머스
  • java
  • Programmers
  • 자바
  • CSS
  • 카카오
  • 코테

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
0_ch4n

기계쟁이\n개발자

[정보처리기사 필기] 1과목 소프트웨어 설계
📃 Certification/정보처리기사

[정보처리기사 필기] 1과목 소프트웨어 설계

2022. 4. 4. 18:09
반응형

◆ 1과목 소프트웨어 설계 

 

∎1장 요구사항 확인 

 

∙소프트웨어 생명 주기 

 : 소프트웨어 개발 방법론의 바탕이 되는 것으로, 소프트웨어를 개발하기 위해 정의하고 운용, 유지보수 등의 과정을 각 단계별로 나눈 것이다.  

 - 개발 단계와 각 단계별 주요 활동, 그리고 활동의 결과에 대한 산출물로 표현 

 - 개발 대상을 추상화하고 기호나 그림 등으로 시각적으로 표현하여 소프트웨어의 이해도를 향상시킬 수 있다 

 - 모델을 통해 이해 당사자 간의 의사소통이 향상된다 

 - 모델을 통해 개발될 시스템의 유추가 가능하다 

 - 주기를 표현하는 형태 : 소프트웨어 생명 주기 모형 = 소프트웨어 프로세스 모형 = 소프트웨어 공학 패러다임 

 - 모형의 종류 : 폭포수 모형, 프로토타입 모형, 나선형 모형, 애자일 모형 

 

 1. 폭포수 모형(Waterfall Model) 

  : 폭포에서 한 번 떨어진 물은 거슬러 올라갈 수 없듯이 개발도 이전 단계로 돌아갈 수 없다는 전제하에 

    각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후 다음 단계를 진행하는 개발 방법론 

  - 가장 오래되고 폭넓게 사용된 전통적인 소프트웨어 생명 주기 모형으로, 고전적 생명 주기 모형 

  - 소프트웨어 개발 과정의 한 단계가 끝나야만 다음 단계로 넘어갈 수 있는 선형 순차적 모형 

    (각 단계가 끝난 후에는 다음 단계를 수행하기 위한 결과물이 명확하게 산출되어야 한다) 

  - 모형을 적용한 경험과 성공 사례가 많다 

  - 제품의 일부가 될 매뉴얼(프로그램들의 사용과 운영에 대한 내용 기술 문서)을 작성해야 한다 

  - 두 개 이상의 과정이 병행하여 수행되지 않는다 

    (타당성 검토 → 계획 → 요구 분석 → 설계 → 구현(코딩) → 시험(검사) → 유지보수) 

 

 2. 프로토타입 모형(Prototype Model, 원형 모형) 

  : 사용자의 요구사항을 정확히 파악하기 위해 실제 개발될 소프트웨어에 대한 시제품을 만들어 최종 결과물을 예측 

    하는 모형 

  - 시제품은 사용자와 시스템 사이의 인터페이스에 중점을 두어 개발한다 

  - 시스템의 일부 혹은 시스템의 모형을 만드는 과정으로서 요구되는 소프트웨어를 구현하는데, 이는 추후 구현 단계 

    에서 사용될 골격 코드가 된다 

  - 소프트웨어의 개발이 완료된 시점에서 오류가 발견되는 폭포수 모형의 단점을 보완하기 위한 모형 

  - 요구 수집 → 빠른 설계 → 프로토타입 구축 → 고객 평가 → 프로토타입 조정 → 구현 

 

 3. 나선형 모형(Spiral Model, 점진적 모형) 

  : 보헴이 제안한 것으로, 폭포수 모형과 프로토타입 모형의 장점에 위헌 분석 기능을 추가한 모형 

  - 나선을 따라 돌 듯이 여러 번의 소프트웨어 개발 과정을 거쳐 점진적으로 완벽한 최종 소프트웨어를 개발하는 것 

    으로, 점진적 모형이라고도 한다 

  - 소프트웨어를 개발하면서 발생할 수 있는 위험을 관리하고 최소화하는 것을 목적으로 한다 

  - 점진적으로 개발 과정이 반복되므로 누락되거나 추가된 요구사항을 첨가할 수 있고, 정밀하며, 유지보수 과정이  

    필요 없다

  - 요구사항이나 아키텍처를 이해하기 어렵다거나 중심이 되는 기술에 문제가 있는 경우 적합한 모델이다

  - 계획 → 분석 → 개발 → 평가 의 과정을 여러 번 반복한다 

 

 4. 애자일 모형(Agile Model) 

  : ‘민첩한’, ‘기민한’이라는 의미로, 고객의 요구사항 변화에 유연하게 대응할 수 있도록  

    일정한 주기를 반복하면서 개발과정을 진행한다. 

  - 어느 특정 개발 방법론이 아니라 좋은 것을 빠르고 낭비 없게 만들기 위해 고객과의 소통에 초점을 맞춘 방법론 

  - 기업 활동 전반에 걸쳐 사용된다 

  - 스프린트(Sprint) 또는 이터레이션(Iteration)이라고 불리는 짧은 개발 주기를 반복하며, 반복되는 주기마다  

    만들어지는 결과물에 대한 고객의 평가와 요구를 적극 수용한다 

  - 각 개발주기에서는 고객이 요구사항에 우선순위를 부여하여 개발 작업을 진행한다. 

  - 소규모 프로젝트, 고도로 숙달된 개발자, 급변하는 요구사항에 적합하다 

  - 종류 : 스크럼(Scrum), XP(eXtreme Programming), 칸반(Kanban), Lean, 크리스탈(Crystal),  

           ASD(Adaptive Software Development), 기능 중심 개발(FDD; Feature Driven Development),  

           DSDM(Dynamic System Development Method), DAD(Disciplined Agile Delivery) 등 

 

애자일 선언(Agile Manifesto) 
 
- 애자일 개발 4가지 핵심가치 
1. 프로세스와 도구보다는 개인과 상호작용에 더 가치를 둔다 
2. 방대한 문서보다는 실행되는 SW에 더 가치를 둔다 
3. 계약 협상보다는 고객과 협업에 더 가치를 둔다 
4. 계획을 따르기 보다는 변화에 반응하는 것에 더 가치를 둔다 
 
- 애자일 개발 12가지 실행 지침 
1. 유용한 소프트웨어를 빠르고, 지속적으로 제공하여 고객을 만족시킨다 
2. 개발 막바지라도 요구사항 변경을 적극 수용한다 
3. 몇 개월이 아닌 몇 주 단위로 실행되는 소프트웨어를 제공한다 
4. 고객과 개발자가 프로젝트 기간에 함께 일한다 
5. 개발에 대한 참여 의지가 확실한 사람들로 팀을 구성하고, 필요한 개발 환경과 지원을 제공하며,  
   일을 잘 끝낼 수 있도록 신뢰한다. 
6. 같은 사무실에서 얼굴을 맞대고 의견을 나눈다 
7. 개발의 진척도를 확인하는 1차 기준은 작동하는 소프트웨어이다 
8. 지속 가능한 개발을 장려하고 일정한 속도로 개발을 진행한다 
9. 기술적 우수성과 좋은 설계에 지속적인 관심을 기울이면 민첩성이 향상된다 
10. 단순화를 추구한다 
11. 최상의 아키텍처, 명확한 요구사항, 최상의 설계는 자기 스스로 일을 주도하는 조직적인 팀으로부터 나온다 
12. 더 효과적인 팀이 될 수 있는 방안을 정기적으로 깊이 고민하고 그에 따라 팀의 행동을 조정한다 

 

  폭포수 모형  애자일 모형 
새로운 요구사항 반영  어려움  지속적으로 반영 
고객과의 의사소통  적음  지속적임 
테스트  마지막에 모든 기능을 테스트  반복되는 일정 주기가 끝날 때마다 테스트 
개발 중심  계획, 문서(매뉴얼)  고객 

 

∙스크럼(Scrum) 기법 

 : 럭비 경기에서 양 팀이 서로 대치해 있는 대형을 일컫는 것으로 팀이 중심이 되어 개발의 효율성을 높인다는  

   의미가 내포된 용어이다 

 - 스스로가 팀을 구성(self-organizing)하고, 개발에 관한 모든걸 스스로 해결(cross-functional)할 수 있어야 한다 

 

 1. 스크럼 팀의 구성 

  - 제품 책임자(PO; Product Owner) 

  ㄱ. 이해관계자 중 개발 제품의 이해도가 높고, 요구사항을 책임지고 의사 결정할 사람 (주로 개발 의뢰자나 사용자) 

  ㄴ. 이해관계자들의 의견을 종합하여 제품에 대한 요구사항을 작성하는 주체 

  ㄷ. 요구사항이 담긴 백로그(Backlog)를 작성하고 백로그에 대한 우선순위를 지정 

  ㄹ. 팀원들이 백로그에 스토리를 추가할 수는 있지만 우선순위를 지정할 수는 없다 

  ㅁ. 제품에 대한 테스트를 수행하면서 주기적으로 요구사항의 우선순위를 갱신한다 

 

  - 스크럼 마스터(SM; Scrum Master) 

  ㄱ. 팀이 스크럼을 잘 수행할 수 있도록 객관적인 시각에서 조언을 해주는 가이드 역할을 수행한다. (통제는 X) 

  ㄴ. 일일 스크럼 회의를 주관하여 진행 사항을 점검하고, 개발 과정에서 발생된 장애 요소를 공론화하여 처리한다 

 

  - 개발팀(DT, Development Team) 

  ㄱ. PO와 SM을 제외한 모든 팀원으로, 개발자 외에도 디자이너, 테스터 등 제품 개발에 참여하는 모든 사람이 대상 

  ㄴ. 보통 최대 인원은 7~8명이 적당하다 

 

 2. 스크럼 개발 프로세스 

  - 제품 백로그(Product Backlog) 

  ㄱ. 제품 개발에 필요한 모든 요구사항(User Story)을 우선순위에 따라 나열한 목록이다 

  ㄴ. 개발 과정에서 새롭게 도출되는 요구사항으로 인해 지속적으로 업데이트된다 

  ㄷ. 제품 백로그에 작성된 사용자 스토리를 기반으로 전체 일정 계획인 릴리즈 계획(Release Plan)을 수립한다 

  ㄹ. 스크럼 팀이 해결해야 하는 목록으로 소프트웨어 요구사항, 아키텍처 정의 등이 포함될 수 있다 

 

  - 스프린트 계획 회의(Sprint Planning Meeting) 

  ㄱ. 제품 백로그 중 이번 스프린트에서 수행할 작업을 대상으로 단기 일정을 수립하는 것이다 

  ㄴ. 스프린트에서 처리할 요구사항(User Story)을 개발자들이 나눠서 작업할 수 있도록 태스크(Task)라는 작업  

      단위로 분할한 후 개발자별로 수행할 작업 목록인 스프린트 백로그(Sprint Backlog)를 작성한다 

  

  - 스프린트(Sprint) 

  ㄱ. 실제 개발 작업을 진행하는 과정으로, 보통 2~4주 정도의 기간 내에서 진행한다 

  ㄴ. 스프린트 백로그에 작성된 태스크를 대상으로 작업 시간(양)을 추정한 후 개발담당자에게 할당한다 

  ㄷ. 태스크를 할당할 때는 개발자가 원하는 태스크를 직접 선별하여 담당할 수 있도록 하는 것이 좋다 

  ㄹ. 개발 담당자에게 할당된 태스크는 보통 할 일(To Do), 진행 중(In Progress), 완료(Done)의 상태를 갖는다 

 

  + 속도(Velocity) 

   : 한 번의 스프린트에서 한 팀이 어느 정도의 제품 백로그를 감당할 수 있는지에 대한 추정치로 볼 수 있다 

 

  - 일일 스크럼 회의(Daily Scrum Meeting) 

  ㄱ. 모든 팀원이 매일 약속된 시간에 약 15분 정도의 짧은 시간동안 진행 상황을 점검한다 

  ㄴ. 회의는 보통 서서 진행하며, 남은 작업 시간은 소멸 차트(Burn-down Chart)에 표시한다 

  ㄷ. 스크럼 마스터는 발견된 장애 요소를 해결할 수 있도록 도와준다 

 

  - 스프린트 검토 회의(Sprint Review) 

  ㄱ. 부분 또는 전체 완성 제품이 요구사항에 잘 부합되는지 사용자가 포함된 참석자 앞에서 테스팅을 수행한다 

  ㄴ. 스프린트의 한 주당 한 시간 내에서 진행한다 

  ㄷ. 제품 책임자는 개선할 사항에 대한 피드백을 정리한 후 다음 스프린트에 반영할 수 있도록 제품 백로그를  

      업데이트한다 

 

  - 스프린트 회고(Sprint Retrospective) 

  ㄱ. 스프린트 주기를 되돌아보며 정해놓은 규칙을 잘 준수했는지, 개선할 점은 없는지 등을 확인하고 기록한다 

  ㄴ. 해당 스프린트가 끝난 시점에서 수행하거나 일정 주기로 수행한다 

 

∙XP(eXtreme programming) 기법 

 : 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여  

   개발 생산성을 향상시키는 기존의 방법론에 비해 실용성을 강조한 방법 

 - 짧고 반복적인 개발 주기, 단순한 설계, 고객의 적극적인 참여를 통해 소프트웨어를 빠르게 개발하는 것이 목적 

 - 릴리즈의 기간을 짧게 반복하면서 고객의 요구사항 반영(사용자 스토리)에 대한 가시성을 높인다 

 - 릴리즈 테스트마다 고객을 직접 참여시킴으로써 요구한 기능이 제대로 작동하는지 고객이 직접 확인할 수 있다 

 - 비교적 소규모 인원의 개발 프로젝트에 효과적이다 

 - 5가지 핵심가치 : 의사소통(Commucation), 단순성(Simplicity), 용기(Courage), 존중(Respect), 피드백(Feedback) 

 

 1. XP 개발 프로세스   

 - 사용자 스토리(User Story) 

  ㄱ. 고객의 요구사항을 간단한 시나리오로 표현한 것이다 

  ㄴ. 내용은 기능 단위로 구성하며, 필요한 경우 간단한 테스트 사항(Test Case)도 기재한다 

 

 - 릴리즈 계획 수립(Release Planning) 

  ㄱ. 몇 개의 스토리가 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것을 릴리즈라고 한다 

  ㄴ. 부분 혹은 전체 개발 완료 시점에 대한 일정을 수립한다 

 

 - 스파이크(Spike) 

  ㄱ. 요구사항의 신뢰성을 높이고 기술 문제에 대한 위험을 감소시키기 위해 별도로 만드는 간단한 프로그램이다 

  ㄴ. 처리할 문제 외의 다른 조건은 모두 무시하고 작성한다 

 

 - 이터레이션(Iteration) 

  ㄱ. 하나의 릴리즈를 더 세분화 한 단위를 이터레이션(Iteration)이라고 한다 

  ㄴ. 일반적으로 1~3주 정도의 기간으로 진행된다 

  ㄷ. 이 기간 중에 새로운 스토리가 작성될 수 있으며, 작성된 스토리는 진행 중인 이터레이션 혹은  

      다음 이터레이션에 포함될 수 있다 

 

 - 승인 검사(Acceptance Test, 인수 테스트) 

  ㄱ. 하나의 이터레이션 안에서 계획된 릴리즈 단위의 부분 완료 제품이 구현되면 수행하는 테스트이다 

  ㄴ. 사용자 스토리 작성 시 함께 기재한 테스트 사항에 대해 고객이 직접 수행한다 

  ㄷ. 테스트 과정에서 발견한 오류 사항은 다음 이터레이션에 포함한다 

  ㄹ. 테스트 이후 새로운 요구사항이 작성되거나 요구사항의 상대적 우선순위가 변경될 수 있다 

  ㅁ. 테스트가 완료되면 다음 이터레이션을 진행한다 

 

 - 소규모 릴리즈(Small Release) 

  ㄱ. 릴리즈를 소규모로 하게 되면, 고객의 반응을 기능별로 확인할 수 있어, 고객의 요구사항에 좀 더 유연하게  

      대응할 수 있다 

  ㄴ. 계획된 릴리즈 기간 동안 진행된 이터레이션이 모두 완료되면 고객에 의한 최종 테스트를 수행한 후 릴리즈,  

      즉 최종 결과물을 고객에게 전달한다 

  ㄷ. 릴리즈가 최종 완제품이 아닌 경우 다음 릴리즈 일정에 맞게 개발을 계속 진행한다 

 

 + XP의 주요 실천 방법(Practice) , 기본원리 

실천 방법  내용 
Pair Programming 
(짝 프로그래밍) 
다른 사람과 함께 프로그래밍을 수행함으로써 개발에 대한 책임을 공동으로 나눠 갖는 환경을 조성합니다 
Collective Ownership 
(공동 코드 소유) 
개발 코드에 대한 권한과 책임을 공동으로 소유합니다 
Test-Driven Development 
(테스트 주도 개발) 
∙개발자가 실제 코드를 작성하기 전에 테스트 케이스를 먼저 작성하므로 자신이 무엇을 해야할지를 정확히 파악합니다 
∙테스트가 지속적으로 진행될 수 있도록 자동화된 테스팅 도구(구조, 프레임워크)를 사용합니다 
Whole Team 
(전체 팀) 
개발에 참여하는 모든 구성원(고객 포함)들은 각자 자신의 역할이 있고 그 역할에 대한 책임을 가져야 합니다 
Continuous Integration 
(계속적인 통합) 
모듈 단위로 나눠서 개발된 코드들은 하나의 작업이 마무리될 때마다 지속적으로 통합됩니다 
Design Improvement 또는 Refactoring 
(디자인 개선 또는 리팩토링) 
프로그램 기능의 변경 없이 단순화, 유연성 강화 등을 통해 시스템을 재구성합니다 
Small Releases 
(소규모 릴리즈) 
릴리즈 기간을 짧게 반복함으로써 고객의 요구 변화에 신속히 대응할 수 있습니다 

 

∙현행 시스템 파악 

 : 새로 개발하려는 시스템의 개발 범위를 명확히 설정하기 위해 현행 시스템의 구성과 제공 기능, 시스템 간의  

   전달 정보, 사용되는 기술 요소, 소프트웨어, 하드웨어, 그리고 네트워크의 구성 등을 파악한다 

1단계  시스템 구성 파악  - 기간 업무(조직의 주요 업무를 처리)와 지원 업무(기간 업무를 지원)로 구분하여 기술한다 
(조직 내에 있는 모든 정보시스템의 현황을 파악할 수 있도록 각 업무에 속하는 단위 업무 정보시스템들의 명칭, 주요 기능들을 명시) 
시스템 기능 파악  - 단위 업무 시스템이 현재 제공하는 기능들을 주요 기능과 하부 기능, 세부 기능으로 구분하여 계층형으로 표시한다 
시스템 인터페이스 파악  - 단위 업무 시스템 간에 주고받는 데이터의 종류, 형식, 프로토콜, 연계 유형, 주기 등을 명시한다 
(데이터를 어떤 형식으로 주고받는지, 통신규약은 무엇을 사용하는지, 연계 유형은 무엇인지 등을 반드시 고려) 
2단계  아키텍처 구성 파악  - 기간 업무 수행에 어떠한 기술 요소들이 사용되는지 최상위 수준에서 계층별로 표현한 아키텍처 구성도로 작성한다 
(아키텍처가 단위 업무 시스템별로 다를 경우에는 가장 핵심이 되는 기간 업무 처리 시스템을 기준으로 표현한다) 
소프트웨어 구성 파악  - 단위 업무 시스템 처리를 위해 설치된 소프트웨어의 제품명, 용도, 라이선스 적용 방식, 라이선스 수 등을 명시한다 
(시스템 구축비용 면에서 소프트웨어 비용이 적지 않은 비중을 차지하므로, 상용 소프트웨어의 경우 라이선스 적용 방식의 기준과 보유한 라이선스의 파악이 중요하다) 
3단계  하드웨어 구성 파악  - 단위 업무 시스템들이 운용되는 서버의 주요 사양과 수량, 그리고 이중화의 적용 여부를 명시한다 
(서버의 이중화는 기간 업무의 서비스 기간, 장애 대응 정책에 따라 필요 여부가 결정된다) 
(현행 시스템에 이중화가 적용된 경우 대부분 새로 구성될 시스템에도 이중화가 필요하므로 이로 인한 비용 증가와 시스템 구축 난이도가 높아질 가능성을 고려해야 한다) 
네트워크 구성 파악  - 업무 시스템들의 네트워크 구성을 파악할 수 있도록 서버의 위치, 서버 간의 네트워크 연결 방식을 네트워크 구성도로 작성한다 
(네트워크 구성도를 통해 서버들의 물리적인 위치 관계를 파악할 수 있고 보안 취약성을 분석하여 적절한 대응을 할 수 있다) 
(네트워크에 장애가 발생한 경우 발생 원인을 찾아 복구하기 위한 용도로 활용될 수 있다) 

 

∙요구사항 정의 

 : 소프트웨어가 어떤 문제를 해결하기 위해 제공하는 서비스에 대한 설명과 정상적으로 운영되는데 필요한  

   제약조건 등을 나타낸다 

 - 소프트웨어 개발이나 유지 보수 과정에서 필요한 기준과 근거를 제공한다 

 - 개발하려는 소프트웨어의 전반적인 내용을 확인할 수 있게 하므로 개발에 참여하는 이해관계자들 간의  

   의사소통을 원활하게 하는데 도움을 준다 

 - 제대로 정의되어야만 이를 토대로 이후 과정의 목표와 계획을 수립할 수 있다 

 

 1. 요구사항의 유형 

기능 요구사항 
(Functional requirements) 
- 시스템이 무엇을 하는지, 어떤 기능을 하는지에 대한 사항 
- 시스템의 입력이나 출력으로 무엇이 포함되어야 하는지, 시스템이 어떤 데이터를 저장하거나 연산을 수행해야 하는지에 대한 사항 
- 시스템이 반드시 수행해야 하는 기능 
- 사용자가 시스템을 통해 제공 받기를 원하는 기능 
비기능 요구사항 
(Non-functional requirements) 
- 시스템 장비 구성 요구사항 : 하드웨어, 소프트웨어, 네트워크 등의 시스템 장비 구성에 대한 요구사항 
- 성능 요구사항 : 처리 속도 및 시간, 처리량, 동적·정적 사용량, 가용성 등 성능에 대한 요구사항 
- 인터페이스 요구사항 : 시스템 인터페이스와 사용자 인터페이스에 대한 요구사항으로 다른 소프트웨어, 하드웨어 및 통신 인터페이스, 다른 시스템과의 정보 교환에 사용되는 프로토콜과의 연계도 포함하여 기술 
- 데이터 요구사항 : 초기 자료 구축 및 데이터 변환을 위한 대상, 방법, 보안이 필요한 데이터 등 데이터를 구축하기 위해 필요한 요구사항 
- 테스트 요구사항 : 도입되는 장비의 성능 테스트(BMT)나 구축된 시스템이 제대로 운영되는지를 테스트하고 점검하기 위한 테스트 요구사항 
- 보안 요구사항 : 시스템의 데이터 및 기능, 운영 접근을 통제하기 위한 요구사항 
- 품질 요구사항 : 관리가 필요한 품질 항목, 품질 평가 대상에 대한 요구사항으로 가용성, 정합성, 상호 호환성, 대응성, 신뢰성, 사용성, 유지·관리성, 이식성, 확장성, 보안성 등으로 구분하여 기술 
- 제약사항 : 시스템 설계, 구축, 운영과 관련하여 사전에 파악된 기술, 표준, 업무, 법·제도 등의 제약조건 
- 프로젝트 관리 요구사항 : 프로젝트의 원활한 수행을 위한 관리 방법에 대한 요구사항 
- 프로젝트 지원 요구사항 : 프로젝트의 원활한 수행을 위한 지원 사항이나 방안에 대한 요구사항 
사용자 요구사항 
(User requirements) 
- 사용자 관점에서 본 시스템이 제공해야 할 요구사항 
- 사용자를 위한 것으로 친숙한 표현으로 이해하기 쉽게 작성된다 
시스템 요구사항 
(System requirements) 
- 개발자 관점에서 본 시스템 전체가 사용자와 다른 시스템에 제공해야 할 요구사항 
- 사용자 요구사항에 비해 전문적이고 기술적인 용어로 표현된다 
- 소프트웨어 요구사항이라고도 한다 

 

 

 2. 요구사항 개발 프로세스 

  : 개발 대상에 대한 요구사항을 체계적으로 도출하고 이를 분석한 후 분석 결과를 명세서에 정리한 다음 마지막으로  

    이를 확인 및 검증하는 일련의 구조화된 활동 

  - 개발 프로세스가 비즈니스 목적에 부합하는지, 예산은 적정한지 등에 대한 정보를 수집, 평가한 보고서를 토대로  

    타당성 조사가 선행되어야 한다 

  - 요구사항 개발은 요구공학의 한 요소이다 

요구사항 도출(수집) 
Elicitation 
시스템, 사용자, 그리고 시스템 개발에 관련된 사람들이 서로 의견을 교환하여 요구사항이 어디에 있는지, 어떻게 수집할 것인지 식별하고 이해하는 과정 
- 소프트웨어가 해결해야 할 문제를 이해하는 첫 번째 단계 
- 이 단계에서 개발자와 고객 사이의 관계가 만들어지고 이해관계자가 식별된다 
- 다양한 이해관계자 간의 효율적인 의사소통이 중요하다 
- 소프트웨어 개발 생명 주기 동안 지속적으로 반복된다 
- 주요 기법 : 청취와 인터뷰, 설문, 브레인스토밍, 워크샵, 프로토타이핑, 유스케이스 
요구사항 분석 
Analysis 
개발 대상에 대한 사용자의 요구사항 중 명확하지 않거나 모호하여 이해되지 않는 부분을 발견하고 이를 걸러내기 위한 과정 
- 사용자 요구사항의 타당성을 조사하고 비용과 일정에 대한 제약을 설정한다 
- 내용이 중복되거나 하나로 통합되어야 하는 등 서로 상충되는 요구사항이 있으면 이를 중재하는 과정 
- 도출된 요구사항들을 토대로 소프트웨어의 범위를 파악한다 
- 도출된 요구사항들을 토대로 소프트웨어와 주변 환경이 상호 작용하는 방법을 이해한다 
- 요구사항 분석에는 자료 흐름도(DFD), 자료 사전(DD) 등의 도구가 사용된다 
요구사항 명세 
Specification 
분석된 요구사항을 바탕으로 모델을 작성하고 문서화하는 것을 의미 
- 요구사항을 문서화할 때는 기능 요구사항은 빠짐없이 완전하고 명확하게 기술해야 하며, 비기능 요구사항은 필요한 것만 명확하게 기술해야 한다 
- 요구사항은 사용자가 이해하기 쉬우며, 개발자가 효과적으로 설계할 수 있도록 작성되어야 한다 
- 설계 과정에서 잘못된 부분이 확인될 경우 그 내용을 요구사항 정의서에서 추적할 수 있어야 한다 
- 구체적인 명세를 위해 소단위 명세서가 사용될 수 있다 
요구사항 확인(검증) 
Validation 
개발 자원을 요구사항에 할당하기 전에 요구사항 명세서가 정확하고 완전하게 작성되었는지를 검토하는 활동 
- 분석가가 요구사항을 정확하게 이해한 후 요구사항 명세서를 작성했는지 확인하는 것이 필요하다 
- 요구사항이 실제 요구를 반영하는지, 서로 상충되는 요구사항은 없는지 등을 점검한다 
- 개발이 완료된 후 문제가 발견되면 재작업 비용이 발생할 수 있으므로 요구사항 검증은 매우 중요하다 
- 요구사항 명세서의 내용이 이해하기 쉬운지, 일관성은 있는지, 회사의 기준에는 맞는지, 그리고 누락된 기능은 없는지 등을 검증하는 것이 중요하다 
- 요구사항 문서는 이해관계자들이 검토해야 한다 
- 요구사항 검증 과정을 통해 모든 문제를 확인할 수 있는 것은 아니다 
- 일반적으로 요구사항 관리 도구를 이용하여 요구사항 정의 문서들에 대해 형상 관리를 수행한다 

 

 + 소프트웨어 요구사항 명세서(SRS; Software Requirement Specification) 

  : 업계 표준 용어로 소프트웨어가 반드시 제공해야 하는 기능, 특징, 제약조건 등을 명시한다 

  - 시스템의 모든 동작뿐만 아니라 성능, 보안, 사용성과 같은 품질도 기술되어야 한다 

  - 프로젝트 유형에 맞게 양식을 만들어 사용한다 

  - 소프트웨어 요구사항 명세서에 포함되는 시스템 기능, 데이터, 외부 인터페이스, 품질 요구사항은 요구사항  

    단위별로 개별 요구사항 명세서를 작성한다 

  정형 명세 기법  비정형 명세 기법 
기법  수학적 원리 기반, 모델 기반  상태/기능/객체 중심 
작성방법  수학적 기호, 정형화된 표기법  일반 명사, 동사 등의 자연어를 기반으로 서술 또는 다이어그램으로 작성 
특징  - 요구사항을 정확하고 간결하게 표현할 수 있음 
- 요구사항에 대한 결과가 작성자에 관계없이 일관성이 있으므로 완전성 검증이 가능함 
- 표기법이 어려워 사용자가 이해하기 어려움 
- 자연어의 사용으로 인해 요구사항에 대한 결과가 작성자에 따라 다를 수 있어 일관성이 떨어지고, 해석이 달라질 수 있음 
- 내용의 이해가 쉬워 의사소통이 용이함 
종류  VDM, Z, Petri-net, CSP 등  FSM, Decision Table, ER모델링, State Chart(SADT) 등 

 

∙요구사항 분석 

  : 소프트웨어 개발의 실제적인 첫 단계로 개발 대상에 대한 사용자의 요구사항을 이해하고 문서화(명세화)하는 활동 

  - 사용자 요구의 타당성을 조사하고 비용과 일정에 대한 제약을 설정 

  - 사용자의 요구를 정확하게 추출하여 목표를 정하고, 어떤 방식으로 해결할 것인지를 결정 

  - 요구사항 분석을 통한 결과는 소프트웨어 설계 단계에서 필요한 기본적인 자료가 되므로 사용자의 요구사항을 정확하고

    일관성 있게 분석하여 문서화해야 한다 

  - 분석 결과의 문서화를 통해 향후 유지보수에 유용하게 활용할 수 있다 

  - 소프트웨어 분석가에 의해 요구사항 분석이 수행되며, 이 작업 단계를 요구사항 분석 단계라고 한다 

 

 1. 구조적 분석 기법 

  : 자료의 흐름과 처리를 중심으로 하는 요구사항 분석 방법 

  - 도형 중심의 분석용 도구와 분석 절차를 이용하여 사용자의 요구사항을 파악하고 문서화한다 

  - 도형 중심의 도구를 사용하므로 분석가와 사용자 간의 대화가 용이하다 

  - 하향식 방법을 사용하여 시스템을 세분화할 수 있고, 분석의 중복을 배제할 수 있다 

  - 사용자의 요구사항을 논리적으로 표현하여 전체 시스템을 일관성 있게 이해할 수 있다 

  - 시스템 분석의 질이 향상되고, 시스템 개발의 모든 단계에서 필요한 명세서 작성이 가능하다 

  - 도구의 종류 : 자료 흐름도(DFD), 자료 사전(DD), 소단위 명세서(Mini-Spec), 개체 관계도(E-RD),  

    상태 전이도(STD), 제어 명세서, UML Diagram 등의 도구를 이용하여 모델링한다 

 

 2. 자료 흐름도(DFD; Data Flow Diagram, =자료 흐름 그래프, =버블 차트) 

  : 요구사항 분석에서 자료의 흐름 및 변환 과정과 기능을 도형 중심으로 기술하는 방법 

  - 시스템 안의 프로세스와 자료 저장소 사이에 자료의 흐름을 나타내는 그래프로 자료 흐름과 처리를 중심으로 하는

    구조적 분석 기법에 이용한다 

  - 자료 흐름도는 자료 흐름과 기능을 자세히 표현하기 위해 단계적으로 세분화된다 

  - 자료는 처리를 거쳐 변환될 때마다 새로운 이름이 부여되며, 처리는 입력 자료가 발생하면 기능을 수행한 후

    출력 자료를 산출한다 

  - 자료 흐름도에서는 자료의 흐름과 기능을 프로세스(원), 자료 흐름(화살표), 자료 저장소(평행선), 단말(사각형)의  

    네 가지 기본 기호로 표시한다 

 

 3. 자료 사전(DD; Data Dictionary) 

  : 자료 흐름도에 있는 자료를 더 자세히 정의하고 기록한 것이며, 이처럼 데이터를 설명하는 데이터를  

    데이터의 데이터 또는 메타 데이터(Meta Data)라고 한다 

  - 자료 흐름도에 시각적으로 표시된 자료에 대한 정보를 체계적이고 조직적으로 모아 개발자나 사용자가 편리하게

    사용할 수 있다 

  - 자료 사전에서 사용되는 표기 기호는 다음과 같다 

4. 정형 분석(Fomal Analysis)

 : 구문(Syntax)과 의미(Semantics)를 갖는 정형화된 언어를 이용해 요구사항을 수학적 기호로 표현한 후 이를 분석하는

   과정

 - 요구사항을 수학적 기호로 표현하여 분석한다

 - 요구사항 분석의 마지막 단계에서 이루어진다

 

∙요구사항 분석 CASE와 HIPO

 1. 요구사항 분석을 위한 CASE(자동화 도구)

  - 요구사항을 자동으로 분석하고, 요구사항 분석 명세서를 기술하도록 개발된 도구를 의미한다

  - 요구사항 분석을 위한 자동화 도구 사용의 이점은 다음과 같다

   ㄱ. 표준화와 보고를 통한 문서화 품질 개선

   ㄴ. 데이터베이스가 모두에게 이용 가능하다는 점에서 분석자들 간의 적절한 조정

   ㄷ. 교차 참조도와 보고서를 통한 결함, 생략, 불일치 등의 발견 용이성

   ㄹ. 변경이 주는 영향 추적의 용이성

   ㅁ. 명세에 대한 유지보수 비용의 축소

  - SADT(Structured Analysis and Design Technique)

   ㄱ. SoftTech 사에서 개발한 것으로 시스템 정의, 소프트웨어 요구사항 분석, 시스템/소프트웨어 설계를 위해 널리

       이용되어 온 구조적 분석 및 설계 도구이다

   ㄴ. 구조적 요구 분석을 하기 위해 블록 다이어그램을 채택한 자동화 도구이다

  - SREM(Software Requirements Engineering Methodology) = RSL/REVS

   ㄱ. TRW 사가 우주 국방 시스템 그룹에 의해 실시간 처리 소프트웨어 시스템에서 요구사항을 명확히 기술하도록

       할 목적으로 개발한 것으로, RSL과 REVS를 사용하는 자동화 도구이다

   ㄴ. RSL(Requirement Statement Language) : 요소, 속성, 관계, 구조들을 기술하는 요구사항 기술 언어

요소 요구사항 명세를 개발하기 위해 사용되는 개체와 개념
속성 요소를 수정하거나 수식하기 위한 것
관계 개체들 간의 관계
구조 정보 흐름을 묘사하기 위한 것

   ㄷ. REVS(Requirement Engineering and Validation System) : RSL로 기술된 요구사항들을 자동으로 분석하여

       요구사항 분석 명세서를 출력하는 요구사항 분석기

  - PSL/PSA

   ㄱ. 미시간 대학에서 개발한 것으로 PSL과 PSA를 사용하는 자동화 도구이다

   ㄴ. PSL(Problem Statement Language) : 문제(요구사항) 기술 언어

   ㄷ. PSA(Problem Statement Analyzer) : PSL로 기술한 요구사항을 자동으로 분석하여 다양한 보고서를

       출력하는 문제 분석기

  - TAGS(Technology for Automated Generation of Systems)

   ㄱ. 시스템 공학 방법 응용에 대한 자동 접근 방법으로, 개발 주기의 전 과정에 이용할 수 있는 통합 자동화

       도구이다

   ㄴ. 구성 : IORL, 요구사항 분석과 IORL 처리를 위한 도구, 기초적인 TAGS 방법론

   ㄷ. IORL : 요구사항 명세 언어

 

 2. HIPO(Hierarchy Input Process Output) 

  : 시스템의 분석 및 설계나 문서화할 때 사용되는 기법으로, 시스템 실행 과정인 입력, 처리, 출력의 기능을  

    나타낸다 

  - 기본 시스템 모델은 입력, 처리, 출력으로 구성되며, 하향식 소프트웨어 개발을 위한 문서화 도구 

  - 체계적인 문서 관리가 가능하다 

  - 기호, 도표 등을 사용하므로 보기 쉽고 이해하기도 쉽다 

  - 기능과 자료의 의존 관계를 동시에 표현할 수 있다 

  - 변경, 유지보수가 용이하다 

  - 시스템의 기능을 여러 개의 고유 모듈들로 분할하여 이들 간의 인터페이스를 계층 구조로 표현한 것을 HIPO         

    Chart라고 한다 

  - 종류 

   ㄱ. 가시적 도표(Visual Table of Contents, 도식 목차) : 시스템의 전체적인 기능과 흐름을 보여주는 계층(Tree)  

       구조도 

   ㄴ. 총체적 도표(Overview Diagrma, 총괄도표, 개요 도표) : 프로그램을 구성하는 기능을 기술한 것으로 입력,  

       처리, 출력에 대한 전반적인 정보를 제공하는 도표 

   ㄷ. 세부적 도표(Detail Diagram, 상세 도표) : 총체적 도표에 표시된 기능을 구성하는 기본 요소들을 상세히  

       기술하는 도표 

 

∙UML(Unified Modeling Language) 

 : 시스템 분석, 설계, 구현 등 시스템 개발 과정에서 시스템 개발자와 고객 또는 개발자 상호간의 의사소통이  

   원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어이다 

 - Rumbaugh(OMT), Booch, Jacobson 등의 객체지향 방법론의 장점을 통합하였으며, 객체 기술에 관한  

   국제표준화기구인 OMG(Object Management Group)에서 표준으로 지정하였다 

 - UML을 이용하여 시스템 구조를 표현하는 6개의 구조 다이어그램과 시스템의 동작을 표현하는 7개의 행위  

   다이어그램을 작성할 수 있다 

 - 각각의 다이어그램은 사물과 사물 간의 관계를 용도에 맞게 표현한다 

 - 구성 요소 : 사물(Things), 관계(Relationships), 다이어그램(Diagram) 등이 있다 

 

1. 사물(Things) 

 : 사물은 모델을 구성하는 가장 중요한 기본 요소로, 다이어그램 안에서 관계가 형성될 수 있는 대상들을 말한다 

사물  내용 
구조 사물 
(Structural Things) 
- 시스템의 개념적, 물리적 요소를 표현 
- 클래스(Class), 유스케이스(Use Case), 컴포넌트(Component), 노드(Node) 등 
행동 사물 
(Behavioral Things) 
- 시간과 공간에 따른 요소들의 행위를 표현 
- 상호작용(interaction), 상태 머신(State Machine) 등 
그룹 사물 
(Group Things) 
- 요소들을 그룹으로 묶어서 표현 
- 패키지(Package) 
주해 사물 
(Annotations Things) 
- 부가적인 설명이나 제약조건 등을 표현 
- 노트(Note) 

 

2. 관계(Relationships) 

 : 사물과 사물 사이의 연관성을 표현하는 것으로 연관 관계, 집합 관계, 포함 관계, 일반화 관계, 의존 관계, 실체화  

   관계 등이 있다 

 

 - 연관(Association) 관계 

  : 2개 이상의 사물이 서로 관련되어 있음을 표현 

  ㄱ. 사물 사이를 실선으로 연결하여 표현하며, 방향성은 화살표로 표현한다 

  ㄴ. 서로에게 영향을 주는 양방향 관계의 경우 화살표를 생략하고 실선으로만 연결한다 

  ㄷ. 연관에 참여하는 객체의 개수를 의미하는 다중도(Multiplicity)를 선 위에 표기한다 

     
1  1개의 객체가 연관되어 있다 
n  n개의 객체가 연관되어 있다 
0..1  연관된 객체가 없거나 1개만 존재한다 
0..* 또는 *  연관된 객체가 없거나 다수일 수 있다 
1..*  연관된 객체가 적어도 1개 이상이다 
n..*  연관된 객체가 적어도 n개 이상이다 
n..m  연관된 객체가 최소 n개에서 최대 m개이다 

 

 - 집합(Aggregation) 관계 

  : 하나의 사물이 다른 사물에 포함되어 있는 관계를 표현 

   ㄱ. 포함하는 쪽(전체, Whole)과 포함되는 쪽(부분, Part)은 서로 독립적이다 

   ㄴ. 포함되는 쪽(부분, Part)에서 포함하는 쪽(전체, Whole)으로 속이 빈 마름모를 연결하여 표현한다 

 - 포함(Composition) 관계 

  : 집합 관계의 특수한 형태로, 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계를 표현 

   ㄱ. 포함하는 쪽(전체, Whole)과 포함되는 쪽(부분, Part)은 서로 독립될 수 없고 생명주기를 함께한다 

   ㄴ. 포함되는 쪽(부분, Part)에서 포함하는 쪽(전체, Whole)으로 속이 채워진 마름모를 연결하여 표현한다 

 - 일반화(Generalization) 관계 

  : 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지를 표현 

   ㄱ. 예를 들어 사람은 여자와 남자보다 일반적인 개념이고 반대로 여자와 남자는 사람보다 구체적인 개념이다 

   ㄴ. 보다 일반적인 개념을 상위(부모), 보다 구체적인 개념을 하위(자식)라고 부른다 

   ㄷ. 구체적(하위)인 사물에서 일반적(상위)인 사물쪽으로 속이 빈 화살표를 연결하여 표현한다 

 - 의존(Dependency) 관계 

  : 연관 관계와 같이 사물 사이에 서로 연관은 있으나 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을  

    유지하는 관계를 표현 

   ㄱ. 하나의 사물과 다른 사물이 소유 관계는 아니지만 사물의 변화가 다른 사물에도 영향을 미치는 관계 

   ㄴ. 일반적으로 한 클래스가 다른 클래스를 오퍼레이션의 매개 변수로 사용하는 경우에 나타나는 관계이다 

   ㄷ. 영향을 주는 사물(이용자)이 영향을 받는 사물(제공자) 쪽으로 점선 화살표를 연결하여 표현한다 

 - 실체화(Realization) 관계 

  : 사물이 할 수 있거나 해야 하는 기능(오퍼레이션, 인터페이스)으로 서로를 그룹화 할 수 있는 관계를 표현 

   ㄱ. 한 사물이 다른 사물에게 오퍼레이션을 수행하도록 지정하는 의미적 관계이다 

   ㄴ. 사물에서 기능 쪽으로 속이 빈 점선 화살표를 연결하여 표현한다 

 

3. 다이어그램(Diagram) 

 - 여러 관점에서 시스템을 가시화한 뷰를 제공함으로써 의사소통에 도움을 준다 

 - 정적 모델링은 주로 구조적 다이어그램을 사용하며 객체, 속성, 연관관계, 오퍼레이션의 시스템 구조를 나타낸다 

 - 동적 모델링은 주로 행위 다이어그램을 사용하며 시스템의 내부 동작을 말한다 

 - 기능적 모델링은 사용자 측면에서 본 시스템 기능이며, UML에서는 Usecase Diagram을 사용한다 

 

 - 구조적(Structural) 다이어그램의 종류 

클래스 다이어그램 
(Class Diagram) 
- 클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현한다 
- 시스템의 구조를 파악하고 구조상의 문제점을 도출할 수 있다 
객체 다이어그램 
(Object Diagram) 
- 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현한다 
- 럼바우(Rumbaugh) 객체지향 분석 기법에서 객체 모델링에 활용된다 
컴포넌트 다이어그램 
(Component Diagram) 
- 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현한다 
- 구현 단계에서 사용되는 다이어그램이다 
배치 다이어그램 
(Deployment Diagram) 
- 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현한다 
- 노드와 의사소통(통신) 경로로 표현한다 
- 구현 단계에서 사용되는 다이어그램이다 
복합체 구조 다이어그램 
(Composite Structure Diagram) 
클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현한다 
패키지 다이어그램 
(Package Diagram) 
유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현한다 

 

 - 행위(Behavioral) 다이어그램의 종류 

유스케이스 다이어그램 
(Usecase Diagram) 
- 사용자의 요구를 분석하는 것으로 기능 모델링 작업에 사용한다 
- 사용자(Actor)와 사용 사례(Usecase)로 구성되며, 사용 사례 간에는 여러 형태의 관계로 이루어진다 
시퀀스 다이어그램 
(Sequence Diagram) 
- 상호 작용하는 시스템이나 시간에 흐름에 따라 객체들이 주고받는 메시지를 표현한다 
- 교류 다이어그램의 한 종류로 볼 수 있다 
커뮤니케이션 다이어그램 
(Communication Diagram) 
시퀀스 다이어그램과 같이 동작에 참여하는 객체들이 주고받는 메시지를 표현하는데, 메시지뿐만 아니라 객체들 간의 연관까지 표현한다 
상태 다이어그램 
(State Diagram) 
- 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현한다 
- 럼바우(Rumbaugh) 객체지향 분석 기법에서 동적 모델링에 활용된다 
활동 다이어그램 
(Activity Diagram) 
시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현한다 
상호작용 개요 다이어그램 
(Interaction Overview Diagram) 
상호작용 다이어그램 간의 제어 흐름을 표현한다 
타이밍 다이어그램 
(Timing Diagram) 
객체 상태 변화와 시간 제약을 명시적으로 표현한다 

 

 + 단계 다이어그램(Phase Diagram)은 물리, 화학 등에서 사용하는 다이어그램으로 요구사항 모델링과 관계 없다 

 

 - 스테레오 타입 

  : UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하기 위해 사용 

   ㄱ. 길러멧이라고 부르는 겹화살괄호(<<>>) 사이에 표현할 형태를 기술한다 

      
<<include>>  연결된 다른 UML 요소에 대해 포함 관계에 있는 경우 
<<extend>>  연결된 다른 UML 요소에 대해 확장 관계에 있는 경우 
<<interface>>  인터페이스를 정의하는 경우 
<<exception>>  예외를 정의하는 경우 
<<constructor>>  생성자 역할을 수행하는 경우 

 

 

∙주요 UML 다이어그램 

 1. 유스케이스(UseCase) 다이어그램 

  : 개발될 시스템과 관련된 외부 요소들, 즉 사용자와 다른 외부 시스템들이 개발될 시스템을 이용해 수행할 수 있는  

    기능을 사용자의 관점에서 표현 

  - 외부 요소와 시스템 간의 상호 작용을 확인할 수 있다 

  - 사용자의 요구사항을 추출하고 분석하기 위한 도구로 사용된다 

  - 시스템의 범위를 파악할 수 있다 

 

  + 유스케이스 다이어그램의 구성 요소 

시스템(System)/ 
시스템 범위 
(System Scope) 
시스템 내부에서 수행되는 기능들을 외부 시스템과 구분하기 위해 시스템 내부의 유스케이스들을 사각형으로 묶어 시스템의 범위를 표현함 
액터(Actor)  - 시스템과 상호작용을 하는 모든 외부 요소로, 사람이나 외부 시스템을 의미함 
- 주액터(사용자 액터) : 기능을 요구하는 대상이나 시스템의 수행결과를 통보받는 사용자 혹은 기능을 사용하게 될 대상으로 시스템이 제공해야하는 기능인 유스케이스의 권한을 가지는 대상, 역할 
- 부액터(시스템 액터) : 주액터의 목적 달성을 위해 시스템에 서비스를 제공하는 외부 시스템으로, 본 시스템과 데이터를 주고 받는 연동 시스템을 의미한다 
유스케이스 
(UseCase) 
사용자가 보는 관점에서 시스템이 액터에게 제공하는 서비스 또는 기능을 표현한 것 
관계 
(Relationship) 
유스케이스 다이어그램에서 관계는 액터와 유스케이스, 유스케이스와 유스케이스 사이에서 나타날 수 있다 
- 연관 : 유스케이스와 액터의 관계 
- 확장 : 기본 유스케이스 수행 시 특별한 조건을 만족할 때 수행할 유스케이스 
- 포함 : 두 개 이상의 유스케이스에 공통적으로 적용되는 기능을 별도로 분리하여 새로운 유스케이스로 만든 경우 
- 일반화 : 하위 유스케이스/액터가 상위 유스케이스/액터에게 기능, 역할을 상속 받는다 
- 그룹화 : 여러 개의 유스케이스를 단순화하는 방법 
- 연동 : 양방향으로 데이터를 파일이나 정해진 형식으로 넘겨주는 것 

 

 2. 클래스(Class) 다이어그램 

  : 시스템을 구성하는 클래스, 클래스의 특성인 속성과 오퍼레이션, 속성과 오퍼레이션에 대한 제약조건, 클래스 

    사이의 관계를 표현 

  - 시스템을 구성하는 요소에 대해 이해할 수 있는 구조적 다이어그램이다 

  - 시스템 구성 요소를 문서화하는 데 사용된다 

  - 코딩에 필요한 객체의 속성, 함수 등의 정보를 잘 표현하고 있어 시스템을 모델링하는 데 자주 사용된다 

 

  + 클래스 다이어그램의 구성 요소 

클래스(Class)  - 클래스는 각각의 객체들이 갖는 속성과 오퍼레이션(동작)을 표현함 
- 일반적으로 3개의 구획(Compartment)으로 나눠 클래스의 이름, 속성, 오퍼레이션을 표기함 
- 속성(Attribute) : 클래스의 상태나 정보를 표현함 
- 오퍼레이션(Operation) : 클래스가 수행할 수 있는 동작으로, 함수(메소드, Method)라고도 함 
제약조건  속성에 입력될 값에 대한 제약조건이나 오퍼레이션 수행 전후에 지정해야 할 조건이 있다면 이를 적음 
관계 
(Relationships) 
- 관계는 클래스와 클래스 사이의 연관성을 표현함 
- 클래스 다이어그램에 표현하는 관계에는 연관 관계, 집합 관계, 포함 관계, 일반화 관계, 의존 관계가 있음 

 

 + 접근제어자 (속성과 오퍼레이션에 동일하게 적용) 

접근제어자  표현법  내용 
public  +  어떤 클래스에서라도 접근이 가능 
private  -  해당 클래스 내부에서만 접근이 가능 
protected  #  동일 패키지 내의 클래스 또는 해당 클래스를 상속 받은 외부패키지 클래스에서 접근 가능 
package  ~  동일 패키지 내부에 있는 클래스에서만 접근이 가능 

 

 3. 시퀀스(Sequence) 다이어그램 

  : 시스템이나 객체들이 메시지를 주고 받으며 시간의 흐름에 따라 상호작용하는 과정을 액터, 객체, 메시지 등의  

    요소를 사용하여 그림으로 표현한 것이다 

  - 시스템이나 객체들의 상호 작용 과정에서 주고받는 메시지를 표현한다 

  - 각 동작에 참여하는 시스템이나 객체들의 수행 기간을 확인할 수 있다 

  - 클래스 내부에 있는 객체들을 기본 단위로 하여 그들의 상호작용을 표현한다 

  - 기능 모델링에서 작성한 유스케이스 명세서를 하나의 표현 범위로 하지만, 하나의 클래스에 포함된 오퍼레이션을  

   하나의 범위로 표현하기도 한다 

 

  + 시퀀스 다이어그램의 구성 요소 

액터(Actor)  시스템으로부터 서비스를 요청하는 외부 요소로, 사람이나 외부 시스템을 의미함 
객체(Object)  메시지를 주고받는 주체 
생명선(Lifeline)  객체가 메모리에 존재하는 기간으로, 객체 아래쪽에 점선을 그어 표현함 
실행상자(Active Box)  객체가 메시지를 주고 받으며 구동되고 있음을 표현함 
메시지(Message)  객체가 상호 작용을 위해 주고받는 메시지 

∎2장 화면 설계 

 

∙사용자 인터페이스 

 : 사용자와 시스템 간의 상호작용이 원활하게 이뤄지도록 도와주는 장치나 소프트웨어를 의미한다 

 - 초기의 사용자 인터페이스는 단순히 사용자와 컴퓨터 간의 상호작용에만 국한되었지만 점차 사용자가 수행할  

   작업을 구체화시키는 기능 위주로 변경되었고, 최근에는 정보 내용을 전달하기 위한 표현 방법으로 변경되었다 

 - 사용자 인터페이스의 세 가지 분야 

  ㄱ. 정보 제공과 전달을 위한 물리적 제어에 관한 분야 

  ㄴ. 콘텐츠의 상세적인 표현과 전체적인 구성에 관한 분야 

  ㄷ. 모든 사용자가 편리하고 간편하게 사용하도록 하는 기능에 관한 분야 

 

 1. 특징 

 - 사용자의 만족도에 가장 큰 영향을 미치는 중요한 요소로, 소프트웨어 영역 중 변경이 가장 많이 발생한다 

 - 사용자의 편리성과 가독성을 높임으로써 작업 시간을 단축시키고 업무에 대한 이해도를 높여준다 

 - 최소한의 노력으로 원하는 결과를 얻을 수 있게 한다 

 - 사용자 중심으로 설계되어 사용자 중심의 상호 작용이 되도록 한다 

 - 수행 결과의 오류를 줄이고 발생하는 오류를 쉽게 수정할 수 있어야 한다 

 - 사용자의 막연한 작업 기능에 대해 구체적인 방법을 제시해 준다 

 - 정보 제공자와 공급자 간의 매개 역할을 수행한다 

 - 사용자 인터페이스를 설계하기 위해서는 소프트웨어 아키텍처를 반드시 숙지해야 한다 

 

 2. 구분 

  - CLI(Command Line Interface) : 명령과 출력이 텍스트 형태로 이뤄지는 인터페이스 

  - GUI(Graphical User Interface) : 아이콘이나 매뉴를 마우스로 선택해 작업을 수행하는 그래픽 환경 인터페이스 

  - NUI(Natural User Interface) : 사용자의 말이나 행동으로 기기를 조작하는 인터페이스 

 

 3. 사용자 인터페이스의 기본 원칙 

직관성  누구나 쉽게 이해하고 사용할 수 있어야 한다 
유효성  사용자의 목적을 정확하고 완벽하게 달성해야 한다 
학습성  누구나 쉽게 배우고 익힐 수 있어야 한다 
유연성  사용자의 요구사항을 최대한 수용하고 실수를 최소화해야 한다 

 

 4. 사용자 인터페이스의 설계 지침 

사용자 중심  사용자가 쉽게 이해하고 편리하게 사용할 수 있는 환경을 제공하며,  
실사용자에 대한 이해가 바탕이 되어야 한다 
일관성  버튼이나 조작 방법 등을 일관성 있게 제공하므로  
사용자가 쉽게 기억하고 습득할 수 있게 설계해야 한다 
단순성  조작 방법을 단순화시켜 인지적 부담을 감소시켜야 한다 
결과 예측 가능  작동시킬 기능만 보고도 결과를 미리 예측할 수 있게 설계해야 한다 
가시성  메인 화면에 주요 기능을 노출시켜 최대한 조작이 쉽도록 설계해야 한다 
표준화  기능 구조와 디자인을 표준화하여 한 번 학습한 이후에는  
쉽게 사용할 수 있도록 설계해야 한다 
접근성  사용자의 연령, 성별, 인종 등 다양한 계층이 사용할 수 있도록 설계해야 한다 
명확성  사용자가 개념적으로 쉽게 인지할 수 있도록 설계해야 한다 
오류 발생 해결  오류가 발생하면 사용자가 쉽게 인지할 수 있도록 설계해야 한다 

 

 5. 사용자 인터페이스 개발 시스템의 기능 

  - 사용자의 입력을 검증할 수 있어야 한다 

  - 에러 처리와 그와 관련된 에러 메시지를 표시할 수 있어야 한다 

  - 도움과 프롬프트(Prompt)를 제공해야 한다 

 

∙UI 설계 도구 

 : 사용자의 요구사항에 맞게 UI의 화면 구조나 화면 배치 등을 설계할 때 사용하는 도구로, 종류에는 와이어프레임,

   목업, 스토리보드, 프로토타입, 유스케이스 등이 있다 

 - UI 설계 도구로 작성된 결과물은 사용자의 요구사항이 실제 구현되었을 때 화면은 어떻게 구성되는지, 어떤 방식으로

   수행되는지 등을 기획단계에서 미리 보여주기 위한 용도로 사용된다 

 

 1. 와이어프레임(Wireframe) 

  : 기획 단계의 초기에 제작하는 것으로, 페이지에 대한 개략적인 레이아웃이나 UI 요소 등에 대한 뼈대를 설계하는  

    단계이다 

  - 와이어프레임을 제작할 때는 각 페이지의 영역 구분, 콘텐츠, 텍스트 배치 등을 화면 단위로 설계한다 

  - 개발자나 디자이너 등이 레이아웃을 협의하거나 현재 진행 상태 등을 공유하기 위해 와이어프레임을 사용한다 

  - ex) 손그림, 파워포인트, 키노트, 스케치, 일러스트, 포토샵 등 

 

 2. 목업(Mockup) 

  : 디자인, 사용 방법 설명, 평가 등을 위해 와이어프레임보다 좀 더 실제 화면과 유사하게 만든 정적인 형태의 모형 

  - 시각적으로만 구성 요소를 배치하는 것으로 실제로 구현되지는 않는다 

  - ex) 파워 목업, 발사믹 목업 등 

 

 3. 스토리보드(Story Board) 

  : 와이어프레임에 콘텐츠에 대한 설명, 페이지 간 이동 흐름 등을 추가한 문서 

  - 디자이너와 개발자가 최종적으로 참고하는 작업 지침서로, 정책, 프로세스, 콘텐츠 구성, 와이어프레임, 기능 정의  

    등 서비스 구축을 위한 모든 정보가 들어 있다 

  - 스토리보드는 상단이나 우측에는 제목, 작성자 등을 입력하고, 좌측에는 UI화면, 우측에는 디스크립션 

    (Description)을 기입한다 

  - 디스크립션(Description)은 화면에 대한 설명, 전반적인 로직, 분기처리, 예외처리 등을 작성하는 부분으로,  

    명확하고 세부적으로 작성해야 한다 

  - ex) 파워포인트, 키노트, 스케치, Axure 등 

 

 4. 프로토타입(Prototype) 

  : 와이어프레임이나 스토리보드 등에 인터랙션을 적용함으로써 실제 구현된 것처럼 테스트가 가능한 동적인 형태의  

    모형이다 

  - 프로토타입은 사용성 테스트나 작업자 간 서비스 이해를 위해 작성하는 샘플이다 

  - 프로토타입은 작성 방법에 따라 페이퍼 프로토타입과 디지털 프로토타입으로 나뉜다 

  - ex) HTML/CSS, Axure, Flinto, 네이버 프로토나우, 카카오 오븐 등 

 

 5. 유스케이스(Use Case) 

  : 사용자 측면에서의 요구사항으로, 사용자가 원하는 목표를 달성하기 위해 수행할 내용을 기술한다 

  - 사용자의 요구사항을 빠르게 파악함으로써 프로젝트의 초기에 시스템의 기능적인 요구를 결정하고  

    그 결과를 문서화할 수 있다 

  - 유스케이스는 자연어로 작성된 사용자의 요구사항을 구조적으로 표현한 것으로, 일반적으로 다이어그램 형식으로  

    묘사된다 

  - 유스케이스 다이어그램이 완성되면, 각각의 유스케이스에 대해 유스케이스 명세서를 작성한다 

 

∙품질 요구사항 

 : 소프트웨어의 품질은 소프트웨어의 기능, 성능, 만족도 등 소프트웨어에 대한 요구사항이 얼마나 충족하는가를  

   나타내는 소프트웨어 특성의 총체이다 

 - 사용자의 요구사항을 충족시킴으로써 확립된다 

 

 1. 기능성(Functionality) 

  : 소프트웨어가 사용자의 요구사항을 정확하게 만족하는 기능을 제공하는지 여부를 나타낸다 

   
적절성/적합성(Suitability)  지정된 작업과 사용자의 목적 달성을 위해 적절한 기능을 제공할 수 있는 능력 
정밀성/정확성(Accuracy)  사용자가 요구하는 결과를 정확하게 산출할 수 있는 능력 
상호 운용성(Interoperability)  다른 시스템들과 서로 어울려 작업할 수 있는 능력 
보안성(Security)  정보에 대한 접근을 권한에 따라 허용하거나 차단할 수 있는 능력 
준수성(Compliance)  기능과 관련된 표준, 관례 및 규정을 준수할 수 있는 능력 

 

 2. 신뢰성(Reliability) 

  : 소프트웨어가 요구된 기능을 정확하고 일관되게 오류 없이 수행할 수 있는 정도를 나타낸다 

   
성숙성(Maturity)  결함으로 인한 고장을 피해갈 수 있는 능력 
고장 허용성(Fault Tolerance)  결함 또는 인터페이스 결여 시에도 규정된 성능 수준을 유지할 수 있는 능력 
회복성(Recoverability)  고장 시 규정된 성능 수준까지 다시 회복하고 직접적으로 영향 받은 데이터를 복구할 수 있는 능력 

 

 3. 사용성(Usability) 

  : 사용자와 컴퓨터 사이에 발생하는 어떠한 행위에 대하여 사용자가 쉽게 배우고 사용할 수 있으며, 향후 다시  

    사용하고 싶은 정도를 나타낸다 

   
이해성(Understandability)  소프트웨어의 적합성, 사용 방법 등을 사용자가 이해할 수 있는 능력 
학습성(Learnability)  소프트웨어 애플리케이션을 학습할 수 있도록 하는 능력 
운용성(Operability)  사용자가 소프트웨어를 운용하고 제어할 수 있도록 하는 능력 
친밀성(Attractiveness)  사용자가 소프트웨어를 다시 사용하고 싶어 하도록 하는 능력 

 

 4. 효율성(Efficiency) 

  : 사용자가 요구하는 기능을 할당된 시간 동안 한정된 자원으로 얼마나 빨리 처리할 수 있는지 정도를 나타낸다 

   
시간 효율성 
(Time Behaviour) 
특정 기능을 수행할 때 적절한 반응 시간 및 처리 시간, 처리율을 제공할 수 있는 능력 
자원 효율성 
(Resource Behaviour) 
특정 기능을 수행할 때 적절한 자원으 양과 종류를 제공할 수 있는 능력 

 

 5. 유지 보수성(Maintainability) 

  : 환경의 변화 또는 새로운 요구사항이 발생했을 때 소프트웨어를 개선하거나 확장할 수 있는 정도를 나타낸다 

   
분석성(Analyzability)  결함이나 고장의 원인, 수정될 부분들의 식별을 가능하게 하는 능력 
변경성(Changeability)  결함 제거 또는 환경 변화로 인한 수정 등을 쉽게 구현할 수 있는 능력 
안정성(Stability)  변경으로 인한 예상치 못한 결과를 최소화 할 수 있는 능력 
시험성(Testability)  소프트웨어의 변경이 검증될 수 있는 능력 

 

 6. 이식성(Portability) 

  : 소프트웨어가 다른 환경에서도 얼마나 쉽게 적용할 수 있는지 정도를 나타낸다 

   
적용성(Adaptability)  원래의 목적으로 제공되는 것 외에 다른 환경으로 변경될 수 있는 능력 
설치성(installability)  임의의 환경에 소프트웨어를 설치할 수 있는 능력 
대체성(Replaceability)  동일한 환경에서 동일한 목적을 위해 다른 소프트웨어를 대신하여 사용될 수 있는 능력 
공존성(Co-existence)  자원을 공유하는 환경에서 다른 소프트웨어와 공존할 수 있는 능력 

 

 + 소프트웨어 품질 측정을 위해 개발자 관점에서 고려해야 할 항목 

  - 정확성, 신뢰성, 효율성, 무결성, 유연성, 이식성, 사용성, 상호운용성 


∎3장 애플리케이션 설계 

 

∙소프트웨어 아키텍처 

 : 소프트웨어의 골격이 되는 기본 구조이자, 소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조  

   또는 구조체이다. 

 - 소프트웨어 개발 시 적용되는 원칙과 지침이며, 이해 관계자들의 의사소통 도구로 활용하고 품질 요구사항을  

   반영하여 품질 속성을 결정한다 

 - 소프트웨어 아키텍처의 설계는 기본적으로 좋은 품질을 유지하면서 사용자의 비기능적 요구사항으로 나타난 제약을  

   반영하고, 기능적 요구사항을 구현하는 방법을 찾는 해결 과정이다 

 - 데이터 중심 아키텍처는 공유 데이터저장소를 통해 접근자 간의 통신이 이루어지므로 각 접근자의 수정과 확장이  

   용이하다 

 - 애플리케이션의 분할 방법과 분할된 모듈에 할당될 기능, 모듈 간의 인터페이스 등을 결정한다 

 - 소프트웨어 아키텍처 설계의 기본 원리로는 모듈화, 추상화, 단계적 분해, 정보은닉이 있다

 

 *상위 설계와 하위 설계

  상위 설계 하위 설계
별칭 아키텍처 설계, 예비 설계 모듈 설계, 상세 설계
설계 대상 시스템의 전체적인 구조 시스템의 내부 구조 및 행위
세부 목록 구조, DB, 인터페이스 컴포넌트, 자료 구조, 알고리즘

 

 + 아키텍처 설계과정 

  ㉮ 설계 목표 설정 

  ㉯ 시스템 타입 결정 

  ㉰ 스타일 적용 및 커스터마이즈 

  ㉱ 서브시스템의 기능, 인터페이스 동작 작성 

  ㉲ 아키텍처 설계 검토 

 

 1. 모듈화(Modularity) 

  : 소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 

    단위로 나누는 것을 의미한다 

  - 자주 사용되는 계산식이나 사용자 인증과 같은 기능들을 공통 모듈로 구성하여 프로젝트의 재사용성을  

    향상시킬 수 있다 

  - 모듈의 크기를 너무 작게 나누면 개수가 많아져 모듈 간의 통합 비용이 많이 들고, 너무 크게 나누면 개수가 적어 

    통합 비용은 적게 들지만 모듈 하나의 개발 비용이 많이 든다

  - 소프트웨어의 모듈은 프로그래밍 언어에서 Subroutine, Function 등으로 표현될 수 있다

  - 모듈의 수가 증가하면 상대적으로 각 모듈의 크기가 작아지며, 감소하면 상대적으로 각 모듈의 크기가 커진다

  - 시스템을 지능적으로 관리할 수 있도록 해주며, 복잡도 문제를 해결하는데 도움을 준다

 

 2. 추상화(Abstraction) 

  : 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것이다 

  - 인간이 복잡한 문제를 다룰 때 가장 기본적으로 사용하는 방법으로, 완전한 시스템을 구축하기 전에 그 시스템과  

    유사한 모델을 만들어서 여러 가지 요인들을 테스트할 수 있다 

  - 추상화는 최소의 비용으로 실제 상황에 대처할 수 있고, 시스템의 구조 및 구성을 대략적으로 파악할 수 있게  

    해준다 

  
과정 추상화  자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법 
데이터 추상화 
(자료 추상화) 
데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는  
표현으로 대체하는 방법 
제어 추상화  이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로  
대체하는 방법 

 

 3. 단계적 분해(Stepwise Refinement) 

  : Niklaus Wirth에 의해 제안된 하향식 설계 전략으로, 문제를 상위의 중요 개념으로부터 하위의 개념으로  

   구체화시키는 분할 기법이다 

  - 추상화의 반복에 의해 세분화된다 

  - 소프트웨어의 기능에서부터 시작하여 점차적으로 구체화하고, 알고리즘, 자료 구조 등 상세한 내역은 가능한  

    한 뒤로 미루어 진행한다 

하향식 설계 방법  상향식 설계 방법 
- 제일 상위에 있는 main user function에서 시작하여 기능을 하위 기능들로 분할해 가면서 설계한다 
- 통합 검사 시 인터페이스가 이미 정의되어 있어 통합이 간단하다 
- 레벨이 낮은 데이터 구조의 세부 사항은 설계초기 단계에서 필요하다 
- 최하위 수준에서 각각의 모듈들을 설계하고 이러한 모듈이 완성되면 이들을 결합하여 검사한다 

 

 4. 정보 은닉(Information Hiding) 

  : 한 모듈 내부에 포함된 절차와 자료들의 정보가 감추어져 다른 모듈이 접근하거나 변경하지 못하도록 하는  

    기법이다 

  - 어떤 모듈이 소프트웨어 기능을 수행하는데 반드시 필요한 기능이 있어 정보 은닉된 모듈과 커뮤니케이션 할  

    필요가 있을 때 필요한 정보만 인터페이스를 통해 주고 받는다 

  - 정보 은닉을 통해 모듈을 독립적으로 수행할 수 있고, 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지  

    않으므로 수정, 시험, 유지보수가 용이하다 

 

 5. 소프트웨어 아키텍처의 품질 속성 

  : 소프트웨어 아키텍처가 이해 관계자들이 요구하는 수준의 품질을 유지 및 보장할 수 있게 설계되었는지를  

    확인하기 위해 품질 평가 요소들을 시스템 측면, 비즈니스 측면, 아키텍처 측면으로 구분하여 구체화시켜 놓은  

    것이다 

  - 시스템 측면 

  
성능  사용자의 요청과 같은 이벤트가 발생했을 때, 이를 적절하고 빠르게 처리하는 것이다 
보안  허용되지 않은 접근을 막고, 허용된 접근에는 적절한 서비스를 제공하는 것이다 
가용성  장애 없이 정상적으로 서비스를 제공하는 것이다 
기능성  사용자가 요구한 기능을 만족스럽게 구현하는 것이다 
사용성  사용자가 소프트웨어를 사용하는데 헤매지 않도록 명확하고 편리하게 구현하는 것이다 
변경 용이성  소프트웨어가 처음 설계 목표와 다른 하드웨어나 플랫폼에서도 동작할 수 있도록 구현하는 것이다 
확장성  시스템의 용량, 처리능력 등을 확장시켰을 때 이를 효과적으로 활용할 수 있도록 구현하는 것이다 
기타 속성  테스트 용이성, 배치성, 안정성 등이 있다 

 

  - 비즈니스 측면 

  
시장 적시성  정해진 시간에 맞춰 프로그램을 출시하는 것이다 
비용과 혜택  - 개발 비용을 더 투자하여 유연성이 높은 아키텍처를 만들 것인지를 결정하는 것이다 
- 유연성이 떨어지는 경우 유지보수에 많은 비용이 소모될 수 있다는 것을 고려해야 한다 
예상 시스템 수명  - 시스템을 얼마나 오랫동안 사용할 것인지를 고려하는 것이다 
- 수명이 길어야 한다면 시스템 품질의 ‘변경 용이성’, ‘확장성’을 중요하게 고려해야 한다 
기타 속성  목표 시장, 공개 일정, 기존 시스템과의 통합 등이 있다 

 

  - 아키텍처 측면 

  
개념적 무결성  전체 시스템과 시스템을 이루는 구성요소들 간의 일관성을 유지하는 것이다 
정확성, 완결성  요구사항과 요구사항을 구현하기 위해 발생하는 제약사항들을 모두 충족시키는 것이다 
구축 가능성  모듈 단위로 구분된 시스템을 적절히 분배하여 유연하게 일정을 변경할 수 있도록 하는 것이다 
기타 속성  변경성, 시험성, 적응성, 일치성, 대체성 등이 있다 

 

 6. 소프트웨어 아키텍처의 설계 과정 

  - 설계 목표 설정 : 시스템의 개발 방향을 명확히 하기 위해 설계에 영향을 주는 비즈니스 목표, 우선순위 등의  

                    요구사항을 분석하여 전체 시스템의 설계 목표를 설정한다 

  - 시스템 타입 결정 : 시스템과 서브시스템의 타입을 결정하고, 설계 목표와 함께 고려하여 아키텍처 패턴을  

                      선택한다 

  - 아키텍처 패턴 적용 : 아키텍처 패턴을 참조하여 시스템의 표준 아키텍처를 설계한다 

  - 서브시스템 구체화 : 서브시스템의 기능 및 서브시스템 간의 상호작용을 위한 동작과 인터페이스를 정의한다 

  - 검토 : 아키텍처가 설계 목표에 부합하는지, 요구사항이 잘 반영되었는지, 설계의 기본 원리를 만족하는지 등을  

            검토한다 

*협약에 의한 설계
 : 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것으로, 소프트웨어 컴포넌트에 대한 정확한
   인터페이스를 명세한다



- 선행 조건(Precondition) : 오퍼레이션이 호출되기 전에 참이 되어야 할 조건
- 결과 조건(Postcondition) : 오퍼레이션이 수행된 후 만족되어야 할 조건
- 불변 조건(Invariant) : 오퍼레이션이 실행되는 동안 항상 만족되어야 할 조건

 

∙아키텍처 패턴(=아키텍처 스타일, =표준 아키텍처) 

 : 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미한다 

 - 소프트웨어 시스템의 구조를 구성하기 위한 기본적인 윤곽을 제시한다 

 - 아키텍처 패턴에는 서브시스템들과 그 역할이 정의되어 있으며, 서브시스템 사이의 관계와 여러 규칙·지침 등이  

   포함되어 있다 

 

 1. 장점 

  ㄱ. 시행착오를 줄여 개발 시간을 단축시키고, 고품질의 소프트웨어를 생산할 수 있다 

  ㄴ. 검증된 구조로 개발하기 때문에 안정적인 개발이 가능하다 

  ㄷ. 이해관계자들이 공통된 아키텍처를 공유할 수 있어 의사소통이 간편해진다 

  ㄹ. 시스템의 구조를 이해하는 것이 쉬워 개발에 참여하지 않은 사람도 손쉽게 유지보수를 수행할 수 있다 

  ㅁ. 시스템의 특성을 개발 전에 예측하는 것이 가능해진다 

 

 2. 레이어 패턴(Layers Pattern) 

  : 시스템을 계층(Layer)으로 구분하여 구성하는 고전적인 방법 중의 하나다 

  - 각각의 서브시스템들이 계층 구조를 이루며, 상위 계층은 하위 계층에 대한 서비스 제공자가 되고, 하위 계층은 

    상위 계층의 클라이언트가 된다 

  - 서로 마주보는 두 개의 계층 사이에서만 상호작용이 이루어지며, 변경 사항을 적용할 때도 서로 마주보는  

    두 개의 계층에만 영향을 미치므로 변경 작업이 용이하다 

  - 특정 계층만을 교체해 시스템을 개선하는 것이 가능하다 

  - 대표적으로 OSI 참조 모델이 있다 

 

 3. 클라이언트-서버 패턴(Client-Server Pattern) 

  : 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴이다 

  - 클라이언트-서버 패턴엥서 사용자는 클라이언트와만 의사소통을 한다. 즉 사용자가 클라이언트를 통해 서버에  

    요청하고 클라이언트가 응답을 받아 사용자에게 제공하는 방식으로 서비스를 제공한다 

  - 서버는 클라이언트의 요청에 대비해 항상 대기 상태를 유지해야 한다 

  - 클라이언트나 서버는 요청과 응답을 받기 위해 동기화되는 경우를 제외하고는 서로 독립적이다 

 

 4. 파이프-필터 패턴(Pipe-Filter Pattern) 

  : 서브시스템이 입력 데이터를 받아 처리하고 결과를 다른 시스템(다른 서브시스템)에 보내는 작업이 반복되며,  

   데이터 스트림 절차의 각 단계를 필터(Filter) 컴포넌트로 캡슐화하여 파이프(Pipe)를 통해 단방향으로 데이터를  

   전송하는 패턴이다 

  - 필터 컴포넌트는 재사용성이 좋고, 추가가 쉬워 확장이 용이하다 

  - 필터 컴포넌트들을 재배치하여 다양한 파이프라인을 구축하는 것이 가능하다 

  - 파이프-필터 패턴은 데이터 변환, 버퍼링, 동기화 등에 주로 사용된다 

  - 필터 간 데이터 이동 시 데이터 변환으로 인한 오버헤드가 발생한다 

  - 대표적으로 UNIX의 쉘(Shell)이 있다 

 

 5. 모델-뷰-컨트롤러 패턴(Model-View-Controller Pattern) 

  : 서브시스템을 3개의 부분으로 구조화하는 패턴이며, 각 부분의 역할은 다음과 같다 

    
- 모델(Model) : 서브시스템의 핵심 기능과 데이터를 보관한다 
- 뷰(View) : 사용자에게 정보를 표시한다 
- 컨트롤러(Controller) : 사용자로부터 받은 입력을 처리한다 

 

  - 각 부분은 별도의 컴포넌트로 분리되어 있으므로 서로 영향을 받지 않고 개발 작업을 수행할 수 있다 

  - 여러 개의 뷰를 만들 수 있으므로 한 개의 모델에 대해 여러 개의 뷰를 필요로 하는 대화형 애플리케이션에  

    적합하다 

 

 6. 기타 패턴 

마스터-슬레이브 패턴 
(Master-Slave Pattern) 
- 마스터 컴포넌트는 동일한 구조의 슬레이브 컴포넌트로 작업을 분할한 후, 슬레이브 컴포넌트에서 처리된 결과물을 다시 돌려받는 방식으로 작업을 수행하는 패턴이다 
- 마스터 컴포넌트는 모든 작업의 주체이고, 슬레이브 컴포넌트는 마스터 컴포넌트의 지시에 따라 작업을 수행하여 결과를 반환한다 
- 장애 허용 시스템과 병렬 컴퓨팅 시스템, 실시간 시스템에서 주로 활용된다 
브로커 패턴 
(Broker Pattern) 
- 사용자가 원하는 서비스와 특성을 브로커 컴포넌트에 요청하면 브로커 컴포넌트가 요청에 맞는 컴포넌트와 사용자를 연결해준다 
- 원격 서비스 호출에 응답하는 컴포넌트들이 여러 개 있을 때 적합한 패턴이다 
- 분산 환경 시스템에서 주로 활용된다 
피어-투-피어 패턴 
(Peer-To-Peer Pattern) 
- 피어(Peer)를 하나의 컴포넌트로 간주하며, 각 피어는 서비스를 호출하는 클라이언트가 될 수도, 서비스를 제공하는 서버가 될 수도 있는 패턴이다 
- 피어-투-피어 패턴에서 클라이언트와 서버는 전형적인 멀티스레딩 방식을 사용한다 
이벤트-버스 패턴 
(Event-Bus Pattern) 
- 소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 방식이다 
- 4가지 주요 컴포넌트 
 1. 이벤트를 생성하는 소스(Source) 
 2. 이벤트를 수행하는 리스너(Listener) 
 3. 이벤트의 통로인 채널(Channel) 
 4. 채널들을 관리하는 버스(Bus) 
블랙보드 패턴 
(Blackboard Pattern) 
- 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 형태로, 컴포넌트들은 검색을 통해 블랙보드에서 원하는 데이터를 찾을 수 있다 
- 해결책이 명확하지 않은 문제를 처리하는데 유용한 패턴이다 
- 음성 인식, 차량 식별, 신호 해석 등에 주로 활용돈다 
인터프리터 패턴 
(INterpreter Pattenr) 
- 프로그램 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된다 
- 특정 언어로 작성된 프로그램 코드를 해석하는 컴포넌트를 설계할 때 사용되어진다 

 

∙객체지향(Object-Oriented) 

 : 현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체(Object)로 만들어, 기계적인 부품들을 조립하여  

   제품을 만들 듯이 소프트웨어를 개발할 때에도 객체들을 조립해서 작성할 수 있는 기법을 말한다 

 - 구조적 기법의 문제점으로 인한 소프트웨어 위기의 해결책으로 채택되어 사용되고 있다 

 - 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다 

 - 복잡한 구조를 단계적·계층적으로 표현하고, 멀티미디어 데이터 및 병렬 처리를 지원한다 

 - 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해할 수 있다 

 - 주요 구성 요소와 개념 : 객체(Object), 클래스(Class), 캡슐화(Encapsulation), 상속(Inheritance),  

   다형성(Polymorphism), 연관성(Relationship) 

 

 1. 객체 (Object) 

  : 데이터와 데이터를 처리하는 함수를 묶어 놓은(캡슐화한) 하나의 소프트웨어 모듈이다 

  - 객체의 메소드는 다른 객체로부터 메시지를 받았을 때 정해진 기능을 수행한다 

   
데이터  - 객체가 가지고 있는 정보로 속성이나 상태, 분류 등을 나타낸다 
- 속성(Attribute), 상태, 변수, 상수, 자료 구조라고도 한다 
함수  - 객체가 수행하는 기능으로 객체가 갖는 데이터(속성, 상태)를 처리하는 알고리즘이다 
- 객체의 상태를 참조하거나 변경하는 수단이 되는 것으로 메소드(Method, 행위),  
  서비스(Service), 동작(Operation) 연산이라고도 한다 

 

  - 객체의 특성 

   ㄱ. 독립적으로 식별 가능한 이름을 가지고 있다 

   ㄴ. 객체가 가질 수 있는 조건을 상태(State)라고 하는데, 일반적으로 상태는 시간에 따라 변한다 

   ㄷ. 객체와 객체는 상호 연관성에 의한 관계가 형성된다 

   ㄹ. 객체가 반응할 수 있는 메시지의 집합을 행위라고 하며, 객체는 행위의 특징을 나타낼 수 있다 

   ㅁ. 일정한 기억장소를 가지고 있다 

 

 2. 클래스 (Class) 

  : 공통된 속성과 연산(행위)을 갖는 객체의 집합으로, 객체의 일반적인 타입(Type)을 의미한다 

  - 클래스는 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀이다 

  - 객체지향 프로그램에서 데이터를 추상화하는 단위이다 

  - 클래스에 속한 각각의 객체를 인스턴스(Instance)라 하며, 클래스로부터 새로운 객체를 생성하는 것을  

    인스턴스화(Instantiation)라고 한다 

  - 동일 클래스에 속한 각각의 객체(인스턴스)들은 공통된 속성과 행위를 가지고 있으면서,  

    그 속성에 대한 정보가 서로 달라서 동일 기능을 하는 여러 가지 객체를 나타내게 된다 

  - 최상위 클래스는 상위 클래스를 갖지 않는 클래스를 의미한다 

  - 슈퍼 클래스(Super Class)는 특정 클래스의 상위(부모) 클래스이고, 서브 클래스(Sub Class)는 특정 클래스의  

    하위(자식) 클래스를 의미한다 

 

 3. 캡슐화 (Encapsulation) 

  : 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶어 외부와 경계를 만들고 필요한 인터페이스만을 밖으로  

    드러내는 것을 의미한다 

  - 캡슐화된 객체는 인터페이스를 제외한 세부 내용이 은폐(정보 은닉)되어 외부에서의 접근이 제한적이기 때문에  

    외부 모듈의 변경으로 인한 파급 효과가 적다 

  - 캡슐화된 객체들은 재사용이 용이하다 

  - 객체들 간의 메시지를 주고받을 때 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고,  

    객체 간의 결합도가 낮아진다 

 

 4. 상속 (Inheritance) 

  : 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스)가 물려받는 것이다 

  - 상속을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도  

    즉시 자신의 속성으로 사용할 수 있다 

  - 하위 클래스는 상위 클래스로부터 상속받은 속성과 연산 외에 새로운 속성과 연산을 첨가하여 사용할 수 있다 

  - 상위 클래스의 속성과 연산을 하위 클래스가 사용할 수 있기 때문에 객체와 클래스의 재사용,  

    즉 소프트웨어의 재사용(Reuse)을 높이는 중요한 개념이다 

  - 다중 상속 : 한 개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속받는 것이다 

 

 5. 다형성 (Polymorphism) 

  : 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체(클래스)가 가지고 있는  

    고유한 방법(특성)으로 응답할 수 있는 능력을 의미한다 

  - 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다 

  - 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에  

    속한 인스턴스처럼 수행할 수 있도록 하는 것이다 

 

 6. 연관성 (Relationship) 

  : 두 개 이상의 객체(클래스)들이 상호 참조하는 관계를 말하며 종류는 다음과 같다 

  
종류  의미  특징 
is member of  연관화 (Association)  2개 이상의 객체가 상호 관련되어 있음을 의미 
is instance of  분류화 (Classification)  동일한 형의 특성을 갖는 객체들을 모아 구성하는 것 
part-whole 
is part of 
집단화 (Aggregation)  관련 있는 객체들을 묶어 하나의 상위 객체를 구성하는 것 
is a  일반화 (Generalization)  공통적인 성질들로 추상화한 상위 객체를 구성하는 것 
특수화/상세화 (Specialization)  상위 객체를 구체화하여 하위 객체를 구성하는 것 

 

∙객체지향 분석(OOA; Object Oriented Analysis) 및 설계 

 : 사용자의 요구사항을 분석하여 요구된 문제와 관련된 모든 클래스(객체), 이와 연관된 속성과 연산, 그들 간의 관계 

   등을 정의하여 모델링하는 작업이다 

 - 소프트웨어를 개발하기 위한 비즈니스(업무)를 객체와 속성, 클래스와 멤버, 전체와 부분 등으로 나누어 분석한다 

 - 분석가에게 주요한 모델링 구성 요소인 클래스, 객체, 속성, 연산들을 표현해서 문제를 모형화할 수 있게 해준다 

 - 객체는 클래스로부터 인스턴스화되고, 이 클래스를 식별하는 것이 객체지향 분석의 주요한 목적이다 

 - 데이터와 행위를 하나로 묶어 객체를 정의내리고 추상화시키는 작업이라 할 수 있다 

 - 코드 재사용에 의한 프로그램 생산성 향상 및 요구에 따른 시스템의 쉬운 변경이 가능하다 

 - 하향식 및 상향식 방식 모두 사용할 수 있다 

 

 1. 객체지향 분석의 방법론 

  
Rumbaugh 방법  가장 일반적으로 사용되는 방법으로 분석 활동을 객체 모델, 동적 모델, 기능 모델로  
나누어 수행하는 방법이다 
Booch 방법  미시적(Micro) 개발 프로세스와 거시적(Macro) 개발 프로세스를 모두 사용하는  
분석 방법으로, 클래스와 객체들을 분석 및 식별하고 클래스의 속성과 연산을 정의한다 
Jacobson 방법  Use Case를 강조하여 사용하는 분석 방법이다 
Coad와 Yourdon 방법  E-R 다이어그램을 사용하여 객체의 행위를 모델링하며 객체의 행위를 데이터 모델링하는데 초점을 둔 방법으로 객체 식별, 구조 식별, 주체 정의, 속성과 인스턴스 연결 정의, 연산과 메시지 연결 정의 등의 과정으로 구성하는 기법이다 
Wirfs-Brock 방법  분석과 설계 간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로  
수행하는 기법이다 

 

 2. 럼바우(Rumbaugh)의 분석 기법 

  : 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법으로, 객체 모델링 기법 

    (OMT, Object-Modeling Technique)이라고도 한다 

  
객체 모델링 
(Object Modeling) 
정보 모델링이라고도 하며, 시스템에서 요구되는 객체를 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 것이다 
동적 모델링 
(Dynamic Modeling) 
상태 다이어그램(상태도)을 이용하여 시간의 흐름에 따른 객체들 간의 제어 흐름, 상호 작용, 동작 순서 등의 동적인 행위를 표현하는 모델링이다 
기능 모델링 
(Functional Modeling) 
자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링이다 

 

 3. 객체지향 설계 원칙 

  : 시스템 변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야 할 다섯 가지 원칙으로,  

    다섯 가지 원칙의 앞 글자를 따 SOLID 원칙이라고도 불린다 

  
단일 책임 원칙 
(SRP, Single Responsibility Principle) 
- 객체는 단 하나의 책임만 가져야 한다는 원칙이다 
- 응집도는 높고, 결합도는 낮게 설계하는 것을 의미한다 
개방-폐쇄 원칙 
(Open-Closed Principle) 
- 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙이다 
- 공통 인터페이스를 하나의 인터페이스로 묶어 캡슐화하는 방법이 대표적이다 
- 클래스는 확장에 대해 열려 있어야 하며 변경에 대해 닫혀 있어야 한다 
리스코프 치환 원칙 
(LSP, Liskov Substitution Principle) 
- 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행할 수 있어야 한다는 설계 원칙이다 
- 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야한다 
- 자식 클래스는 어디에서나 상위 클래스로 교체할 수 있어야 한다 
인터페이스 분리 원칙 
(ISP, Interface Segregation Principle) 
- 자신이 사용하지 않는 메서드, 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙이다 
- 단일 책임 원칙이 객체가 갖는 하나의 책임이라면, 인터페이스 분리 원칙은 인터페이스가 갖는 하나의 책임이다 
의존 역전 원칙 
(Dependency Inversion Principle) 
- 각 객체들 간의 의존 관계가 성립될 때, 추상성이 낮은 클래스보다 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙이다 
- 일반적으로 인터페이스를 활용하면 이 원칙은 준수된다 

 

∙모듈 

 : 모듈화를 통해 분리된 시스템의 각 기능들로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과  

   같은 의미로 사용된다 

 - 단독으로 컴파일이 가능하며, 재사용 할 수 있다

 - 소프트웨어 구조를 이루며, 다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위이다 

 - 하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합이라고도 할 수 있다 

 - 서로 모여 하나의 완전한 프로그램으로 만들어질 수 있다 

 - 모듈의 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미하는 것으로, 모듈이 하나의  

   기능만을 수행하고 다른 모듈과의 과도한 상호작용을 배제함으로써 이루어진다 

 - 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않으며, 오류가 발생해도  

   쉽게 발견하고 해결할 수 있다

 - 유일한 이름을 가져야 하지만 다른 모듈에서 접근이 불가능해선 안된다  

 - 모듈의 독립성은 결합도(Coupling)와 응집도(Cohesion)에 의해 측정되며, 독립성을 높이려면 모듈의 결합도는  

   약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야 한다 

 

 1. 결합도(Coupling) 

  : 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미한다 

  - 다양한 결합으로 모듈을 구성할 수 있으나 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮다 

  - 결합도가 강하면 시스템 구현 및 유지보수 작업이 어렵다 

  - 오류가 발생했을 때 전파되어 다른 오류의 원인이 되는 파문 효과(Ripple Effect)를 최소화해야 한다

  - 인터페이스가 정확히 설정되어 있지 않을 경우 불필요한 인터페이스가 나타나 모듈 사이의 의존도는 높아지고 결합도가 증가

  - 모듈들이 변수를 공유하여 사용하게 하거나 제어 정보를 교류하게 함으로써 결합도를 높아지게 해야 한다

  - 다른 모듈과 데이터 교류가 필요한 경우 전역변수(Global Variable)보다는 매개변수(Parameter)를 사용하는 것이 결합도를

    낮추는데 도움이 된다

   
자료 결합도 
(Data Coupling) 
- 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도이다 
- 어떤 모듈이 다른 모듈을 호출하면서 매개 변수나 인수로 데이터를 넘겨주고, 호출 받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식이다 
- 모듈 간의 내용을 전혀 알 필요가 없는 상태로서 한 모듈의 내용을 변경하더라도 다른 모듈에는 전혀 영향을 미치지 않는 가장 바람직한 결합도이다 
스탬프(검인) 결합도 
(Stamp Coupling) 
- 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도이다 
- 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며, 자료 구조의 어떠한 변화, 즉 포맷이나 구조의 변화는 그것을 조회하는 모든 모듈 및 변화되는 필드를 실제로 조회하지 않는 모듈에까지도 영향을 미치게 된다 
제어 결합도 
(Control Coupling) 
- 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소(Function Code, Switch, Tag, Flag)를 전달하는 결합도이다 
- 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통제하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우에 발생한다 
- 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 하위 모듈이 상위 모듈에게 처리 명령을 내리는 권리 전도현상이 발생하게 된다 
외부 결합도 
(External Coupling) 
- 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도이다 
- 참조되는 데이터의 범위를 각 모듈에서 제한할 수 있다 
공통(공유) 결합도 
(Common Coupling) 
- 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도이다 
- 공통 데이터 영역의 내용을 조금만 변경하더라도 이를 사용하는 모든 모듈에 영향을 미치므로 모듈의 독립성을 약하게 만든다 
내용 결합도 
(Content Coupling) 
- 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도이다 
- 한 모듈에서 다른 모듈의 내부로 제어가 이동하는 경우에도 내용 결합도에 해당된다 

 

 2. 응집도(Cohesion) 

  : 정보 은닉 개념을 확장한 것으로, 명령이나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이  

   독립적인 기능으로 정의되어 있는 정도를 의미한다 

  - 다양한 기준으로 모듈을 구성할 수 있으나 응집도가 강할수록 품질이 높고, 약할수록 품질이 낮다 

   
기능적 응집도 
(Functional Cohesion) 
모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우 
순차적 응집도 
(Sequential Cohesion) 
모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우 
교환(통신)적 응집도 
(Communication Cohesion) 
동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우 
절차적 응집도 
(Procedural Cohesion) 
모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우 
시간적 응집도 
(Temporal Cohesion) 
특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우 
논리적 응집도 
(Logical Cohesion) 
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우 
우연적 응집도 
(Coincidental Cohesion) 
모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우 

 

 3. 팬인(Fan-In) / 팬아웃(Fan-Out) 

  - 팬인은 어떤 모듈을 제어(호출)하는 모듈의 수를 나타낸다 

  - 팬아웃은 어떤 모듈에 의해 제어(호출)되는 모듈의 수를 나타낸다 

  - 팬인과 팬아웃을 분석하여 시스템의 복잡도를 알 수 있다 

  - 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있으나, 단일 장애점이 발생할 수 있으므로  

    중점적인 관리 및 테스트가 필요하다 

  - 팬아웃이 높은 경우 불필요하게 다른 모듈을 호출하고 있는지 검토하고, 단순화시킬 수 있는지 여부에 대한  

    검토가 필요하다 

  - 시스템의 복잡도를 최소화하려면 팬인은 높게, 팬아웃은 낮게 설계해야 한다 

*N-S 차트(Nassi-Schneiderman Chart) (=박스 다이어그램, =Chapin Chart) 
 : 논리의 기술에 중점을 둔 도형을 이용한 표현 방법 
- 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조를 표현합니다 
- GOTO나 화살표를 사용하지 않습니다 
- 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는데 적합합니다 
- 선택과 반복 구조를 시각적으로 표현합니다 
- 이해하기 쉽고, 코드 변환이 용이합니다 
- 읽기는 쉽지만 작성하기가 어려우며, 임의로 제어를 전이하는 것이 불가능합니다 
- 총체적인 구조 표현과 인터페이스를 나타내기가 어렵습니다 
- 단일 입구와 단일 출구로 표현합니다 

 

∙공통 모듈 

 : 여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미한다 

 - 자주 사용되는 계산식이나 매번 필요한 사용자 인증과 같은 기능들이 공통 모듈로 구성될 수 있다 

 - 모듈의 재사용성 확보와 중복 개발 회피를 위해 설계 과정에서 공통 부분을 식별하고 명세를 작성할 필요가 있다 

 - 공통 모듈을 구현할 때는 다른 개발자들이 해당 기능을 명확히 이해할 수 있도록 다음의 명세 기법을 준수해야한다 

  
정확성(Correctness)  시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성한다 
명확성(Clarity)  해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성한다 
완전성(Completeness)  시스템 구현을 위해 필요한 모든 것을 기술한다 
일관성(Consistency)  공통 기능들 간 상호 충돌이 발생하지 않도록 작성한다 
추적성(Traceability)  기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성한다 

 

 1. 재사용(Reuse) 

  : 비용과 개발 시간을 절약하기 위해 이미 개발된 기능들을 파악하고 재구성하여 새로운 시스템 또는 기능 개발에  

    사용하기 적합하도록 최적화 시키는 작업이다 

  - 재사용을 위해서는 누구나 이해할 수 있고 사용이 가능하도록 사용법을 공개해야 한다 

  - 재사용되는 대상은 외부 모듈과의 결합도는 낮고, 응집도는 높아야 한다 

  - 재사용 규모에 따른 분류 

   
함수와 객체  클래스나 메소드 단위의 소스 코드를 재사용한다 
컴포넌트  컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용한다 
애플리케이션  공통된 기능들을 제공하는 애플리케이션을 공유하는 방식으로 재사용한다 

 

 2. 효과적인 모듈 설계 방안 

  - 결합도는 줄이고 응집도는 높여서 모듈의 독립성과 재사용성을 높인다 

  - 모듈의 제어 영역 안에서 그 모듈의 영향 영역을 유지시킨다 

  - 모듈 간의 접속 관계를 분석하여 복잡도와 중복성을 줄이고 일관성을 유지시킨다 

  - 모듈의 기능은 예측이 가능해야 하며 지나치게 제한적이어서는 안 된다 

  - 유지보수가 용이해야 한다 

  - 모듈 크기는 시스템의 전반적인 기능과 구조를 이해하기 쉬운 크기로 분해하고 적당한 모듈의 크기를 유지한다 

  - 하나의 입구와 하나의 출구를 갖도록 해야 한다 

  - 인덱스 번호나 기능 코드들이 전반적인 처리 논리 구조에 예기치 못한 영향을 끼치지 않도록 모듈 인터페이스를  

    설계해야 한다 

  - 효과적인 제어를 위해 모듈 간의 계층적 관계를 정의하는 자료가 제시되어야 한다 

  - 모듈의 기능을 예측할 수 있도록 정의한다 

 

∙코드 

 : 컴퓨터를 이용하여 자료를 처리하는 과정에서 분류·조합 및 집계를 용이하게 하고, 특정 자료의 추출을 쉽게  

   하기 위해서 사용하는 기호이다 

 - 정보를 신속·정확·명료하게 전달할 수 있게 한다 

 - 일정한 규칙에 따라 작성되며, 정보 처리의 효율과 처리된 정보의 가치에 많은 영향을 미친다 

 - 일반적인 코드의 예로 주민등록번호, 학번, 전화번호 등이 있다 

 - 코드의 주요 기능 

   
식별 기능  데이터 간의 성격에 따라 구분이 가능하다 
분류 기능  특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 할 수 있다 
배열 기능  의미를 부여하여 나열할 수 있다 
표준화 기능  다양한 데이터를 기준에 맞추어 표현할 수 있다 
간소화 기능  복잡한 데이터를 간소화할 수 있다 

 

 1. 코드의 종류 

  
순차 코드 
(Sequence Code) 
자료의 발생 순서, 크기 순서 등 일정 기준에 따라서 최초의 자료부터 차례로 일련번호를 부여하는 방법으로, 순서 코드 또는 일련번호 코드라고도 한다 
ex) 1, 2, 3, 4 ... 
블록 코드 
(Block Code) 
코드화 대상 항목 중에서 공통성이 있는 것끼리 블록으로 구분하고, 각 블록 내에서 일련번호를 부여하는 방법으로, 구분 코드라고도 한다 
ex) 1001~1100 : 총무부, 1101~1200 : 영업부 
10진 코드 
(Decimal Code) 
코드화 대상 항목을 0~9까지 10진 분할하고, 다시 그 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 방법으로, 도서 분류식 코드라고도 한다 
ex) 1000 : 공학, 1100 : 소프트웨어 공학, 1110 : 소프트웨어 설계 
그룹 분류 코드 
(Group Classification Code) 
코드화 대상 항목을 일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하고, 각 그룹 안에서 일련번호를 부여하는 방법이다 
ex) 1-01-001 : 본사-총무부-인사계, 2-01-001 : 지사-총무부-인사계 
연상 코드 
(Mnemonic Code) 
코드화 대상 항목의 명칭이나 약호와 관계있는 숫자나 문자, 기호를 이용하여 코드를 부여하는 방법이다 
ex) TV-40 : 40인치 TV, L-15-220 : 15W 220V의 램프 
표의 숫자 코드 
(Significant Digit Code) 
코드화 대상 항목의 성질, 즉 길이, 넓이, 부피, 지름, 높이 등의 물리적 수치를 그대로 코드에 적용시키는 방법으로 유효 숫자 코드라고도 한다 
ex) 120-720-1500 : 두께X폭X길이가 120X720X1500인 강판 
합성 코드 
(Combined Code) 
필요한 기능을 하나의 코드로 수행하기 어려운 경우 2개 이상의 코드를 조합하여 만드는 방법이다 
ex) 연상 코드 + 순차 코드 
    KE-711 : 대한항공 711기, AC-253 : 에어캐나다 253기 

 

 2. 코드 부여 체계 

  : 이름만으로 개체의 용도와 적용 범위를 알 수 있도록 코드를 부여하는 방식을 말한다 

  - 각 개체에 유일한 코드를 부여하여 개체들의 식별 및 추출을 용이하게 한다 

  - 코드를 부여하기 전에 각 단위 시스템의 고유한 코드와 개체를 나타내는 코드 등이 정의되어야 한다 

  - 코드 부여 체계를 담당하는 자는 코드의 자릿수와 구분자, 구조 등을 상세하게 명시해야 한다 

 

∙디자인 패턴 

 : 각 모듈의 세분화된 역할이나 모듈들 간의 인터페이스와 같은 코드를 작성하는 수준의 세부적인 구현 방안을  

   설계할 때 자주 발생하는 문제에 대한 일반적이고 반복적인 해결 방법 

 - 디자인 패턴은 문제 및 배경, 실제 적용된 사례, 재사용이 가능한 샘플 코드 등으로 구성되어 있다 

 - 한 패턴에 변형을 가하거나 특정 요구사항을 반영하면 유사한 형태의 다른 패턴으로 변화되는 특징이 있다 

 - 1995년 GoF(Gang of Four)가 처음으로 구체화 및 체계화 하였다 

 - GoF의 디자인 패턴은 목적으로 구분할 때 생성 패턴 5개, 구조 패턴 7개, 행위 패턴 11개로 구성 

 

 1. 디자인 패턴 사용의 장, 단점 

  - 범용적인 코딩 스타일로 인해 구조 파악이 용이하다 

  - 객체지향 설계 및 구현의 생산성을 높이는데 적합하다 

  - 검증된 구조의 재사용을 통해 개발 시간과 비용이 절약되고 코드의 품질을 향상시킬 수 있다 

  - 초기 투자 비용이 부담될 수 있다 

  - 개발자 간의 원활한 의사소통이 가능하다 

  - 설계 변경 요청에 대한 유연한 대처가 가능하다 

  - 객체지향을 기반으로 한 설계와 구현을 다루므로 다른 기반(절차지향)의 애플리케이션 개발에는 적합하지 않다 

 

 2. 생성 패턴(Creational Pattern) 

  : 객체의 생성과 참조 과정을 캡슐화하여 객체가 생성되거나 변경되어도 프로그램의 구조에 영향을 크제 받지  

   않도록 하여 프로그램에 유연성을 더해준다 

추상 팩토리 
(Abstract Factory) 
- 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관·의존하는 객체들의 그룹으로 생성하여 추상적으로 표현한다 
- 연관된 서브 클래스를 묶어 한 번에 교체하는 것이 가능하다 
빌더 
(Builder) 
- 작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성한다 
- 객체의 생성 과정과 표현 방법을 분리하고 있어, 동일한 객체 생성에서도 서로 다른 결과를 만들어 낼 수 있다 
팩토리 메소드 
(Factory Method) 
- 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴이다 
- 상위 클래스에서 인터페이스만 정의하고 실제 생성은 서브 클래스가 담당한다 
- 가상 생성자(Virtual Constructor) 패턴이라고도 한다 
프로토타입 
(Prototype) 
- 원본 객체를 복제하는 방법으로 객체를 생성하는(인스턴스를 복제하는) 패턴이다 
- 일반적인 방법으로 객체를 생성하며, 비용이 큰 경우 주로 이용한다 
싱글톤 
(Singleton) 
- 하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없다 
- 클래스 내에서 인스턴스가 하나뿐임을 보장하며, 이 인스턴스에 대한 접근 방법을 제공하여 불필요한 메모리 낭비를 최소화 할 수 있다 

 

 3. 구조 패턴(Structural Pattern) 

  : 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴으로 구조가 복잡한 시스템을 개발하기  

    쉽게 도와준다 

어댑터 
(Adapter) 
- 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환해주는 패턴이다 
- 기존의 클래스를 이용하고 싶지만 인터페이스가 일치하지 않을 때 이용한다 
브리지 
(Bridge) 
- 구현부에서 추상층을 분리하여, 서로가 독립적으로 확장할 수 있도록 구성한 패턴이다 
- 기능과 구현을 두 개의 별도 클래스로 구현한다 
컴포지트 
(Composite) 
- 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴이다 
- 객체들을 트리 구조로 구성하여 디렉터리 안에 디렉터리가 있듯이 복합 객체 안에 복합 객체가 포함되는 구조를 구현할 수 있다 
데코레이터 
(Decorator) 
- 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴이다 
- 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현한다 
퍼싸드 
(Facade) 
- 복잡한 서브 클래스들을 피해 더 상위에 인터페이스를 구성함으로써 서브 클래스들의 기능을 간편하게 사용할 수 있도록 하는 패턴이다 
- 서브 클래스들 사이의 통합 인터페이스를 제공하는 Wrapper 객체가 필요하다 
플라이웨이트 
(Flyweight) 
- 인스턴스가 필요할 때마다 매번 생성하는 것이 아니고 가능한 한 공유해서 사용함으로써 메모리를 절약하는 패턴이다 
- 다수의 유사 객체를 생성하거나 조작할 때 유용하게 사용할 수 있다 
프록시 
(Proxy) 
- 접근이 어려운 객체와 여기에 연결하려는 객체 사이에서 인터페이스 역할을 수행하는 패턴이다 
- 네트워크 연결, 메모리의 대용량 객체로의 접근 등에 주로 이용한다 

 

 4. 행위 패턴(Behavioral Pattern) 

  : 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴으로 하나의 객체로 수행할 수  

    없는 작업을 여러 객체로 분배하면서 결합도를 최소화 할 수 있도록 도와준다 

책임 연쇄 
(Chain of Responsibility) 
- 요청을 처리할 수 있는 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴이다 
- 요청을 처리할 수 있는 각 객체들이 고리(Chain)로 묶여 있어 요청이 해결될 때까지 고리를 따라 책임이 넘어간다 
커맨드 
(Command) 
- 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴이다 
- 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화한다 
인터프리터 
(Interpreter) 
- 언어에 문법 표현을 정의하는 패턴이다 
- SQL이나 통신 프로토콜과 같은 것을 개발할 때 사용한다 
반복자 
(Iterator) 
- 자료 구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴이다 
- 내부 표현 방법의 노출 없이 순차적인 접근이 가능하다 
중재자 
(Mediator) 
- 수많은 객체들 간의 복잡한 상호작용(Interface)을 캡슐화하여 객체로 정의하는 패턴이다 
- 객체 사이의 의존성을 줄여 결합도를 감소시킬 수 있다 
- 중재자는 객체 간의 통제와 지시의 역할을 수행한다 
메멘토 
(Memento) 
- 특정 시점에서의 객체 내부 상태를 객체화함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능을 제공하는 패턴이다 
- Ctrl+Z와 같은 되돌리기 기능을 개발할 때 주로 이용한다 
옵저버 
(Observer) 
- 한 객체의 상태가 변화하면 객체에 상송되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴이다 
- 주로 분산된 시스템 간에 이벤트를 생성, 발행(Publish)하고, 이를 수신(Subscribe)해야 할 때 이용한다 
상태 
(State) 
- 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용하는 패턴이다 
- 객체 상태를 캡슐화하고 이를 참조하는 방식으로 처리한다 
전략 
(Strategy) 
- 동일한 계열의 알고리즘들을 개별적으로 캡슐화하여 상호 교환할 수 있게 정의하는 패턴이다 
- 클라이언트는 독립적으로 원하는 알고리즘을 선택하여 사용할 수 있으며, 클라이언트에 영향 없이 알고리즘의 변경이 가능하다 
템플릿 메소드 
(Template Method) 
- 상위 클래스에서 골격을 정의하고, 하위 클래스에서 세부 처리를 구체화하는 구조의 패턴이다 
- 유사한 서브 클래스를 묶어 공통된 내용을 상위 클래스에서 정의함으로써 코드의 양을 줄이고 유지보수를 용이하게 해준다 
방문자 
(Visitor) 
- 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴이다 
- 분리된 처리 기능은 각 클래스를 방문(Visit)하여 수행한다 

∎4장 인터페이스 설계 

 

∙인터페이스 요구사항 검증 

 : 인터페이스의 설계 및 구현 전에 사용자들의 요구사항이 요구사항 명세서에 정확하고 완전하게 기술되었는지  

   검토하고 개발 범위의 기준인 베이스라인을 설정하는 것이다 

 - 인터페이스의 설계 및 구현 중에 요구사항 명세서의 오류가 발견되어 이를 수정할 경우 많은 비용이 소모되므로  

   프로젝트에서 요구사항 검증은 매우 중요하다 

 - 순서 : 요구사항 검토 계획 수립 → 검토 및 오류 수정 → 베이스라인 설정 

 

 1. 인터페이스 요구사항 검토 계획 수립 

  : 프로젝트 이해관계자들이 프로젝트 품질 관리 계획을 참조하여 다음과 같이 인터페이스 요구사항 검토 계획을  

    수립한다  

   
검토 기준 및 방법  프로젝트의 규모와 참여 인력, 검토 기간 등을 고려하여 검토 기준 및 방법을 정한다 
참여자  프로젝트 규모에 따라 이해관계자들을 파악하여 프로젝트 관리자, 품질 관리자, 인터페이스 분석가, 소프트웨어 아키텍트, 시스템 사용자, 테스트 관리자 등 요구사항 검토 참여자를 선정한다 
체크리스트  완전성, 일관성, 명확성 등의 항목을 점검할 수 있는 요구사항 검토 체크리스트를 작성한다 
관련 자료  인터페이스 요구사항 목록, 인터페이스 요구사항 명세서, 현행 및 표준 시스템 구성도 등 인터페이스 요구사항 검토에 필요한 자료들을 준비한다 
일정  인터페이스 요구사항 검토 일정을 정한다 

  - 검토 계획이 수립되면 인터페이스 요구사항 검토 참여자들에게 검토 관련 자료와 일정 등을 전달한다 

 

 2. 인터페이스 요구사항 검토 및 오류 수정 

  : 인터페이스 요구사항 검토는 검토 체크리스트의 항목에 따라 인터페이스 요구사항 명세서를 검토하는 것이다 

  - 요구사항 검토 시 오류가 발견되면 오류를 수정할 수 있도록 오류 목록과 시정 조치서를 작성한다 

  - 오류 수정과 요구사항 승인 절차를 진행할 수 있도록 요구사항 검토 결과를 검토 관련자들에게 전달한다 

  - 시정 조치서를 작성한 경우 시정 조치가 완료되었는지 확인하여 시정 조치가 완료되면 인터페이스 요구사항  

    검토 작업을 완료한다 

 

 3. 인터페이스 요구사항 베이스라인 설정 

  : 인터페이스 요구사항 검토를 통해 검증된 인터페이스 요구사항은 프로젝트 관리자와 주요 의사 결정자에게  

    공식적으로 승인 받는다 

 

 4. 요구사항 검증 방법 

  - 요구사항 검토(Requirements Review) 

   : 요구사항 명세서의 오류 확인 및 표준 준수 여부 등의 결함 여부를 검토 담당자들이 수작업으로 분석하는 방법

  - 정형 기술 검토(FTR)

    
동료검토(Peer Review)  요구사항 명세서 작성자가 명세서 내용을 직접 설명하고 동료들이 이를 들으면서 결함을 발견하는 형태의 검토 방법이다 
워크스루(Walk Through)  검토 회의 전에 요구사항 명세서를 미리 배포하여 사전 검토한 후에 짧은 검토 회의를 통해 결함을 발견하는 형태의 검토 방법이다 
인스펙션(Inspection)  요구사항 명세서 작성자를 제외한 다른 검토 전문가들이 요구사항 명세서를 확인하면서 결함을 발견하는 형태의 검토 방법이다 

   + 정형 기술 검토의 지침

    ㄱ. 제품 검토의 집중성 : 오류 검출에 초점을 두고 해결책을 나중으로 미룸

    ㄴ. 사전 준비성 : 검토를 우한 자료를 사전에 배포하여 검토하도록 한다

    ㄷ. 의제의 제한성 : 의견을 제한하되 충분히 받아들인다

    ㄹ. 안건 고수성 : 안건을 세우면 고수한다

    ㅁ. 논쟁 반박의 제한성 : 논쟁과 반박을 제한한다

    ㅂ. 문제 공개성 : 문제 영역을 공개한다

    ㅅ. 참가 인원의 제한성 : 참가자의 수를 제한한다

    ㅇ. 문서성 : 발견된 오류는 문서화한다

  - 프로토타이핑(Prototyping) 

   : 사용자의 요구사항을 정확히 파악하기 위해 실제 개발될 소프트웨어에 대한 견본품(Prototype)을 만들어 최종  

     결과물을 예측한다 

  - 테스트 설계 

   : 요구사항은 테스트할 수 있도록 작성되어야 하며, 이를 위해 테스트 케이스(Test Case)를 생성하여 이후에  

     요구사항이 현실적으로 테스트 가능한지를 검토한다 

  - CASE(Computer Aided Software Engineering) 도구 활용 

   : 일관성 분석(Consistency Analysis)을 통해 요구사항 변경사항의 추적 및 분석, 관리하고, 표준 준수 여부를  

     확인한다 

 

 5. 인터페이스 요구사항 검증의 주요 항목 

  
완전성(Completeness)  사용자의 모든 요구사항이 누락되지 않고 완전하게 반영되어 있는가? 
일관성(Consistency)  요구사항이 모순되거나 충돌되는 점 없이 일관성을 유지하고 있는가? 
명확성(Unambiguity)  모든 참여자가 요구사항을 명확히 이해할 수 있는가? 
기능성(Functionality)  요구사항이 ‘어떻게(How to)’보다 ‘무엇을(What)’에 중점을 두고 있는가? 
검증 가능성(Verifiability)  요구사항이 사용자의 요구를 모두 만족하고, 개발된 소프트웨어가 사용자의 요구 내용과 일치하는지를 검증할 수 있는가? 
추적 가능성(Traceability)  요구사항 명세서와 설계서를 추적할 수 있는가? 
변경 용이성(Easily Changeable)  요구사항 명세서의 변경이 쉽도록 작성되었는가? 

 

∙인터페이스 방법 명세화 

 : 내·외부 시스템이 연계하여 작동할 때 인터페이스별 송·수신 방법, 송·수신 데이터, 오류 식별 및 처리 방안에 대한  

   내용을 문서로 명확하게 정리하는 것이다 

 - 인터페이스별로 송·수신 방법을 명세화하기 위해서는 시스템 연계 기술, 인터페이스 통신 유형, 처리 유형,  

   발생 주기 등에 대한 정보가 필요하다 

 

 1. 시스템 연계 기술 

  : 개발할 시스템과 내·외부 시스템을 연계할 때 사용되는 기술을 의미한다 

  
DB Link  DB에서 제공하는 DB Link 객체를 이용하는 방식이다 
API/Open API  송신 시스템의 데이터베이스(DB)에서 데이터를 읽어 와 제공하는 애플리케이션 프로그래밍 인터페이스 프로그램이다 
연계 솔루션  EAI 서버와 송·수신 시스템에 설치되는 클라이언트(Client)를 이용하는 방식이다 
Socket  서버는 통신을 위한 소켓(Socket)을 생성하여 포트를 할당하고 클라이언트의 통신 요청 시 클라이언트와 연결하여 통신하는 네트워크 기술이다 
Web Service  웹 서비스(Web Service)에서 WSDL과 UDDI, SOAP, 프로토콜을 이용하는 연계 서비스이다 

 

 2. 인터페이스 통신 유형 

  : 개발할 시스템과 내·외부 시스템 간 데이터를 송·수신하는 형태를 의미한다 

  - 단방향 : 시스템에서 거래를 요청만하고 응답이 없는 방식이다 

  - 동기 : 시스템에서 거래를 요청하고 응답이 올 때까지 대기(Request-Reply)하는 방식이다 

  - 비동기 : 시스템에서 거래를 요청하고 다른 작업을 수행하다 응답이 오면 처리하는 방식 

            (Send-Receive, Send-Receive-Acknowledge, Publish-Subscribe)이다. 

 

 3. 인터페이스 처리 유형 

  : 송·수신 데이터를 어떤 형태로 처리할 것인지에 대한 방식을 의미한다 

  - 실시간 방식 : 사용자가 요청한 내용을 바로 처리해야 할 때 사용하는 방식이다 

  - 지연 처리 방식 : 데이터를 매건 단위로 처리할 경우 비용이 많이 발생할 때 사용하는 방식이다 

  - 배치 방식 : 대량의 데이터를 처리할 때 사용하는 방식이다 

 

 4. 인터페이스 발생 주기 

  : 개발할 시스템과 내·외부 시스템 간 송·수신 데이터가 전송되어 인터페이스가 사용되는 주기를 의미한다 

  - 인터페이스 발생 주기는 업무의 성격과 송·수신 데이터 전송량을 고려하여 매일, 수시, 주 1회 등으로 구분한다 

 

 5. 송·수신 방법 명세화 

  : 내·외부 인터페이스 목록에 있는 각각의 인터페이스에 대해 연계 방식, 통신 및 처리 유형, 발생 주기 등의  

    송·수신 방법을 정의하고 명세를 작성하는 것이다 

  - 연계 방식, 통신 유형, 연계 처리 형태는 시스템 인터페이스 설계 시 작성한 아키텍처 정의서를 기반으로 하여  

    업무 및 데이터의 성격, 연계 데이터 발생 건수, 연계 시스템의 기술 구조, 시스템 간의 성능 등을 고려하여  

    작성한다 

 

 6. 송·수신 데이터 명세화 

  : 내·외부 인터페이스 목록에 있는 각각의 인터페이스에 대해 인터페이스 시 필요한 송·수신 데이터에 대한 명세를  

    작성하는 것이다 

  - 인터페이스별로 테이블 정의서와 파일 레이아웃에서 연계하고자 하는 테이블 또는 파일 단위로 송·수신 데이터에  

    대한 명세를 작성한다 

 

 7. 오류 식별 및 처리 방안 명세화 

  : 내·외부 인터페이스 목록에 있는 각각의 인터페이스에 대해 인터페이스 시 발생할 수 있는 오류를 식별하고  

    오류 처리 방안에 대한 명세서를 작성하는 것이다 

  - 시스템 및 전송 오류, 연계 프로그램 등에서 정의한 예외 상황 등 대·내외 시스템 연계 시 발생할 수 있는 다양한  

    오류 상황을 식별하고 분류한다 

  - 오류 상황에 대해 오류 코드, 오류 메시지, 오류 설명, 해결 방법 등을 명세화한다 

 

 + 연계 메커니즘 구성요소 

  ㄱ. 송신 시스템 : 연계 프로그램으로부터 생성된 데이터를 전송 형식에 맞게 연계 테이블 또는 파일 형태로  

      생성하여 송신한다 

  ㄴ. 수신 시스템 : 수신한 연계 테이블이나 파일을 연계 프로그램에서 처리할 수 있는 형식으로 변환한 후 연계  

     프로그램에 반영하는 시스템 

  ㄷ. 연계 서버 : 송·수신 시스템 사이에 위치하여 데이터의 송·수신 현황을 모니터링하는 역할 

 

∙미들웨어(Middle + Sofawar) 솔루션 명세 

 - 분산 컴퓨팅 환경에서 서로 다른 기종 간의 하드웨어나 프로토콜, 통신 환경 등을 연결하여 운영체제와 응용 프로그램,

    또는 서버와 클라이언트 사이에서 원만한 통신이 이루어지도록 다양한 서비스를 제공한다 

 - 표준화된 인터페이스를 제공함으로써 시스템 간의 데이터 교환에 일관성을 보장한다 

 - 여러 환경 간의 분산 시스템에서 다양한 부분을 관리하고 통신하며 데이터를 교환하게 해주는 소프트웨어이다. 

 - 위치 투명성(Location Transparency)을 제공한다 

 - 종류 : DB, RPC, MOM, TP-Monitor, ORB, WAS 등 

 

 1. DB(DataBase) 

  : 데이터베이스 벤더에서 제공하는 클라이언트에서 원격의 데이터베이스와 연결하기 위한 미들웨어이다 

  - DB를 사용하여 시스템을 구축하는 경우 보통 2-Tier 아키텍처라고 한다 

  - 대표적인 DB의 종류에는 마이크로소프트의 ODBC, 볼랜드의 IDAPI, 오라클의 Glue 등이 있다 

 

 2. RPC(Remote Procedure Call) 

  : RPC(원격 프로시저 호출)는 응용 프로그램의 프로시저를 사용하여 원격 프로시저를 마치 로컬 프로시저처럼  

   호출하는 방식의 미들웨어이다 

  - 종류 : 이큐브시스템스의 Entera, OSF의 ONC/RPC 등이 있다 

 

 3. MOM(Message Oriented Middleware) 

  : MOM(메시지 지향 미들웨어)은 메시지 기반의 비동기형 메시지를 전달하는 방식의 미들웨어이다 

  - 온라인 업무보다는 이기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용된다 

  - 종류 : IBM의 MQ, 오라클의 Message Q, JCP의 JMS 등이 있다 

 

 4. TP-Monitor(Transaction Processing Monitor) 

  : TP-Monitor(트랜잭션 처리 모니터)는 항공기나 철도 예약 업무 등과 같은 온라인 트랜잭션 업무에서 트랜잭션을  

    처리 및 감시하는 미들웨어이다 

  - 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무에 주로 사용된다 

  - 종류 : 오라클의 tuxedo, 티맥스소프트의 tmax 등이 있다 

 

 5. ORB(Object Request Broker) 

  : ORB(객체 요청 브로커)는 객체 지향 미들웨어로 코바(CORBA) 표준 스펙을 구현한 미들웨어이다 

  - 최근에는 TP-Monitor의 장점인 트랜잭션 처리와 모니터링 등을 추가로 구현한 제품도 있다 

  - 종류 : Micro Focus의 Orbix, OMG의 CORBA 등이 있다 

 

 6. WAS(Web Application Server) 

  : WAS(웹 어플리케이션 서버)는 정적인 콘텐츠를 처리하는 웹 서버와 달리 사용자의 요구에 따라 변하는 동적인  

    콘텐츠를 처리하기 위해 사용되는 미들웨어이다 

  - 클라이언트/서버 환경보다는 웹 환경을 구현하기 위한 미들웨어이다 

  - HTTP 세션 처리를 위한 웹 서버 기능뿐만 아니라 미션-크리티컬한 기업 업무까지 JAVA, EJB 컴포넌트 기반으로  

    구현이 가능하다 

  - 요구사항 식별 시 고려사항 : 가용성, 성능, 기술 지원, 구축 비용 

  - 종류 : 오라클의 WebLogic, IBM의 WebSphere, JEUS, Tomcat 등이 있다 

 

 7. 미들웨어 솔루션 식별 

  : 개발 및 운영 환경에 사용될 미들웨어 솔루션을 확인하고 목록을 작성하는 것이다 

  - 소프트웨어 아키텍처에서 정의한 아키텍처 구성 정보와 프로젝트에서 구매가 진행 중이거나 구매 에정인  

    소프트웨어 내역을 확인하여 개발 및 운영 환경에서 사용될 미들웨어 솔루션을 식별한다 

  - 식별한 미들웨어 솔루션들에 대해 솔루션의 시스템, 구분, 솔루션명, 버전, 제조사 등의 정보를 정리한 미들웨어  

    솔루션 목록을 작성한다 

  - 작성된 미들웨어 솔루션 목록은 이해관계자 등에게 전달하여 오류 및 누락을 확인하고 수정한다 

 

 8. 미들웨어 솔루션 명세서 작성 

  : 미들웨어 솔루션 목록의 미들웨어 솔루션별로 관련 정보들을 상세하게 기술하는 것이다 

  - 미들웨어 솔루션 제품 명칭 및 버전, 제품 사용 목적 등을 솔루션에 대한 제품안내서 및 설명 자료 등을 통해  

    검토한다 

  - 미들웨어 솔루션 제품에 대한 사용 환경과 특징 등을 솔루션 설명 자료나 관련 담당자를 통해 검토한다 

  - 미들웨어 솔루션이 지원하는 시스템 범위와 정상적인 서비스 제공을 위한 환경 구성, 제공 기능 등에 대한  

    제약사항이 존재하는지 제품안내서 및 기술 지원 담당자를 통해 검토한다 

  - 미들웨어 솔루션에 대한 상세 정보 및 제공 기능, 특징, 시스템 구성 환경 등에 대한 제약사항을 정리하여  

    솔루션에 대한 명세서를 작성한다 

 

∎ 기타 

*시스템의 구성요소 
- 입력(Input) : 처리 방법, 처리할 데이터, 조건을 시스템에 투입하는 것 
- 처리(Process) : 입력된 데이터를 처리 방법과 조건에 따라 처리하는 것 
- 출력(Output) : 처리된 결과를 시스템에서 산출하는 것 
- 제어(Control) : 자료를 입력하여 출력될 때까지의 처리 과정이 올바르게 진행되는지 감독하는 것 
- 피드백(Feedback) : 출력된 결과가 예정된 목표를 만족시키지 못할 경우 목표 달성을 위해 반복 처리하는 것 
*DBMS 분석 시 고려사항 
4. 가용성(무결성) 
5. 상호 호환성(일관성) 
6. 회복 
7. 보안 
8. 성능(효율성) 
9. 데이터베이스 확장 
*플랫폼의 성능특성 분석 
1. 응답시간(Response Time) 
2. 가용성(Availability) 
3. 사용률(Utilization) 
4. 정확성(Accuracy) 
*사용자 인터페이스 요소 
- 체크 박스 : 여러 개의 선택 상황에서 1개 이상의 값을 선택할 수 있는 버튼 
- 라디오 버튼 : 여러 항목 중 하나만 선택할 수 있는 버튼 
- 텍스트 박스 : 사용자가 데이터를 입력하고 수정할 수 있는 상자 
- 토글 버튼 : ON / OFF와 같이 둘 중 하나의 값을 선택하는 버튼 

 

반응형
저작자표시 (새창열림)

'📃 Certification > 정보처리기사' 카테고리의 다른 글

[정보처리기사 필기] 합격수기  (0) 2022.04.25
[정보처리기사 필기] 5과목 정보시스템 구축 관리  (0) 2022.04.17
[정보처리기사 필기] 4과목 프로그래밍 언어 활용  (0) 2022.04.10
[정보처리기사 필기] 3과목 데이터베이스 구축  (0) 2022.04.08
[정보처리기사 필기] 2과목 소프트웨어 개발  (0) 2022.04.06
    0_ch4n
    0_ch4n
    while(true) { study(); }

    티스토리툴바