การพัฒนาพฤติกรรมขับเคลื่อนขับเคลื่อนช่วยเพิ่มความชัดเจนเมื่อภาษาธรรมชาติคลุมเครือ?


9

ฉันกำลังสำรวจกรอบการทดสอบของBDDเช่นแตงกวาและฉันพบว่าอยากรู้อยากเห็นเมื่อมีคนพูด

เนื่องจากไฟล์คุณสมบัติเป็นภาษาธรรมชาติอย่างง่ายจะช่วยปรับปรุงความคมชัดและให้วิสัยทัศน์ที่ชัดเจน

แต่ภาษาธรรมชาติไม่ใช่สาเหตุของปัญหาส่วนใหญ่ที่เรามีในวิศวกรรมซอฟต์แวร์ใช่หรือไม่

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

ใช่การแบ่งการทดสอบออกเป็นการกระทำเล็ก ๆ น้อย ๆ ที่ทำได้ง่ายมีเหตุผลและให้ความชัดเจนในระดับหนึ่ง

PS: ฉันไม่ใช่ผู้เชี่ยวชาญและฉันไม่ได้แสดงความคิดเห็นที่นี่ ฉันแค่อยากรู้อยากเห็นที่จะเข้าใจแนวคิด


1
คำถามที่ดีมาก ฉันต้องบอกว่าฉันไม่เคยเห็นสิ่งต่าง ๆ เช่นแตงกวาเสนองานในทางปฏิบัติ ภาษาธรรมชาติไม่เหมาะสมสำหรับงานด้านเทคนิคที่แม่นยำเช่นการระบุการทดสอบ
Andres F.

การใช้ภาษาของ BDD นั้นมีจุดประสงค์เพื่อสะท้อนภาษาที่มีอยู่ของโดเมนธุรกิจซึ่งควรจะไม่น่าสนใจสำหรับธุรกิจ บทความของ Wikipedia ระบุไว้ในตอนต้นของข้อความ
Martin Spamer

คำตอบ:


8

คุณถูก. BDD ไม่ได้กำจัดปัญหาเกี่ยวกับความคลุมเครือทางภาษา - ไม่ใช่เลย ตามที่คนอื่น ๆ ชี้ให้เห็นตัวอย่างที่ได้รับการแปลจะต้องจับคู่โดยการกำหนดอย่างถูกต้อง แต่สิ่งนี้ไม่ได้แก้ไขปัญหาความกำกวมพื้นฐาน

ทีนี้ทำไม BDD ถึงมีค่าถึงแม้ว่าจะไม่ได้แก้ปัญหานี้ มีสาเหตุบางประการและรายการนี้ไม่สมบูรณ์

ความคลุมเครือยังไม่ได้รับการแก้ไข

นี่ไม่ใช่เหตุผลที่สนับสนุน BDD หรือต่อต้านมัน แต่เมื่อคุณเปรียบเทียบกับแนวทางอื่น ๆ เช่นเรื่องราวของผู้ใช้หรือความต้องการแนวทางการพัฒนา SW ทั้งหมดนั้นประสบกับความคลุมเครือทางภาษาเมื่อพวกเขาเริ่มต้นในทิศทางเดียวหรืออีกวิธีหนึ่งด้วยสูตรภาษาธรรมชาติ

ในทางเทคนิคแล้วปัญหาของความคลุมเครือทางภาษานั้นได้รับการแก้ไขด้วยภาษาที่ประดิษฐ์ขึ้นเช่นlojbanแต่จากนั้นอีกครั้งลูกค้าและนักพัฒนาของคุณจะไม่รู้ภาษานั้น

ภาษาที่แพร่หลาย

BDD ไปด้วยกันกับความคิดของภาษาที่แพร่หลาย ความสามารถในการระบุสถานการณ์ร่วมกับลูกค้าผู้ทดสอบและนักพัฒนาทั้งหมดทำให้ BDD ได้เปรียบเหนือแนวทางอื่น ๆ

