01 소프트웨어 재사용

 

 

가) 소프트웨어 재사용(Reuse) 개요

  • 소프트웨어 재사용은 기존의 소프트웨어 또는 소프트웨어 지식을 활용해, new 소프트웨어를 구축하는 일이다.
  • 재사용가능한 소프트웨어나 소프트웨어 지식은 재사용가능한 자신이다.
  • 자신 - 설계, 요구명세, 검사, 아키텍처 등 포함

 

 

1. 소프트웨어 재사용 배경

 

 

 

2. 소프트웨어 재사용 정의

 

  • 소프트웨어 재사용이란 사용 소프트웨어 개발 관련 지식(기능, 모듈, 구성 등)을 표준화하여 개발 생산성을 높이기 위하여 반복적으로 사용하기에 적합하도록 구성하는 방법
  • 기존 개발 기능, 성능 및 품질을 인정받았던 소프트웨어의 전체 또는 일부분을 다시 사용하여 신규 개발되는 소프트웨어의 품질과 생산성 및 신뢰성을 높이고 개발 일정 및 비용을 감소시켜 주는 대응방안
  • 기존 개발 모듈이나 프로그램, 산출물 등을 동일한 응용 분야, 서로 다른 응용업무, 혹은 서로 다른 기업 간에 다시 사용하거나 일부 수정 후 재사용할 수 있는 개념

 

 

3. 소프트웨어 재사용의 목적

 

신뢰성, 확장성, 생산성

 

신뢰성 - 기능, 안정, 속도 등의 사전 성능 검증됨.

확장성 - 검증된 기능 기반으로 upgrade 용어

생산성 - 비용, 시간 위험 등 전체적 개발 프로세스 향상

 

 

 

 

나) 소프트웨어 재사용의 대상

 

 

 

 

 

다) 소프트웨어 재사용의 원칙

 

  • 범용성 (Generality)
    - 특정 응용 분야만이 아닌 일반적으로 활용될 수 있는 정도여야 한다.
  • 모듈성 (Modularity)
    - 정보은닉과 추상화의 원칙으로 최소한의 결합도 및 최대한의 응집력을 갖도록 하는 특성
  • 하드웨어 독립성
    - 가능한 실행 하드웨어 기종과 무관해야 한다.
  • 소프트웨어 독립성
    - OS 또는 DBMS와는 무관하게 운영해야 한다.
  • 자기문서화 (Self Documentation)
    - 모듈의 정확한 기능, 용법, 인터페이스를 기술한다.
  • 일반성 (Commonality)
    - 많은 개발자들에게 공통적으로 필요하고 사용 가능해야 한다.
  • 신뢰성 (Reliability)
    - 품질을 믿고 사용할 수 있어야 한다.

 

 

 

라) 실무에서 재사용 구현의 문제점

 

 

 

마) 소프트웨어 재사용의 장애요인 및 대책

 

 

바) 재사용 적용 시 고려사항

 

 

 

사) 소프트웨어 재사용의 효과

 

 

 

 

02 역공학

 

가) 역공학의 정의

  • 역공학이란 소프트웨어 공학의 한 분야로 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일을 말한다.
  • 유지보수 단계에 수행하는 활동
  • 순공학에 상대되는 개념
  • input과 output의 흐름을 통해 이해할 수 있다.

 

 

 

나) 역공학이 필요한 경우

  • 기 가동중인 시스템의 유지보수가 어려운 경우
  • 변경이 빈번하여 시스템 효율이 저하된 경우
  • 파일 시스템으로 개발된 업무를 광계형 데이터베이스로 재구축 하려는 경우
  • 기본 메인 프레임을 다운사이징하는 경우 

 

 

다) 역공학의 장점

상용화되거나 기 개발된 소프트웨어의 분석을 도와줌.

기존 시스템의 자료와 정보를 설계 수준에서 분석할 수 있어 유지 보수성을 향상

기존 시스템 정보를 Repository에 보관하여 CASE의 사용을 용이하게 함

 

 

 

라) 역공학의 종류

 

 

