Частина труднощів щодо того, щоб клієнт написав документ із специфікаціями, полягає в тому, що замовник часто не знає, як перекласти речі, які клієнт хоче, мовою, яка фактично описує те, що потрібно клієнту. Хоча замовник може сказати, що хоче, щоб певна поведінка існувала в системі, вони, як правило, не так переймаються деталями, поки вони не побачили і не використали та не пережили програмне забезпечення, яке працює таким чином, який, як вважає клієнт, не зовсім відповідає їхнім потреби.
Коли клієнти описують бізнес-процес, вони часто залишають безліч відповідної інформації. Часто ця інформація стосується речей про процес, який зазвичай розуміється у конкретному домені замовника і який, таким чином, сприймається як належне і часто не передається програмісту. В інший час замовник насправді не знає, як впоратися з усіма граничними умовами в системі, і шукає керівника для програмування. Іноді це все простий випадок зручності використання: замовник думає, що хоче, щоб щось працювало одним способом, але згодом передумує, коли стає зрозуміліше, що все має працювати інакше.
Гаразд, так достатньо "відносин із клієнтами 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'
Знову дуже чіткі описи, цього разу про те, яксистема повинна поводитися. Вся справа в тому, що це не замінить потребу розробника програмного забезпечення заповнювати всі пробіли, а також дратувати подальші деталі, про які клієнт може знати лише периферійно. Незважаючи на те, що клієнт може бути підготовлений програмістом для опису функцій та поведінки у приємному для програміста форматі, замовник насправді не має навичок чи знань для створення значущих тестових випадків, а також не для забезпечення реалізації код. Це, на мій погляд, пункт статті Мартіна Фаулера, про яку йдеться в ОП. Так, так, саме програмне забезпечення не підлягає замовленню, але опис програмного забезпечення, безумовно, може бути написано замовником. Що того, що варто, я не читав статті Фаулера, що говорив, що клієнт не повинен '
Я відчуваю, що ми, програмісти, іноді можемо забути, що наші клієнти, як правило, дуже розумні в розумінні свого бізнесу та бізнес-процесів, безумовно, набагато краще, ніж ми. Коли у них немає програміста, який би сказав їм, як створити систему програмного забезпечення, клієнти, як правило, вдаються до інших - можливо менш ефективних - засобів для вирішення конкретних проблем управління бізнесом. Під цим я маю на увазі прості бази даних (думаю, Access) або електронні таблиці, або навіть в рукописних книгах, і з чітко визначеними правилами та процедурами управління цими процесами. Те, що багатьом клієнтам бракує, - це не спосіб визначити, як повинна працювати система, а, як її будувати , і ще важливіше, наскільки ефективно описати правила поведінки системи для людей, якідійсно є навички , щоб фактично побудувати систему.
Якщо дійсно існує консенсус щодо недостатньої писемності, то чи побачите ви проблему з інструментом, який замість того, щоб починати з сценаріїв та інструментувати їх, створив би зручні для бізнесу сценарії з фактичних тестів?
Я думаю, що це дивиться на проблему неправильно. Я б бачив велику проблему з інструментом, який генерує документацію з тестів, якщо ця документація повинна була представляти специфікацію будь-яким способом. Для того щоб перевірити сценарій, вам потрібно його зрозуміти, тому сценарій повинен уже існувати, щоб ви обидва визначили тест для нього. Якщо ви описуєте сценарій у BDD-синтаксисі, то ви його вже вказали, і, таким чином, ви можете зафіксувати сценарії лише після факту. Якщо з іншого боку у вас був інструмент, який дозволив б клієнту описати систему в приємному DSL-програмі, і якщо цей інструмент міг би бути використаний для створення шаблонів коду, який би використовувався як тестовий набір, то я ' Буду сказати, було б велике значення в такому інструменті. Він не бачить, як клієнт виймає програмістів з рівняння, і це допоможе зменшити зусилля, необхідні для прийняття побажань замовника та генерування тестово-кодованих вимог BDD, і, можливо, зробить побажання замовника легше зрозуміти. Однак це не може замінити наявність під рукою досвідченого розробника програмного забезпечення, щоб допомогти клієнту відокремити потреби клієнта від його потреб.