Skip to content

Latest commit

Β 

History

History
227 lines (150 loc) Β· 8.13 KB

SDLC-TDD.md

File metadata and controls

227 lines (150 loc) Β· 8.13 KB

SDLC:TDD

μž‘μ„±μž : 이병민


Reference

https://itwiki.kr
http://www.extremeprogramming.org/index.html
http://preview.hanbit.co.kr/2652/sample_ebook.pdf
https://media.fastcampus.co.kr/knowledge/dev/tdd/


SDLC (Software Development Life Cycle)

SDLCλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 생λͺ…μ£ΌκΈ°λ₯Ό λœ»ν•˜λ©° μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ‹œμž‘λΆ€ν„° λκΉŒμ§€μ˜ μ „ 과정을 ν•˜λ‚˜μ˜ 생λͺ…μ£ΌκΈ°λ‘œ μ •μ˜ν•˜κ³  단계 별 곡정을 체계화 ν•œ λͺ¨λΈμ΄λ‹€.


  1. 주먹ꡬꡬ식 개발 λͺ¨λΈ(build-Fix)
  • μš”κ΅¬μ‚¬ν•­ 뢄석, 섀계 단계 없이 일단 κ°œλ°œμ— λ“€μ–΄κ°„ ν›„ λ§Œμ‘±ν•  λ•ŒκΉŒμ§€ μˆ˜μ • μž‘μ—…
  • 크기가 μž‘μ€ 규λͺ¨μ˜ μ†Œν”„νŠΈμ›¨μ–΄ 개발
  • 정해진 개발 μˆœμ„œκ°€ μ—†κΈ° λ•Œλ¬Έμ— κ³„νšμ΄ μ •ν™•ν•˜μ§€ μ•Šκ³ , 진행사항 νŒŒμ•…μ΄ μ–΄λ ΅κ³ , μœ μ§€λ³΄μˆ˜κ°€ 어렀움

  1. 폭포수 λͺ¨λΈ (waterfall)

waterfall

  • 순차적으둜 κ°œλ°œν•˜λŠ” 개발 λͺ¨λΈ
  • 각 단계가 λ‹€μŒ 단계 μ‹œμž‘ 전에 λλ‚˜μ•Ό 함
    (μ•ž 단계가 μ™„λ£Œ λ λ•ŒκΉŒμ§€ λ‹€μŒ 단계듀이 λŒ€κΈ°ν•΄μ•Όν•¨)

  1. ν”„λ‘œν† νƒ€μž… λͺ¨λΈ(μ›ν˜• λͺ¨λΈ,prototype)

prototype

  • ν”„λ‘œν† νƒ€μž…μ„ λ§Œλ“€μ–΄μ„œ 고객과 μ‚¬μš©μžκ°€ ν•¨κ»˜ ν‰κ°€ν•œ ν›„ μš”κ΅¬μ‚¬ν•­μ„ μ •μ œν•˜μ—¬ μ™„μ „ν•œ μš”κ΅¬μ‚¬ν•­ λͺ…μ„Έμ„œλ₯Ό 완성함
  • μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ΄ˆκΈ°μ— 고객의 μš”κ΅¬μ‚¬ν•­μ„ νŒŒμ•…ν•˜κΈ° μ–΄λ €μšΈλ•Œ μ‚¬μš©

  1. λ‚˜μ„ ν˜• λͺ¨λΈ (λ‚˜μ„ ν˜• λͺ¨λΈ, spiral)

spiral

  • μœ„ν—˜ 뢄석을 μΆ”κ°€ν•œ 점증적 λͺ¨λΈ (ν”„λ‘œμ νŠΈ μˆ˜ν–‰μ‹œ λ°œμƒν•˜λŠ” μœ„ν—˜μ„ κ΄€λ¦¬ν•˜κ³  μ΅œμ†Œν™” ν•˜λ €λŠ” 것이 λͺ©μ )
  • κ°œλ°œμ— λ”°λ₯Έ μœ„ν—˜μ„ 잘 νŒŒμ•…ν•˜μ—¬ λŒ€μ²˜ ν•  수 μžˆμ§€λ§Œ, κ³ λΉ„μš©μ˜ μ‹œμŠ€ν…œ κ°œλ°œμž„
  • 이전 λͺ¨λΈμ— λΉ„ν•΄ μƒλŒ€μ μœΌλ‘œ λ³΅μž‘ν•˜μ—¬ ν”„λ‘œμ νŠΈ 관리 μžμ²΄κ°€ μ–΄λ €μšΈ 수 있음.

  1. μ—μžμΌ λͺ¨λΈ (agile)