논리역공학 (Logical Reverse Engineering)

  • 목적: 소프트웨어나 시스템의 논리적 구조동작 방식을 분석하는 데 초점을 맞춥니다. 즉, 소프트웨어의 작동 원리, 알고리즘, 논리적 흐름을 이해하는 것이 목적입니다.
  • 적용 분야: 주로 시스템의 기능을 분석하여 소스 코드를 재구성하거나, 시스템의 동작 원리를 복원하는 데 사용됩니다. 예를 들어, 프로그래밍 언어로 작성된 코드가 기계어로 컴파일된 후, 이 기계어를 역으로 분석하여 원래의 고수준 소스 코드를 추론하는 것이 논리역공학입니다.
  • 활용: 소프트웨어 개선, 오류 수정, 보안 취약점 분석 등에서 많이 사용됩니다. 또한, 기존 시스템을 분석하여 새로운 시스템을 설계하는 데에도 쓰입니다.

자료역공학 (Data Reverse Engineering)

  • 목적: 데이터 구조와 형식을 분석하는 데 초점을 둡니다. 특정 파일 형식이나 데이터베이스의 저장 방식을 분석하여 데이터의 구조를 복원하거나, 데이터가 어떻게 처리되고 저장되는지 파악하는 것이 목적입니다.
  • 적용 분야: 데이터 파일을 분석하여 데이터베이스나 파일 형식의 구조를 파악하거나, 암호화된 데이터를 해석하는 데 사용됩니다. 예를 들어, 데이터베이스에서 저장된 데이터가 어떻게 인코딩되고, 저장되는지 파악하여 데이터를 추출하거나 복원하는 과정에서 자료역공학이 사용됩니다.
  • 활용: 주로 데이터 복구, 호환성 문제 해결, 파일 형식 분석 등에서 많이 사용됩니다.

주요 차이점:

  • 논리역공학은 소프트웨어나 시스템의 논리적 흐름과 작동 원리를 분석하는 데 중점을 두고,
  • 자료역공학은 데이터 구조 및 형식을 분석하여 데이터를 추출하거나 변환하는 데 중점을 둡니다.

학습 목표 

1. 소프트웨어의 특성과 문제점

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

3. 소프트웨어 개발 프로세스 모델

 

 

핵심 키워드

소프트에어의 특성

소프트웨어 생명주기

요구사항분석, 설계, 구현, 테스팅

소프트웨어 요구관리, 소프트웨어 유지관리, 소프트웨어 형상관리, 소프트웨어 품질관리

 

 


 

 

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

 

가) 소프트웨어 공학 소개

효과적인 소프트웨어 공학 기술 적용을 위한 3가지 요소

1. 체계적인 업무 방식 및 흐름의 정의와 이를 적용할 수 있는 프로세스(Process)

2. 전문적인 지식을 갖춘 조직 및 인력(People)의 구성

3. 정의된 업무 방식과 조직인력이 효율적으로 운영되기 위한 인프라 기술(Technology)

 

정리 : 

성공적인 SW 프로젝트의 핵심요소

Process (Procedures & Methods)

People (Process & Organization)

Technology (Tool & Equipments)

 

 

나) 소프트웨어 공학 배경

 

1950s : 소프트웨어 개발 프로젝트를 위한 소프트웨어 공학 개념 도입

1960s : 소프트웨어 수요 급증, "소프트웨어의 위기(Crisis)"-SW 구현하는 인력들의 경험과 능려그 수적인 부족이 원인

              -> 본격적인 소프트웨어 공학 도입

1970s : 소프트웨어 수요 급증 -> 소프트웨어 개발 인력 부족

             해결책 - 비전공자들도 대거 투입 -> 쉽게 수정될 수 있도록 해야됨. (선코딩-후수정 접근방식 이용)

1980s : 개발 생산성을 높이기 위한 방법들 연구.

1990s : 시장에서 경쟁우위 선점을 위한 제품의 시장출시 시간을 단축해야 됨. 

             -> 개발 생산성을 높이기 위한 방법들 연구 활성화. 동시공학(Concurrent Engineering) 모델 활용.

             동시공학 : 폭포수 모델에서 요구사항, 설계 및 구현 등을 동시에 진행할 수 있는 공학 모델

2000s : 급속한 변화에 효과적으로 대응하기 위한 애자일 방법론 도입.

 

 

 

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

 

소프트웨어 공학

- 정의 : 소프트웨어의 개발, 운용, 유지보수 등의 생명주기 전반을 체계적이고 서술적이며 정량적으로 다루는 학문

