Bir teknik özellik belgesi yazma konusunda müşteri açısından güçlüğün bir kısmı, müşterinin istediği şeyleri müşterinin gerçekten neye ihtiyacı olduğunu tanımlayan bir dile nasıl çevireceğini bilmemesidir. Müşteri bir sistemde belirli bir davranışın olmasını istediğini söylese de, genellikle, yazılımı müşterinin kendileriyle tam olarak uyuşmayacak şekilde çalıştığını görüp kullanana ve deneyimleyene kadar minutilerle pek ilgilenmezler. ihtiyacı vardır.
Müşteriler bir iş sürecini tanımladığında, genellikle pek çok alakalı bilgi bırakır. Genellikle bu bilgi, müşterinin kendi alanı içinde genel olarak anlaşılan ve bu nedenle programlayıcıya verilen ve çoğu zaman aktarılmayan bir süreçle ilgili şeyler ile ilgilidir. Diğer zamanlarda, müşteri aslında bir sistem içindeki tüm sınır koşullarıyla nasıl başa çıkılacağını bilmez ve programcıya rehberlik etmek ister. Bazen hepsi basit bir kullanılabilirlik durumudur, müşteri bir şeylerin bir şekilde çalışmak istediğini düşünürken, ancak daha sonra işlerin farklı şekilde çalışması gerektiği daha netleştiğinde fikrini değiştirir.
Tamam, "programcılar için müşteri ilişkileri 101" den yeterince. Soru, müşterinin bir şartnamenin nasıl tanımlanacağını tanımlamak için işletme tarafından okunabilen bir DSL kullanma konusunda hala bir değeri olup olmadığıdır. Rehberlikle cevabın geçici bir 'evet' olduğuna inanıyorum ve geçici söylüyorum çünkü akla gelecek soru şudur: bir programcıya daha kolay bir şekilde tanımlayabileceğiniz zaman neden bir müşteriyi bir DSL ile donattınız? Bir sistemin nasıl çalışması gerektiğini tanımlamak için müşteriye basit ama zengin bir dil sağlamak?
Bir müşteriye, sistemin nasıl çalışmasını istediğini açıklayan bir dil verdiğinizde, aşağıdaki satırlar boyunca bir şeyler söyleyen ifadelerle karşılaşacaksınız:
"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".
Bu tür bir beyanname, bir gereksinimin çok net bir şekilde tanımlanması ile sona erer, müşterinin sistemin temelde kabul etmesini istediği genel şekli veya ona bakmanın başka bir yolunu da müşterinin sistemin ne olduğunu tanımlamasıdır . Müşterinizden bazı şeyleri biraz daha düşünmesini istiyorsanız, onlardan belki de aşağıdakilere benzer bir dizi ifade kullanarak özelliğin uyması gereken kuralları açıklamalarını isteyebilirsiniz:
"Given 'some system state', When 'some action occurs', Then expect 'some result'
Yine çok net açıklamalar, bu kez nasılsistem davranmalı. Mesele şu ki, bir yazılım geliştiricisinin tüm boşlukları doldurması ve müşterinin yalnızca çevresel olarak farkında olabileceği daha fazla ayrıntıyı ortaya koyma ihtiyacının yerini almayacak. Müşteri programcı-dostu bir formatta özellikleri ve davranışları tanımlamak için programcı tarafından 'eğitilmiş' olabilirken, müşteri gerçekten anlamlı test senaryoları oluşturma veya uygulama sağlama becerisine veya bilgisine sahip olmayacaktır. kodu. Bu, OP'nin bahsettiği Martin Fowler makalesinin amacının olduğunu düşünüyorum. Yani evet, yazılımın kendisi müşteri tarafından yazılabilir değildir, ancak yazılımın tanımı kesinlikle - ve IMHO - müşteri tarafından yazılmalıdır. Buna değecekse, Fowler'in makalesini müşterinin bilmemesi gerektiğini söyleyerek okumadım.
Programcıların bazen müşterilerimizin işlerini ve iş süreçlerini anlamada genellikle çok akıllı olduklarını, kesinlikle bizden daha iyi olduklarını unutabildiğimizi hissediyorum. Onlara bir yazılım sistemini nasıl kuracaklarını söyleyen bir programcıları olmadığında, müşteriler genellikle diğerlerine - belki de daha az verimli - kendi özel işletme yönetimi sorunlarını çözme yollarına giderler. Bununla basit veritabanları (Access düşünün) veya elektronik tablolar, hatta elde yazılmış defterler ve bu süreçleri yönetmek için iyi tanımlanmış kurallar ve prosedürler kastediyorum. Birçok müşterinin eksik olması, bir sistemin nasıl çalışması gerektiğini belirlemek yerine araçların nasıl inşa edileceğini ve daha da önemlisi bir sistemin davranış kurallarını çalışanlara ne kadar verimli tanımladığını belirleme aracı değildir.do aslında sistemi oluşturmak için becerilere sahip.
Gerçekten de, yazılabilirlik eksikliği konusunda bir fikir birliği varsa, o zaman senaryolara başlamak ve bunları uygulamak yerine, gerçek testlerden ticari açıdan okunabilir senaryolar oluşturacak bir araçla ilgili bir sorun görür müsünüz?
Ben bu konuyu yanlış yoldan bakıyor düşünüyorum. Bu belgelerin herhangi bir şekilde bir şartnameyi temsil etmesi isteniyorsa, testlerden dokümantasyon üreten bir araçla ilgili büyük bir problem görecektim. Bir senaryoyu test etmek için, onu anlamanız gerekir, bu nedenle senaryo, her ikisi için de bir test tanımlamanız için zaten mevcut olmalıdır. Senaryoyu bir BDD-sözdiziminde tanımlarsanız, daha önce belirlediniz ve böylece senaryoları ancak gerçeklerden sonra gösterebilirsiniz. Diğer taraftan, müşterinin güzel bir programlama dostu DSL'de bir sistemi tanımlamasını sağlayacak bir aracınız varsa ve bu araç bir test paketi olarak kullanılacak kod şablonlarını oluşturmak için kullanılabilirse, Diyelim ki böyle bir araçta büyük değer olacaktı. Müşterinin programcıları denklemden çıkardığını görmeyecek ve BDD tarzında müşterinin isteklerini yerine getirmek ve test kodlu gereksinimler üretmek için gereken çabayı azaltmaya yardımcı olacak ve belki de müşterinin isteklerini daha kolay anlaşılmasını sağlayacaktır. Bununla birlikte, müşterinin ihtiyaçlarını müşterinin isteğinden ayırmasına yardımcı olmak için el altında deneyimli bir yazılım geliştiricinin yerine geçmez.