Pytanie:
Czy nieuniknione jest czasami pójście na skróty w tworzeniu oprogramowania?
Randomize
2019-09-08 13:58:08 UTC
view on stackexchange narkive permalink

Z mojego doświadczenia jako programisty zauważyłem sytuacje, w których musisz dostarczyć projekt w bardzo krótkim czasie i przy bardzo małej liczbie zasobów (w tym członków zespołu).

Twój szef nie tak naprawdę nie obchodzi go ani nie rozumie znaczenia testowania (zwłaszcza zautomatyzowanego) i innych aspektów jakości (lub może rozumieć ich znaczenie, ale może jest popychany przez swojego przełożonego, aby je ignorować). Oprócz „rzucenia pracy”, jakie działania byś podjął? Czy wybrałbyś skróty, a jeśli tak, to które? Coś jeszcze?

Szef może rozumieć, jak ważne jest testowanie, ale może jest popychany przez swojego przełożonego do ignorowania go ...
prawda, to jest możliwa sytuacja.Pozwól mi edytować pytanie.
Chociaż naprawdę rozumiem znaczenie twojego pytania, nie jest do końca jasne, na co próbujesz uzyskać odpowiedź. Czy chodzi o to, czy pójście na skróty jest nieuniknione?Pytasz, co zrobić w Twojej sytuacji lub chcesz wiedzieć, jak dostarczyć w krótkim czasie?
90% mojej dzisiejszej pracy polega na zastanawianiu się, które rogi można wyciąć i co spowoduje, że wszystko się zawali.Kierownictwo rzadko dba o właściwy sposób i postrzega to jako przeszkodę w postępie.
Nie sądzę, żeby to pytanie było oparte na opiniach.Istnieje wiele metodologii tworzenia oprogramowania, które oferują obiektywne odpowiedzi na to pytanie.Być może jednak lepiej pasowałby do witryny Project Management SE.
Siedem odpowiedzi:
Gregory Currie
2019-09-08 14:34:44 UTC
view on stackexchange narkive permalink

Tak, rzeczywisty świat znacznie różni się od tego, czego uczysz się na uniwersytecie.

Kiedy pracujesz dla firmy, zadaniem jest osiąganie zysków, a nie dostarczanie oprogramowania zgodnie z wyidealizowanym oprogramowaniem proces rozwoju. W większości przypadków te rzeczy się pokrywają, ale nie zawsze.

Od czasu do czasu „iść na skróty” jest całkowicie uzasadnione.

Chociaż możesz narzekać, że szef tego nie robi Aby zrozumieć znaczenie testowania oprogramowania, mogą narzekać, że nie jesteś świadomy presji biznesowej, która ma wpływ na biznes. Oznacza to, że może być konieczne wysłanie rzeczy bez automatycznego testowania. Uważam, że nie jest sprawiedliwe klasyfikowanie twojego szefa jako ignorującego znaczenie testów. Oczywiście przypisują temu inny stopień ważności niż ty lub są świadomi różnych czynników tego, kim jesteś.

Twoja rola w tej sytuacji polega na zwróceniu uwagi na ryzyko związane z brakiem automatycznych testów swojemu przełożonemu i pozwól im dokonać oceny, mając wszystkie dostępne informacje.