agile

  • agile은 λ―Όμ²œν•©, μ‹ μ†ν•œ λœ»μ„ 가지고 있으며 고객의 μš”κ΅¬μ‚¬ν•­μ— λŒ€ν•΄ μœ μ—°ν•˜κ²Œ λŒ€μ‘ ν•  수 μžˆλ‹€.
    μΌμ •ν•œ μ£ΌκΈ°λ₯Ό λ°˜λ³΅ν•˜λŠ” 개발 과정이며, 개인과 μƒν˜Έ μž‘μš©, 고객과 ν˜‘μ—…, λ¬Έμ„œλ³΄λ‹€ 고객 μ€‘μ‹¬μ˜ κ°œλ°œμ΄λ‹€.
  • μ—μžμΌ λͺ¨λΈλ“€
    • XP(eXtreme Programming)
    • 슀크럼(scrum)
    • ASD,FDD,Lean λ“±λ“±

XP

  • μˆ˜μ‹œλ‘œ λ°œμƒν•˜λŠ” 고객의 μš”κ΅¬μ‚¬ν•­μ— λŒ€μ‘
  • 짧고 반볡적인 개발 μ£ΌκΈ° + 고객의 적극적 μ°Έμ—¬ = κ°€μ‹œμ„± ν–₯상

    μ‚¬μš©μžμ™€ ν•¨κ»˜ 1~3μ£Ό 정도 반볡 κ°œλ°œμ„ ν•œ λ’€ μ˜μ‚¬μ†Œν†΅μ„ 톡해 ν”Όλ“œλ°±μ„ λ°•μœΌλ©° μ†Œν”„νŠΈμ›¨μ–΄μ˜ ν’ˆμ§ˆμ„ 높일 수 μžˆλ‹€.

  • μ†Œκ·œλͺ¨ 개발 ν”„λ‘œμ νŠΈμ— μ‚¬μš©
  • XP의 핡심 κ°€μΉ˜ : Feedback, Respect, Courage, Simplicity, Communication
  • XP의 12가지 μ‹€μ²œ 사항
    • Pair Programming: ν•˜λ‚˜μ˜ μž‘μ—…μ„ 2λͺ…μ˜ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 코딩·리뷰 곡동 μˆ˜ν–‰
    • Planning Game: κ²Œμž„μ²˜λŸΌ μ„ μˆ˜μ™€ κ·œμΉ™, λͺ©ν‘œλ₯Ό 두고 기획 μˆ˜ν–‰
    • Test Driven Development: μ„  λ‹¨μœ„ ν…ŒμŠ€νŠΈν›„ μ‹€μ œ μ½”λ“œ μž‘μ„±
    • Whole Team: 개발 νš¨μœ¨μ„ μœ„ν•΄ 고객을 ν”„λ‘œμ νŠΈ νŒ€μ›μœΌλ‘œ 상주
    • Continuous Integration: μƒμ‹œ λΉŒλ“œ 및 배포가 κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€
    • Design Improvement: μ½”λ“œ κ°œμ„  μž‘μ—… μˆ˜ν–‰(κ°€μ‹œμ„±, μ„±λŠ₯ λ“±), λΆˆν•„μš”ν•œ κΈ°λŠ₯ 제거 및 λ¦¬νŒ©ν† λ§
    • Small Releases: 짧고 μž¦μ€ 릴리즈둜 고객이 변경사항을 λ³Ό 수 있게 함 β†’ μž¦μ€ ν”Όλ“œλ°±
    • Coding Standards: ν‘œμ€€ν™”λœ 관둀에 따라 μ½”λ“œ μž‘μ„±
    • Collective Code Ownership: μ‹œμŠ€ν…œμ— μžˆλŠ” μ†ŒμŠ€μ½”λ“œλŠ” νŒ€μ˜ λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ–Έμ œλΌλ„ μˆ˜μ • κ°€λŠ₯
    • Simple Design: κ°€λŠ₯ν•œ κ°€μž₯ κ°„κ²°ν•œ λ””μžμΈ μƒνƒœ μœ μ§€
    • System Metaphor: μ΅œμ’…μ μœΌλ‘œ 개발 λ˜μ–΄μ•Ό ν•  μ‹œμŠ€ν…œμ˜ ꡬ쑰λ₯Ό 쑰망
    • Sustainable Pace: μ˜€λ²„νƒ€μž„ 지양

