Topcit/01. 소프트웨어 개발

1. 소프트웨어 공학 개요

Life Log 2024. 10. 6. 18:55

01. 소프트웨어 공학의 배경과 목적

가) 소프트웨어 공학 소개

  • 소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문
  • 성공적인 SW프로젝트의 3가지 핵심요소
    • Process : 체계적인 업무 방식 및 흐름의 정의와 이를 적용할 수 있는 프로세스
    • People : 전문적인 지식을 갖춘 조직 및 인력 구성
    • Technology : 정의된 업무 방식과 조직인력이 효율적으로 운영되기 위한 인프라기술

나) 소프트웨어 공학 배경

  • 1960년대, 수요 급증 / 인력 부족이 원인 --> "소프트웨어의 위기" 발생하여 본격적 도입
  • 1970년대, 비전공자 대거 투입으로 선코딩-후수정 접근방식 --> 부작용으로 많은 결함 발견 --> 구조적, 정형적 기법 발생 --> 폭포수 모델 사용
  • 1980년대, 폭포수 모델 많은 비용 소요, 진척도 떨어짐 단점 보완 --> 개발 생산성 높이기 위해 재사용성 
  • 1990년대, 동시공학 --> 폭포수모델에서 요구사항,설계,구현 동시 진행
  • 2000년대, 애자일 방법론 도입

다) 소프트웨어 공학의 4가지 중요요소

  1. 방법 
  2. 도구 : 생산성 혹은 일관성을 목적으로 사용하는 방법
  3. 절차 : 방법과 도구 결합하여 합리적이고 적시에 개발할 수 있도록 함
  4. 사람 : 사람과 조직대한 의존싱이 높음

02. 소프트웨어 개발 생명주기

가) 정의

  • 타당성 검토 --> 개발 계획 --> 요구사항 분석 --> 설계 --> 구현 --> 테스트 --> 운용 --> 유지보수

나) 목적

  • 비용 산정, 개발 계획 수립, 용어의 표준화, 프로젝트 관리

다) 소프투웨어 생명주기 선정

  • 선택한 모델은 프로젝트에 존재하는 리스크/불확실성 최소화 할 수 있어야 함

라) 소프트웨어 생명주기 모델 종류

  1. V 모델
    • 시스템의 요구사항이 모두 식별되고 명확할 때 이상적인 모델
    • 검증 및 확인을 강조
  2. VP 모델 (V 모델 + Prototyping)
    • 리스크, 불확실성 요소 등의 이슈를 해결하기 위해 시스템 혹은 시스템의 일부를 빠르게 개발하는 방법
    • 접근방법 : 적용 가능한 해결책을 조사하고 적용, 여러 해결 안을 열거하고 정해진 기준에 따라 평가
  3. 점증적 모델(incremental Model)
    • 핵심이 되는 부분 먼저 개발 후 나머지 기능 구현
    • 몇 번의 기능 확장을 통해 개발
  4. 진화 모델(Evolutionary Model)
    • 전체 시스템에 대한 개발 단계가 여러번 반복
    • 보통 점증적 모델과 조합해서 사용

https://velog.io/@bami/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EA%B0%9C%EB%B0%9C-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-7z3wby3l

 

소프트웨어 개발 프로세스

일을 처리하는 과정이나 순서를 프로세스라고 합니다. 즉, 프로세스는 주어진 일을 해결하기 위한 목적으로 순서가 정해져 수행되는 일련의 절차라고 할 수 있습니다. 소프트웨어를 개발하는

velog.io

 


03. 소프트웨어 개발 방법론

가) 소프트웨어 개발 방법론의 필요성

  • 개발 경험의 축적 및 재활용을 통한 개발 생산성 향상
  • 효과적인 프로젝트 관리
  • 공식 절차와 산출물을 제시하고 표준용어를 통일하여 의사소통 수단 제공
  • 각 단계별 검증과 승인된 종료를 통해 일정수준의 품질보증

나) 소프트웨어 개발 방법론 비교

  • 구조적 방법론 : 업무활동
  • 정보공학 방법론 : 데이터
  • 객체지향 방법론 : 객체, 클래스 간의 관계를 식별하여 설계모델로 변환
  • CBD 방법론 : 재사용 컴포넌트 조합

다) 소프트웨어 개발 단계

  1. 요구사항 분석 :
    • 개념적인 단계
    • 개발 비용을 감소시킬 수 있는 결정적인 단계
  2. 설계
    • 물리적 실현 단계
    • 품질에 직접적인 영향, 제대로 되지 않으면 안정감 저하
    • 즉, 시스템 유지보수 어려움
  3. 구현
    • 설계 명세를 기반 프로그래밍
    • 코딩 표준을 정하고 이를 기반으로 명확하게 코드 작성
  4. 테스팅
    • 품질 확보하기 위해 결함을 찾아내는 일련의 작업