Komentarze nie służą do rozszerzonej dyskusji;ta rozmowa została [przeniesiona do czatu] (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

Tworzenie oprogramowania polega na zarządzaniu ryzykiem w nieznanych lub niepewnych środowiskach, a jednocześnie często wykonuje nowatorskie prace. Kompromisy dotyczące czasu, zakresu i jakości mają miejsce przez cały czas. Ważne jest, aby pomóc interesariuszom zrozumieć wpływ ich decyzji na projekt. Według mnie odpowiedzi typu „rzucić pracę” lub „zgłoś problem” byłyby zarezerwowane dla przypadków, w których decyzje podjęte w ramach projektu miałyby poważne konsekwencje dla życia i bezpieczeństwa, prywatności lub poufności, bezpieczeństwa lub innego „krytycznego czynnika” (co będzie się różnić w zależności od tego, co tworzysz).

Niestety nie ma sprawdzonych metod ani algorytmów służących do podejmowania takich decyzji. Nauka przychodzi z czasem i doświadczeniem. Możesz studiować doświadczenia innych, ale najlepsze doświadczenia należą do Ciebie i pracuj nad kompromisami ze swoimi współpracownikami, aby zrozumieć uzasadnienie procesu podejmowania decyzji. Takie decyzje są bardzo zależne od kontekstu.

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

Tak, dług techniczny jest w wielu przypadkach całkowicie uzasadnioną decyzją; Podobnie jak zaciągnięcie realnego długu jest w wielu przypadkach ważną decyzją biznesową, mającą na celu realizację celów biznesowych. (Zarobimy $ $, gdybyśmy mieli $ do zainwestowania w biznes, więc zaciągnięcie pożyczki za $ i spłata $ $ nadal daje nam przewagę na dłuższą metę.)

Ale moim zdaniem pomijanie testów automatycznych nigdy nie jest dobrą pożyczką . Zaoszczędzony czas jest często wykorzystywany nie w latach czy miesiącach, ale tygodniach. (A spłata staje się wykładniczo trudniejsza.) Nie pomijaj testów, chyba że termin płatności przypada dzisiaj; to nie będzie tego warte.

To jeden z powodów, dla których warto śledzić TDD IMHO. Ponieważ nigdy nie jesteśmy w sytuacji, w której możemy powiedzieć, że funkcja jest „ukończona”, ale „nadal wymaga przetestowania”. To zbyt kuszące dla nietechnicznego menedżera, aby odciąć testy i nazwać je wykonanymi. Mają teraz tylko znacznie lepsze opcje ograniczania zakresu, zmiany harmonogramu dostaw lub, gdy jest to naprawdę konieczne, korzystania z innych rodzajów długu technicznego (nadużywanie zarządzania stanem, pomijanie solidnych architektur itp.).

Ogólnie rzecz biorąc, dług techniczny jest zły.Dług techniczny doprowadził do naruszeń danych zarówno w Anthem, jak i Equifax.Anthem i Equifax to negatywne efekty zewnętrzne, które zmusiły miliony ludzi i podatników do obsługi swoich długów.
Nie ma większego znaczenia, że produkt, który nie dotrzymał terminu i przez to został anulowany, nie miał zadłużenia technicznego, prawda?
@jww Nie widzę żadnych dowodów na poparcie tego, co mówisz.Wydaje się, że naruszenie Anthem zostało spowodowane udanym atakiem phishingowym, a naruszenie Equifax było spowodowane brakiem aktualności z łatami bezpieczeństwa.Nie widzę też żadnych dowodów na to, że podatnicy obciążają rachunek ponad grzywny.Istnieje wiele dobrych przykładów, w których w pewnych szczególnych okolicznościach nie zaciągnięcie długu technicznego przyniosłoby lepszy wynik, ale te dwa to przykłady takich.
Chociaż masz rację, że dług techniczny jest w wielu przypadkach całkowicie uzasadnioną decyzją, a często nawet nieuniknioną, to, co opisuje PO, to * nie * dług techniczny.W szczególności w przypadku długu technicznego * nie * chodzi o ograniczanie możliwości.Dług techniczny ma bardzo specyficzne znaczenie, odnosi się do paragrafu 22, że wiesz, jak system powinien zostać zbudowany dopiero po jego zbudowaniu.Tak więc idea długu technicznego polega na tym, że budujesz system w oparciu o swoje ograniczone rozumienie * tak dobrze, jak to tylko możliwe, stosując wszystkie praktyki dobrej inżynierii oprogramowania *, a następnie, korzystając z wiedzy, którą…
… Zdobytą podczas budowania systemu, przebudowujesz go, aby wyglądał, jakbyś wiedział, jak go zbudować, zanim zacząłeś.Zadłużenie techniczne polega na * wiedzy *, * doświadczeniu * i * zrozumieniu *, które zdobywasz podczas budowania systemu, * nie * na chodzeniu na skróty.
W wielu przypadkach posiadanie produktu do sprzedaży, nawet jeśli jest subobpimal, jest o wiele lepsze niż oczekiwanie na sprzedanie lepszego produktu, ponieważ w przeciwnym razie klient kupi inne produkty.Pomyśl o oryginalnym IBM PC z PC-DOS 1.0, wiele zakrętów zostało wyciętych zarówno w sprzęcie, jak i oprogramowaniu, ale zostało wdrożone we właściwym czasie i widać, że był to udany ruch.Albo pomyśl o pierwszej wersji Windows NT 3.1 i szalonym sukcesie, jaki Microsof odniósł w porównaniu z OS / 2.W niektórych przypadkach gorzej znaczy lepiej.W innych oczywiście nie.
@TeroLahtinen Nie ma znaczenia, że produkt, który miał błąd, który kosztował miliony i życie niektórych ludzi, został wydany na czas.Terminy nigdy nie są tak naprawdę ustalone (chyba że chodzi o asteroidę grożącą zniszczeniem Ziemi lub coś podobnego), są one tak trudne, jak je ustalisz lub tak duże, jak ich pokonanie.I odwrotnie, w przypadku długu technicznego trudniej jest go przypisać, a kierownictwo ma tendencję do niedoceniania go - podczas gdy deweloperzy mają tendencję do przeszacowywania go, częściowo dlatego, że biorą pod uwagę własne samopoczucie, które może nie mieć znaczenia dla firmy.
@JörgWMittag to twoja bardzo wąska osobista definicja, która nie jest powszechnie akceptowana.Z Wikipedii: Dług techniczny (znany również jako dług projektowy lub dług kodowy) to koncepcja w rozwoju oprogramowania, która odzwierciedla domniemany koszt dodatkowej przeróbki spowodowanej wybraniem łatwego (ograniczonego) rozwiązania teraz, zamiast stosowania lepszego podejścia, które zajęłoby więcej czasu.
@FrankHopkins: Nie mam pojęcia, dlaczego myślisz, że byłbym tak arogancki i arogancki, gdybym wymyślił własną definicję terminu, który został ukuty przez samego wielkiego Warda Cunninghama.Definicja, którą sparafrazowałem, jest jego i jest dobrze udokumentowana, na przykład na Wiki: http://wiki.c2.com/?WardExplainsDebtMetaphor Ward stworzył ten film dokładnie * z powodu * takich dezinformacji, jak ta rozpowszechniana przez artykuł na Wikipediizacytowany.
Cytując artykuł (** pogrubione ** podkreślenie moje): „Zależało mi na tym, abyśmy ** gromadzili wiedzę **, którą zrobiliśmy na temat aplikacji w czasie, ** modyfikując program tak, aby wyglądał, jakbyśmy wiedzieli, corobiliśmy to przez cały czas ** i ** wyglądaliśmy tak, jakby było to łatwe w Smalltalk ** ”.oraz „jeśli ** nie udało nam się dostosować naszego programu ** do tego, co ** wtedy uznaliśmy za właściwy sposób ** myślenia o naszych obiektach finansowych” i…
… „Przynajmniej wielu blogerów ** wyjaśniło metaforę długu i pomyliło ją, […] z myślą, że można źle napisać kod z zamiarem wykonania dobrej pracy później ** i myśląc, że to była podstawowaźródło długu. "i „** Nigdy nie opowiadam się za słabym pisaniem kodu **, ale ** opowiadam się za pisaniem kodu odzwierciedlającego twoje obecne rozumienie problemu, nawet jeśli jest to częściowe **”.i …
… „Jeśli chcesz mieć możliwość zadłużenia się w ten sposób, tworząc oprogramowanie, którego nie do końca rozumiesz, ** mądrze jest, aby oprogramowanie to jak najlepiej odzwierciedlało twoją wiedzę **.przyszedł czas na refaktoryzację, ** jasne jest, o czym myślałeś, kiedy to pisałeś **, dzięki czemu łatwiej jest zamienić to na to, co myślisz teraz. "i „Innymi słowy, cała metafora długu, […] i sprawienie, by [robienie] metafory długu działała na Twoją korzyść ** zależy od tego, czy piszesz kod, który jest wystarczająco czysty, aby móc refaktoryzować, gdy zrozumiesz problem**. ”
@JörgWMittag, a jednak z twojego linku definicja jest dokładnie taka, że idziesz teraz szybko i spłacasz ten dług później, poświęcając czas na zrobienie tego dobrze (w tym lekcje, których nauczyłeś się z szybkim i brudnym podejściem).Nie widzę więc sprzeczności w długu technicznym, w tym w cięciu naroży.Wydaje się, że różnica polega na tym, że kod, który piszesz z ograniczoną funkcjonalnością algorytmiczną, powinien nadal być dobrym kodem z perspektywy stylu, tj. Być zdolnym do refaktoryzacji.Oczywiście to początkowe zastosowanie terminu było również specyficzne dla jego projektu i przy powszechnej akceptacji zostało rozszerzone.
@JörgWMittag A czysty kod nie jest wymagany, aby coś było długiem technicznym lub nie, oznacza to po prostu, że bez niego spłacenie go jest znacznie trudniejsze.Przy okazji, ten sam blog / wiki, na którym znajduje się ten film, ma definicję długu technicznego, która ładnie pasuje do ogólnej definicji, która jest znacznie szersza niż opis z catch-22: http://wiki.c2.com/?TechnicalDebt
@FrankHopkins Wspomniałeś, że „dedlines nigdy nie są naprawiane”.Ktoś dostarczy oprogramowanie do zarządzania ekranami na najbliższą ceremonię otwarcia igrzysk, jak dokładnie ten termin nie jest ustalony?Czasami terminy są rzeczywiście ustalone.Najczęściej dług techniczny to zły pomysł i najczęściej terminy nie są tak sztywne, ale nigdy nie jest to zbyt mocne słowo.
@TeroLahtinen Odpowiedziałem w superlatywach, aby wskazać Twoje superlatywy, ponieważ przekroczenie terminu oznacza generalnie wszystko stracone.W twoim przykładzie każdy przyzwoity zarząd ustaliłby terminy na długo przed ceremonią otwarcia, z dużą ilością czasu buforowego między pierwotnym terminem a faktycznym ostatecznym terminem (ceremonia otwarcia ma miejsce).Rozsądne opóźnienie byłoby kosztowne, ale nie zepsuło całkowicie sytuacji.Fajnie, że doszliśmy do punktu, aby zobaczyć, że zawsze jest to równowaga i obie nie są absolutami, ale ponieważ przez większość czasu jest to „to zależy”.
Seth R
2019-09-08 23:36:03 UTC
view on stackexchange narkive permalink

To, co nazywasz „skrótami”, to w rzeczywistości kompromisy i są nieodłącznie związane z każdym projektem, w każdej dyscyplinie, którą podejmiesz. To jest nieuniknione. W świecie inżynierii istnieje idiom (tak, umieściłem to w komentarzu powyżej): Możesz to zrobić dobrze, możesz to zrobić szybko lub tanio. W najlepszym przypadku możesz wybrać 2, więc musisz podjąć decyzję, które 2 są najważniejsze w danych okolicznościach.

Aby użyć swojej sytuacji jako przykładu, masz mały zespół ( tanio) i napiętym terminie (szybko), więc wynika z tego, że to, co zbudujesz, będzie prawdopodobnie miało wiele błędów i możesz nie dostać się do testów, które chcesz zrobić. To jest decyzja, którą podjął twój menedżer i będzie musiał poradzić sobie z jej konsekwencjami. Chcesz przeprowadzić więcej testów, aby stworzyć lepszy produkt? Będzie musiał albo dać ci więcej czasu (stracić na „szybkich”), albo dodać więcej osób do wykonania testów (stracić „tanio”). To po prostu może nie być opcją dla projektu. To jest nieuniknione.

Więc rzucenie pracy niczego nie rozwiąże, ponieważ ta zasada będzie tam gdziekolwiek pójdziesz. Jedyne, co możesz zrobić, to znaleźć innego pracodawcę, który może kładzie nacisk na inną część triady, ale nawet to będzie się różnić w zależności od projektu. Podejmują decyzje tak, jak Twój obecny menedżer.

Każda decyzja podjęta przeciwko tej triadie będzie miała konsekwencje i ktoś będzie musiał dowiedzieć się, czy są one do przyjęcia. Spowolnienie w tworzeniu lepszego produktu oznacza, że ​​możesz przegapić termin. Dodanie większej liczby osób oznacza, że ​​nie będą pracować nad czymś innym. Zbudowanie go szybko i tanio oznacza poświęcenie więcej czasu na późniejsze wspieranie go (lub życie z tandetnym produktem). W zależności od wymagań każda z tych decyzji może być ważna. Kluczem jest zrozumienie kompromisów, ich znaczenia dla biznesu i upewnienie się, że decydenci je rozumieją. To jedna z najważniejszych umiejętności, jakie możesz posiadać.

Należy również zauważyć, że tak naprawdę nie wiemy nawet * jak * zbudować projekt o wyjątkowo wysokiej jakości.Większość programistów ma większość swojego doświadczenia z taniej i szybkiej strony;projekty wymagające ekstremalnej niezawodności (przychodzi na myśl oprogramowanie Shuttle) są opracowywane zupełnie inaczej, zarówno od zwykłej praktyki, jak i ideałów akademickich.Możemy mieć kilka pomysłów, jak robić rzeczy „dobrze”, ale wydają się one w najlepszym przypadku słabe, aw innych przypadkach wręcz przynoszą efekty odwrotne do zamierzonych, i zazwyczaj nie zostały tak bardzo przetestowane w praktyce, z jakiegokolwiek powodu.
WGroleau
2019-09-08 23:44:35 UTC
view on stackexchange narkive permalink

„Kompromisy” są prawie zawsze wymagane, ale dostarczanie bzdur już nie. Jeśli zostaniesz poproszony o dostarczenie śmieci, rozważ odejście. Lub, jeśli oprogramowanie dotyczy finansów, bezpieczeństwa informacji lub zdrowia, uciekaj . (Bo gdy to się nie powiedzie, zarząd będzie szukał kozłów ofiarnych.)

OP wyraźnie poprosił o rozwiązania, które nie wymagają rezygnacji z pracy.
gnasher729
2019-09-08 20:30:11 UTC
view on stackexchange narkive permalink

Jakie działania należy podjąć: pierwsze to wyjaśnienie przełożonemu, jaki koszt może spowodować skrót dla firmy. W najgorszym przypadku skrót oznacza zagrażanie i prawdopodobnie zabijanie ludzi. Najbardziej nieszkodliwym przypadkiem jest naprawienie problemu w przyszłym tygodniu i nic się nie dzieje. Twój kierownik musi wiedzieć, co to znaczy podjąć świadomą decyzję.

Następną czynnością jest podjęcie kroków, które „naprawią” skrót w razie potrzeby. Czasami nie jest to potrzebne. Czasami piszesz oprogramowanie do jednorazowego użytku i albo działa, albo nie, i możesz zobaczyć, czy zadziałało. W takim przypadku, jeśli oprogramowanie działało, nie ma znaczenia, jakie skróty wybrałeś.

Czasami skróty są uzasadnione. Powiedzmy, że jesteś jedynym programistą, a oprogramowanie musi być gotowe w dniu X. Jeśli jesteś gotowy w dniu X, firma zarabia dużo pieniędzy, wystarczy, aby zatrudnić dwóch kolejnych programistów. Jeśli nie jesteś gotowy w dniu X, firma nie zarabia i tracisz pracę. Najwyraźniej wybierasz skrót. Jeśli wszystko działa dobrze, dwaj dodatkowi programiści mogą więcej niż posprzątać cały bałagan, który powstał po to, by działać szybko.

Dobrze, jeśli możesz nauczyć swojego menedżera, że ​​jeśli Twoje oprogramowanie jest w dobrym stanie, możesz czasami iść na skróty. Możesz być w stanie wykonać pracę, która powinna zająć cztery tygodnie w ciągu tygodnia (ale teraz oprogramowanie jest pomieszane). Ale możesz to zrobić tylko raz, a potem musisz poświęcić trzy tygodnie na sprzątanie. Jeśli nie posprzątasz, następne cztery tygodnie pracy zajmą albo siedem tygodni łącznie ze sprzątaniem, albo cztery tygodnie pozostawiając jeszcze więcej bałaganu, a potem masz kłopoty.

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

Chciałbym podważyć przesłankę twojego pytania.

Kto jest ekspertem w tworzeniu oprogramowania? Ty czy Twój szef? Twój szef zatrudnił cię, ponieważ jesteś ekspertem, profesjonalistą. Automatyczne testowanie jest częścią Twojej pracy. Zachowuj się więc jak profesjonalista i wdrażaj testy automatyczne, jeśli uznasz to za konieczne. Czy Twój szef również decyduje o tym, czy klikniesz, aby przejść do następnej linii, czy użyjesz klawiatury? Czy Twój szef decyduje, czy używasz tabulatorów czy spacji? Twój szef nie ma w tym nic do powiedzenia, chyba że jest też programistą. To samo dotyczy testów automatycznych. Są częścią twojej pracy i twój szef też nie ma w tym nic do powiedzenia.

Jasne, czasami chcesz kompromisów, ale szefowie mogą wybierać tylko funkcje. Mogą również poprosić Cię o szybsze programowanie. Ale tylko Ty, profesjonalista, którego zatrudnili do rozwoju, możesz decydować o kompromisach dotyczących jakości kodu. Twoim zadaniem jest wiedzieć, co sprawia, że ​​programujesz szybciej, a nie ich.

Wspaniale widzieć taką odpowiedź.To takie zrzeczenie się odpowiedzialności za zmuszanie szefa do podejmowania decyzji dotyczących refaktoryzacji i testów.
Otrzymujesz głosy negatywne od tych samych ludzi, którzy powiedzieliby operatorowi dźwigu, gdzie umieścić swoje znaczki (jakkolwiek się nazywają te kwadratowe płaskowyże), pilotowi, który zignoruje listę kontrolną bezpieczeństwa, użytkownikom broni bez dyscypliny spustowej.Naprawdę szkoda, dlaczego my, programiści, w ogóle nauczyliśmy się naszego rzemiosła, skoro jest tak wielu, którzy wiedzą, jak robić to, co powinniśmy zrobić?... ale nadal nie mogę wymienić wkładu w drukarce
Twoje doświadczenie z „szefami” wydaje się ograniczone do niewykwalifikowanych kretynów.Główni inżynierowie są * także * ekspertami i profesjonalistami;różnica polega na tym, że są to profesjonaliści, którzy w zeszłym tygodniu nie ukończyli szkoły, a po drodze mogli nawet zdobyć pewne doświadczenie.
@hobbs To w ich imieniu, główny * inżynier *.Oczywiście inni programiści w Twoim zespole mogą powiedzieć coś o programowaniu.Zwłaszcza jeśli są bardziej doświadczeni niż ty.Są też profesjonalnymi programistami.Szefowie, którzy nie znają naszej branży, nie powinni.Powinni trzymać się swojego zawodu, być szefem.
@Cyonis i bycie szefem to decydowanie, jak wydawać pieniądze i jak radzić sobie z ryzykiem, czyli czy użyć dźwigu, czy po prostu kilku drabin.Jasne, są punkty krytyczne, w których samo korzystanie z drabin staje się szalone (bardzo niebezpieczne), ale ogólnie rzecz biorąc, jego prerogatywą jest zabranie głosu w takich sprawach.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 4.0, w ramach której jest rozpowszechniana.
Loading...