TDD

TDDλž€ Test Driven Development의 μ•½μžλ‘œ ν…ŒμŠ€νŠΈ 주도 개발이라고 ν•œλ‹€.

TDDλŠ” μ½”λ“œ 개발 및 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•˜λŠ” 기쑴의 개발 ν”„λ‘œμ„ΈμŠ€μ™€ λ‹€λ₯΄κ²Œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•œ ν›„, μ‹€μ œ μ½”λ“œλ₯Ό κ°œλ°œν•˜μ—¬ λ¦¬νŽ™ν† λ§ν•˜λŠ” 절차λ₯Ό λ”°λ₯΄κΈ° λ•Œλ¬Έμ— Test First Development라고도 ν•œλ‹€.

TDDλŠ” μ½”λ“œλ₯Ό μ“΄ 후에 ν…ŒμŠ€νŠΈ ν•˜λŠ” 것이 μ•„λ‹Œ, ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄ 놓고 이에 λ§žμΆ”μ–΄μ„œ μ‹€μ œ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.

TDDλŠ” λ¬Έμ œκ°€ μ—†λŠ”μ§€ λ¨Όμ € 확인을 ν•  수 있으며, κΈ°λŠ₯ λ‹¨μœ„λ‘œ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— 개발자의 손을 λ– λ‚˜κΈ° 전에 ν”Όλ“œλ°±μ„ λ°›λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.

TDD둜 μ–»λŠ” 효과

  1. μ½”λ“œκ°€ 개발자의 손을 λ– λ‚˜κΈ° 전에 ν”Όλ“œλ°±μ„ 받을 수 μžˆλ‹€.

    개발 ν”„λ‘œμ„ΈμŠ€μ—μ„œλŠ” 90%이상 μ™„μ„±λœ μ½”λ“œλ₯Ό 가지고 ν…ŒμŠ€νŠΈλ₯Ό ν•˜κΈ° λ•Œλ¬Έμ— 문제λ₯Ό λ°œκ²¬ν•  수 μž‡μ§€λ§Œ, 원인을 무엇인지 μ§„λ‹¨ν•˜κΈ° νž˜λ“€λ‹€.
    TDDλŠ” κΈ°λŠ₯ λ‹¨μœ„λ‘œ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œκ°€ μ™„μ„±λ˜μ–΄ 개발자의 손을 λ– λ‚˜κΈ°μ „ ν”Όλ“œλ°±μ„ 받을 수 μžˆλ‹€.

  2. 개발자의 μ˜€λ²„ 코딩을 λ°©μ§€ν•œλ‹€.

    ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κΈ° λ•Œλ¬Έμ— μ΅œμ†Œν•œμ˜ μ½”λ“œλ‘œλ§Œ μž‘μ„± 및 κ°œμ„ ν•˜κ²Œ λœλ‹€.
    λ¬Έμ œκ°€ λ°œκ²¬λ˜μ§€ μ•Šμ€ μ½”λ“œμ— 영ν–₯을 쀄 수 μžˆλŠ” μ˜€λ²„ 코딩을 ν•˜μ§€ μ•Šκ²Œ λœλ‹€.

  3. 개발 과정이 ν…ŒμŠ€νŠΈ μ½”λ“œλ‘œ 남기 λ•Œλ¬Έμ— 과거의 μ˜μ‚¬ 결정을 μƒκΈ°ν•˜κΈ° 쉽닀.

    과거의 λ‚˜ μžμ‹ κ³Ό ν”„λ‘œκ·Έλž˜λ¨Έκ°€ ν˜‘μ—…μ„ ν•˜λŠ” 것을 μš©μ΄ν•˜κ²Œ ν•΄μ€€λ‹€.

TDD의 개발 ν”„λ‘œμ„ΈμŠ€

