본문 바로가기
App/소프트웨어공학

[소프트웨어공학] 01 소프트웨어 공학과 개발 프로세스

by 건망망고 2024. 4. 10.

01 소프트웨어공학과 개발 프로세스

01 소프트웨어의 이해

  1. 소프트웨어의 정의
  2. 프로그램을 비롯해 개발 과정에서 생성되는 모든 산출물과 각 단계에서 만들어지는 문서와 사용자 매뉴얼등 모두 포함
  3. 소프트웨어의 특징
    • 제조가 아닌 개발
    • 소모가 아닌 품질저하 : 닳지 않는다, 새기능 추가등으로 인한 부작용으로 실패율이 증가할수는 있다
  4. 소프트웨어 개발의 어려움
  5. 개발과정이 복잡하고, 참여인력이 많으며, 개발기간이 김
  6. 소프트웨어 공학소프트웨어 개발 생명주기 : 계획 → 분석 → 설계 → 구현 → 테스트 → 유지보수
  7. 품질 좋은 소프트웨어를 경제적으로 개발하기 위해 계획을 세우고, 개발하며, 유지 및 관리 하는 전 과정에서 공학, 과학 및 수학적 원리와 방법을 적용해 필요한 이론과 기술 및 도구들에 관해 연구하는 학문
  8. 소프트웨어를 개발하는 과정에 공학적인 원리를 적용해보자

02 소프트웨어 개발 프로세스

  1. 프로세스 : 일을 처리하는 과정 또는 순서
  2. 소프트웨어 개발 프로세스 : 작업 순서의 집합
  3. 소프트웨어 개발 프로세스 모델 : 소프트웨어를 어떻게 개발할 것인가에 대해 전체 흐름을 체계화한 개념, 개발 계획 수립부터 최종 폐기까지 전 과정
    • 소프트웨어 개발 프로세스 모델 목적 : 고품질
    • 소프트웨어 개발 프로세스 모델 역할 : 전체적인 기본 골격

03 구먹구구식 모델

공식적인 가이드라인이나 프로세스가 없는 개발 방식

04 선형 순차적 모델 = 폭포수 모델

표준 프로세스를 정해 소프트웨어를 순차적으로 개발, 가장 체계적, 많이 사용

  1. 폭포수 모델의 개발 절차 : 하향식으로 진행, 요구사항 분석 단계가 끝나면 요구분석명세서 작성
  2. 폭포수 모델의 장단점
    • 요구사항의 변화가 적은 프로젝트에 적합
  3. V 모델 : 각 개발 단계를 검증하는데 초점, 폭포수 + 검증까지

05 진화적 프로세스 모델 = 프로토타입 모델

  1. 프로토타입 모델 : 대량 생산에 앞서 미리 제작해보는 원형 또는 시제품
    1. 프로토타입 모델의 개발 절차
      1. 요구사항 정의 및 분석
      2. 프로토타입 설계
      3. 프로토타입 개발
      4. 사용자에 의한 프로토타입 평가
    2. 프로토타입 모델의 장단점반복적인 소프트웨어 개발 단계로 인해 필요한 투입 인력과 비용 산정의 어려움
    3. 가시적인 결과인 프로토타입이 개발자와 사용자간의 의사소통 도구로 사용되어 구체적이고 원활하게 대화할 수 있다는 것
  2. 계획 → 요구사항 정의 및 분석 → 설계 → 구현 → 테스트 → 유지보수
  3. 나선형 모델 : 계속 순차적용
    1. 나선형 모델의 개발 절차
      1. 계획 및 요구분석
      2. 위험 분석 단계
      3. 개발 단계
      4. 사용자 평가 단계
    2. 나선형 모델의 장점과 단점프로젝트 기간이 길어질 수 있고, 횟수가 많아질수록 프로젝트 관리가 어렵다
    3. 소프트웨어 개발중에 일어나는 변경에 대해 유연하게 대응할 수 있고 사용자 요구도 충분히 반영되는 매우 유용한 소프트웨어 개발 프로세스 모델
  4. 초기 요구 분석 후 프로토 타입 개발 이전에 위험 분석 단계를 거친다

06 단계적 개발 모델

