การทดสอบเป็นส่วนที่จำเป็นของระเบียบวิธี Agile หรือไม่?


24

ฉันอยู่กับหลายทีมที่พยายามฝึกวิธีการแบบ Agile และบ่อยครั้งที่ทีมเหล่านี้เป็นศูนย์กลางการทดสอบ การทดสอบเป็นส่วนที่จำเป็นในการฝึกวิธีการ Agile หรือเป็นเพียงการฝึกหัด XP ที่ได้รับการฝึกฝนมาหลายปีหรือไม่?


76
การทดสอบเป็นส่วนที่จำเป็นของการพัฒนาซอฟต์แวร์ที่มีคุณภาพ
Telastyn

2
มีความเป็นไปได้ที่ซ้ำซ้อนของคุณจะคล่องแคล่วโดยไม่ต้องทำการพัฒนา TDD (ทดสอบการพัฒนา) - ถ้าคุณไม่เห็นด้วยก็บอกให้ฉันรู้ ...
Murph

11
ฉันไม่เห็นด้วยกับสำเนา การทดสอบนั้นกว้างกว่า TDD และคำถามที่กว้างขึ้นนั้นมีคำตอบที่ต่างออกไป
Bart van Ingen Schenau

ฉันเห็นด้วยกับ @BartvanIngenSchenau ไม่เพียง แต่การทดสอบกิจกรรมที่กว้างไกลกว่าการทำ TDD เท่านั้น แต่การทดสอบ TDD และการทดสอบหน่วยนั้นไม่เหมือนกัน ฉันประหลาดใจที่มีคนจำนวนมากสับสนสองคนสุดท้าย
Andres F.

มันอาจถูกพับเข้ากับแนวคิดของ "คำจำกัดความของการกระทำ" ซึ่งใน Agile / Scrum หมายความว่ามันขึ้นอยู่กับบริบท เมื่อ Agile ถูกนำไปใช้กับการตลาดการขายและอื่น ๆ พวกเขาไม่มีแนวคิดที่คล้ายคลึงกันในการทดสอบซอฟต์แวร์ แต่ก็ยังมี สำหรับซอฟต์แวร์ "คำจำกัดความที่ทำเสร็จแล้ว" ควรพิจารณาถึงคุณภาพ (ทั้งที่มองเห็นได้และภายในเช่นคุณภาพของรหัส) ของผลลัพธ์สุดท้ายรวมถึงระดับการทดสอบที่ดำเนินการ
rwong

คำตอบ:


33

การทดสอบมีความสำคัญอย่างยิ่งต่อความคล่องแคล่วส่วนใหญ่เป็นเพราะความคล่องตัวนั้นมีพื้นฐานมาจากการปรับปรุงที่เพิ่มขึ้น: ความยากลำบากคือบางครั้งยากที่จะเห็นว่าการเปลี่ยนแปลงในปัจจุบันจะส่งผลต่อโค้ดเก่าของคุณอย่างไร วิธีที่ดีที่สุดที่จะมั่นใจได้ว่าคุณไม่ได้หักอะไรบางอย่างคือการทดสอบและรู้วิธีทดสอบ ด้วยวิธีนี้คุณจะพบข้อผิดพลาดได้ทันทีไม่ลืมเมื่อคุณลืมสิ่งที่คุณทำเมื่อคุณเขียนโค้ดที่ทำลายฟีเจอร์เก่า ๆ

เหตุผลที่แตกต่างจากการเขียนโปรแกรมประเภทการออกแบบบนลงล่างมากขึ้นคือในสภาพแวดล้อมนั้นก) ทดสอบได้ยากมากจนกว่าคุณจะมีผลิตภัณฑ์สำเร็จรูป b) ในทางทฤษฎีคุณกำลังพิจารณาเกณฑ์การออกแบบทั้งหมดในเวลาเดียวกันและ ดังนั้นคุณมีโอกาสน้อยที่จะตัดสินใจออกแบบที่แบ่งการตัดสินใจการออกแบบก่อนหน้า


2
สิ่งสำคัญคือการเปลี่ยนแปลงที่เพิ่มขึ้นในอนาคตไม่ทำลายหน้าที่การทำงานก่อนหน้านี้และการทดสอบหน่วยเป็นวิธีที่ง่ายในการตรวจสอบ

1
ผมว่าการทดสอบเป็นสิ่งจำเป็นอย่างยิ่งสำหรับการพัฒนาซอฟต์แวร์
Andres F.

@Snowman Testing! = ทดสอบหน่วย นอกจากนี้การทดสอบหน่วย! = TDD (ในกรณี ... )
Andres F.

@AndresF จริงฉันปกติคิดว่าการทดสอบหน่วยเป็นส่วนหนึ่งของ Agile ด้วยเหตุผลที่ฉันระบุไว้ข้างต้น การอ่านล้มเหลว

8

คุณอาจพูดถึงการทดสอบอัตโนมัติการทดสอบหน่วยการทดสอบการรวม ฯลฯ สิ่งเหล่านี้สำคัญกว่าการทดสอบด้วยตนเอง (ที่มีผู้ทดสอบและอื่น ๆ ) เพราะมันช้าเกินไปทำให้ไม่สามารถทดสอบการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ของคุณได้ เนื่องจากความคล่องตัวเป็นเรื่องเกี่ยวกับการวนซ้ำขนาดเล็กที่รวดเร็วการมีการทดสอบที่ตรวจสอบความถูกต้องในไม่กี่วินาทีหรือนาทีแทนที่จะเป็นชั่วโมงหรือวันจึงมีประโยชน์มาก


8

หากคุณไม่มีการทดสอบคุณจะรู้ได้อย่างไรว่ารหัสทำงานอย่างไร