04. 애자일 개발 방법론

가) 애자일 방법론 종류

  • 스크럼, XP, 린, 칸반

나) XP (eXtreme Programming)

  1. 절차 및 용어
    • 유저 스토리 : 요구사항 수집, 의사소통의 도구, 기능 단위의 필요한 내용을 간단히 기재
    • 스파이크 : 간단한 프로그램, 사용자 스토리의 신뢰성 증대와 기술 문제 위험 감소 목적
    • 릴리즈 계회
    • 승인 테스트
    • 작은 릴리즈
  2. 가치 - 5가지
    • 의사소통
    • 단순성 : 설계를 단순하고 명확하게 함
    • 피드백 : 점진적인 개선
    • 용기 : 가능한 빨리 변경된 사하 반영하여 고객 인도. 즉 문제를 적극적으로 해결하는 용기
    • 존중 : 팀원 존중
  3. 실천방법 - 12가지
    1. 개발
      • 단순한 설계, 테스트 기반 개발, 리팩토링, 코딩 표준, 짝 프로그래밍, 코드 공유, 지속적인 통합
    2. 관리
      • 계획 게임, 작은 릴리즈, 메타포
    3. 환경
      • 주당 40시간 작업, 현장 고객

다) 스크럼 (SCRUM)

  1. 개용
    • 추정 및 조정 기반의 경험적 관리 기법
    • 제품 책임자(Product Owner)
      • 제품 기능목록(백로그) 작성
      • 우선순위 조정, 항목 추가
      • 계획 수립 시 핵심역할이나 시작 후에는 가능한 미관여
    • 스크럼 마스터(Scrum Master) 
      • 팀 업무 방해요소 제거 노력
      • 원칙과 가치를 지키며 팀 개발 진행 지원
    • 스크럼 팀(Scrum Team)
      • 최소 5 ~ 최대 9명 구성
      • 사용자 스토리사용하여 한 스프린트 동안 개발 기능 도출
  2. 스크럼 프로세스
    • 스프린트(Sprint) : 반복개발 기간
    • 3가지 미팅
      1. 일일 스크럼
        • 매일 진행하는 15분 간의 진행상황 공유 회의
        • 모든 팀원 참석
      2. 스프린트 계획
        • 각 스프린트에 대한 목표, 
      3. 스프린트 리뷰
        • 스프린트 작업 진행과 결과물 확인 회의
        • 스크럼 팀 작업결과 데모 및 피드백
    • 3가지 산출물
      1. 제품 백로그
        • 기능의 우선순위를 정리한 목록
        • 고객을 대신하여 제품 책임자가 결정
        • 백로그에 정의된 기능을 사용자 스토리라고 함
      2. 스프린트 백로그
        • 하나의 스프린트 동안 개발할 목록
      3. 소멸 차트
        1. 개발을 완료하기까지 남은 작업량 표시
        2. 작업량을 스토리 포인트라는 것 나타냄
  3. 스크럼 특징
    1. 투명성 : 회의, 산출물 등으로 프로젝트 상태나 문제점 효율적 파악
    2. 타임박싱 : 스크럼 진행 시간 제한 (15분)하여 프로젝트 진행에만 집중 ???
    3. 커뮤니케이션 : 일일 스크럼
    4. 경험주의 모델 : 개개인의 경험 중시

https://blog.naver.com/PostView.nhn?blogId=roser111&logNo=221681015291&from=search&redirect=Log&widgetTypeCall=true&topReferer=https%3A%2F%2Fsearch.naver.com%2Fsearch.naver%3Fdate_from%3D%26date_option%3D0%26date_to%3D%26dup_remove%3D1%26nso%3D%26post_blogurl%3D%26post_blogurl_without%3D%26query%3D%25ED%258F%25AD%25ED%258F%25AC%25EC%2588%2598%2520%25EA%25B0%259C%25EB%25B0%259C%2520%25EB%25B0%25A9%25EB%25B2%2595%25EB%25A1%25A0%26sm%3Dtab_pge%26srchby%3Dall%26st%3Dsim%26where%3Dpost%26start%3D11&directAccess=false#

https://blog.naver.com/nabilera1/222114655735?trackingCode=blog_bloghome_searchlist

https://swingswing.tistory.com/121

https://evan-moon.github.io/2019/07/02/what-is-agile/

  1.