Soru:
Bazen yazılım geliştirmede kısayol kullanmak kaçınılmaz mıdır?
Randomize
2019-09-08 13:58:08 UTC
view on stackexchange narkive permalink

Yazılım geliştirici olarak deneyimime dayanarak, çok kısa bir sürede ve çok az sayıda kaynakla (ekip üyeleri dahil) bir proje teslim etmeniz gereken çalışma durumları buldum.

Patronunuz yok Testin (özellikle otomatikleştirilmiş) ve diğer kalite yönlerinin önemini gerçekten umursamıyor ve anlamıyor (veya bunların önemini anlıyor olabilir, ancak yöneticisi tarafından bunu görmezden gelmeye zorlanıyor olabilir).

"İşten ayrılma" dışında hangi önlemleri alırdınız? Kısayolları kullanır mısın ve evet ise hangileri? Başka bir şey mi var?

Patron test etmenin önemini anlayabilir, ancak yöneticisi tarafından bunu görmezden gelmeye zorlanıyor olabilir ...
doğru, bu olası bir durumdur.Soruyu düzeltmeme izin verin.
Sorunuzun duyarlılığını gerçekten anlasam da, neye yanıt almaya çalıştığınız gerçekten net değil. Kısayol yapmanın kaçınılmaz olup olmadığı hakkında mı?Kendi durumunuzda ne yapacağınızı mı yoksa kısa sürede nasıl teslim edeceğinizi mi öğrenmek istiyorsunuz?
Bugünkü işimin% 90'ı, hangi köşeleri kesebileceğinizi ve hangisinin hepsinin çökmesine neden olacağını bulmayı içeriyor.Yönetim nadiren doğru yolu önemsiyor ve bunu ilerlemenin önünde bir engel olarak görüyor.
Bu sorunun fikir temelli olduğunu düşünmüyorum.Bu soruya objektif yanıtlar sunan bir dizi yazılım geliştirme metodolojisi vardır.Bununla birlikte, Proje Yönetimi SE sitesi için belki daha uygun olacaktır.
Yedi yanıtlar:
Gregory Currie
2019-09-08 14:34:44 UTC
view on stackexchange narkive permalink

Evet, gerçek dünya üniversitede öğretilenden çok farklı.

Bir işletme için çalıştığınızda iş, idealize edilmiş bir yazılıma göre yazılım sunmak değil, kâr etmektir. gelişme süreci. Bu şeyler çoğu zaman birbiriyle örtüşüyor, ancak her zaman değil.

Zaman zaman "köşeleri kesmek" tamamen meşru.

Patronunuzun bunu yapmadığına üzülseniz de ' Yazılım testinin önemini anlarsanız, işi etkileyen ticari baskıların farkında olmadığınızdan şikayet edebilirler. Bu, nesnelerin otomatik test olmadan gönderilmesi gerekebileceği anlamına gelir. Patronunuzu test etmenin önemini görmezden gelmek olarak sınıflandırmanın adil olduğunu sanmıyorum. Açıkçası, buna sizden farklı bir önem derecesi veriyorlar veya ne olduğunuza göre farklı faktörlerin farkında oluyorlar.

Bu durumda sizin rolünüz, yöneticinize otomatik test yapılmaması ile ilişkili riskleri vurgulamaktır. ve eldeki tüm bilgilerle bir karar vermelerine izin verin.

