경희대학교 이성원 교수님의 '오픈소스 SW 개발 방법 및 도구 수업'을 기반으로 본인이 이해한 바로 새롭게 정리한 글입니다.

Problem Definition (software layer)

  • System software
  • Application software

System software vs Application software

애플리케이션 개발자 : Application , Middleware

시스템 개발자 : OS UI, OS Services, OS drivers and runtimes, Hypervisor, Firmware, Hardware

Problem Definition의 목적(purpose)

  • Purely your own purpose -> 자신의 문제 해결 ex). 창업, 기획
  • Based on othe person's request -> 다른 사람의 문제 해결 ex). 취업, 하청

Customer Requirement Analysis (고객 요구 분석)

  1. 첫번째 방법
1. Used Case Diagram

2. Focus Group

3. BrainStorming

4. Obsersvation

5. Interview

6. Survey

7. Join Application Method

8. Interface Analysis

9. Prototyping
  1. 두번째 방법

    1. Requirement elicitation : 고객 도메인에서 요구사항 추출
    
    2. Requirement analysis : 추출한 사항을 바탕으로 분석
    
    3. Requirement specification : 이를 바탕으로 요구 명시
    
    4. Functional doamin : 이후 기능 도메인에서 구현하고자 하는 기능 실현

Problem Definition (legacy)

  • From scratch : 백지에서 시작 (처음부터 시작)
  • Based on existing platforms : 최대한 재사용하기 (reverse engineering)

    Reverse Engineering (reengineering)

  • 완제품이나 시스템을 분해·분석하여 그 설계 기술, 동작 원리, 구성 요소를 역으로 추적해내는 과정 (보완/해킹)

  • 기술 문서가 없거나, 경쟁사 제품 분석, 구형 시스템 복원 및 보안 취약점 분석을 위해 활용

  • Reverse Engineering 예시
    - 동작되는 file은 있는데 source code는 없을때
    - 악성 코드 분석 -> machine language code를 high-level language로 역변환

    Software Reuse

  • 이미 개발되어 검증된 소프트웨어의 구성요소(코드, 설계, 문서 등)를 새로운 애플리케이션 개발에 활용하는 기법

    • 디자인 패턴, 함수, 모듈, 라이브러리, 클래스 ... 등
  • 디자인 패턴
    - 프로그래밍 패러다임 : function(함수) 재사용
    - 객체 지향 프로그래밍 : class(클래스) 재사용
    - 디자인 패턴, 구조적 패턴 : 프로그램 설계에 대한 재사용

    Refactoring

  • 소프트웨어의 외부 동작을 변경하지 않으면서 내부 구조를 개선하는 코드 재구성 작업

  • Refactoring의 주요 목적

    • 코드 가독성 향상 : Redability
    • 유지보수 용이 : Maintainability
    • 중복 제거 및 코드 구조 개선 : Performance
    • 시간 복잡도 개선 : Complexity
    • 확장성 개선 : Extensibility
    • 실행 속도 향상 : Execution

Problem Definition (Project characteristics)

  • Due(Service deployment date) : 언제까지 개발해야하는가

  • Performance(Capacitty, Response, Time) : 얼마만큼의 성능을 뽑아내야하는가

  • Resource(개발자 수, 개발자 수준, 돈... 등) : 얼마만큼의 예산이 필요한가

    Performance indicator (KPI)

    • 성능을 측정하고 평가하기 위한 핵심 평가 지표(key performance indicator)

    • KPI는 특정 활동과 조직의 성과를 평가할 수 있으며, 전략과 운영 개선에 중점을 맞추었다.

    • KPI 예시

Problem Definition (Hardware depency)

  • Hardwared dependent : 하드웨어가 필요하다.
    • 아두이노(Arudino), 라즈베이파이(RaspberrPi), 쿠다(CUDA)
  • Hardwared in - dependent : 하드웨어가 필요없다.
    • 웹/서버 개발 -> 일반적으로 KPI가 적용된다.
    • 모바일 애플리케이션 개발
      • Native platform(iOS, Android) -> 극한 성능을 뽑아야한다.
      • Cross platform(HTML, CSS, JavaScript, Dart/Flutter) -> 빠른 개발과 출시가 중요하다.
profile
처음이고 서툴지만 방향을 잡아 노력하는 개발자

0개의 댓글