ส่วนหนึ่งของความยากลำบากในแง่ของลูกค้าที่เขียนเอกสารข้อมูลจำเพาะคือลูกค้ามักไม่รู้วิธีแปลสิ่งที่ลูกค้าต้องการเป็นภาษาซึ่งอธิบายสิ่งที่ลูกค้าต้องการได้อย่างแท้จริง ในขณะที่ลูกค้าอาจบอกว่าพวกเขาต้องการพฤติกรรมบางอย่างที่มีอยู่ในระบบพวกเขามักจะไม่เกี่ยวข้องกับ minutiae จนกว่าพวกเขาจะได้เห็นและใช้และประสบการณ์ซอฟต์แวร์ที่ทำงานในลักษณะที่ลูกค้ารู้สึกไม่ตรงกับของพวกเขา จำเป็น
เมื่อลูกค้าอธิบายกระบวนการทางธุรกิจพวกเขามักจะทิ้งข้อมูลที่เกี่ยวข้องไว้มากมาย บ่อยครั้งที่ข้อมูลนี้เกี่ยวข้องกับสิ่งต่าง ๆ เกี่ยวกับกระบวนการที่เป็นที่เข้าใจกันโดยทั่วไปในโดเมนเฉพาะของลูกค้าดังนั้นจึงได้รับอนุญาตและมักจะไม่ถูกส่งต่อไปยังโปรแกรมเมอร์ ในบางครั้งลูกค้าไม่ทราบวิธีการจัดการกับเงื่อนไขขอบเขตทั้งหมดภายในระบบและกำลังมองหาโปรแกรมเมอร์เพื่อขอคำแนะนำ บางครั้งมันก็เป็นกรณีของการใช้งานง่าย ๆ โดยที่ลูกค้าคิดว่าพวกเขาต้องการบางสิ่งบางอย่างในวิธีเดียว แต่ต่อมาเปลี่ยนใจเมื่อเห็นชัดเจนว่าสิ่งต่าง ๆ ควรทำงานต่างกัน
ตกลงดังนั้นเพียงพอของ "ลูกค้าสัมพันธ์ 101 สำหรับโปรแกรมเมอร์" คำถามคือว่ายังคงมีค่าในการให้ลูกค้าใช้ DSL ที่อ่านได้ทางธุรกิจเพื่อกำหนดวิธีการกำหนดสเปค ฉันเชื่อว่าด้วยคำแนะนำคำตอบคือไม่แน่นอน 'ใช่' และฉันพูดอย่างแน่นอนเพราะคำถามต่อไปที่มาถึงใจคือทำไมคุณต้องให้ลูกค้าสร้าง DSL เมื่อคุณสามารถให้โปรแกรมเมอร์กำหนดคำตอบที่ง่ายกว่า ให้ลูกค้าที่มีความเรียบง่าย แต่ภาษาที่อุดมไปด้วยเพื่อกำหนดวิธีการที่ระบบต้องทำงานหรือไม่
เมื่อคุณให้ภาษาแก่ลูกค้าเพื่ออธิบายว่าพวกเขาต้องการให้ระบบทำงานอย่างไรคุณจะต้องจบลงด้วยข้อความที่พูดอะไรบางอย่างตามบรรทัดของ:
"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".
คำแถลงประเภทนี้ลงท้ายด้วยการอธิบายข้อกำหนดอย่างชัดเจนโดยให้รูปร่างโดยรวมที่ลูกค้าต้องการให้ระบบสันนิษฐานหรือโดยทั่วไปอีกวิธีหนึ่งคือการที่ลูกค้าอธิบายว่าระบบคืออะไร หากคุณต้องการที่จะมีลูกค้าของคุณคิดเกี่ยวกับสิ่งเล็ก ๆ น้อย ๆ อีกแล้วคุณสามารถขอให้อธิบายกฎซึ่งคุณลักษณะต้องปฏิบัติตามโดยใช้หมายเลขของคำสั่งที่คล้ายกันอาจจะไปที่:
"Given 'some system state', When 'some action occurs', Then expect 'some result'
คำอธิบายที่ชัดเจนมากอีกครั้งคราวนี้เกี่ยวกับวิธีการระบบควรทำงาน สิ่งนี้คือสิ่งนี้จะไม่แทนที่ความต้องการสำหรับนักพัฒนาซอฟต์แวร์ในการเติมช่องว่างทั้งหมดและเพื่อหยอกล้อรายละเอียดเพิ่มเติมที่ลูกค้าอาจได้รับรู้เพียงอุปกรณ์ต่อพ่วง ในขณะที่ลูกค้าสามารถ 'ฝึกอบรม' โดยโปรแกรมเมอร์เพื่ออธิบายคุณสมบัติและพฤติกรรมในรูปแบบที่เป็นมิตรกับโปรแกรมเมอร์ แต่ลูกค้าจะไม่มีทักษะหรือความรู้ในการสร้างกรณีทดสอบที่มีความหมาย รหัส. นี่คือฉันคิดว่าจุดของบทความ Martin Fowler ที่ OP ได้อ้างถึง ใช่แล้วตัวซอฟต์แวร์เองนั้นไม่สามารถเขียนได้โดยลูกค้า แต่คำอธิบายของซอฟต์แวร์ที่แน่นอนที่สุดที่สามารถ - และ IMHO ควร - เขียนโดยลูกค้า สำหรับสิ่งที่คุ้มค่าฉันไม่ได้อ่านบทความของ Fowler ว่าลูกค้าไม่ควร '
ฉันรู้สึกว่าโปรแกรมเมอร์ของเราบางครั้งสามารถลืมว่าลูกค้าของเราโดยทั่วไปฉลาดมากในแง่ของความเข้าใจในธุรกิจและกระบวนการทางธุรกิจของพวกเขาดีกว่าที่เราทำอย่างแน่นอน เมื่อพวกเขาไม่มีโปรแกรมเมอร์ที่จะบอกพวกเขาถึงวิธีการสร้างระบบซอฟต์แวร์ลูกค้าส่วนใหญ่มักหันไปใช้วิธีอื่นเพื่อแก้ไขปัญหาการจัดการธุรกิจของพวกเขา ด้วยวิธีนี้ฉันหมายถึงฐานข้อมูลอย่างง่าย (คิดว่า Access) หรือสเปรดชีตหรือแม้กระทั่งในบัญชีแยกประเภทที่เขียนด้วยมือ สิ่งที่ลูกค้าจำนวนมากขาดไม่ได้หมายถึงการกำหนดว่าระบบจำเป็นต้องทำงานอย่างไร แต่ควรสร้างอย่างไรและที่สำคัญกว่านั้นจะอธิบายกฎพฤติกรรมของระบบให้กับคนที่จะมีทักษะในการสร้างจริงระบบ
หากมีความเห็นพ้องต้องกันเกี่ยวกับการขาดความสามารถในการเขียนคุณจะเห็นปัญหากับเครื่องมือที่แทนที่จะเริ่มต้นด้วยสถานการณ์และการใช้เครื่องมือพวกเขาจะสร้างสถานการณ์ที่สามารถอ่านได้ทางธุรกิจจากการทดสอบจริงหรือไม่
ผมคิดว่านี้คือการมองที่ปัญหาทางที่ผิดไปรอบ ๆ ฉันจะดูเป็นปัญหาใหญ่ที่มีเครื่องมือที่สร้างเอกสารจากการทดสอบถ้าเอกสารที่ตั้งใจจะเป็นตัวแทนของสเปคในทางใดทางหนึ่ง ในการทดสอบสถานการณ์คุณต้องเข้าใจดังนั้นสถานการณ์จึงจำเป็นต้องมีอยู่แล้วเพื่อให้คุณกำหนดการทดสอบได้ หากคุณอธิบายสถานการณ์ในรูปแบบ BDD- จากนั้นคุณระบุไว้แล้วและทำให้คุณสามารถใช้ภาพจำลองได้หลังจากข้อเท็จจริง หากในอีกทางหนึ่งคุณมีเครื่องมือที่จะช่วยให้ลูกค้าอธิบายระบบใน DSL ที่เป็นมิตรกับการเขียนโปรแกรมที่ดีและหากเครื่องมือนั้นสามารถใช้ในการสร้างแม่แบบรหัสที่จะใช้เป็นชุดทดสอบได้ d บอกว่าจะมีความคุ้มค่าสูงสุดในเครื่องมือเช่น มันจะไม่เห็นลูกค้าที่เอาโปรแกรมเมอร์ออกจากสมการและมันจะช่วยลดความพยายามในการทำตามความต้องการของลูกค้าและสร้างข้อกำหนดการเข้ารหัสทดสอบในรูปแบบ BDD และอาจทำให้ความต้องการของลูกค้าเข้าใจได้ง่ายขึ้น อย่างไรก็ตามมันจะไม่ใช่สิ่งทดแทนการมีนักพัฒนาซอฟต์แวร์ที่มีประสบการณ์ในมือเพื่อช่วยลูกค้าในการแยกความต้องการของลูกค้าออกจากความต้องการของลูกค้า