พิจารณาวิศวกรข้อกำหนดดั้งเดิมที่เขียนข้อกำหนดทั้งหมดลงไป เมื่อคุณเป็นผู้ทดสอบหรือลูกค้าได้รับเอกสาร 300 หน้าที่เต็มไปด้วยข้อกำหนดในการตรวจสอบคุณจะมีปัญหาเร่งด่วนมากกว่าคำศัพท์ที่ใช้ในนั้น

เรื่องราวของผู้ใช้นั้นทำได้ดีกว่านี้เล็กน้อยเนื่องจากพวกเขายังรวมผู้มีส่วนได้ส่วนเสียทั้งหมดไว้ในการสร้าง ในแง่ของภาษาที่แพร่หลายฉันจะไม่พูดว่า BDD หรือเรื่องราวของผู้ใช้ดีกว่า - แม้ว่าพวกเขาจะแตกต่างกันในประเด็นถัดไปอย่างมีนัยสำคัญ

การตรวจสอบได้

ลักษณะสำคัญของ BDD คือข้อกำหนดของคุณสามารถใช้งานได้จริง (ผ่าน Cucumber หรือสิ่งที่คล้ายกัน) ข้อกำหนดและเรื่องราวของผู้ใช้ไม่มีคุณสมบัตินี้ สำหรับฉันเป็นการส่วนตัวที่เป็นจุดขายหลักสำหรับ BDD

ตรงกันข้ามกับข้อกำหนดแบบดั้งเดิม - เราได้บอกวิศวกรข้อกำหนดสำหรับอายุว่าข้อกำหนดของพวกเขาควรจะสามารถทดสอบได้ กระนั้นทุกโครงการเห็นกรณีที่ผู้ทดสอบเส้นหนึ่งรู้ว่าพวกเขาไม่รู้ว่าจะทดสอบข้อกำหนดที่แน่นอนได้อย่างไร

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

ในทางกลับกัน BDD จะให้สถานการณ์จำลองการทดสอบที่ปฏิบัติการได้โดยอัตโนมัติ ไม่มีข้อแก้ตัวและไม่มีวิธีแก้ไขปัญหา (ดีเว้นเสียแต่ว่าคุณจะไม่สนใจเลเยอร์ระบบอัตโนมัติทั้งหมดและเพียงแค่เขียนสถานการณ์สำหรับบทกวีแฟนซี)

โดยทั่วไป Test First เป็นหลักการที่ได้รับรางวัลมากในทุกขั้นตอนของการพัฒนาซอฟต์แวร์และ BDD เป็นแอพพลิเคชั่นไปสู่ชั้นนอกสุดของการพัฒนา (เมื่อเทียบกับ f.ex. TDD ในระดับหน่วย)

สรุป

โดยสรุป BDD ไม่ยกระดับคุณจากปัญหาความคลุมเครือภาษาธรรมชาติ อย่างไรก็ตามมันช่วยให้คุณจัดการกับปัญหานั้นผ่านจุดสำคัญสองจุด: การเน้นภาษาที่แพร่หลายเพื่อลดความกำกวม (มันจะไม่กำจัดพวกเขาทั้งหมด แต่มันจะช่วยได้มาก!) และบังคับให้คุณเขียนโปรแกรมปฏิบัติการ รายละเอียด ประเด็นหลังคือการช่วยแก้ไขปัญหาความกำกวมส่วนใหญ่เพราะนั่นคือจุดที่ความคลุมเครือเริ่มปรากฏเป็นปัญหาอย่างอื่น


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

4

