กลับไปหน้าบทความ

อ่าน 2 นาที

หลักการสำคัญในการเปลี่ยนแปลง

การเขียนโปรแกรมสุดขีด/ปรัชญาการพัฒนาซอฟต์แวร์/กระบวนการพัฒนาซอฟต์แวร์/การทดสอบซอฟต์แวร์

Transformation Priority Premise ( TPP ) เป็นแนวทางการเขียนโปรแกรมที่พัฒนาโดยRobert C.

หลักการสำคัญในการเปลี่ยนแปลง

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 ]

  1. ({} → nil) ไม่มีโค้ดเลย → โค้ดที่ใช้ค่า nil
  2. (ศูนย์ → ค่าคงที่)
  3. (ค่าคงที่ → ค่าคงที่+) จากค่าคงที่แบบง่ายไปสู่ค่าคงที่ที่ซับซ้อนกว่า
  4. (ค่าคงที่ → ค่าสเกลาร์) การแทนที่ค่าคงที่ด้วยตัวแปรหรืออาร์กิวเมนต์
  5. (ข้อความ → ข้อความต่างๆ) เพิ่มข้อความที่ไม่มีเงื่อนไขเพิ่มเติม
  6. (ไม่มีเงื่อนไข → ถ้า) การแยกเส้นทางการดำเนินการ
  7. (สเกลาร์ → อาร์เรย์)
  8. (อาร์เรย์ → คอนเทนเนอร์)
  9. (คำสั่ง → การเรียกซ้ำแบบหาง)
  10. (ถ้า → ในขณะที่)
  11. (คำสั่ง → ไม่ใช่การเรียกซ้ำแบบหาง)
  12. (นิพจน์ → ฟังก์ชัน) การแทนที่นิพจน์ด้วยฟังก์ชันหรืออัลกอริทึม
  13. (การกำหนดค่าให้กับตัวแปร) การแทนที่ค่าของตัวแปร
  14. (กรณี) การเพิ่มกรณี (หรืออย่างอื่น) ลงในสวิตช์หรือเงื่อนไขที่มีอยู่

โรเบิร์ต มาร์ติน ยังระบุอย่างชัดเจนว่า "น่าจะมีคนอื่นอีก" [ 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
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Transformation_Priority_Premise&oldid=1324169665 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ หลักการสำคัญในการเปลี่ยนแปลง

Transformation Priority Premise ( TPP ) เป็นแนวทางการเขียนโปรแกรมที่พัฒนาโดยRobert C.

วิธีการนำการแปลงไปใช้ในทางปฏิบัติ

Ridlehoover ชี้แจงว่า Transformations ช่วยให้คุณเลือกได้ว่าจะเขียนการทดสอบใดบ้างและเรียงลำดับอย่างไร

ลิงก์ภายนอก

บทความต้นฉบับของ Bob Martin เกี่ยวกับ TPP ในบทความบล็อกต่อมา บ็อบ มาร์ตินได้ขยายรายการการเปลี่ยนแปลงเพิ่มเติม วิดีโอบันทึกการนำเสนอ TPP ครั้งแรกของเขาในงาน NDC (Norwegian Developers Conference) ปี 2011 บน YouTube ดึงข้อมูลมาจาก " https://en.wikipedia.