ฉันอยู่กับหลายทีมที่พยายามฝึกวิธีการแบบ Agile และบ่อยครั้งที่ทีมเหล่านี้เป็นศูนย์กลางการทดสอบ การทดสอบเป็นส่วนที่จำเป็นในการฝึกวิธีการ Agile หรือเป็นเพียงการฝึกหัด XP ที่ได้รับการฝึกฝนมาหลายปีหรือไม่?
ฉันอยู่กับหลายทีมที่พยายามฝึกวิธีการแบบ Agile และบ่อยครั้งที่ทีมเหล่านี้เป็นศูนย์กลางการทดสอบ การทดสอบเป็นส่วนที่จำเป็นในการฝึกวิธีการ Agile หรือเป็นเพียงการฝึกหัด XP ที่ได้รับการฝึกฝนมาหลายปีหรือไม่?
คำตอบ:
การทดสอบมีความสำคัญอย่างยิ่งต่อความคล่องแคล่วส่วนใหญ่เป็นเพราะความคล่องตัวนั้นมีพื้นฐานมาจากการปรับปรุงที่เพิ่มขึ้น: ความยากลำบากคือบางครั้งยากที่จะเห็นว่าการเปลี่ยนแปลงในปัจจุบันจะส่งผลต่อโค้ดเก่าของคุณอย่างไร วิธีที่ดีที่สุดที่จะมั่นใจได้ว่าคุณไม่ได้หักอะไรบางอย่างคือการทดสอบและรู้วิธีทดสอบ ด้วยวิธีนี้คุณจะพบข้อผิดพลาดได้ทันทีไม่ลืมเมื่อคุณลืมสิ่งที่คุณทำเมื่อคุณเขียนโค้ดที่ทำลายฟีเจอร์เก่า ๆ
เหตุผลที่แตกต่างจากการเขียนโปรแกรมประเภทการออกแบบบนลงล่างมากขึ้นคือในสภาพแวดล้อมนั้นก) ทดสอบได้ยากมากจนกว่าคุณจะมีผลิตภัณฑ์สำเร็จรูป b) ในทางทฤษฎีคุณกำลังพิจารณาเกณฑ์การออกแบบทั้งหมดในเวลาเดียวกันและ ดังนั้นคุณมีโอกาสน้อยที่จะตัดสินใจออกแบบที่แบ่งการตัดสินใจการออกแบบก่อนหน้า
คุณอาจพูดถึงการทดสอบอัตโนมัติการทดสอบหน่วยการทดสอบการรวม ฯลฯ สิ่งเหล่านี้สำคัญกว่าการทดสอบด้วยตนเอง (ที่มีผู้ทดสอบและอื่น ๆ ) เพราะมันช้าเกินไปทำให้ไม่สามารถทดสอบการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ของคุณได้ เนื่องจากความคล่องตัวเป็นเรื่องเกี่ยวกับการวนซ้ำขนาดเล็กที่รวดเร็วการมีการทดสอบที่ตรวจสอบความถูกต้องในไม่กี่วินาทีหรือนาทีแทนที่จะเป็นชั่วโมงหรือวันจึงมีประโยชน์มาก
หากคุณไม่มีการทดสอบคุณจะรู้ได้อย่างไรว่ารหัสทำงานอย่างไร
แก้ไข:ยืนยันว่าการทดสอบไม่สามารถพิสูจน์ได้ว่ารหัสทำงานล้มเหลวในการกำหนดระยะหนึ่งที่สำคัญคือการทำงาน โปรแกรมทำงานอย่างไร หากคุณรักษาคำศัพท์ที่คลุมเครือนี้จะไม่มีทางพิสูจน์หรือให้แน่ใจว่าโปรแกรมใด ๆ ทำงานได้ เคย
ในอีกทางหนึ่งคุณสามารถกำหนดงานเป็น "พฤติกรรมตามข้อกำหนด" ตอนนี้คุณไม่เพียง แต่สามารถใช้การทดสอบเพื่อแสดงว่าโค้ดทำงานได้ แต่การทดสอบนั้นสามารถทำหน้าที่เป็นข้อมูลจำเพาะที่สามารถเรียกทำงานได้สำหรับพฤติกรรมของโค้ดของคุณ กล่าวอีกนัยหนึ่งชุดทดสอบที่เขียนอย่างดีจะกำหนดความหมายของงาน
วิธีคิดนี้ยังบังคับให้คุณตรวจสอบความหมายของข้อผิดพลาดอีกครั้ง หากรหัสของคุณผ่านการทดสอบทั้งหมดแสดงว่าไม่มีข้อบกพร่องในรหัส หากแม้จะเป็นเช่นนั้นระบบจะไม่ทำงานตามที่ควรระบบจะไม่ระบุพฤติกรรมอย่างถูกต้อง I. e. ข้อผิดพลาดอยู่ในข้อมูลจำเพาะที่กำหนดโดยการทดสอบ
วิธีการในการพัฒนาซอฟต์แวร์นี้จะลดการทำงานของระบบจากการใช้งานซึ่งตามหนังสือวิศวกรรมซอฟต์แวร์ทุกแห่งในโลกเป็นสิ่งที่ดีมาก ในขณะเดียวกันวิธีนี้ช่วยให้มั่นใจได้ว่าการใช้งานของคุณจะสอดคล้องกับข้อมูลจำเพาะการทำงานเสมอ
หลักการของ Agileพูดอะไรโดยตรงเกี่ยวกับการทดสอบ
ด้วยความมุ่งมั่นของ Agile ในกระบวนการที่ยั่งยืนการส่งมอบอย่างต่อเนื่อง / เพิ่มขึ้นและคุณภาพของซอฟต์แวร์การทดสอบอัตโนมัติเป็นทางออกที่ดีที่สุดสำหรับโครงการส่วนใหญ่ในปัจจุบัน
ข้อยกเว้น (ตามที่ระบุไว้โดยJörg W Mittag) รวมถึงเครื่องมือในการพัฒนาที่ถูกต้องพิสูจน์ได้ระบบการเขียนโปรแกรมเมตาที่สร้างรหัสและอื่น ๆ แต่ระบบเหล่านี้หายาก
ทั้งเปรียวและ XP พยายามหลีกเลี่ยงบิ๊กดีไซน์ขึ้นด้านหน้า ใน BDUF ต้องการจะรวมตัวกันเป็นสเปคอย่างเป็นทางการจะถูกสร้างขึ้นแล้วการเข้ารหัสจะทำแล้วการทดสอบจะทำ สิ่งนี้เหมาะสมสำหรับระบบที่กำหนดภารกิจและชีวิตที่สำคัญเช่นอุปกรณ์การแพทย์ยานสำรวจอวกาศ ฯลฯ
Agile หลีกเลี่ยงโฟลว์นี้เพราะมันใช้งานไม่ได้กับปัญหาที่ไม่ได้กำหนดไว้อย่างดีตัวอย่างเช่น "อะไรก็ตามที่ลูกค้าเปลี่ยนขอในสัปดาห์นี้" เรายังต้องการข้อมูลจำเพาะที่เป็นทางการดังนั้นเราจึงรู้ว่าต้องทำอย่างไรและเมื่อเราทำเสร็จแล้ว แต่แทนที่จะเขียนเอกสารบางประเภทเราใช้รหัสในรูปแบบของการทดสอบอัตโนมัติ
การทดสอบหน่วยอัตโนมัตินั้นรวดเร็วในการเขียนการวิ่งเร็วและแยกส่วน / แยกได้มาก ทำให้พวกเขาเป็นวิธีที่รวดเร็วในการระบุและตรวจสอบข้อกำหนดอย่างเป็นทางการ