Gereksinimlerin yokluğunda yazılım yazmak sahip olmak için bir yetenek mi, yoksa kaçınmam gereken bir durum mu?


44

Bazı yazılım geliştiricilerin bu konuda çok usta olduklarını ve çoğu zaman soyut bir gereksinimle çalışan bir konsept sunma kabiliyetleri nedeniyle övüldüğünü buluyorum. Açıkçası, bu beni deli ediyor, ve ilerlediğimde "telafi etmekten" hoşlanmıyorum. Bunun sorunlu olduğunu düşünürdüm, ancak bir kayma hissetmeye başladım ve çok az bir yön verildiğinde düşünce (ve programlama) sürecimi ayarlamam gerekip gerekmediğini merak ediyorum. Bu yeteneği bir beceri olarak edinmeye başlamalı mıyım yoksa gereksinimin toplanması ve iş kurallarının birinci öncelik olduğu fikrine bağlı mıyım?


2
Kaçınılması gereken bir durum. Tek şey, yapamazsın. Ve birkaç hafta önce bu konuda rant ...
yannis

64
İkisi de, bir yangın söndürücü kullanmak gibi.
Ben Brocka

3
Plan yapmakta başarısız olursan, başarısızlığı planlarsın. Gereksinim duymadan inşa edilen bu projeler, müşterinin mağazadan çıkarken beklentilerini karşılayabilir veya karşılamayabilir ancak neredeyse kesinlikle kesinlikle bir çok günah gizler, yani ihtiyaçlar değiştiğinde (ve her zaman yaparlarsa) bir acı dünyası bekler. gerekli değişiklikleri yapın. Resmi gereklilikler olmadan yazan programcılar
övülmemeli


5
Bazen müşteri ne istediğini bilmiyor. Ne istediklerini belirlemek için "deneyler" yapmanı istiyorlar. Bir keresinde, tek şartın komisyon ödemek olduğu bir komisyon sistemi yazmıştım. Ödeme komisyonu yüzdesi ve kalemleri, deney komisyon sistemi tecrübesiyle belirlendi.
Gilbert Le Blanc

Yanıtlar:


80

Beceri, gereksinim duymadan yazılım yazmak değildir. Bunun yerine resmi bir gereklilik belgelendirmesi olup olmadığına bakılmaksızın proje sahibinden gereksinimler ortaya çıkarılmalıdır.

İhtiyaçların toplanması kesinlikle birinci önceliğinizdir, ancak tüm müşterinin ihtiyaçlarını önceden belirtmeniz gerekmez. Tabii ki risk, eğer müşterinizle doğru şekilde konuşmayı başaramadıysanız, sistem mimarinizi işe yaramaz hale getiren bazı önemli bilgileri kaçırmanız olabilir, ancak bir ürünü tanımlamak ve hatta almak sıra dışı büyük sistem mimarisi kararlarını mümkün olan en son ana kadar ertelerken, çoğu gelişmenin dışında kalmaktadır. Bu, daha sağlam bir bilgiye sahip oluncaya kadar, ürün geliştirmenizde çok erken bir potansiyel olarak uyumsuz mimariye bağlı kalmamanızı sağlamak için yapılan yalın bir geliştirme yaklaşımıdır. OP'nin sorusunda tanımladığı durumlarda,

Evet, bazen müşterinin gerçekte istediği şeyin kalbine ulaşmak için biraz kristal toplara bakmanız gerekir; bu, prototiplemenin yükseldiği ve yavaş - ve bazen de bazen acı veren - gereksinimlerin ortaya çıkmasını gerektiren gerçekten iyi müşteri ilişkileri becerilerini ve ayrıca karmaşık yazılım fikirleriyle, başlangıçta müşterinin yazılımın gerçekte ne yapması gerektiğinden daha fazla şey bilmediğini fark etme sabrını geliştiriyor olmanız. Çoğu zaman, müşteri, yazılım geliştirme süreci hakkında her zaman gerekli uzmanlığa veya bilgiye sahip olmadığından, gereksinimlerini tanımlamak için uzmanlığınıza bağlı olarak sizi erken arar.


22
“Beceri, gereksinim duymadan yazılım yazmak değildir. Bunun yerine resmi bir gereklilik belgelendirmesi olup olmadığına bakılmaksızın proje sahibinden gereksinimleri ortaya çıkarmaktır.” Bu da çok düşündüğüm bir şey. Neredeyse iyi bir dedektif olmak ya da biriyle röportaj yapmak ve doğru soruları sormak gibi. Bu durumda, "Bana ne yapmak istediğini söyleyebilir misin?" Sorusunu buldum. "Bana nasıl çalışması gerektiğini söyler misin?" den çok daha iyi çalışıyor

