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

개발의 끝의 과정은 어떻게 평가할까?

  • Reliability (신뢰성)
  • Sustainability (지속성 + 기능추가)
  • Performance (성능)
  • Readability (가독성)

Test-Driven-Development

TDD가 무엇인가?

  • TDD는 요구사항을 충족하는 특정 테스트 케이스(테스트 코드)를 만든 후, 테스트를 통과할 수 있는 코드를 개발한 후 지속적인 짧은 개발을 반복하는 개발 방법이다.

  • 실제로 단위 테스트 또는 TDD를 사용하면 디버깅하는 시간이 현저히 줄어들 뿐만 아니라, 잘못된 코드에 대해 빠른 오류 확인이 가능하다.

  • TDD의 사이클

    • Add a test

      • 각각의 Feature을 실행하기 위한 테스트를 작성한다.
      • Feature의 기능과 요구사항을 만족하는 함수의 향상 혹은 함수를 정의한다.
      • 이 함수들은 테스트가 존재하는 동안 변형할 수 있다.
    • Run all tests and check fails

      • 테스트가 올바르게 작동하는지 확인하는 단계이다.
      • 첫 번째 테스트는 실패하는 것이 올바르게 작동하는 것이다. -> 테스트 코드에 아무것도 없기 때문이다.
    • Write the codes

      • 함수를 통과할 수 있는 테스트 코드를 작성한다.
      • 이때 테스트 코드는 완벽할 필요가 없고, 일단 통과하기만 하면된다. -> 뒷 단계에서, 이 소스코드를 Refactoring을 할 것이다.
      • 단, 프로그래머는 이 단계에서, 필요 이상의 함수를 구현해서는 안된다.
    • Run tests

      • 테스트를 진행해보면서, 모든 테스트 케이스가 통과하는지 확인한다.
      • 이때, 테스트 케이스를 모두 통과한다면, 테스트 요구사항을 모두 만족한다고 생각하면된다.
      • 만약 테스트 코드를 통과하지 못한다면, 될때까지 반복해야한다.
    • Refactor code

      • 이후 작성한 코드를 제거/수정/개선한다.
      • Object, class, module, variable은 반드시 목적과 사용의도를 드러내는 명확한 이름을 지어야한다.
  • TDD 장점

    • 테스트 코드를 작성함으로써 실제 코드에 대한 이해를 높일 수 있다.
    • 디버깅하는 시간이 현저히 줄어들 뿐만 아니라, 잘못된 코드에 대해 빠른 오류 확인이 가능하다.
    • 테스트 코드 작성 단계에서 실제 코드에 대한 명확한 처리를 설계함으로써 과도한 설계를 피할 수 있고, 간결한 인터페이스를 갖는다.
  • TDD Principle

    • 기능의 갯수를 최소화한다.
      • TDD에서 최소한의 기능을 구현하고, 이후 Refactoring단계에서 기능을 확장한다.

TDD in Python

  • unittest

    • Python에 포함된 다양한 테스트를 자동화할 수 있는 기능이 포함되어 있는 표준 라이브러리
    • unittest에 포함된 주요 개념
      • TestCase : unittest 프레임 워크의 테스트 조직의 기본 단위
      • Fixture : 테스트함수의 전 또는 후에 실행 / 테스트 환경이 예상 된 상태에 있는지 확인
      • assertion : unittest가 테스트가 통과하는지 또는 실패 하는지를 결정

Profiling (computer programming)

  • Profiling이란?

    프로그램 실행 중 CPU 사용량, 메모리, 함수 호출 주기/빈도 등을 측정하여 성능 병목 지점을 찾고 최적화하는 동적 분석 기술이다.

    Profiling은 프로그램의 최적화를 위해 주로 사용된다.

  • Profiler

    • 소프트웨어 개발에서 프로그램의 실행 시간, 메모리 사용량, CPU 점유율, 함수 호출 빈도 등 성능 데이터를 실시간으로 수집하고 분석하는 동적 분석 기법.
    • Profiler는 다양한 방면의 데이터를 모으는 기술을 사용하며, 하드웨어 오류, 운영 체제 오류 등을 포함한다.
  • Profiler 사진

각각의 함수가 차지하는, 시간과 메모리를 실시간 분석하여, 누가 많이 사용하는지 드러낸다.

  • Profiler Tools

    • Bulit-in Profiler in Python
    • RunSnakeRun
    • SNAKEVIZ
    • FYI (Profiler Software)

Coding Guideline (Convention)

  • 특정 프로그래밍 언어에서 프로그래밍을 할때 추천하는 스타일, 관행, 방식 등의 일련의 가이드라인을 말한다.
  • 주로 파일 구성, 들여쓰기, 주석, 선언 등 프로그래밍을 하며 많이 사용하는 방식을 뜻한다.
  • 소프트웨어의 구조적 품질을 유지하기 위한 방식이다.
  • 프로그래머들은 가독성을 향상과 소스 코드의 유지보수를 용이하기 위한, 매우 추천되는 가이드라인들이다.
  • 더 나아가, Convention(관습)일 경우에는, 규칙에 대한 문서가 존재하는 만큼 반드시 지키고 따라야할 방식이다.
  • Convention은 회사별, 팀별, 단체별 다를 수 있다.
profile
처음이고 서툴지만 방향을 잡아 노력하는 개발자

0개의 댓글