Nepaprastos TDD ir kodų apžvalgų praleidimo išlaidos

Pinigų spalva - Chrisas Poteris (CC BY 2.0)

Atnaujinimas 2019 m. Sausio 26 d .: Atkreipiau dėmesį, kad teiginys „gamybos klaidos taisymas gali kainuoti 100 kartų daugiau nei klaidos taisymas projektavimo metu“ yra apokrifinis. Aš vis dar palaikau teigiamą IG ir laiką taupančias TDD galias, tačiau jūs turėtumėte tai vertinti kaip subjektyvią nuomonę, o ne mokslinį faktą. Mūsų pramonei reikia geriau rinkti duomenis apie TDD ir kitų kokybės kontrolės priemonių poveikį. Tai būtų puiki tema bendradarbiaujant universitetams ir didelėms programinės įrangos organizacijoms.

Pastaraisiais metais vis daugiau ir daugiau bendrovių manęs paprašė kalbėti apie bandomojo vystymosi (TDD) pranašumus ir pasidalyti patarimais, kaip įgyvendinti produktyvesnį kokybės procesą.

TDD yra automatinių testų rašymo procesas, siekiant įsitikinti, kad kodas veikia prieš rašant diegimą. Jūs rašote testą, žiūrite, kaip jis nepavyksta (raudonas), parašote įgyvendinimą, žiūrite bandymo rezultatą (žalia) ir, jei reikia, pakartokite. Kartokite ciklą, kai sukursite sistemą.

Šis procesas buvo nuodugniai ištirtas ir pasirodė esąs labai naudingas siekiant pagerinti programinės įrangos kokybę. Bet ar žinojai, kad tai taip pat taupo organizacijas daug laiko ir pinigų?

Viena iš pagrindinių priežasčių, dėl kurių vadovai nurodo, kad reikia tiek ilgai laukti TDD, yra išlaidos. Įprasta, kad pradinis projekto kūrimas trunka iki 30% ilgiau, naudojant TDD.

Šie vadovai turi žinoti, kad TDD sumažina gamybos klaidų tankį 40% - 80%, ir tai daro visą skirtumą. Dėl daugiau klaidų gamyboje dramatiškai padidėja priežiūros išlaidos.

Dėl eksponentiškai augančių pertvarkymo, meta darbo (darbo su darbu), atsakomybės pašalinimo, pertraukimų ir galiausiai klientų palaikymo, trikčių šalinimo ir priežiūros išlaidų, gamybos klaidos ištaisymas gali kainuoti 100 kartų daugiau nei klaidos taisymas projektavimo metu. ir daugiau nei 15 kartų daugiau nei taisant klaidą diegimo metu.

Pastaba: ši paraiška buvo užginčyta, tačiau nekyla abejonių, kad programinės įrangos kokybė pagerina kūrėjo produktyvumą. Norėdami gauti išsamesnį supratimą apie turimus duomenis apie programinės įrangos kokybę ir programinės įrangos kokybės įtaką jūsų organizacijai, skaitykite „Programinės įrangos kokybės ekonomika“. Mums reikia daug daugiau programinės įrangos kokybės priemonių tyrimų, kad galėtume priimti labiau pagrįstus sprendimus, kaip valdyti kūrimo komandas.

Santykinės klaidų taisymo išlaidos

Naudodamiesi šiais skaičiais, pažiūrėkime, kokios yra išgalvoto projekto su TDD ir be jo santykinės išlaidos. Projekto įgyvendinimas iš anksto užtruks 1 000 valandų be TDD, neskaičiuojant priežiūros:

Išgalvotame pavyzdyje mes sutaupėme 623 žmogaus valandas arba, jei komanda buvo 4, maždaug mėnesį vystymosi. Jei mokėtume kiekvienam kūrėjui JAV nacionalinį vidurkį (95 tūkst. USD) ir, skaičiuodami nuo atlyginimų vidurkio 30 proc., Kad padengtume išmokas, mes sutaupome beveik 37 000 USD.

Žinoma, tai yra išgalvotas pavyzdys, darantis daugybę prielaidų. Jūsų rida gali skirtis atsižvelgiant į daugybę veiksnių, įskaitant komandos patirtį dirbant su TDD, kitų kokybės priemonių buvimą ar nebuvimą (pvz., Kodo peržiūrą) ir kt.…

Pateiktos prielaidos:

  • Gamybos klaidų be TDD: 100
  • Gamybos klaidų su TDD: 40 (60% mažiau, vidurys tarp 40% - 80%)
  • Vidutinis klaidos ištaisymo laikas įdiegimo (TDD) etape: 1 valanda (šis skaičius naudojamas tik gamybos klaidų taisymo išlaidoms apskaičiuoti)
  • Vidutinis laikas ištaisyti gamybos klaidą: ~ 15 valandų

Žaisti su bet kuriuo iš šių kintamųjų akivaizdžiai pakeis rezultatus. Neabejotina, kad TDD taupo laiką ir pinigus, nes atsižvelgiama į priežiūros išlaidas - daug laiko ir pinigų.

Šio išgalvoto pavyzdžio santykiniai rezultatai man atrodo teisingi, remiantis mano patirtimi su realiais gamybos projektais tiek su, tiek be TDD.