- 4가지 중요 요소 : 방법, 도구, 절차, 사람

 

  • 방법론: 프로젝트 계획, 분석, 설계 등 전체 소프트웨어 개발 프로세스를 체계적으로 관리하는 방법.
  • 도구: 소프트웨어 개발을 자동화하고 효율성을 높이기 위한 도구들.
  • 절차: 개발 과정을 체계적으로 정리하여 효율적으로 작업할 수 있도록 함.
  • 사람: 소프트웨어 개발에 참여하는 인력의 중요성을 강조.

 

 

 

 

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

 

가) 정의 

- 사용자 환경 및 문제점 이해에서 시작하여 운용/유지 보수에 이르기까지의 모든 과정을 의미함.

 

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

 

 

나) 목적

- 프로젝트 비용 산정과 개발 계획 수립, 기본 골격 구성

- 용어의 표준화

- 프로젝트 관리

 

 

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

- 기업에서 프로젝트의 개발 프로세스를 테일러링하는데 중요한 활동

- 테일러링 : 소프트웨어 개발 프로세스에서 특정 프로젝트나 조직의 필요에 맞게 프로세스나 방법론을 조정하고 최적화하는 것을 의미

 

 

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

 

1. V 모델

  • 요구사항이 명확히 정의된 프로젝트에서 사용됨.
  • 각 개발 단계와 그에 따른 검증 및 확인(Verification & Validation) 단계가 연관되어 있으며, 개발 초기부터 테스트를 고려함.
  • 이 모델은 체계적이고 명확하게 관리되며, 요구사항 분석과 설계 단계에서 발생한 오류를 발견하기 용이함.

 

2. VP 모델 (V Model with Prototyping)

 

  • VP 모델: V 모델에 프로토타이핑을 결합한 것으로, 시스템 이해와 리스크 감소를 목적으로 합니다. 이는 개발 초기 단계에서 시스템의 일부분을 신속하게 개발하고, 이를 통해 불확실성을 줄이는 데 도움을 줍니다.
  • Prototyping이란 - 소프트웨어 개발 과정에서 최종 제품을 만들기 전에 핵심 기능을 미리 구현한 시제품 또는 초안
  • 접근방법 1: 명확하지 않은 문제에 대해 가능한 해결책을 탐색하고 적용하는 방법으로, 반복적으로 시도하면서 불확실성을 줄이는 접근법입니다.
  • 접근방법 2: 여러 해결책을 평가하여 가장 적합한 것을 선택하는 방법으로, 특정 기능이나 시스템 성능과 관련된 리스크가 존재할 때 유용합니다.

 

3. 점증적 모델 (Incremental Model)

 

  • 시스템의 핵심 기능을 먼저 개발하고, 이후 추가 기능을 점진적으로 확장하는 방식입니다.
  • 초기에는 제한된 기능만 제공하며, 각 단계에서 시스템이 점점 완성됩니다.
  • 개발 초기의 리스크를 줄이고, 시간이 지남에 따라 개선이 필요한 경우에 유용합니다.

 

4. 진화 모델 (Evolutionary Model)

 

  • 점증적 모델과 비슷하지만, 시스템의 각 버전을 반복적으로 개발하며 점차 완성도를 높입니다.
  • 사용자 피드백을 반영하여 지속적으로 시스템을 개선하고, 새로운 기능을 추가합니다.
  • 시스템이 완전히 불분명하거나 지속적인 개선이 필요한 경우에 적합합니다.

 

 

정리 :

V 모델, VP 모델, 점증적 모델, 진화 모델

 

 

03 소프트웨어 개발 방법론

 

소프트웨어 개발 방법론의 특징 :

- 개발 단계를 각각 정의하고

- 각 단계별 수행활동, 산출물, 검증절차, 산출물, 완료 기준을 정의하고 

- 개발 계획, 분석, 설계 및 구현의 수행 단계에 대해 정형화된 방법과 절차, 지원 도구를 정의한다.

 

 

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

1. 개발 경험의 축적 및 재활용을 통한 개발 생산성을 향상

2. 효과적인 프로젝트 관리

3. 공식 절차와 산출물을 제시하고 표준용어를 통일하여 의사소통 수단 제공

4. 각 단계별 검증과 승인된 종료를 통해 일정 수준의 품질 보증

 

 

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

 

 

 

다) 소프트웨어 개발 단계

 

