Một phần khó khăn trong việc khách hàng viết tài liệu thông số kỹ thuật là khách hàng thường không biết cách dịch những thứ khách hàng muốn sang ngôn ngữ mô tả thực sự những gì khách hàng cần. Mặc dù khách hàng có thể nói rằng họ muốn có một hành vi nhất định tồn tại trong một hệ thống, nhưng họ thường không quá quan tâm đến những chi tiết vụn vặt cho đến khi họ thấy và sử dụng và trải nghiệm phần mềm hoạt động theo cách mà khách hàng cảm thấy không phù hợp với họ nhu cầu.
Khi khách hàng mô tả một quy trình kinh doanh, họ thường để lại rất nhiều thông tin liên quan. Thông thường thông tin này liên quan đến những điều về một quy trình thường được hiểu trong miền cụ thể của khách hàng và do đó được coi là hiển nhiên và thường không được chuyển tiếp đến người lập trình. Vào những lúc khác, khách hàng không thực sự biết cách xử lý tất cả các điều kiện biên trong một hệ thống và đang tìm kiếm người lập trình để được hướng dẫn. Đôi khi tất cả chỉ là một trường hợp đơn giản về khả năng sử dụng, với khách hàng nghĩ rằng họ muốn một cái gì đó hoạt động theo một cách, nhưng sau đó thay đổi suy nghĩ khi mọi thứ trở nên rõ ràng hơn.
Ok, vậy là đủ "quan hệ khách hàng 101 cho lập trình viên". Câu hỏi đặt ra là liệu vẫn còn giá trị khi khách hàng sử dụng DSL có thể đọc được cho doanh nghiệp để xác định cách xác định thông số kỹ thuật. Tôi tin rằng với sự hướng dẫn, câu trả lời là 'có', và tôi nói dự kiến bởi vì câu hỏi tiếp theo xuất hiện là, tại sao bạn lại có một khách hàng tạo ra DSL khi bạn có thể lập trình viên dễ dàng xác định một lập trình viên hơn cung cấp cho khách hàng một ngôn ngữ đơn giản nhưng phong phú để xác định hệ thống cần hoạt động như thế nào?
Khi bạn đã cung cấp cho khách hàng một ngôn ngữ để mô tả họ muốn hệ thống hoạt động như thế nào, bạn sẽ kết thúc với những tuyên bố nói lên điều gì đó:
"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".
Đây là loại tuyên bố kết thúc mô tả một yêu cầu trong một cách rất rõ ràng, cung cấp các hình dạng tổng thể mà khách hàng về cơ bản muốn hệ thống để giả định, hoặc một cách khác để nhìn vào nó là các khách hàng đang diễn tả những gì hệ thống được. Nếu bạn muốn khách hàng nghĩ về những điều xa hơn một chút, thì bạn có thể yêu cầu họ mô tả các quy tắc mà tính năng phải tuân theo bằng cách sử dụng một số câu lệnh tương tự như:
"Given 'some system state', When 'some action occurs', Then expect 'some result'
Một lần nữa mô tả rất rõ ràng, lần này là về cáchhệ thống nên hành xử. Vấn đề là, điều này sẽ không thay thế nhu cầu của một nhà phát triển phần mềm để điền vào tất cả các khoảng trống và để trêu chọc thêm chi tiết mà khách hàng có thể chỉ biết ngoại vi. Mặc dù khách hàng có thể được lập trình viên 'đào tạo' để mô tả các tính năng và hành vi theo định dạng thân thiện với lập trình viên, khách hàng sẽ không thực sự có kỹ năng hoặc kiến thức để tạo ra các trường hợp thử nghiệm có ý nghĩa, cũng như không cung cấp việc triển khai mã. Đây là ý kiến của bài báo Martin Fowler mà OP đã đề cập. Vì vậy, có, bản thân phần mềm không thể ghi được bởi khách hàng, nhưng phần mô tả về phần mềm chắc chắn có thể - và IMHO nên - được viết bởi khách hàng. Để biết giá trị của nó, tôi đã không đọc bài viết của Fowler khi nói rằng khách hàng không nên '
Tôi cảm thấy rằng các lập trình viên của chúng tôi đôi khi có thể quên rằng khách hàng của chúng tôi thường rất thông minh về sự hiểu biết của họ về doanh nghiệp và quy trình kinh doanh của họ, chắc chắn tốt hơn nhiều so với chúng tôi. Khi họ không có một lập trình viên để nói với họ cách xây dựng một hệ thống phần mềm, khách hàng thường dùng đến phương pháp khác - có lẽ kém hiệu quả hơn - để giải quyết các vấn đề quản lý kinh doanh cụ thể của họ. Bằng cách này, tôi có nghĩa là cơ sở dữ liệu đơn giản (nghĩ là Access) hoặc bảng tính, hoặc thậm chí trong sổ cái viết tay, và với các quy tắc và quy trình được xác định rõ để quản lý các quy trình đó. Điều mà nhiều khách hàng thiếu không phải là một phương tiện để xác định thế nào là một hệ thống nhu cầu làm việc, mà là làm thế nào nó nên được xây dựng , và quan trọng hơn như thế nào có hiệu quả mô tả các quy tắc hành vi của một hệ thống với những ngườilàm gì có kỹ năng thực sự xây dựng hệ thống.
Nếu thực sự có sự đồng thuận về việc thiếu khả năng ghi, thì bạn có thấy vấn đề với một công cụ, thay vì bắt đầu với các kịch bản và sử dụng chúng, sẽ tạo ra các kịch bản có thể đọc được từ các thử nghiệm thực tế không?
Tôi nghĩ rằng điều này đang nhìn vấn đề sai cách xung quanh. Tôi sẽ thấy một vấn đề lớn với một công cụ tạo tài liệu từ các bài kiểm tra nếu tài liệu đó được dự định đại diện cho một đặc tả theo bất kỳ cách nào. Để kiểm tra một kịch bản, bạn cần hiểu nó, do đó kịch bản cần phải tồn tại để bạn xác định cả hai thử nghiệm cho kịch bản đó. Nếu bạn mô tả kịch bản theo cú pháp BDD, thì bạn đã chỉ định nó và do đó bạn chỉ có thể ghi lại các tình huống sau thực tế. Mặt khác, nếu bạn có một công cụ cho phép khách hàng mô tả một hệ thống trong DSL thân thiện với lập trình và nếu công cụ đó có thể được sử dụng để tạo các mẫu mã sẽ được sử dụng như một bộ kiểm tra, thì tôi sẽ d nói rằng sẽ có giá trị lớn trong một công cụ như vậy. Nó sẽ không thấy khách hàng đưa các lập trình viên ra khỏi phương trình, và nó sẽ giúp giảm bớt nỗ lực cần thiết để thực hiện mong muốn của khách hàng và tạo ra các yêu cầu được mã hóa thử nghiệm theo kiểu BDD, và có lẽ sẽ khiến cho mong muốn của khách hàng dễ hiểu hơn. Tuy nhiên, nó sẽ không thay thế cho việc có một nhà phát triển phần mềm có kinh nghiệm trong tay để giúp khách hàng tách biệt nhu cầu của khách hàng khỏi mong muốn của khách hàng.