U E D R , A S I H C RSS

Programming Pearls/Column5



1. A Small Matter of Programming

  • λ°œνŒμ„ λ§ˆλ ¨ν•˜μž.(Build scaffolding.)

1.1. From Pseudocode to C

  • κ·Έλƒ₯ Binary Search의 μŠˆλ„μ½”λ“œλΌ Cλ¬Έλ²•μœΌλ‘œ 바꿔놓은 것이닀.

1.2. A Test Harness

  • λ£¨ν”„λΌ μ •ν•΄μ§„ 횟수만큼 λŒλ©΄μ„œ ν…ŒμŠ€νŠΈν•  값을 일일히 μž…λ ₯ν•΄μ£Όκ³  μžˆλ‹€.
  • ν•˜λ‹€λ³΄λ©΄ 지겹닀고 ν•΄μ„œ 이 μž‘μ—…μ„ μžλ™ν™”ν•΄μ„ λ°œνŒμ„ λ‹€μŒ μ„Ήμ…˜μ—μ„œ 보여μ€λ‹€.
  • κ·ΈλŸ¬λ©΄μ„œ 버그 μžˆλŠ” Binary SearchλΌ λ³΄μ—¬μ£Όκ³  μžˆλ‹€.
  • 큰 ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” νˆ΄μ—μ„œ μ œκ³΅ν•˜λŠ” 디버깅을 μ“°μ§€λ§Œ, μ΄λ ‡κ²Œ μž‘μ€ μ•Œκ³ λ¦¬μ¦˜ 같은 κ²ƒμ—μ„œλŠ” printλ¬Έ 같은걸 μ“°λŠ”κ²Œ νŽΈν•˜λ‹€κ³  ν•œλ‹€.

1.3. The art of assertion

  • cμ—μ„œμ˜ assert문을 μ‚¬μš©ν•˜λŠ” ν…Œν¬λ‹‰ 같은 것을 보여주고 μžˆλ‹€.
  • λŒ€κ°• assert의 μ™„κΈ‰ μ‘°μ ˆμ΄λΌλŠ” 말둜 ν‘œν˜„μ΄ 될λ“ν•˜λ‹€.
  • λ˜ν•œ Binary Search의 κ°€μž₯ μ€‘μš”ν•œ μ „μ œ 쑰건인 sortλ˜μ—ˆλŠ”κ°€? μ²΄ν¬ν•΄μ£ΌλŠ” ν•¨μˆ˜λΌ μ•žμ—λ‹€ 써μ€λ‹€. 이 κ²½μš°μ—λŠ” searchλΌ ν•œλ²ˆλ§Œ ν•΄μ£Όλ©΄ n + lg n μ΄λ ‡κ²Œ 될것이닀. ν•˜μ§€λ§Œ sortλ˜μ—ˆλŠ”κ°€ μ²΄ν¬ν•˜λŠ” ν•¨μˆ˜λŠ” ν•œλ²ˆλ§Œ ν•΄μ£Όλ©΄ 되λ€λ‘œ, searchλΌ ν•œ λͺ‡μ²œ,λͺ‡λ§Œλ²ˆ 돌리면 κ²°κ΅­ lg n 에 μˆ˜λ ΄ν•  것이닀.
  • μ°Έκ³ μ„œμ  : Writing Solid Code

1.4. Automated Test

  • μ•„κΉŒ λ§ν–ˆλ˜ 컴퓨터가 μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈν•΄μ£ΌλŠ” λ°œνŒμ„ λ§Œλ“€μ–΄λ³΄μž.
  • 별거 μ—†λ‹€. κ·Έλƒ₯ 배열을 μƒμ„±ν•œλ‹€μŒ, forλΌ μ •ν•΄μ§„ 횟수만큼 λŒλ €κ°€λ©΄μ„œ assert체크해μ€λ‹€. 끝이닀.--; μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨, μ‚¬μ΄μ¦ˆκ°€ 0, 1, 2의 제곱수, 2의 μ œκ³±μˆ˜κ°€ μ•„λ‹Œμˆ˜ λͺ¨λ“  경우의 μˆ˜λΌ ν…ŒμŠ€νŠΈν•΄λ³Όμˆ˜κ°€ μžˆλ‹€.

1.5. Timing

  • μ—­μ‹œ 별루 λ³Ό κ±° μ—†λ‹€. search 1000번 μ΄μƒν•œλ‹€μŒ κ±Έλ¦° μ‹œκ°„μ— λŒ€ν•΄ κ·Έλž˜ν”„λΌ κ·Έλ €λ³΄λ©΄, lg n 의 κ·Έλž˜ν”„κ°€ λ‚˜μ˜¨λ‹€.

1.6. The Complete Program

  • μ—­μ‹œ 별말 μ—†λ‹€.

1.7. Principles

  • Scaffolding
  • Coding : ν•˜μ΄λ ˆλ²¨μ˜ μŠˆλ„μ½”λ“œλ‘œλΆ€ν„° μ‹œμž‘ν•˜μž.
  • Testing : 큰 μ‹œμŠ€ν…œλ³΄λ‹€λŠ” 발판 λ‚΄μ—μ„œ ν…ŒμŠ€νŠΈν•˜λŠ”κ²Œ 훨씬 쉽닀.
  • Debugging : λ°œνŒμ΄λž‘ 고립된 ν”„λ‘œκ·Έλž¨μ΄λ‚˜, μž„λ² λ””λ“œλœ κ³³μ—μ„œλŠ” ν•˜κΈ°κ°€ νž˜λ“€λ‹€. Column5μ—μ„œ μ„λͺ…ν•œλ‹€.
  • Timing


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:24:03
Processing time 0.0223 sec