why programs fail ch5 - andstudy/forge GitHub Wiki

λ¬Έμ œμ μ„ μž¬ν˜„ν–ˆλ‹€λ©΄ λ‹€μŒμœΌλ‘œλŠ” 그것을 λ‹¨μˆœν™”ν•΄μ•Ό ν•œλ‹€.

  • μ–΄λ–»κ²Œ?
    • μœ κ΄€/λ¬΄κ΄€ν•œ 쑰건듀을 λ°ν˜€λ‚Έλ‹€.
  • 결과물은?
    • λ¬Έμ œμ μ— κ΄€λ ¨ μžˆλŠ” μƒν™©λ“€λ§Œμ„ 담은 ν•˜λ‚˜μ˜ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€.
  • 델타 디버깅?
    • ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μžλ™μ μœΌλ‘œ λ‹¨μˆœν™”μ‹œν‚€λŠ” 디버깅 방법

  • λ‹¨μˆœν™” 개랡적 μ„€λͺ… (λΉ„ν–‰κΈ° 사고)
  • ν‘Ήλ°œ 원인을 μ•Œμ•„λ‚΄κΈ° μœ„ν•΄ 상황을 λ³€ν™”μ‹œμΌœ κ°€λ©΄μ„œ μ‹œν—˜ λΉ„ν–‰
  • 엔진은 μœ κ΄€, 컀피머신은 무관 -> 반볡...
  • μ΅œμ’…μ μœΌλ‘œ 남은 λ‹¨μˆœν™”λœ λΌˆλŒ€λŠ” λͺ¨λ‘ μΆ”λ½μ˜ μž¬ν˜„μ— μœ κ΄€
  • λ‹¨μˆœν™”μ˜ κ°€μΉ˜λŠ” ν•„μˆ˜μ μΈ 뢀뢄듀을 λ‚¨κ²Όλ‹€λŠ” μ λ³΄λ‹€λŠ” λ¬΄κ΄€ν•œ 사항듀을 μ œκ±°ν–ˆλ‹€λŠ” μ μ—μ„œ 더 크게 λ‚˜νƒ€λ‚œλ‹€.

  • 문제점 보고λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” 일반적인 곡정은 ν•˜λ‚˜μ˜ κ°„λ‹¨ν•œ κ·œμΉ™μ„ λ”°λ₯Έλ‹€.
    • 문제점의 λͺ¨λ“  상황에 λŒ€ν•΄, 그것이 문제점 λ°œμƒμ— 관련이 μžˆλŠ”μ§€ μ κ²€ν•œλ‹€.
    • 만일 문제점 λ°œμƒκ³Ό λ¬΄κ³Όν•˜λ‹€λ©΄ ν•΄λ‹Ή 문제점 보고 λ˜λŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—μ„œ 그것을 μ œκ±°ν•œλ‹€.]

  • 이 μž₯의 핡심 질문 :
    • ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ“€μ„ 체계적이고 μžλ™μ μœΌλ‘œ λ‹¨μˆœν™”ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒ?

  • 사둀 (Mozilla Bug #24735, μ±… 160p)

    • 이 λ³΅μž‘ν•œ HTMLμ½”λ“œ 쀑에 무엇이 문제λ₯Ό μΌμœΌν‚€λŠ” κ²ƒμΌκΉŒ
    • μš°λ¦¬κ°€ μ›ν•˜λŠ” 건 μ—¬μ „νžˆ μ‹€νŒ¨ν•˜λ©΄μ„œλ„ μ΅œλŒ€ν•œ λ‹¨μˆœν•œ HTML μž…λ ₯.
    • μžμ› λ΄‰μ‚¬μžλ“€λ‘œ ν•΄κ²°.
  • λ‹¨μˆœν™”λœ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ μœ μš©ν•¨.

    • μ˜μ‚¬μ†Œν†΅μ„ μ‰½κ²Œ ν•œλ‹€ : λ°›μ•„ μ κ±°λ‚˜ μ„€λͺ… 읽기 쉽고, μ“Έλ°μ—†λŠ”κ±Έ 말 μ•ˆν•΄λ„ 됨
    • 디버깅을 μ‰½κ²Œ ν•œλ‹€ : μŠ€λ„μΏ μ—μ„œ μ£Όλ³€ 숫자λ₯Ό λ‹€ μ•Œμ•„λ‚Έ 경우, 경우의 μˆ˜κ°€ 쀄어듦
    • 쀑볡을 μ‹λ³„ν•œλ‹€ : select λ•Œλ¬Έμ— λ°œμƒν•œ λ‹€λ₯Έ bugλ₯Ό μ†Žμ•„λƒ„.

  • μˆ˜λ™ λ‹¨μˆœν™” (λͺ©λ‘ 5.1, κ·Έλ¦Ό 5.1)
  • 896μ€„μ—μ„œ 1μ€„λ‘œ μ€„μ–΄λ“€μ—ˆλ‹€. λ¬Έμ œλŠ” μ˜μ‚¬μ†Œν†΅ : μ΄μ œλŠ” "λ₯Ό μΈμ‡„ν•˜λ©΄ 폭주함"μ΄λΌλŠ” κ°„λ‹¨ν•œ μš”μ•½λ¬Έλ§ŒμœΌλ‘œλ„ λ¬Έμ œμ μ„ 잘 μ„€λͺ…ν•  수 μžˆλ‹€.
  • 디버깅 : Mozilla ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” νƒœκ·Έμ˜ 신쇄λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ½”λ“œμ— μ¦‰μ‹œ 집쀑할 수 μžˆλ‹€.
  • 쀑볡 : 인쇄에 κ΄€ν•œ λ‹€λ₯Έ λ¬Έμ œμ λ“€μ„ κ²€μƒ‰ν•΄μ„œ μž…λ ₯ HTML에 κ°€ ν¬ν•¨λœ 것은 이 문제점의 쀑볡일 κ°€λŠ₯성이 μžˆλ‹€.

  • μžλ™ λ‹¨μˆœν™”
  • μˆ˜λ™ λ‹¨μˆœν™”λŠ” 반볡적이고 μ§€λ£¨ν•œ ν™œλ™ -> μžλ™ν™”
  • κΈ°λ³Έ 아이디어
    • μ–΄λ–€ νŠΉμ •ν•œ μž…λ ₯에 λŒ€ν•΄ Mozillaκ°€ 인쇄에 μ‹€νŒ¨ν•˜λŠ”μ§€λ₯Ό κ²°μ •ν•˜λŠ” μžλ™ ν…ŒμŠ€νŠΈλ₯Ό μ„€μ •ν•œλ‹€.
    • 이전에 μ–ΈκΈ‰ν•œ 이진 검색 접근방식을 μ‹€ν˜„ν•˜λŠ”, HTML νŽ˜μ΄μ§€μ˜ 일뢀뢄에 λŒ€ν•΄ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜λŠ” ν•˜λ‚˜μ˜ μ „λž΅μ„ κ΅¬ν˜„ν•œλ‹€.
  • μ „λž΅(μžλ™μ μΈ λ‹¨μˆœν™” μ „λž΅)의 섀계
    1. μž…λ ₯의 λ°˜μ„ μ œκ±°ν•˜κ³  ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•˜λŠ”μ§€ λ³Έλ‹€. 만일 κ·Έλ ‡λ‹€λ©΄ λ‚˜λ¨Έμ§€ λ°˜μ„ κ°€μ§€κ³  같은 과정을 반볡
    2. κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ 이전 μƒνƒœλ‘œ λŒμ•„κ°€μ„œ μž…λ ₯의 λ‹€λ₯Έ λ°˜μ„ μ œκ±°ν•œλ‹€.
    3. 두 절반 λͺ¨λ‘ ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œλ‹€λ©΄ μž…λ ₯을 μ ˆλ°˜μ”© 자λ₯΄λŠ” 더 μž‘μ€ λΆ€λΆ„μ”© μž˜λΌλ‚΄λŠ” λ°©ν–₯으둜 λ‚˜μ•„κ°„λ‹€.(κ·Έλ¦Ό 5.2, 5.3)
  • μ΅œμ’…μ μœΌλ‘œ μž…λ ₯μ—μ„œ μ–΄λ–€ 문자λ₯Ό μ œκ±°ν•΄λ„ 문제점이 μ‚¬λΌμ§€λŠ”(ꡬ체적으둜 λ§ν•˜λ©΄ λ”± 만 남은) μƒνƒœμ— 이λ₯Ό 것이닀.

  • 5.5 λ‹¨μˆœν™” μ•Œκ³ λ¦¬μ¦˜
    • ppt μ°Έκ³ 

  • μ‚¬μš©μž μž…λ ₯에 델타 디버깅 적용
  • κ·Έλ¦Ό 5.2 : 100개 μ •λ„μ˜ μ‚¬μš©μž μƒν˜Έμž‘μš©μ— λŒ€ν•΄ 델타 디버깅,
  • 82회 ν…ŒμŠ€νŠΈ 후에 3개둜 μ€„μ—ˆμŒ
    • Alt-p
    • μ™Όμͺ½ 마우슀 λ²„νŠΌ λ‹€μš΄
    • μ™Όμ‘± 마우슀 λ²„νŠΌ μ—…
  • 개발 도쀑에 λ°œμƒν•˜λŠ” μƒν™©λΏλ§Œ μ•„λ‹ˆλΌ
  • μž…λ ₯, μ½”λ“œ λ³€κ²½, μΌμ •μ—μ„œ μ‹€μ œ 원인을 μžλ™μœΌλ‘œ 찾도둝 이용 κ°€λŠ₯

  • μžλ™ λ‹¨μˆœν™” 속도λ₯Ό 높이기 μœ„ν•΄ μ‚¬μš©ν•  수 μžˆλŠ” 방법
    • 캐싱을 ν™œμš© : ν…ŒμŠ€νŠΈ κ²°κ³Όλ₯Ό μΊμ‹œμ— 담아두어 쀑볡 μ‹€ν–‰ λ§‰λŠ”λ‹€.
    • 일찍 μ€‘λ‹¨ν•œλ‹€(κ·Έλ¦Ό 5.3) : κ²°κ³Ό ν’ˆμ§ˆκ³Ό μ†Œμš” μ‹œκ°„μ„ λ§žλ°”κΎΌλ‹€.
    • ꡬ문적 μˆ˜μ€€ λ˜λŠ” 의미둠적 μˆ˜μ€€μ—μ„œ λ‹¨μˆœν™”ν•œλ‹€(κ·Έλ¦Ό 5.4, 5.5) :
    • μ–΄νœ˜μ  μˆ˜μ€€μ΄ μ•„λ‹Œ ꡬ문적 μˆ˜μ€€μ—μ„œ μž…λ ₯을 λ‹¨μˆœν™”
    • {0, 1, 1.1, 2, 3, 3.1} => {0, 1, 1.1} => {0}
    • 상황듀을 κ²©λ¦¬ν•˜λŠ” λŒ€μ‹  μ‹€νŒ¨λ₯Ό μ•ΌκΈ°ν•˜λŠ” 차이듀을 κ²©λ¦¬ν•œλ‹€.
⚠️ **GitHub.com Fallback** ⚠️