Kodo apžvalgos turi panašų poveikį

Kodo apžvalgos turi panašų poveikį. Tiesą sakant, kai kuriuose tyrimuose nustatyta, kad kodų apžvalgos yra efektyvesnės nei TDD. Remiantis 1988 m. Tyrimu, kiekviena kodo peržiūrai skirta valanda sutaupo 33 valandas priežiūros.

Tai gana nepaprasta, tačiau klaidų pritraukiantys kodų apžvalgų pranašumai nėra tik asmeninė patirtis. Man atrodo, kad automatiniai testai yra kur kas naudingesni nustatant klaidas - kaip paaiškinti nepaprastą kodų peržiūros efektyvumą?

Žinių pasidalinimas. Kai naudojate kodų peržiūras, jūsų komanda ištaiso situaciją, kai kūrėjai naudoja antikinius modelius ir kitą blogą praktiką. Tuo pat metu jie dalijasi veiksmingais modeliais, moko vieni kitus geresnių būdų daryti veiksmus ir moko vieni kitus rašyti labiau skaitomus kodus.

Bendras rezultatas yra tas, kad jūsų jaunesnieji programuotojai greitai pakyla iki protingiausių komandos kūrėjų lygio ir pagerėja visos jūsų komandos greitis. Sunku pervertinti mentorystės kultūros vertę jūsų komandoje.

Nutraukimo kaina

Kodėl gamybos klaidų taisymas kainuoja tiek brangiau? Kadangi klaidą pasiekus gamybą, tai kainuoja daug daugiau nei paprasta klaidos ištaisymo kaina.

Klaidos taisymas gamyboje yra daug brangesnis nei klaidos taisymas kuriant. Norėdami suprasti skirtumo dydį, pirmiausia turite suprasti, kiek kainuoja nutraukti kūrėjo veiklą.

Gamybos klaidų taisymas dažnai reiškia funkcijų kūrimo konteksto ir kadencijos nutraukimą. Kitaip tariant, kūrėjai ištraukiami iš konteksto, kuriame jie šiuo metu dirba, ir perkeliami į klaidos kontekstą, kur reikia laiko, kad būtų įsisavinamas susijęs kodas ir srautas, diagnozuota pagrindinė priežastis, ištaisyta klaida, o tada permąstyti kontekstą to, ką jie dirbo anksčiau.

Kiekvienas kontekstinis jungiklis gali kainuoti iki 20 minučių kūrėjo produktyvumo, tačiau kraujavimas tuo nesibaigia. Programuotojui trukdžius taisyti klaidą greičiausiai atsiras daugiau klaidų kode, kuriame jie dirbo, prieš nutraukdami. „Microsoft Research“ duomenimis, pertraukta užduotis užtrunka maždaug dvigubai ilgiau ir joje yra dvigubai daugiau klaidų nei nenutrūkstamoje užduotyje.

Kitaip tariant, klaidų, išleistų gaminant, taisymo išlaidos nėra vien tik gamybos klaidų taisymo išlaidos. Dėl pertraukimo padidėja dabartinio kūrimo darbo kaina ir atsiranda daugiau klaidų, kurias taip pat reikės taisyti.

Dėl susijusios pastabos, kad daugiafunkcinis darbas yra tikrai bloga idėja. Norėdami būti produktyvūs, kūrėjai turi sutelkti dėmesį į vieną dalyką vienu metu.

Išvada

Kitą kartą kai kas nors pasakys, kad neturi laiko ar biudžeto TDD ar kodų peržiūrai, pasakyk jiems užtikrintai, „tokiu atveju jūs tikrai neturite laiko ar biudžeto, kad praleisti TDD“.

Tolesni žingsniai

Geriau tvarkykite TDD ir jo vaidmenį programinės įrangos kūrimo procese:

  • „5 paplitusios klaidingos nuomonės apie TDD ir padalinių testus“
  • „Vieneto ir funkcinio vs integracijos testai“
  • „5 klausimai turi būti atsakyti kiekviename vieneto teste“
  • „TDD ES6 ir„ React “internetinėje transliacijoje“
  • Suderinkite savo komandą su mentoriais: kaip parašyti labiau patikrinamą kodą, TDD, CI / CD procesą ir dar daugiau

Pagilinkite savo įgūdžius auklėjant 1: 1

„DevAnywhere“ yra greičiausias būdas patobulinti „JavaScript“ įgūdžius:

  • Gyvos pamokos
  • Lanksčios valandos
  • 1: 1 auklėjimas
  • Kurkite tikras gamybos programas
https://devanywhere.io/

Erikas Elliotas yra „Programavimo JavaScript programų“ („O'Reilly“) autorius ir „DevAnywhere.io“ įkūrėjas. Jis prisidėjo prie programinės įrangos patirties „Adobe Systems“, „Zumba Fitness“, „The Wall Street Journal“, ESPN, BBC ir geriausių įrašų atlikėjų, įskaitant Usherį, Franką Okeaną, „Metallica“ ir daugelį kitų.

Jis dirba kur nori, su gražiausia moterimi pasaulyje.