소프트웨어 개발 활동은 소프트웨어 생명주기에 따라 정의됨.

 

  1. 요구사항 분석: 개발할 소프트웨어의 목적과 요구사항을 명확히 정의하는 단계입니다.
  2. 설계: 요구사항을 바탕으로 시스템의 구조와 설계를 구체화하는 단계입니다.
  3. 구현: 설계된 내용을 실제 코드로 작성하여 소프트웨어를 개발하는 단계입니다.
  4. 테스트: 개발된 소프트웨어가 요구사항을 충족하는지 확인하고 오류를 찾아내는 단계입니다.

 

정리:

소프트웨어 개발 단계는

요구사항 분석 → 설계 → 구현 → 테스팅

 

 

 

 

04 애자일 개발 방법론

 

 

 

 

가) 애자일 방법론 종류

  • 애자일 선언문 이후 다양한 애자일 방법론이 등장했으며, 그 중 **스크럼(Scrum)**과 **익스트림 프로그래밍(XP)**이 널리 사용됩니다.
  • 최근에는 **린 소프트웨어 개발(Lean Software Development)**도 주목받고 있습니다.
  • 주요 애자일 방법론으로는 스크럼, XP, 린 소프트웨어 개발, 애자일 UP(AUP) 등이 있습니다.

 

 

나) 애자일 개발 방법론 - XP

 

1. XP 개요

  • XP는 1990년대 후반에 켄트 벡(Kent Beck)이 개발한 방법론으로, 주로 소규모 개발 조직에 적합한 경량화된 개발 방식입니다.
  • 테스트 주도 개발(TDD), 일일 빌드(Daily Build), 지속적 통합(Continuous Integration) 등의 기술과 연관됩니다.
  • XP는 가치(Value)와 이를 실현하기 위한 실천법(Practice), 원칙(Principle)으로 구성되어 있으며, 반복적인 개발 과정을 통해 점진적으로 소프트웨어를 개선해 나갑니다.
  • 국내에서는 스크럼과 같은 다른 애자일 방법론과 함께 적용되는 경우가 많습니다.

 

2. XP 개발절차

 

 

 

3. XP 가치

 

  • 의사소통: 팀 내의 원활한 소통이 중요하며, 이를 통해 문제를 해결하고 팀워크를 강화합니다.
  • 단순성: 불필요한 복잡성을 제거하고, 가능한 한 단순한 설계를 유지합니다.
  • 피드백: 지속적인 피드백을 통해 개선하고, 변화에 유연하게 대응합니다.
  • 용기: 요구사항의 변경에 용감하게 대처하고, 문제 해결을 주도적으로 수행합니다.
  • 존중: 팀원들 간의 상호 존중을 중요하게 여겨야 프로젝트의 성공을 보장할 수 있습니다.

 

4. XP의 실천 방법

 

 

 

 

다) 스크럼(SCRUM)

 

1. 스크럼 개요

 

프로젝트 관리를 위한 애자일 방법론.

추정 및 조정 기반의 경험적 관리기법의 대표적인 형태이다.

 

스크럼 역할자 유형 : 제품 책임자, 스크럼 마스터, 스크럼 팀

 

 

2. 스크럼 프로세스

스크럼 프로세스는 다음과 같은 3가지 구성 요소를 갖는다. 

  • 스프린트(Sprint) : 달력기준 1~4주 단위의 반복개발기간을 가리킨다.
  • 3가지 미칭 : 일일 스크럼, 스프린트 계획, 스프린트 리뷰
  • 3가지 산출물 : 제품 백로그, 스프린트 백로그, 소멸 차트

 

 

 

 

 

 

 

3. 스크럼 특징 

 

  • 투명성 - 스크럼은 스크럼 회의, 소멸차트, 스프린트 리뷰와 같은 기법을 이용해서 프로젝트의 상태나 문제점을 효과적으로 파악할 수 있다.
  • 타임박싱 - 스크럼을 진행하는 데 들어가는 시간을 제한. 프로젝트 진행에만 집중하는 것이 가능해진다.
  • 커뮤니케이션 - 개발자들이 갖고 있는 문제점 공유, 플래닝 포커를 사용하여 사용자의 스토리 구현 난이도, 시간 토론하는 절차를 가짐.
  • 경험주의 모델 - 프로젝트에 참여하는 개개인의 경험을 중요시 한다.

+ Recent posts