개발과 사용을 병행하는 과정을 반복해 진행하면서 완료

  1. 점증적 개발 방법 : 개발 범위의 증가
  2. 중요하다고 생각되는 부분부터 차례로 개발한 후 그 일부를 사용하면서 개발 범위를 점차 늘려가는 방식
  3. 점증적 개발 방법 : 품질의 증가
  4. 시스템 전체를 일차적으로 개발해 인도한 후, 각 서브시스템의 기능과 성능을 변경 및 보강해 완성도를 높인다. 이렇게 업그레이드 된 릴리스 버전을 다시 내놓는다. 초기의 요구사항이 불분명한 경우에 적합

07 통합 프로세스 모델(Unified Process)

  1. 통합 프로세스 모델의 절차
    1. 도입단계 : 비즈니스모델링, 요구사항 정의
    2. 구체화 단계 : 분석 및 설계 작업 가장 왕성
    3. 구축 단계 : 구현
    4. 전이 단계 : 제품 완성
    5. 도입 구체와 구축 전이 단계의 공통작업
    • 그림 - 비중을 나타냄 / 환경점검은 골고루

08 애자일 프로세스 모델

  1. 애자일 프로세스 모델의 이해변경을 받아들임,
    1. 애자일의 기본 가치 : 고객과의 협업, 빠른 시간 안에 고객이 작동해볼 수 있는 소프트웨어, 환경과 고객의 변화에 능동적으로 대체하는 것
    2. 애자일의 원칙 : 개발 후반에 새로 추가되는 요구사항도 기꺼이 받아들인다
    3. 애자일 프로세스 개발방법 : 좀 더 빠른시간 안에 일부지만 소프트웨어를 사용할 수 있게 하는 것을 중요하게 생각한다
  2. 좀 더 빠른 시간안에 일부지만 소프트웨어를 사용할 수 있는 것을 중요하게 생각
  3. 고객의 요구에 민접하게 대응하고 그때그대 주어지는 문제를 풀어나가는 방법론
  4. 애자일 프로세스 모델 : 스크럼
  5. 팀의 개선과 프로젝트 관리에 중점을 둔 애자일 방법론, 경험적 관리 기법 중 하나
  6. 스크럼 방식의 이해
    1. 제목 기능 목록 : 우선순위가 매겨진, 사용자의 요구사항 목록
      • 사용자 스토리 : 제품 기능이 도출되면 각 기능을 간략하게 서술하는데, 이때 사용하는 것
      • 스토리 포인트 산정 : 요구사항의 규모를 측정하는 단위로 업무량을 이용해 산정
    2. 스프린트 계획 수립 : 작은 단위의 개발 업무를 단기간 내에 전력 질주해 수행
      • 스프린트 구현 목록 작성 : 제품 기능 목록에 있는 스토리 중 선택해서 작성
    3. 스프린트 수행 : 개발팀의 진행 현황을 만들고 스크럼 회의를 하며 시간이 지나면 남은 작업량을 나타내는 소멸차트도 그린다
      • 소멸 차트 : 작업이 어떻게 진행되고 있는 지
      • 일일 스크럼 회의 : 짧고 간결하게 모든인원이
      • 스프린트 현황판 : 개발팀의 개발 현황을 나타낸다
      • 스프린트 진척 관리 : 날자별 작업 시간과 남은 시간등을 기록해 진척관리 가능
    4. 스프린트 개발 완료
      • 최종 제품
    5. 스프린트 개발 완료 후
      • 스프린트 검토 회의
      • 스프린트 회고
    6. 배포 목록 작성 : 사용자에게 시스템 일부 제공
  7. 스크럼 개발 관련자의 역할
  8. 스크럼 방식의 장점과 단점
    • 스토리 포인트 - 업무량 이용해 산정
    • 스프린트 : 기간이 짧음
    • 소멸차트 : 작업의 진행 정도를 나타냄
    • 스프린트 검토 회의 - 결과
    • 스프린트 회고 - 노하우 공유

01 소프트웨어 공학의 기본 원칙 

1. 품질 높은 소프트웨어 생품 개발

2. 지속적인 검증 시행

3. 결과에 대한 명확한 기록 유지 

-> 효율적이고 효과적인 소프트웨어를 개발 하는 것이 원칙

 

02 애자일 프로세스 모델 Agile Process Model