5
@BrianReindel Bazen müşterinin düşüncelerinin Zihin-Harita / İkili-Ağacı kombinasyonuyla başladım. "Fikir nedir?" Diye soruyorum, sonra her fikrin müşterinin aklına ne getirdiğini görmek için sözcük ilişkilendirme kullanıyorum. Oradan müşterinin ne düşündüğünü bir resim çiziyorum ve oradan gereksinimleri tanımlamaya başlıyorum. Her gereksinim sorulması gereken soruları uyandırır. Genellikle "Neden" soruları, müşteriye temellerin ötesinde düşünmek için bir fırsat verdikleri için "Ne / Nasıl" sorularından daha iyi bir yanıt verir. Bu temel olarak müşteriye ihtiyaçları ortaya çıkarmak için psikolojiyi kullanma sanatıdır.
S.Robins,

3
Bu becerinin bir kısmı, bir şeyleri yapmanın sırasını bilmek ve yine de parçalanacak şeyleri “mükemmelleştirmek” yapmaktan kaçınmaktır. Bu şekilde, müşteri / yönetici / müşteri ile tanışabilir, onlara şu ana kadar sahip olduklarınızı gösterebilir ve ilerledikçe ayarlama yapabilirsiniz. İlk önce büyük adımların doğru genel yönde nasıl atılacağını bilmeniz gerekir.
David Schwartz

4
Gereklilikleri ortaya çıkarmanın bir yolu, onlara temel bir şey vermek ve hangi bölümlerden şikayet ettiklerini görmek. Örneğin, bir kağıt prototip ( amazon.co.uk/… ) oluşturun ve onlarla etkileşime geçin .
deworde

35

Bu çok belirsiz…

Söyleyebileceğim iki şey:

  1. Mükemmel gereksinimleri bekledikleri için kariyeri kesilmiş çok yetenekli teknik insanlar var. Ya da "Üzgünüz, yapamam, şartlarda yoktu" diye oynuyorlar. Gerçek şu ki, şartların yazılması çok zor. İyi gereksinimler için gereken hassasiyet, çoğu iş insanının yarattığı hiçbir şeye benzemez. Teknoloji ile işletme arasında bir köprü var ve diğerlerini karşılayan insanlar, onlarla tanışmanın% 100'ünü genellikle kaybediyorlar.

  2. Etki alanlarını müşterilerinden daha iyi veya daha iyi öğrenen yazılım adamları var. Bu insanlar% 100 en iyi geliştiriciler olmasa bile, altınlarına değer veriyorlar. Ülkedeki en iyi marka yöneticilerinin nicel pazarlama ihtiyaçlarını tahmin eden yazılım adamları gördüm. Tüm çözümleri kodlamada en iyisi onlar değildi, ancak kahramanlardı çünkü köprüden geçebiliyorlardı.

Hayat siyahla ilgili değil ama beyazlar da. Etrafınıza dar bir kutu çizerseniz, kendinizi sınırlarsınız. Kapak tarafında, teknoloji yaratmak için neyin gerekli olduğunu reddeden bir organizasyon da sınırlıdır. Gri renkte nerede olmayı tercih ettiğini görmek zorundasın.


12

Gereksinimler yolculuktaki adımlardır, vizyon yöndür

Pek çok uygulama için, oldukça ayrıntılı bir teknik şartname hemen hemen ön plandadır; Bunun yerine, bir vizyonla başlayın. Herkes genel resmi anlarsa, şartlar tartışmalar boyunca yerine getirilebilir.

Bir geliştirici olarak, bu tartışmaları gereksinimler arasında dolaşmak için kullanmayı öğrenmelisiniz . Bu, müşterilere bugün kararlarının genel vizyona nasıl uyduğunu düşünmelerini sağlayan sorular yöneltmesi anlamına gelir. Bu daha ayrıntılı tartışmalar ne kadar erken olursa, genel vizyon tutarlı bir tasarıma katılabilecektir.

Bu tartışmaların sonuçlarını bir tür sorun izleyicide izlemelisiniz, böylece diğerleri orijinal tartışmayı kaçırırlarsa onlar hakkında yorum yapabilirler. Ve sizin veya ekibinizin diğer üyelerinin kaydına sahip olmanız için, açıklığa ihtiyacınız olursa tekrar başvurabilirsiniz.