TDD

  • RED : μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± β†’ μ‹€νŒ¨ν•˜λŠ” 것이 확인 λ˜μ–΄μ•Ό ν…ŒμŠ€νŠΈκ°€ 검증λ ₯을 가진닀고 μ‹ λ’°ν•  수 μžˆλ‹€.

  • GREEN : ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ„±κ³΅μ‹œν‚€κΈ° μœ„ν•œ μ‹€μ œ μ½”λ“œ μž‘μ„± β†’ ν…ŒμŠ€νŠΈ 성곡을 μœ„ν•œ μ΅œμ†Œν•œμ˜ μ½”λ“œ κ·Έ 이상을 λ³€κ²½ν•˜κ±°λ§Œ μΆ”κ°€ν•˜λ©΄ μ•ˆλœλ‹€.
    (μΆ” ν›„ λ¦¬νŒ©ν† λ§ λ“±μ˜ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€μ—μ„œ λΆ€μž‘μš©μ΄ λ‚˜μ˜¬ 수 있기 떄문이닀.)

  • REFACTOR : 쀑볡 μ½”λ“œ 제거, μΌλ°˜ν™” λ“±μ˜ λ¦¬νŒ©ν† λ§μ„ μˆ˜ν–‰

    β†’ κ΅¬ν˜„ 섀계λ₯Ό κ°œμ„ ν•˜κ³  가독성, μ μš©μ„±, μ„±λŠ₯을 κ³ λ €ν•˜κ²Œ λœλ‹€.

  1. μš”κ΅¬μ‚¬ν•­ νŒŒμ•…
  2. ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±
  3. ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ λŒμ•„κ°€λ„λ‘ μ½”λ“œ μž‘μ„±
  4. λ¦¬νŒ©ν† λ§
  5. 과정을 λ‹€μ‹œ 반볡

JEST

facebookμ—μ„œ κ°œλ°œν•œ JavaScript Testing Framework이닀.
JavaScript ν”„λ‘œμ νŠΈ(Node,React, Vue λ“±)μ—μ„œ ꡬ성 없이 μ¦‰μ‹œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.


JEST 맛보기

  • μ„€μΉ˜

    yarn add --dev jest
    npm install --save-dev jest

  • μ„ΈνŒ… package.json

    {
        "scripts": {
            "test": "jest"
        }
    }

    β†’ yarn test or npm run test으둜 jest둜 ν…ŒμŠ€νŠΈλ₯Ό 진행 ν• μˆ˜ μžˆλ‹€. β†’ μ‹€ν–‰μ‹œ test λͺ¨λ“  testνŒŒμΌμ„ μ‹€ν–‰ν•˜λŠ”λ° 뒀에 경둜λ₯Ό μ μ–΄μ„œ νŠΉμ • νŒŒμΌλ“€λ§Œ μ„ νƒμ μœΌλ‘œ μ‹€ν–‰ ν•  수 μžˆλ‹€.


  • μ˜ˆμ‹œ μ½”λ“œ

    ./example/example1 μ°Έμ‘°

    yarn test example1

    ./example/example1/sum.js

    function sum(a, b) {
        return a + b;
    }
    module.exports = sum;

    ./example/example1/sum.test.js

    const sum = require("./sum");
    
    test("adds 1 + 2 to equal 3", () => {
        expect(sum(1, 2)).toBe(3);
    });

    β†’ sum(1, 2)λ₯Ό μ‹€ν–‰ μ‹œν‚€λ©΄ toBe(3) κ°€ λ‚˜μ˜¨λ‹€.

    jest1

    ν…ŒμŠ€νŠΈλ₯Ό 톡과 ν•˜μ§€ λͺ»ν–ˆμ„ 경우

    ./example/example2 μ°Έμ‘°

    yarn test example2

    λ‹€μŒκ³Ό 같이 1+2λŠ” 4κ°€ μ•„λ‹ˆλ―€λ‘œ ν‹€λ¦¬κ²Œ λœλ‹€.

    const sum = require("./sum");
    
    test("adds 1 + 2 to equal 4", () => {
        expect(sum(1, 2)).toBe(4);
    });

    jest2

    -> μΆ”κ°€ 적인 예쩨 μ½”λ“œ ./example/example3 μ°Έμ‘°