หลักการสำคัญในการเปลี่ยนแปลง
Transformation Priority Premise ( TPP ) เป็นแนวทางการเขียนโปรแกรมที่พัฒนาโดยRobert C. Martin (Uncle Bob) เพื่อปรับปรุงกระบวนการพัฒนาแบบทดสอบนำ (TDD) ให้ง่ายขึ้นและมีประสิทธิภาพมากขึ้นสำหรับโปรแกรมเมอร์
หลักการจัดลำดับความสำคัญของการแปลงข้อมูลระบุว่า ควรเลือกการแปลงข้อมูลที่ง่ายกว่าเป็นอันดับแรก:
[...] การปรับโครงสร้างโค้ด (Refactoring)มีสิ่งที่ตรงกันข้ามกันเรียกว่าการแปลงโครงสร้าง ( Transformation) การปรับโครงสร้างโค้ดเป็นการดำเนินการง่ายๆ ที่เปลี่ยนโครงสร้างของโค้ดโดยไม่เปลี่ยนพฤติกรรม ของโค้ด ส่วนการแปลงโครงสร้างเป็นการดำเนินการง่ายๆ ที่เปลี่ยนพฤติกรรมของโค้ด การแปลงโครงสร้างสามารถใช้เป็นวิธีการเดียวในการทดสอบที่ล้มเหลวในรอบนั้นได้
red/green/refactorการแปลงโครงสร้างมีลำดับความสำคัญ หรือลำดับที่ต้องการ ซึ่งหากรักษาไว้โดยการจัดลำดับการทดสอบ จะช่วยป้องกันการติดขัด หรือการหยุดชะงักเป็นเวลานานในred/green/refactorรอบนั้น
— โรเบิร์ต มาร์ติน , "หลักการลำดับความสำคัญของการเปลี่ยนแปลง", [ 1 ]บล็อกของลุงบ็อบ
แนวทางนี้ช่วยให้โปรแกรมเมอร์สามารถทำสิ่งที่ง่ายที่สุดเท่าที่จะเป็นไปได้เพื่อจุดประสงค์ของการพัฒนาแบบทดสอบนำ (Test-Driven Development) เนื่องจากพวกเขาสามารถอ้างอิงถึงรายการการแปลงได้อย่างชัดเจน และเลือกใช้การแปลงที่ง่ายกว่า (จากด้านบนสุดของรายการ) มากกว่าการแปลงที่อยู่ด้านล่างในรายการในเบื้องต้น
หลักการจัดลำดับความสำคัญของการเปลี่ยนแปลง (Transformation Priority Premise) คือชื่อที่ใช้เรียกโครงสร้างทางความคิดที่นักพัฒนา TDD สร้างขึ้นมาเพื่อสร้างสมดุลให้กับโค้ดของคุณ ไม่ให้เฉพาะเจาะจงเกินไป แทนที่จะเป็นแบบทั่วไป แนวคิดคือ ในแต่ละตัวอย่างที่คุณเพิ่มเข้าไปในชุดทดสอบ คุณจะเลื่อนขึ้นไปในรายการลำดับความสำคัญของการเปลี่ยนแปลง ทำให้โค้ดของคุณมีความเป็นทั่วไปมากขึ้น สามารถจัดการกับกรณีต่างๆ ได้มากขึ้น ในทางตรงกันข้าม ชุดทดสอบของคุณจะมีตัวอย่างมากขึ้น และจะมีความเฉพาะเจาะจงและมุ่งเน้นไปที่ปัญหามากขึ้น ดังนั้น คุณเริ่มต้นด้วยค่าคงที่สำหรับชุดทดสอบแรกของคุณ สำหรับชุดทดสอบถัดไป คุณอาจเปลี่ยนค่าคงที่นั้นเป็น "if" และในขั้นตอนถัดไป คุณอาจเพิ่มลูปเข้าไป ทุกครั้งที่คุณเลื่อนขึ้นไปตามหลักการจัดลำดับความสำคัญ เป้าหมายของการปฏิบัติตามโครงสร้างนี้คือการหลีกเลี่ยงความซับซ้อนโดยไม่ได้ตั้งใจ และเพิ่มเฉพาะความซับซ้อนที่จำเป็นเท่านั้น แต่ละขั้นตอนคือการเปลี่ยนแปลงที่เล็กที่สุดเท่าที่จะเป็นไปได้ เพื่อนำโค้ดไปใช้เฉพาะส่วนที่จำเป็นในการนำตัวอย่างที่ให้ไว้ในชุดทดสอบไปใช้เท่านั้น
— Billie Thompson, Transform Priority Premise - หัวข้อวิศวกรรมซอฟต์แวร์ประจำวัน #21 [ 2 ]
การเปลี่ยนแปลง
แหล่งที่มา: [ 3 ]
- ({} → nil) ไม่มีโค้ดเลย → โค้ดที่ใช้ค่า nil
- (ศูนย์ → ค่าคงที่)
- (ค่าคงที่ → ค่าคงที่+) จากค่าคงที่แบบง่ายไปสู่ค่าคงที่ที่ซับซ้อนกว่า
- (ค่าคงที่ → ค่าสเกลาร์) การแทนที่ค่าคงที่ด้วยตัวแปรหรืออาร์กิวเมนต์
- (ข้อความ → ข้อความต่างๆ) เพิ่มข้อความที่ไม่มีเงื่อนไขเพิ่มเติม
- (ไม่มีเงื่อนไข → ถ้า) การแยกเส้นทางการดำเนินการ
- (สเกลาร์ → อาร์เรย์)
- (อาร์เรย์ → คอนเทนเนอร์)
- (คำสั่ง → การเรียกซ้ำแบบหาง)
- (ถ้า → ในขณะที่)
- (คำสั่ง → ไม่ใช่การเรียกซ้ำแบบหาง)
- (นิพจน์ → ฟังก์ชัน) การแทนที่นิพจน์ด้วยฟังก์ชันหรืออัลกอริทึม
- (การกำหนดค่าให้กับตัวแปร) การแทนที่ค่าของตัวแปร
- (กรณี) การเพิ่มกรณี (หรืออย่างอื่น) ลงในสวิตช์หรือเงื่อนไขที่มีอยู่
โรเบิร์ต มาร์ติน ยังระบุอย่างชัดเจนว่า "น่าจะมีคนอื่นอีก" [ 1 ]และ
ผมคิดว่าลำดับความสำคัญนั้นขึ้นอยู่กับภาษา... ตัวอย่างเช่น ในภาษา Java เราอาจย้าย(if→while)และ(variable→assignment) ไปไว้เหนือ(statement→tail-recursion)เพื่อให้การวนซ้ำมีความสำคัญมากกว่าการเรียกซ้ำ และการกำหนดค่ามีความสำคัญมากกว่าการส่งพารามิเตอร์... เพราะ Java ไม่ใช่ภาษาเชิงฟังก์ชัน
— โรเบิร์ต มาร์ติน โพสต์บล็อก "Fib. The TP Premise" [ 3 ]
วิธีการนำการแปลงไปใช้ในทางปฏิบัติ
Ridlehoover ชี้แจงว่า Transformations ช่วยให้คุณเลือกได้ว่าจะเขียนการทดสอบใดบ้างและเรียงลำดับอย่างไร
[การแปลง] สามารถช่วยเราเลือกได้ว่าควรเขียนการทดสอบใดและควรเขียนในลำดับใด ตัวอย่างเช่น หากเราตัดสินใจเขียนการทดสอบที่ต้องเพิ่มคำสั่ง if ลงในโค้ด การทดสอบนั้นจะต้องใช้การแปลง “ไม่มีเงื่อนไข –> if” เมื่อทราบเช่นนั้น เราก็สามารถลองคิดถึงการทดสอบอื่นๆ ที่อาศัยการแปลงที่อยู่ในลำดับสูงกว่าได้ ผลลัพธ์ที่ดีที่สุดคือ การเขียนการทดสอบโดยใช้ลำดับความสำคัญของการแปลง จะทำให้เราไม่ต้องเจอปัญหาที่การทดสอบหนึ่งทำให้ต้องเขียนเมธอดใหม่ทั้งหมด
— อลัน ริดเดิลฮูเวอร์, หลักการลำดับความสำคัญของการเปลี่ยนแปลง[ 4 ]
Corey Haines สาธิตการเขียนโค้ดสด ( Roman Numerals Kata ) โดยเขาแก้โจทย์การเขียนโค้ดโดยใช้การแปลงรูปทรง (Transformations)
ลิงก์ภายนอก
- บทความต้นฉบับของ Bob Martin เกี่ยวกับ TPP
- ในบทความบล็อกต่อมา บ็อบ มาร์ตินได้ขยายรายการการเปลี่ยนแปลงเพิ่มเติม
- วิดีโอบันทึกการนำเสนอ TPP ครั้งแรกของเขาในงาน NDC (Norwegian Developers Conference) ปี 2011บนYouTube