Bu nedenle, vizyona karşı kodlamayı öğrenin, ancak zamanı geldiğinde bu gereksinimler için trol etmeye hazır olun.


"Gereksinimler yolculuktaki adımlar, vizyon yöndür" için +1
kullanıcı

10

Steve Jobs, müşterilerin gelecekteki ürünlerin neye benzemesini istediklerini tam olarak tanımlayamadıklarına inanıyor, bu yüzden bunları sunmak sizin işiniz. Bu nedenle, her zaman özel yazılım sağlamadığınız sürece, resmi özellikleri unutun ve prototipler oluşturarak ve müşterilerin onlarla oynamasına ve ne düşündüklerini size söylemesine izin vererek başlayın. Prototipleme yapan doğru kişiyi koymak zorundasın ve onların yardımına ihtiyaçları var. Bunu deneyimlerden söylüyorum - Ben sezgisel arayüzler oluşturmayı seven prototip maymuyum ve müşterilerin ne istediğini anlayan ve kâğıt üzerinde veya Excel kullanarak bir şeyler açıklayabilen üründe birisiyle birlikte çalıştım.

İkimiz de dahi değiliz, ama biz de aynı şekilde düşünüyoruz - neredeyse kimyaya sahip olduğumuzu ve hangi şeylerin nasıl yapıldığına büyük bir etkisi olduğunu söyleyebilirsiniz. Şimdi, yalnızca orta ila büyük bir ekip, yalnızca ürün geliştiren bir prototip ve kodlayıcı olmayan bir kişiye sahip olabilir, ancak buna değer. Prototipleme, yazılım geliştirmenin en ucuz aşamasıdır, bu nedenle yalnızca kullanıcı arayüzü ve görünen davranışı doğru yapmak mantıklıdır. Code Complete'i okumamıştım ama sanırım o kitapta yazılı gibi bir şey var.

Özellikleri güzel, ama asla mükemmel değiller. Bununla ilgili bir teorem var. Spesifikasyonun tamamlandığını ve aletin herhangi bir arızası olmadığını veya durduğunu kanıtlayamazsınız. :)

Yine de, yazılım şirketleri bu süreçteki kusurlara rağmen yazılımı her zaman gönderiyorlar. Spec asla mükemmel olmayacak. Spec da doğal ve modası geçmiş. Bir prototipin bir spesifikasyonu logaritma tablosu gibidir, tek bir grafiktir - bir teknik özellik aslında bir araç / grafik ile etkileşime girebildiğiniz için basılması gereken sıkıcı bir broşürdür. İlham almak için http://www.i-programmer.info/news/112-theory/3900-a-better-way-to-program.html adresini ziyaret edin .

Şimdi, kıçını kapatmak için bir sözleşmeniz olması gerektiğinde, teknik özellik iyidir. Fakat bir teknik daha önce değil, prototipten sonra gelmelidir. Prototiplerin nasıl ucuz hale getirileceğini bulmak sizin işiniz.


Spec için +1 hiçbir zaman mükemmel olmamakla birlikte, spec için doğal olmayan ve modası geçmiş olan -1. Gereksinimleri, bir müşterinin istediği özelliklerin bir listesi ve müşterinin neye ihtiyacı olduğunu tanımlayan davranışların bir listesi olarak düşünün. Temel olarak , sistemin ne olduğu yerine sistemin nasıl işlediğini tanımlayan bir tür sözleşme . Büyük ön tasarım ve teknik özellikleri problemlidir, ancak bütün büyük problemlerin bir anda yapılması biraz zaman bozulduğunda yapılması daha kolaydır. Prototip yapmak, NE'yi prototip yapmak için bir fikriniz yoksa, nadiren de uygun maliyetlidir. Teknik özelliklerin başlangıç ​​noktası olduğu yer burası ...
S.Robins

... ancak, mutlaka mutlaka taşa yazılmamalıdır. Prototipleme (esasen çivilenme problemleri), spekülasyondan yeni bilgiler besledikleri ve prototipten öğrendiğiniz şeylere uyum sağlaması için spesifikasyonun değiştirilmesine izin verildiğinde en değerlidir. Spesifikasyon olmadan, işleri yaparken size eşlik etme riskini alırsınız, ki bu her zaman müşterinin çıkarına değildir. Müşteriler, ihtiyaçlarını karşılamalarını bekler ve yalnızca geçici olarak da olsa bir şeyi kabul ettiğine dair kanıtlar sunarken daha az sürtünme riski alırsın.
S.Robins