설계가 변경되어도 이를 잘 수용할 수 있도록 짧게 반복하면서 소프트웨어를 개발하는 방법

반복적이고 진화적인 프로세스와 유사하지만 경험의 축적으로 나온 모델

소프트웨어 개발이 인력 집약적이라는 데 관심을 두고 사람과 팀 구성에 초점을 맞춤

 

03 폭포수 모델 

소프트웨어 생명주기 모델 중에서 고전적 생명주기 모델로 선형 순차적 모델이라고도 하는 것

타당성 검토, 계획, 요구사항 분석, 구현, 테스트,유지보수의 단계를 통해 소프트웨어 개발

 

04 폭포수 모델의 특징

개발 중 발생한 요구사항을 쉽게 반영할 수 있다

단계적 정의와 산출물이 명확하다

모델의 적용 경험과 성공사례가 많다

-> 각 단계가 끝날 때 마다 확실히 매듭을 짓고 그 결과를 확인한 후에 다음 단계로 나간다

 

05 폭포수 모델

가장 오래된 모델로 적용사례가 많이 있다. 

요구사항의 변경이 어려우며 각 단계의 결과가 확인되어야만 다음단계로 넘어간다. 선형 순차적 모델로 고전적 생명주기 모델이라고도 한다

 

06 폭포수(Waterfall) 모델

요구사항 분석을 완료한 후 설계 작업을 시작할 수 있다

개발 후반부가 되어야 실행 가능한 소프트웨어가 만들어진다

소프트웨어 요구사항이 변경이 많은 경우에 적합한 모델이다

 

07 나선형 모델(Spiral Model)

프로토타입을 지속적으로 발전시켜 최종 소프트웨어 개발까지 이르는 방법으로 위험 관리가 중심인 소프트웨어 생명주기 모델

 

08 나선형 모델의 4가지 주요활동

계획 수립 -> 위험 분석-> 개발 및 검증 -> 고객 평가

 

09 XP의 5가지 가치

용기, 정당성, 의사소통, 피드백, 존중

 

10 XP의 기본원리

Pair Progarmiming

Collective Ownership

Continuous integration

 

11 애자일 기법에 대한 설명

절차와 도구보다 개인과 소통을 중요하게 생각한다

소프트웨어가 잘 실행되는데 가치를 둔다

고객과의 피드백을 중요하게 생각한다

 

12 스크럼의 제품기능 목록에 대한 설명

제품 기능 목록에 있는 업무 목록은 프로젝트를 수행하는 동안 수정되고 정제된다

제품 기능 목록의 업무 중 우선순위가 높은 항목부터 개발한다

제품 책임자(Product Owner)가 제품 기능 목록을 관리한다.

 

13 스프린트 회고

스프린트가 끝나는 시점이나 일정 주기로 수행한다

이 활동을 통해 프로젝트를 진행하는 과정에서 드러난 좋았던 점, 여러 기지 문제나 미진한 점 등을 도출한다

이 활동을 통해 이미 설정된 프로세스로만 프로젝트 진행하지 않고 지속적으로 개선해 변화하는 비즈니스 환경에 보다 능동적으로 적용할 수 있도록 한다.

 

14 UP(Unified Process)

소프트웨어 개발 단계를 시간의 흐름에 따라 4개의 범주(도입, 상세, 구축, 이행)로 나누고 각 범주에는 요구사항 도출부터 설계, 구현, 평가까지 개발 생명주기가 포함되어 있는 방법론

 

15 테일러링(Tailoring) 개발 방법론의 내부 기준에 해당하는 것

납기/비용

기술 환경

구성원 능력

 

16 공학의 특성과 소프트웨어 공학의 목표를 설명하시오.

  1. 체계적인 접근: 공학은 체계적이고 계획적인 방법으로 문제를 해결하려는 과학적 접근을 채택합니다. 문제를 분석하고 이해한 후 체계적인 방법으로 해결책을 설계하고 구현합니다.
  2. 문제 해결 능력: 공학은 문제를 식별하고 해결하는 능력을 갖추고 있습니다. 공학자들은 문제 해결 과정에서 논리적이고 창의적인 사고를 발휘하여 최적의 해결책을 도출합니다.
  3. 협업과 팀워크: 많은 공학 프로젝트는 다양한 분야의 전문가들이 협업하여 수행됩니다. 이는 효율적인 팀워크와 의사소통이 중요하다는 것을 의미합니다.