เมื่อสิ่งที่เขียนใน "ภาษาธรรมชาติ" สิ่งนี้อาจหมายถึงสิ่งต่าง ๆ :

  • นี่คือภาษาอังกฤษอย่างแท้จริง เนื่องจากภาษาอังกฤษเป็นภาษาที่คลุมเครือและไม่แน่นอนมากโหมดอินพุตนี้จึงไม่พอใจในบริบทของการพัฒนาซอฟต์แวร์

  • นี่คือภาษาอังกฤษ แต่มีการกำหนดเงื่อนไขที่เกี่ยวข้องอย่างแม่นยำ ภาษาดังกล่าวใช้ในเอกสารทางกฎหมายหรือข้อความทางคณิตศาสตร์

  • นี่คือภาษาที่เป็นทางการ แต่ภาษานั้นถูกสร้างแบบจำลองอย่างใกล้ชิดหลังจากการประชุมของภาษาธรรมชาติ สิ่งนี้อธิบายภาษาการเขียนโปรแกรมทั้งหมดในระดับหนึ่ง ยิ่งภาษาอังกฤษเป็นภาษาทางการก็จะยิ่งเข้าใจได้ง่ายขึ้นสำหรับผู้อ่านที่ไม่ได้รับการฝึกฝน ตัวอย่างที่โดดเด่นของภาษาการเขียนโปรแกรมที่มีเป้าหมายนี้รวมถึง COBOL และ SQL: select id, name from persons where age > 18ชัดเจนทันที ข้อเสียของภาษาเหล่านี้คือคุณต้องเข้าใจภาษาทางการในการเขียนโค้ดที่ใช้งานได้ นอกจากนี้ภาษาเหล่านี้มักจะมีความละเอียดมาก

DDD แนะนำว่าโครงการใช้ภาษาที่แพร่หลายเพื่ออธิบายโดเมน นี่คือกรณีที่ 2: กำหนดคำที่เกี่ยวข้องเพื่อให้คุณสามารถสื่อสารได้อย่างแม่นยำในภาษาธรรมชาติ

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

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


ขอบคุณสำหรับข้อมูลรายละเอียด ฉันรู้สึกว่าแตงกวาอยู่ในพื้นที่สีเทาระหว่าง case 2 และ case 3 ซึ่งต่างจาก SQL ที่คุณไม่สามารถมี "Free Will" และติดกับไวยากรณ์ที่เป็นทางการที่เข้มงวด สำหรับความรู้ที่ จำกัด ของฉันไม่อนุญาตให้ใช้รูปแบบข้อความใด ๆ หลังจากคำหลัก "ที่ได้รับ", "เมื่อ" สำหรับสถานการณ์ อาจจะง่ายเหมือน แต่ฉันมาจากประเทศที่ไม่ใช่ภาษาอังกฤษและเป็นไปได้ยากที่จะทำให้ผู้คนให้ข้อมูลตัวอย่างที่แม่นยำ
Raghuram8892

1
ใช่คุณสามารถใส่สิ่งที่คุณต้องการหลังจากที่Given/ When/ Thenแต่) คุณและทีมงานกำหนดได้อย่างแม่นยำว่าหมายความว่าและ b) คุณกำหนดความหมายใน matchers ในรหัสคือภาษาที่เป็นทางการ
Jörg W Mittag

0

@ Raghuram8892 ข้อความหลังคำหลักที่ระบุ / เมื่อ / แล้ว / และต้องตรงกับ "ตัวอย่าง" มิฉะนั้นขั้นตอนจะล้มเหลวตามที่ไม่ได้กำหนดหรือ "รอดำเนินการ" เช่นนี้จะตกอยู่ในกรณีที่ 3

เกี่ยวกับ "ภาษาอังกฤษ", แตงกวาและภาษาของมัน, Gherkin ได้รับการออกแบบสำหรับการใช้งานระหว่างประเทศ คุณสามารถเรียกใช้คำสั่งcucumber --i18n helpเพื่อดูรายการภาษาที่รองรับในปัจจุบันและcucumber --i18n $CODEเพื่อดูคำหลักสำหรับรหัสภาษาเฉพาะ ตัวอย่างเช่นcucumber --i18n eoให้คำหลักสำหรับภาษา

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