@S. Bir doktor (müşteri) olan Robins, “Her aile üyesi için tahmini kanser riskine sahip bir aile ağacı görmek istiyorum” kadar basit bir şey söyleyebilir. Bu bilgiyi sunmanın ve birden fazla sayfaya yayılan büyük aileler için endişelenmenin pek çok farklı yolu olduğu için, bunu hemen bir özellik olarak belgelendirmeye başlamanın saçma olacağını düşünüyorum. Doktorun ne dediğini anladık, ama daha kesin olmak istiyoruz. Bir dokümanın yay veya nay diyebileceği rasgele sayıları ve adları gösteren etkileşimli bir prototip, aynı şeyi açıklamaya çalışan tamamlanmamış 30 sayfalık bir özellikten daha doğaldır.
Meslek

1
Nereden geldiğini anlıyorum, ancak önerdiğin şey genellikle pahalı bir yaklaşım. Açıkçası prototipin eksiksiz bir ürün olduğunu öne sürmüyorum, ancak herhangi bir etkileşimin olduğu yerde kurduğunuz herhangi bir şeyin geliştirilmesi zaman alacaktır. Daha ucuz bir seçenek beyaz tahtada durmak, birkaç fikir ortaya koymak ve kriterlerinizi daraltmanıza yardımcı olacak hedefli sorular sormaktır. Ayrıca büyük bir teknik özellik oluşturmayı savunmuyorum. Taslak belgeler veya yinelemeli ve gerektiğinde üretilen test kodu şablonları bile ilk önce prototiplemekten daha basit ve ucuzdur.
S.Robins

3

Sık sık bazı durumlarda ben iş şu anda insanlar nasıl tam olarak nasıl çalıştığını keşfetmek, iş analisti olarak görev gerektiğini bulduk düşünüyorum o (genellikle çok farklı şeyler) çalışır ve onlar nasıl gibi işe onu.

Yazılımı oluşturmak için vermeye zorlandığım kararlar konusunda her zaman net olarak başarı buldum. Akıl yürütmemi açıklar, keşfettiğim şeylerle ilgili belgeler yazarım, grafikler hazırlarım ve herkese dağıtırım, vb.

Tüm gereklilikler yerine getirilinceye kadar herhangi bir iş yapmayı reddederek muhtemelen çok iyi bir izlenim bırakmazsınız. Ancak, iyi kalite gereksinimlerini kendiniz toplayarak (gerçeğe dikkat çekmeden), aynı kalite yazılımı hedefine ulaşırsınız.

Ve evet, diğer yorumcuların söylediği gibi, her zaman değişeceğini varsayarak yazılımı oluşturun. Değişim, güvenebileceğiniz bir sabittir. Yazılımınızı daima yeterince esnek ve modüler bir hale getirin, böylece bazı yeni gereksinimler aniden göründüğünde güncellenmesi acı verici olmaz.


3

Eğer başlangıçta bir yazılım geliştiricisi olarak çalışmak istiyorsanız, sahip olmak bir beceridir.

Bir danışmanlık firmasında çalışmak istiyorsanız, ne pahasına olursa olsun kaçınılması gereken bir durumdur. Bunun nedeni, firmanızın spesifikasyon / gereksinimleri ne kadar iyi uyguladığınıza ve müşterinin problemini ne kadar iyi çözemediğinize göre ödenmesidir.

Boş zamanlarınızda eğlenceyi kodluyorsanız, bu sizin aramanız. Boş zaman projelerinizi aramak için nitelikli hissetmiyorsanız, her iki şekilde bir kaç deneyin ve neyin işe yaradığını görün. Ayrıca tek bedene uyan her şeye gerek yok, bazı projelerden biri ya da başka bir yaklaşıma ihtiyaç duyuyor. Genellikle bu projelerden birinde yanlış olanı seçerseniz, oldukça hızlı bir şekilde çözersiniz.


2

İkisindende biraz. Müşterilerinizi tatmin etmeniz gerekir, bu ne istediklerini bilmeniz gerektiği anlamına gelir. Öte yandan, müşteriler gerçekten ne istediklerini iletmekte çok kötüler.