소프트웨어 공학의 목표는 소프트웨어 시스템을 효율적으로 개발하고 유지보수하는 것입니다. 이를 위해 소프트웨어 공학은 다음과 같은 목표를 가지고 있습니다:

  1. 품질 관리: 소프트웨어 공학은 소프트웨어의 품질을 관리하기 위해 다양한 기술과 방법을 사용합니다. 품질 관리는 소프트웨어가 요구사항을 충족하고 사용자의 기대에 부응하는지를 확인하는 것을 포함합니다.
  2. 생산성 향상: 소프트웨어 공학은 개발 프로세스를 효율적으로 수행하여 생산성을 향상시키는 것을 목표로 합니다. 이를 위해 공정의 자동화, 재사용 가능한 구성 요소의 개발 등의 방법을 적용합니다.
  3. 비용 관리: 소프트웨어 개발은 비용과 시간이 중요한 요소입니다. 소프트웨어 공학은 개발 프로세스를 최적화하여 비용을 관리하고 프로젝트 일정을 준수하는 것을 목표로 합니다.
  4. 유지보수성 향상: 소프트웨어가 개발된 이후에도 지속적으로 유지보수가 필요합니다. 소프트웨어 공학은 유지보수성을 고려하여 소프트웨어를 설계하고 개발합니다.

17 단계적 개발 모델에서 점증적 개발 방법과 반복적 개발 방법의 예를 만들어보시오

단계적(점진적) 개발 모델은 소프트웨어를 여러 단계로 나누어 개발하는 방법론을 의미합니다. 점증적과 반복적 개발은 이러한 단계적 개발 모델의 한 종류로, 초기에는 전체 시스템의 일부분을 개발하여 완성된 기능을 제공하고, 그 후 추가적인 기능을 점진적으로 개발하거나 이전 버전을 수정하는 방식입니다.

예를 들어, 소셜 미디어 애플리케이션의 개발을 생각해보겠습니다.

  1. 점증적 개발 방법:
    • 초기에는 사용자가 계정을 생성하고 로그인하는 기본적인 기능만 제공합니다. 이후, 사용자 프로필을 관리할 수 있는 기능을 추가합니다.
    • 다음 단계에서는 사용자가 친구를 추가하고 메시지를 보낼 수 있는 기능을 추가합니다.
    • 그리고 나서 사용자가 사진을 업로드하고 공유할 수 있는 기능을 개발합니다.
    • 이런 식으로 시스템을 점진적으로 확장하고 개선해가며 완성도를 높여갑니다.
  2. 반복적 개발 방법:
    • 초기에는 소셜 미디어 애플리케이션의 로그인 및 프로필 관리 기능을 개발합니다.
    • 그 다음 반복에서는 친구 추가와 메시지 전송 기능을 추가하고, 사용자 피드에 게시물을 표시하는 기능을 구현합니다.
    • 그 후에는 사용자가 사진을 업로드하고 공유할 수 있는 기능을 개발합니다.
    • 이렇게 각 반복마다 완전한 기능을 추가하거나 수정하여 전체 시스템을 구축해 나갑니다.

점증적과 반복적 개발 방법은 초기에 시스템의 일부분을 빠르게 개발하고 사용자의 피드백을 통해 지속적으로 개선하는 점에서 유사하지만, 세부적인 구현 방식이나 개발 프로세스의 조절 방법에 차이가 있습니다.

 

18 폭포수 모델과 애자일 방법의 차이점을 비교해서 설명하시오.