แก้ไข:ยืนยันว่าการทดสอบไม่สามารถพิสูจน์ได้ว่ารหัสทำงานล้มเหลวในการกำหนดระยะหนึ่งที่สำคัญคือการทำงาน โปรแกรมทำงานอย่างไร หากคุณรักษาคำศัพท์ที่คลุมเครือนี้จะไม่มีทางพิสูจน์หรือให้แน่ใจว่าโปรแกรมใด ๆ ทำงานได้ เคย

ในอีกทางหนึ่งคุณสามารถกำหนดงานเป็น "พฤติกรรมตามข้อกำหนด" ตอนนี้คุณไม่เพียง แต่สามารถใช้การทดสอบเพื่อแสดงว่าโค้ดทำงานได้ แต่การทดสอบนั้นสามารถทำหน้าที่เป็นข้อมูลจำเพาะที่สามารถเรียกทำงานได้สำหรับพฤติกรรมของโค้ดของคุณ กล่าวอีกนัยหนึ่งชุดทดสอบที่เขียนอย่างดีจะกำหนดความหมายของงาน

วิธีคิดนี้ยังบังคับให้คุณตรวจสอบความหมายของข้อผิดพลาดอีกครั้ง หากรหัสของคุณผ่านการทดสอบทั้งหมดแสดงว่าไม่มีข้อบกพร่องในรหัส หากแม้จะเป็นเช่นนั้นระบบจะไม่ทำงานตามที่ควรระบบจะไม่ระบุพฤติกรรมอย่างถูกต้อง I. e. ข้อผิดพลาดอยู่ในข้อมูลจำเพาะที่กำหนดโดยการทดสอบ

วิธีการในการพัฒนาซอฟต์แวร์นี้จะลดการทำงานของระบบจากการใช้งานซึ่งตามหนังสือวิศวกรรมซอฟต์แวร์ทุกแห่งในโลกเป็นสิ่งที่ดีมาก ในขณะเดียวกันวิธีนี้ช่วยให้มั่นใจได้ว่าการใช้งานของคุณจะสอดคล้องกับข้อมูลจำเพาะการทำงานเสมอ


13
เมื่อลูกค้าหยุดการรายงานข้อผิดพลาด? :-)
gbjbaanb

3
คุณสามารถพิสูจน์ได้ว่าถูกต้อง Clean Room วิศวกรรมซอฟต์แวร์จะคล้ายกับ TDD จริง แต่มันก็เพียงได้สร้างการทดสอบทางสถิติที่สร้างขึ้นจากรายละเอียดและหลักฐานอันโดยอัตโนมัติ
Jörg W Mittag

1
-1 - "การทดสอบแสดงการมีอยู่ไม่ใช่ข้อบกพร่อง"
Telastyn

@Telastyn ไม่มีการทดสอบแสดงให้เห็นว่ามีข้อบกพร่องอยู่ใกล้กับความมั่นใจ ในอีกทางหนึ่งชุดทดสอบที่มีการเขียนเป็นอย่างดีจะให้ข้อมูลจำเพาะเกี่ยวกับการปฏิบัติการของโค้ดของคุณ
Dima

ฉันไม่เห็นด้วย แต่ไม่มีการทดสอบใด ๆ ที่พิสูจน์ว่ารหัสของคุณใช้ได้
Telastyn

5

ไม่ไม่ใช่ "จำเป็น"

หลักการของ Agileพูดอะไรโดยตรงเกี่ยวกับการทดสอบ

แต่แนะนำอย่างยิ่ง

ด้วยความมุ่งมั่นของ Agile ในกระบวนการที่ยั่งยืนการส่งมอบอย่างต่อเนื่อง / เพิ่มขึ้นและคุณภาพของซอฟต์แวร์การทดสอบอัตโนมัติเป็นทางออกที่ดีที่สุดสำหรับโครงการส่วนใหญ่ในปัจจุบัน

ข้อยกเว้น (ตามที่ระบุไว้โดยJörg W Mittag) รวมถึงเครื่องมือในการพัฒนาที่ถูกต้องพิสูจน์ได้ระบบการเขียนโปรแกรมเมตาที่สร้างรหัสและอื่น ๆ แต่ระบบเหล่านี้หายาก


4

ทั้งเปรียวและ XP พยายามหลีกเลี่ยงบิ๊กดีไซน์ขึ้นด้านหน้า ใน BDUF ต้องการจะรวมตัวกันเป็นสเปคอย่างเป็นทางการจะถูกสร้างขึ้นแล้วการเข้ารหัสจะทำแล้วการทดสอบจะทำ สิ่งนี้เหมาะสมสำหรับระบบที่กำหนดภารกิจและชีวิตที่สำคัญเช่นอุปกรณ์การแพทย์ยานสำรวจอวกาศ ฯลฯ

Agile หลีกเลี่ยงโฟลว์นี้เพราะมันใช้งานไม่ได้กับปัญหาที่ไม่ได้กำหนดไว้อย่างดีตัวอย่างเช่น "อะไรก็ตามที่ลูกค้าเปลี่ยนขอในสัปดาห์นี้" เรายังต้องการข้อมูลจำเพาะที่เป็นทางการดังนั้นเราจึงรู้ว่าต้องทำอย่างไรและเมื่อเราทำเสร็จแล้ว แต่แทนที่จะเขียนเอกสารบางประเภทเราใช้รหัสในรูปแบบของการทดสอบอัตโนมัติ

การทดสอบหน่วยอัตโนมัตินั้นรวดเร็วในการเขียนการวิ่งเร็วและแยกส่วน / แยกได้มาก ทำให้พวกเขาเป็นวิธีที่รวดเร็วในการระบุและตรวจสอบข้อกำหนดอย่างเป็นทางการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.