[CS] 소프트웨어 공학

Ryong·2024년 6월 11일

CS

목록 보기
11/16
post-thumbnail

소프트웨어 개발 생명 주기 (SDLC)

소프트웨어 개발 생명 주기(SDLC, Software Development Life Cycle)는 소프트웨어 개발 과정에서 따라야 할 단계들을 정의하는 방법론이다. SDLC의 주요 단계는 다음과 같다.

  1. 계획(Planning):

    • 목표 설정: 프로젝트의 목적과 목표를 명확히 정의.
    • 자원 계획: 필요한 자원(인력, 기술, 도구 등)을 파악하고 계획.
    • 일정 수립: 프로젝트 일정과 마일스톤을 설정.
  2. 요구사항 분석(Requirements Analysis):

    • 요구사항 수집: 고객과 이해관계자로부터 요구사항을 수집.
    • 요구사항 명세: 수집한 요구사항을 명확하고 상세하게 문서화.
    • 요구사항 검토: 요구사항의 일관성과 타당성을 검토하고 승인.
  3. 설계(Design):

    • 시스템 설계: 시스템 아키텍처와 컴포넌트를 설계.
    • 데이터베이스 설계: 데이터 모델링과 데이터베이스 구조를 설계.
    • 인터페이스 설계: 사용자 인터페이스(UI)와 시스템 인터페이스를 설계.
  4. 구현(Implementation):

    • 코딩: 설계 명세서를 바탕으로 소프트웨어 코드를 작성.
    • 코드 검토: 작성된 코드를 동료들이 검토하여 품질을 보장.
    • 버전 관리: 버전 관리 시스템을 사용하여 코드의 변경 내역을 관리.
  5. 테스트(Testing):

    • 단위 테스트: 개별 모듈이나 컴포넌트를 테스트.
    • 통합 테스트: 여러 모듈을 통합하여 상호작용을 테스트.
    • 시스템 테스트: 전체 시스템을 테스트하여 요구사항이 충족되는지 확인.
    • 인수 테스트: 최종 사용자가 시스템을 테스트하여 승인.
  6. 배포(Deployment):

    • 배포 계획: 소프트웨어 배포 전략을 수립.
    • 설치 및 설정: 소프트웨어를 대상 환경에 설치하고 설정.
    • 사용자 교육: 최종 사용자에게 소프트웨어 사용 방법을 교육.
  7. 유지 보수(Maintenance):

    • 오류 수정: 발견된 버그를 수정.
    • 성능 개선: 시스템의 성능을 최적화.
    • 기능 추가: 새로운 기능이나 요구사항을 반영하여 소프트웨어를 업데이트.

요구사항 분석

요구사항 분석(Requirements Analysis)은 소프트웨어 시스템이 해결해야 할 문제를 정의하고, 고객의 요구를 명확히 하는 단계다. 요구사항 분석의 주요 활동은 다음과 같다.

  • 요구사항 수집: 인터뷰, 설문조사, 워크샵, 브레인스토밍 등을 통해 고객의 요구사항을 수집.
  • 요구사항 명세: 수집된 요구사항을 상세하고 명확하게 문서화.
  • 요구사항 분석: 요구사항의 일관성, 타당성, 완전성을 분석.
  • 요구사항 검토: 고객과 이해관계자와 함께 요구사항을 검토하고 승인받는다.

요구사항의 종류:

  • 기능적 요구사항(Functional Requirements): 시스템이 수행해야 할 기능과 서비스에 대한 요구사항.
  • 비기능적 요구사항(Non-Functional Requirements): 시스템의 성능, 보안, 사용성, 신뢰성 등 품질 속성에 대한 요구사항.

소프트웨어 설계

소프트웨어 설계(Software Design)는 요구사항을 만족하는 소프트웨어 시스템의 구조와 상세 설계를 정의하는 단계다. 설계는 두 가지 주요 단계로 나뉜다.

  1. 상위 설계(High-level Design):

    • 시스템 아키텍처 설계: 전체 시스템의 구조를 정의하고, 주요 컴포넌트와 그들 간의 관계를 설계.
    • 모듈 설계: 각 컴포넌트의 모듈을 정의하고, 모듈 간의 인터페이스를 설계.
  2. 상세 설계(Detailed Design):

    • 데이터베이스 설계: 데이터베이스 스키마와 테이블 구조를 설계.
    • 알고리즘 설계: 각 기능을 구현할 알고리즘을 설계.
    • UI 설계: 사용자 인터페이스의 레이아웃과 동작을 설계.

소프트웨어 테스트

소프트웨어 테스트(Software Testing)는 소프트웨어가 요구사항을 만족하는지 확인하고, 결함을 식별하여 수정하는 과정이다. 주요 테스트 단계는 다음과 같다.

  1. 단위 테스트(Unit Testing):

    • 목적: 개별 모듈이나 컴포넌트가 올바르게 작동하는지 확인.
    • 방법: 개발자가 작성한 테스트 코드를 사용하여 모듈을 테스트한다.
  2. 통합 테스트(Integration Testing):

    • 목적: 여러 모듈을 통합하여 상호작용이 올바른지 확인.
    • 방법: 모듈 간 인터페이스와 데이터 교환을 테스트한다.
  3. 시스템 테스트(System Testing):

    • 목적: 전체 시스템이 요구사항을 만족하는지 확인.
    • 방법: 시스템 전체를 테스트하고, 모든 기능이 올바르게 동작하는지 확인.
  4. 인수 테스트(Acceptance Testing):

    • 목적: 최종 사용자가 시스템을 테스트하여 요구사항을 충족하는지 확인.
    • 방법: 사용자 시나리오를 기반으로 테스트를 수행.

유지 보수

유지 보수(Maintenance)는 소프트웨어가 배포된 후에도 지속적으로 기능을 향상시키고, 오류를 수정하며, 성능을 개선하는 과정이다. 유지 보수의 유형은 다음과 같다.

  • 수정 유지 보수(Corrective Maintenance): 소프트웨어의 버그와 결함을 수정.
  • 적응 유지 보수(Adaptive Maintenance): 운영 환경의 변화에 맞게 소프트웨어를 수정.
  • 예방 유지 보수(Preventive Maintenance): 미래의 문제를 예방하기 위해 소프트웨어를 개선.
  • 기능적 유지 보수(Perfective Maintenance): 새로운 기능을 추가하고, 기존 기능을 개선.

애자일 방법론, DevOps

애자일 방법론(Agile Methodology):

  • 개념: 소프트웨어 개발의 유연성과 적응성을 높이기 위해 반복적이고 점진적인 개발 방식을 채택하는 방법론.
  • 특징: 짧은 개발 주기(스프린트), 지속적인 피드백, 고객과의 긴밀한 협력.
  • 주요 프레임워크: 스크럼(Scrum), 칸반(Kanban), XP(Extreme Programming).

DevOps:

  • 개념: 소프트웨어 개발(Development)과 운영(Operations)의 협력을 통해 소프트웨어의 품질과 배포 속도를 향상시키는 문화와 방법론.
  • 특징: 자동화, 지속적 통합(CI), 지속적 배포(CD), 협업 도구 사용.
  • 주요 도구: Jenkins, Docker, Kubernetes, Ansible, Git.

애자일 방법론과 DevOps의 비교:

  • 애자일: 개발 과정의 유연성과 민첩성을 높이는 데 중점.
  • DevOps: 개발과 운영 간의 협력을 통해 배포와 운영의 효율성을 높이는 데 중점.
profile
새로운 시작. 그리고 도약

0개의 댓글