폭포수 모델과 애자일 방법은 소프트웨어 개발을 다루는 두 가지 주요한 방법론입니다. 이들 간에는 몇 가지 중요한 차이점이 있습니다.

  1. 개발 접근 방식:
    • 폭포수 모델: 폭포수 모델은 순차적인 접근 방식을 채택합니다. 개발 프로세스는 요구사항 정의, 설계, 구현, 테스트, 유지보수의 단계로 이어지며 각 단계는 순차적으로 진행됩니다.
    • 애자일 방법: 애자일 방법은 반복적이고 점진적인 접근 방식을 채택합니다. 작은 이터레이션을 반복하여 소프트웨어를 개발하고, 이터레이션 간에 피드백을 받아 개선합니다.
  2. 요구사항 관리:
    • 폭포수 모델: 폭포수 모델은 초기에 요구사항을 명확히 정의하고 이후 변경을 최소화하는 것을 중요시합니다. 요구사항 변경이 발생할 경우에는 추가 비용과 시간이 발생할 수 있습니다.
    • 애자일 방법: 애자일 방법은 요구사항의 변화를 수용하는 데 더 유연합니다. 고객과의 긴밀한 협력을 통해 요구사항을 지속적으로 검토하고 변경할 수 있습니다.
  3. 프로젝트 관리:
    • 폭포수 모델: 폭포수 모델은 계획과 문서화에 큰 비중을 둡니다. 프로젝트 일정과 예산을 초기에 명확히 설정하고 프로젝트의 진행 상황을 정기적으로 모니터링합니다.
    • 애자일 방법: 애자일 방법은 자율적이고 협력적인 팀을 중요시하며, 프로젝트 일정과 범위를 유연하게 조정할 수 있습니다. 작은 이터레이션을 통해 빠르게 결과물을 제공하고, 고객의 피드백을 반영하여 지속적으로 개선합니다.
  4. 유지보수:
    • 폭포수 모델: 폭포수 모델은 개발이 완료된 후 유지보수 단계가 따릅니다. 초기에 정의된 요구사항에 따라 소프트웨어를 유지보수하고 개선합니다.
    • 애자일 방법: 애자일 방법은 개발 초기부터 유지보수를 고려합니다. 작은 이터레이션을 통해 소프트웨어를 지속적으로 개선하고 유지보수합니다.

이처럼 폭포수 모델은 전통적이고 계획 중심적인 방법론으로서 요구사항의 변화에 취약하고, 애자일 방법은 변화에 대응할 수 있는 유연성과 고객과의 긴밀한 협력을 강조하는 방법론입니다.

 

20 소프트웨어 공학 책을 만들기 위한 원고를 작성한다고 할때 스프린트 구현 목록을 작성하시오

스프린트 X 구현 목록

목표: 이번 스프린트에서는 사용자 프로필 페이지를 구현하고 기본적인 기능을 추가합니다.

  1. 사용자 프로필 페이지 디자인 및 레이아웃 작성
    • 사용자 프로필에 대한 UI/UX 설계
    • 프로필 정보를 표시할 화면 구성
  2. 사용자 프로필 정보 표시 기능 구현
    • 사용자의 기본 정보(이름, 이메일 등)를 DB에서 가져와 화면에 표시
    • 프로필 사진 업로드 및 표시 기능 추가
  3. 프로필 편집 기능 구현
    • 사용자가 프로필 정보를 수정할 수 있는 기능 추가
    • 수정된 정보를 DB에 업데이트하고 화면에 반영
  4. 프로필 사진 변경 기능 추가
    • 사용자가 프로필 사진을 변경할 수 있는 기능 추가
    • 새로운 사진을 업로드하고 DB에 저장하고 화면에 반영
  5. 프로필 정보 유효성 검사 추가
    • 사용자가 입력한 프로필 정보의 유효성을 검사하는 기능 추가
    • 필수 정보가 누락되었거나 형식에 맞지 않는 정보를 처리
  6. 프로필 페이지 UI/UX 개선
    • 사용자 편의성을 고려하여 프로필 페이지의 UI/UX를 개선
    • 페이지 내부 네비게이션 및 레이아웃 수정
  7. 성능 최적화 및 버그 수정
    • 페이지 로딩 시간을 줄이기 위한 성능 최적화 작업 수행
    • 이전 스프린트에서 발견된 버그 수정

위 목록은 예시이며, 실제 스프린트에 따라 구현해야 할 작업과 우선순위가 달라질 수 있습니다. 스프린트 구현 목록을 작성할 때는 목표를 명확히 설정하고 개발해야 할 기능을 세부적으로 기록하는 것이 중요합니다.

'App > 소프트웨어공학' 카테고리의 다른 글

[소프트웨어공학] 05 설계  (0) 2024.04.21
[소프트웨어공학] 04 요구분석  (0) 2024.04.21
[소프트웨어공학] 03 계획  (0) 2024.04.21
[소프트웨어공학] 02 UML  (0) 2024.04.21