Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เร่งกระบวนการ TDD: ขั้นตอนปฏิบัติเพื่อหมุน Flywheel

(ผมอยู่ Chicago สำหรับ RailsConf สัปดาห์นี้ เจอผมบอกหน่อย! อยากพบคุณ ผมคือคนอายุมากในรูป sidebar)

ผู้อ่านถามคำถามดีเกี่ยว testing ใน comment บนบทความ:

รู้ว่าต้องหมุน "TDD flywheel" แต TDD unfamiliar มาก มีคำแนะนำเริ่ม RSpec ยังไงดี? หรือแค่ "เข้าไป hack ไปเลย"?

ผมตอบ:

ถ้ายังไม่แน่ใจ RSpec หรือ minitest อาจพบว่า minitest เริ่มง่ายกว่า มัน 'methods and classes' มากกว่า โฟกัสเรียนและฝึก TDD โดยไม่ต้องเรียน syntax ใหม่

Rails มี guide ดีเกี่ยว test terminology, assertions, และรัน tests ใน Rails

วิธีดีที่สุดเรียน TDD คือ ฝึก ขั้นตอนที่ควรทำ:

  1. เขียนทดสอบสมมติว่าโค้ดที่ต้องการมีอยู่แล้ว
  2. รันทดสอบ ให้ทดสอบใหม่ล้มเหลว
  3. เขียนโค้ด simplest ที่ทำให้ทดสอบผ่าน อย่า abstract หรือ refactor มาก
  4. รันทดสอบ ให้ทดสอบใหม่ผ่าน
  5. Refactor โค้ดลบ duplication (หรือทำให้ expressive)
  6. รันทดสอบอีกครั้ง (ให้ยังผ่าน)
  7. กลับขั้น 1

ขณะฝึก TDD ควรถามตัวเอง: อยู่ขั้นไหน? ข้ามขั้นไหน? ขั้นไหนต่อไป? (ควรอยู่ในขั้นหนึ่งเสมอ) ช่วยอยู่บน track ถูก สำคัญมาก ตอนเรียนใหม่ "Practice makes permanent" อย่าฝึกผิด!

แต่ ให้อนุญาตตัวเองทำผิดได้ กำลังเรียน ไม่เป็นไร! จะง่ายขึ้นตอนทำบ่อย

Eric Steele ที่เขียนหนังสือ testing เหมือนกัน จุดสำคัญที่ผมพลาด:

ส่วนของ TDD ที่ถูกทิ้งคือ planning ที่เกิดก่อนขั้น 1

Tests คือที่ requirements ของ app พบ planned implementation TDD มี hard dependency บนการรู้ว่า app ควรทำอะไร และ assume ว่ามี idea จะทำยังไง

ตอนเริ่มสร้างด้วย Rails เราไม่รู้มาก ใช้เวลามากเขียน experimental code จนได้ result ใกล้เคียงที่หา ลดลงตอนเรียนมาก ผมคิดนี่เป็นเหตุผล TDD เริ่ม 'write a test' ไม่ใช่ 'figure out what you're building' ตอนทดสอบ คุณมี experience มากแล้ว

ผมเพิ่มขั้นตอนก่อน 'Write a test':

  1. Brainstorm, justify, cull requirements หลีกเลี่ยง coding ที่สุด
  2. Plan และ design โค้ดที่ meet requirements
  3. Tinker กับโค้ดตอบคำถามที่ unknown แตทิ้งโค้ดนั้นไว้

คำแนะนำ:

  • โฟกัส planning มากกว่า syntax
  • Minimize tools (ผมพบ minitest/fixtures ช่วยมาก)
  • Practice, practice, practice.

เหมือนทุกอย่าง เริ่ม TDD ต้องการ practice และ self-correct (หรือมีคนแก้ให้) ถ้าทำตามขั้นตอน semi-rigid และ mindful เกี่ยวขั้นตอน TDD จะรู้สึก natural เร็ว