Böylece, müşterilerin ne istediğini bilmediğiniz senaryolardan kaçınmak istersiniz, ancak kaçınılmaz olarak, gereksinimlerin en iyi şekilde "aldatıcı" ve en kötü şekilde aldatıcı olduğu bir senaryoya girersiniz. İyi bir gerçek dünya programcısı uyarlanabilirlik gerektirir.


2

Gereksinim olmadan program yazmak mümkün değildir. 'Merhaba Dünya' bile bile: çıktı üretmek. Yani, UML benzeri bir şey büyük bir yığın şeklinde, resmi gereksinimler hakkında soruyor düşünüyorum. Ve bunlarla ilgili olarak, 2 tür insanla tanıştım:

1) Resmi gereksinimlere ihtiyaç duyan insanlar. Tam olarak ne yapacaklarını ve en iyi şekilde nasıl yapacaklarını söylemeleri gerekir. Onlar gibi cümleler seviyorum argüman B irade çıktı C'yi alarak prosedür A ve söz konusu nefret: Program bizim Bölümün işi daha etkin yapmalıdır . Bunlar genellikle şirket hayvanlarıdır.

2) 1'e göre olan insanlar 1. Ne yapacakları ve nasıl yapacakları söylenmekten nefret ederler, ne yapılması gerektiği söylenmeye bayılırlar. Müşteriyle konuşmayı, söylediklerini analiz etmeyi ve sonra kendi çözümlerini geliştirmeyi seviyorlar. Genellikle serbest çalışanlardır ve şirkete uygun değildir.

Hangisinin daha iyi olduğunu söyleyemem. Her ikisinin de artıları ve kontraları var. Diğer koşullar için yeterli basit.


0

Sen edebilirsiniz DEĞİL geliştirmek operasyonel Gereksinimleri bilmeden yazılımı; ancak, deneyiminizin size Gereksinimlerin muhtemel olduğunu söylediklerini geliştirmede çok iyi bir bıçak olabilir.olmak. Çevik geliştirme, 80:20 Kuralı ve prototip kullanarak Gereksinimlerin 'keşfi' dahil olmak üzere 'sezgisel' tekniklerin bir kombinasyonunu kullanır. Başka bir deyişle, deneyimli bir geliştirme ekibi neye ihtiyaç duyulduğunu en iyi şekilde tahmin eder ve yazılımın bir prototipini oluşturur. 80:20 Kuralı,% 80 doğru olacaklarını söylüyor. Proje paydaşları daha sonra somut prototipi gözden geçirir. Onların geri bildirimleri, Gereksinimleri anlamadaki% 20'lik boşluğu doldurmaya başlar. Bu yüzden, aslında, Agile herhangi bir gereksinim duymadan yazılım yazmakla ilgili değil, daha önce "böyle bir şey mi istiyorsun?" Bu, vakaların% 80'inde, ileriye doğru atlamanıza ve gerçekten gerekli olan şeyleri geleneksel Gereksinimler süreçleri ile yapılan yağmalamadan daha hızlı bir şekilde onaylamanıza izin verecektir.


Çevik sezgi ile ilgili değil, iletişim ile ilgili. Çalışan yazılımları sık sık geri bildirim almak için sunmak, iletişimi teşvik etmek ve müşterinin ihtiyaç duyduğu şeylerin teslimatını değerlendirmektir. Evet, deneyim devreye giriyor, ancak önce müşterinin neye ihtiyacı olduğunu sorarsanız müşterinin ihtiyaç duyduğu şeyi geliştirme olasılığınız daha yüksek. 80:20 denilen kural, müşterinin iş alanını çok iyi tanımadığınız sürece geçerli değildir ve o zaman bile bu 'istatistiği' büyük bir kaşıkla alırdım.
S.Robins

-2

Agile, ihtiyaçların olmadığı durumlarda kod yazdığını söyledi? Manifesto'nun bu şekilde bazı insanlar tarafından yorumlandığını biliyorum ... ama bu doğru değil.


1
Merhaba Trent, ilke olarak yorumunuza katılıyorum (ve insanların geliştirme sürecini bozmak ve "çevik olmak" olarak adlandırmak için Agile'yi nasıl bahane olarak kullandıklarını görmekten de bıktım), bu cevap OP’leri gerçekten ele almıyor Agile ile ilgili olmayan, fakat bunun yerine, gereksinimleri olmayan bir yazılım geliştirmenin bir beceri olup olmadığını soruyor. Belki de bunu bir başkasının cevabına yorum olarak eklemek istemiştiniz?
S.Robins
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.