Yorumlar uzun tartışmalar için değildir;bu konuşma [sohbete taşındı] (https://chat.stackexchange.com/rooms/98453/discussion-on-answer-by-gregory-currie-is-it-unavoidable-taking-shortcuts-in-sof).
Thomas Owens
2019-09-08 16:20:56 UTC
view on stackexchange narkive permalink

Yazılım geliştirme, sık sık yeni işler yaparken bilinmeyen veya belirsiz ortamlarda riski yönetmekle ilgilidir. Zaman, kapsam ve kalite konusunda ödün vermek her zaman olur. Yapılacak önemli şey, paydaşların kararlarının proje üzerindeki etkisini anlamalarına yardımcı olmaktır. Bana göre, "işi bırak" veya "düdük çal" yanıtları, proje için alınan kararların yaşam ve güvenlik, mahremiyet veya gizlilik, güvenlik veya başka bir 'kritik faktör' açısından ciddi sonuçlara yol açacağı durumlar için saklanacaktır. (Bu, ne oluşturduğunuza bağlı olarak değişir).

Maalesef, bu kararları vermek için en iyi uygulamalar veya algoritmalar yok. Öğrenme, zaman ve deneyimle gelir. Başkalarının deneyimlerini inceleyebilirsiniz, ancak en iyi deneyimler sizindir ve karar verme sürecinin gerekçesini anlamak için meslektaşlarınızla bu ödünleşmeler üzerinde çalışmak. Bunun gibi kararlar son derece bağlama duyarlıdır.

Kallmanation
2019-09-08 18:29:11 UTC
view on stackexchange narkive permalink

Evet, teknik borç çoğu durumda tamamen geçerli bir karardır; tıpkı gerçek borcun alınması gibi, birçok durumda iş hedeflerini ilerletmek için geçerli bir iş kararıdır. (İşletmeye yatırım yapacak sermayemiz olsaydı $ $ kazanırız, bu nedenle $ 'lık bir kredi almak ve $$'ı geri ödemek uzun vadede bizi yine de önde tutar.)

Ama bence otomatik testleri atlamak asla iyi bir borç değildir . Tasarruf edilen zaman genellikle yıllar veya aylar olarak değil haftalarca kullanılır. (Ve ödemesi katlanarak zorlaşıyor.) Son tarih bugün değilse, testleri atlamayın; buna değmeyecek.

Bu, TDD IMHO'yu takip etmek için bir nedendir. Çünkü o zaman asla bir özelliğin "bittiğini", ancak "yine de test edilmesi gerektiğini" söyleyebileceğimiz bir durumda değiliz. Teknik olmayan bir yönetici için testleri bırakıp bitti diye çağırmak çok cazip. Artık yalnızca kapsamı kısmak, teslimatı yeniden planlamak veya gerçekten gerektiğinde diğer teknik borç türlerini kullanmak (devlet yönetimini kötüye kullanmak, sağlam mimarileri atlamak vb.) İçin çok daha iyi seçeneklere sahipler.

Genel olarak teknik borç kötüdür.Teknik borç, hem Anthem hem de Equifax veri ihlallerine yol açar.Anthem ve Equifax, milyonlarca insanı ve vergi mükelleflerini borçlarını ödemeye zorlayan olumsuz dışsallıklardır.
Son teslim tarihini kaçıran ve dolayısıyla iptal edilen ürünün teknik borcu olmaması çok önemli değil, değil mi?
@jww Söylediklerinizi destekleyen herhangi bir kanıt göremiyorum.Anthem ihlali, başarılı bir phishing saldırısından kaynaklanmış gibi görünüyor ve Equifax ihlali, güvenlik yamalarıyla güncel kalmamaktan kaynaklanıyor gibi görünüyor.Ayrıca, vergi mükelleflerinin cezaları ödediğine dair herhangi bir kanıt göremiyorum.Bazı özel durumlarda, teknik borca girmemek daha iyi sonuçlara yol açacak pek çok iyi örnek vardır, ancak bu ikisi bunun örnekleridir.
Teknik borcun birçok durumda mükemmel bir şekilde geçerli bir karar olduğu ve hatta çoğu zaman kaçınılmaz olduğu konusunda haklı olsanız da, OP'nin tanımladığı şey teknik borç * değil *.Özellikle, teknik borç, köşeleri kesmekle ilgili * değil *.Teknik borcun çok özel bir anlamı vardır, sadece bir sistemin inşa edildikten sonra nasıl inşa edilmesi gerektiğini bildiğiniz Catch-22'ye atıfta bulunur.Öyleyse, teknik borç fikri, sistemi, sınırlı anlayışınıza * dayalı olarak, olabildiğince iyi, iyi yazılım mühendisliğinin tüm uygulamalarını izleyerek * ve sonra sizin bilginizi kullanarak inşa etmenizdir.
… Sistemi kurarak kazandınız, başlamadan önce nasıl inşa edeceğinizi zaten biliyormuşsunuz gibi görünmesi için onu yeniden düzenlersiniz.Teknik borç, sistemi kurarken kazandığınız * bilgi *, * deneyim * ve * anlayışla ilgilidir, köşeleri kesmekle ilgili değil *.
Çoğu durumda, bir ürünü yetersiz olsa bile satmak için bulundurmak, bekleme süresinden çok daha iyidir ve daha iyi bir ürün satar, çünkü başka bir şekilde müşteri diğer ürünleri satın alır.PC-DOS 1.0'a sahip orijinal IBM PC'yi düşünün, hem donanım hem de yazılımda birçok köşe kesildi, ancak doğru zamanda piyasaya sürüldü ve bunun başarılı bir hareket olduğunu görebilirsiniz.Veya Windows NT 3.1'in ilk sürümünü ve Microsof'un OS / 2 ile karşılaştırdığı vahşi başarıyı düşünün.Bazı durumlarda daha kötüsü daha iyidir.Tabii diğerinde değil.
@TeroLahtinen Milyonlarca cana mal olan ve bazı canlara mal olan bir ürünün zamanında piyasaya sürülmesi önemli değil.Son tarihler asla tam olarak sabitlenmez (dünyayı yok etmekle tehdit eden bir asteroidle ilgili olmadığı sürece), bunlar sadece sizin yaptığınız kadar zor veya maliyetleri düşürmek kadar.Teknik borcun tam tersi, atfedilmesi daha zordur ve yönetim onu hafife alma eğilimindeyken, geliştiriciler bunu aşırı tahmin etme eğilimindeyken, kısmen de şirket için önemli olmayan kendi refahlarını hesaba katıyorlar.
@JörgWMittag bu sizin çok dar kişisel tanımınızdır ve genel olarak kabul edilen değildir.Wikipedia'dan: Teknik borç (tasarım borcu veya kod borcu olarak da bilinir), daha uzun sürecek daha iyi bir yaklaşım kullanmak yerine şimdi kolay (sınırlı) bir çözümün seçilmesinin neden olduğu ek yeniden çalışmanın zımni maliyetini yansıtan bir yazılım geliştirme konseptidir.
@FrankHopkins: Büyük Ward Cunningham tarafından uydurulmuş bir terim için kendi tanımımı bulacak kadar küstah ve küstah olacağımı neden düşündüğün hakkında hiçbir fikrim yok.Başka sözlerle açıkladığım tanım ona aittir ve örneğin Wiki'de iyi belgelenmiştir: http://wiki.c2.com/?WardExplainsDebtMetaphor Ward bu videoyu tam olarak * çünkü * Wikipedia makalesi tarafından yayılan yanlış bilgilerden *alıntı.
Makaleden alıntı yaparak (** kalın ** vurgu benim): "Uygulama hakkında yaptığımız ** öğrendiklerimizi biriktirmemiz ** benim için önemliydi ** programı, neyi biliyormuşuz gibi görünecek şekilde değiştirerek **başından beri yapıyoruz ** ve ** Smalltalk'ta ** yapmak kolaymış gibi görünmek **. "ve "** programımızı ** bizim ** ile uyumlu hale getirmeyi başaramazsak **, o zaman ** mali hedeflerimiz hakkında düşünmenin doğru yolu olduğunu anladık" ve…
… "En azından ** birçok blogcu borç metaforunu açıkladı ve bunu, […], daha sonra iyi bir iş yapma niyetiyle kötü bir şekilde kod yazabileceğiniz fikriyle ** ve bunun birincil olduğunu düşünerek karıştırdı.borç kaynağı. "ve "** Ben hiçbir zaman kötü bir şekilde kod yazmaktan yanayım **, ancak ** kısmi olsa bile bir soruna ilişkin mevcut anlayışınızı yansıtacak kod yazmaktan yanayım **."ve …
... "tamamen anlamadığınız bir yazılım geliştirerek bu şekilde borca girebilmeyi istiyorsanız, ** bu yazılımın anlayışınızı olabildiğince iyi yansıtmasını sağlamanız akıllıca olur **, böylece öyle olduğundaYeniden düzenleme zamanı, ** yazarken ne düşündüğünüz nettir **, bu da onu şu anki düşüncenizin ne olduğuna göre yeniden düzenlemeyi kolaylaştırır. "ve "Başka bir deyişle, tüm borç metaforu […] ve borç metaforunun sizin yararınız için çalışmasını sağlama **, sorununuzu anlamaya başladığınızda yeniden düzenleme yapabilecek kadar temiz yazma kodunuza bağlıdır**. "
@JörgWMittag ve yine de sizin bağlantınızdan tanım, tam olarak şimdi hızlanmak ve bunu doğru yapmak için zaman ayırarak bu borcu daha sonra geri ödemektir (hızlı ve kirli yaklaşımla öğrendiğiniz dersler dahil).Dolayısıyla teknik borçta köşe kesme dahil herhangi bir çelişki görmüyorum.Yaptığı fark, sınırlı algoritmik işlevsellikle yazdığınız kodun stil açısından iyi bir kod olması, yani yeniden düzenleme yapabilmesidir.Açıktır ki, terimin ilk uygulaması da projesine özeldi ve ortak kabul ile genişledi.
@JörgWMittag Ve temiz kod, bir şeyin teknik borç olması ya da olmaması için bir gereklilik değildir, sadece o olmadan geri ödemenin çok daha zor olduğu anlamına gelir.Btw, bu videoyu barındıran aynı blog / wiki, catch-22 açıklamanızdan çok daha geniş olan genel tanıma güzel bir şekilde uyan bir teknik borç tanımına sahiptir: http://wiki.c2.com/?TechnicalDebt
@FrankHopkins "Tekil hatlar asla düzeltilmez" diyorsunuz.Birisi bir sonraki Olimpiyatların açılış töreninde ekranları yönetmek için bir yazılım teslim edecek, bu süre tam olarak nasıl sabitlenmez?Bazen son tarihler gerçekten sabittir.Çoğu zaman teknik borç kötü bir fikirdir ve çoğu zaman son tarihler o kadar sabit değildir, ancak burada asla çok güçlü bir kelime değildir.
@TeroLahtinen En üstünlük belirten ifadelerinizi belirtmek için en üstünlükle cevap verdim, çünkü kaçırılan bir son tarih genellikle her şeyin kaybedildiği anlamına gelir.Örneğinizde, herhangi bir düzgün yönetim, açılış töreninden çok önce, orijinal son tarih ile gerçek son tarih (açılış töreni yapılır) arasında çok fazla tampon süre ile son tarihler koyacaktır.Makul bir gecikme maliyetli olur ancak durumu tamamen bozmaz.Bunun her zaman dengeleyici bir şey olduğunu ve her ikisinin de mutlak olmadığını, ancak çoğu zaman bir "duruma bağlı" olduğu için bir noktaya gelmemiz güzel.
Seth R
2019-09-08 23:36:03 UTC
view on stackexchange narkive permalink

"Kısayollar" dediğiniz şey, gerçekten değiş tokuşlardır ve bunlar, üstleneceğiniz herhangi bir disiplinde, her projenin doğasında vardır. Kaçınılmazdır. Mühendislik dünyasında bir deyim var (evet, bunu yukarıdaki bir yoruma ekledim): İyi yapabilirsin, hızlı yapabilirsin ya da ucuza yapabilirsin. En iyi durumda, 2'yi seçersiniz, bu nedenle belirli bir durumda hangi 2'nin en önemli olduğuna karar verilmesi gerekir.

Durumunuzu örnek olarak kullanmak için küçük bir ekibiniz var ( ucuz) ve sıkı bir son tarih (hızlı), bu nedenle oluşturduğunuz şeyde muhtemelen çok fazla hata olacaktır ve yapmak istediğiniz testi yapamayabilirsiniz. Bu, müdürünüzün verdiği karardır ve sonuçlarıyla ilgilenmesi gerekecektir. Daha iyi bir ürün oluşturmak için daha fazla test mi yapmak istiyorsunuz? Ya size daha fazla zaman vermeli ('hızlı' kaybetmeli) ya da testi yapmak için daha fazla kişi eklemeli ('ucuza' kaybetmelisiniz). Bunlar proje için seçenekler olmayabilir. Bu kaçınılmazdır.

Yani işinizden ayrılmak hiçbir şeyi çözmez, çünkü bu ilke nereye giderseniz gidin orada olacaktır. Yapabileceğiniz en fazla şey, üçlünün farklı bir kısmına vurgu yapan başka bir işveren bulmaktır, ancak bu bile projeden projeye değişecektir. Tıpkı şu anki yöneticiniz gibi kararlar alıyorlar.

Bu üçlü aleyhine verilecek herhangi bir kararın sonuçları olacak ve birinin bunların kabul edilebilir olup olmadığını çözmesi gerekecek. Daha iyi bir ürün oluşturmak için yavaşlamak, son teslim tarihini kaçırabileceğiniz anlamına gelir. Daha fazla insan eklemek, başka bir şey üzerinde çalışmayacakları anlamına gelir. Hızlı ve ucuza inşa etmek, onu daha sonra desteklemek için (veya kalitesiz bir ürünle yaşamak) daha fazla zaman harcamak anlamına gelir. Gereksinimlere bağlı olarak, bu kararlardan herhangi biri geçerli olabilir. Önemli olan, değiş tokuşları, bunların işletme için ne anlama geldiğini anlamak ve karar vericilerin bunları anladığından emin olmaktır. Sahip olabileceğiniz en önemli becerilerden biri bu.

Ayrıca son derece yüksek kaliteli bir projenin nasıl yapılacağını bile bilmediğimizi belirtmek gerekir.Çoğu programcı, deneyimlerinin çoğunu ucuz ve hızlı tarafta yaşar;Aşırı güvenilirliğe ihtiyaç duyan projeler (akla Shuttle yazılımı gelir) hem yaygın uygulamalardan hem de akademik ideallerden tamamen farklı bir şekilde geliştirilir.İşlerin nasıl "doğru" yapılacağına dair bazı fikirlerimiz olabilir, ancak bunlar en iyi ihtimalle zayıf ve diğer durumlarda düpedüz ters-üretken görünüyorlar ve her ne sebeple olursa olsun pratikte o kadar çok test edilmemişlerdir.
WGroleau
2019-09-08 23:44:35 UTC
view on stackexchange narkive permalink

"Değiş-tokuşlar" hemen hemen her zaman gereklidir, ancak saçmalık sunmak gerekmez. Kendinize çöp dağıtmanız istendiğini fark ederseniz, uzaklaşmayı düşünün. Veya yazılım finans, bilgi güvenliği veya sağlıkla ilgiliyse, bunu gözden kaçırmasını sağlayın. (Çünkü başarısız olduğunda, yönetim günah keçileri arayacak.)

OP, işten ayrılmayı içermeyen çözümleri açıkça istedi.
gnasher729
2019-09-08 20:30:11 UTC
view on stackexchange narkive permalink

Hangi önlemlerin alınması gerekir? Birincisi, yöneticinize bu kısayolun şirkete ne kadar bir maliyet getirebileceğini açıklamaktır. En kötü durumda kısayol, insanları tehlikeye atmak ve muhtemelen öldürmek anlamına gelir. En zararsız durum, sorunu önümüzdeki hafta çözmeniz ve herhangi bir zararın olmamasıdır. Yöneticinizin eğitimli bir karar vermenin ne olduğunu bilmesi gerekir.

Bir sonraki eylem, gerekirse kısayolu "düzelten" adımlar atmaktır. Bazen buna gerek yoktur. Bazen tek bir kullanım için yazılım yazarsınız ve çalışır ya da çalışmaz ve çalışıp çalışmadığını görebilirsiniz. Bu durumda, yazılım işe yaradıysa, hangi kısayolları kullandığınızın önemi yoktur.

Bazen kısayollar haklıdır. Tek geliştirici olduğunuzu ve yazılımın X tarihinde hazır olması gerektiğini varsayalım. X tarihinde hazırsanız, şirket iki geliştirici daha işe almaya yetecek kadar çok para kazanıyor. X tarihinde hazır değilseniz, şirket para kazanmaz ve işinizi kaybedersiniz. Açıkça kısayolu kullanıyorsun. Her şey yolunda giderse, iki ekstra geliştirici, hızlı olması için yaratılan tüm karışıklığı temizlemekten daha fazlasını yapabilir.

İyi olan, yöneticinize yazılımınız iyi durumda ise bazen kısayollar kullanabileceğiniz konusunda eğitim verebilmenizdir. Bir haftada dört hafta sürmesi gereken bir işi yapabilirsiniz (ama şimdi yazılım tamamen karıştı). Ancak bunu yalnızca bir kez yapabilirsiniz, o zaman temizlemek için üç hafta harcamanız gerekir. Temizlik yapmazsanız, sonraki dört haftalık iş ya temizlik dahil yedi hafta sürer ya da dört hafta daha da fazla karışıklık bırakır ve bundan sonra başınız belaya girer.

Belle
2019-09-09 12:34:37 UTC
view on stackexchange narkive permalink

Sorunuzun temeline itiraz etmek istiyorum.

Yazılım geliştirme konusunda uzman kimdir? Sen mi patronun mu? Patronunuz sizi bir uzmansınız, profesyonel olduğunuz için işe aldı. Otomatik test, işinizin bir parçasıdır. Bu nedenle, bir profesyonel gibi hareket edin ve gerekli görürseniz otomatik test uygulayın. Patronunuz ayrıca bir sonraki satıra geçmek için tıklayıp tıklamanıza veya klavyenizi kullanıp kullanmayacağınıza da karar veriyor mu? Patronunuz sekme veya boşluk kullanıp kullanmayacağınıza karar veriyor mu? Bir programcı olmadığı sürece patronunuz bu konuda söz hakkına sahip değildir. Otomatik test için aynı. Onlar sizin işinizin bir parçası ve patronunuzun da bu konuda söz hakkı yok.

Elbette, bazen değiş tokuş yapmak istersiniz, ancak patronlar yalnızca özellikler üzerinde değiş tokuş yapabilirler. Ayrıca daha hızlı denemenizi ve programlamanızı da isteyebilirler. Ancak, yalnızca siz, geliştirmek için işe aldıkları profesyonel, kod kalitesi değiş tokuşlarına karar verebilirsiniz. Sizi neyin daha hızlı kodladığını bilmek sizin işiniz, onlarınki değil.

Böyle bir cevap görmek harika.Patronunuzu yeniden düzenleme ve test etme kararlarını zorlamak büyük bir sorumluluktan kaçınma.
Aynı kişilerden, bir vinç operatörüne damgalarını nereye koyacağını (bu kare platolar ne denirse adlandırılırsa), güvenlik kontrol listesini göz ardı edecek bir pilot, tetik disiplini olmayan silah kullanıcılarını söyleyen kişilerden olumsuz oy alıyorsunuz.Yazık gerçekten, biz geliştiriciler yapmamız gereken şeyi nasıl yapacağımızı bilen bu kadar çok varken neden ticaretimizi öğrenelim ki?... ancak bir yazıcıdaki kartuşu yine de değiştiremezsiniz
"Patronlar" ile olan deneyiminiz vasıfsız aptallarla sınırlı görünüyor.Baş mühendisler * aynı zamanda * uzman ve profesyonellerdir;fark şu ki, onlar geçen hafta okulu bitirmemiş ve bu arada biraz deneyim kazanmış bile olabilirler.
@hobbs Onların adına, baş * mühendis *.Elbette ekibinizdeki diğer geliştiriciler, geliştirme hakkında bir iki şey söylerler.Özellikle senden daha tecrübeliyse.Onlar da profesyonel geliştiriciler.Ticaretimizi bilmeyen patronlar bilmemeli.İşlerine sadık kalmalı, patron olarak.
@Cyonis ve patron olmak, nasıl para harcanacağına ve riskle nasıl başa çıkılacağına, yani bir vinç mi yoksa sadece bir grup merdiven mi kullanılacağına karar vermeyi içerir.Elbette, sadece merdiven kullanmanın çılgınca (yani tehlikeli) hale geldiği devrilme noktaları var, ancak genel olarak bu tür konularda söz sahibi olmak onun ayrıcalığıdır.


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 4.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...