Spørgsmål:
Hvordan forklarer du overfor din chef, at koden skal omskrives?
Snakes and Coffee
2013-08-01 02:06:00 UTC
view on stackexchange narkive permalink

Jeg blev for nylig medlem af en organisation, hvor jeg skal være en af ​​de to nye leadudviklere på det offentlige websted. Den tidligere udvikler (som var alene) efterlod en betydelig codebase, som skønt den er funktionel, men er stiv og skrøbelig. Normalt siger ordsprog "hvis det ikke går i stykker, skal du ikke rette det", men i dette tilfælde gør den dårlige kodestil og manglende dokumentation koden ulæselig (for mig, den anden udvikler og vores praktikanter) og kræver derfor ekstra tid, når du tilføjer funktioner, justerer ting. Både min partner og jeg har fundet det vigtigt for både vores mentale velvære såvel som nødvendigt, hvis udviklingsholdene skal komme videre i organisationens tidsplan.

Problemet er, at vores chef, som også er organisationschef (biologi phD, ikke en udvikler) mener, at den sidste fyr var strålende, og mener ikke, at en omskrivning er nødvendig. Både min partner og jeg har forsøgt at kontakte den tidligere udvikler, men til ingen nytte - det ser ud til, at han er forsvundet ud af jordens overflade. Hvordan overbeviser jeg / vi chefen om, at koden har stort behov for en større omskrivning?

Tidligere handling:

  • Vi har informeret vores chef om, at koden er et rod
  • Vi har vist ham koden (han svarer, "hvad er der galt med det?")

EDIT Jeg er næsten helt sikker på, at en omskrivning er nødvendig. Jeg undskylder alle de ikke-pythonistas derude, men koden ser sådan ud:

  def index (anmodning): return render (anmodning, 'index.html', locals ())  

gentaget for måske 20 af de 30 "visnings" -funktioner i koden. For dem af jer, der ikke forstår, kræver denne type kode i det væsentlige hvert medlem af teamet at huske, hvad der bruges til hver skabelon, og gør det vanskeligt at ændre koden uden at bryde noget. Fra hvad jeg kunne fortælle, havde den tidligere udvikler ikke mere end 1 års erfaring med kodning og måske ingen professionelt. Koden er ret ujævn lige nu, og ingen kan helt finde ud af, hvor / hvorfor.

Hvis det ændrer noget, er dette en nonprofit forskningsorganisation, så gribende markedsandel er ikke det vigtigt, men da medlemmer generelt forbliver i ca. et år (mens de udfører deres post-doc-arbejde), tror jeg, at læsbarhed / vedligeholdelsesvenlighed sandsynligvis er den største enkeltstående ting, vi har brug for (bortset fra funktionalitet).

Er du sikker på, at en omskrivning er nødvendig? [Smartere mennesker end jeg har antydet, at en fuld omskrivning sjældent er den rigtige tilgang] (http://www.joelonsoftware.com/articles/fog0000000069.html). Er det umuligt at opdatere det lidt efter lidt, når du arbejder på specifik funktionalitet? Forårsager den aktuelle implementering specifikke problemer ud over at få dig vanskeligheder med at forstå koden?
Mere nyttigt på programmers.stackexchange.com
@SimonO'Doherty Jeg undrede mig over dette, men jeg synes, det er mere relevant på arbejdspladsen, fordi jeg ikke er i tvivl om, at det skal omskrives, vanskeligheden er at overbevise min chef.
I de fleste situationer fandt jeg iterativ refactoring det bedste kursus. Fuld omskrivninger er irriterende, især da du normalt ikke har en krystalklar specifikation.
Du og dine holdkammerater skal læse dette: http://www.amazon.com/Working-Effectively-Legacy-Code-ebook/dp/B005OYHF0A/ref=sr_1_5?s=digital-text&ie=UTF8&qid=1375364592&sr=1- 5 & ​​nøgleord = refactoring
@SnakesandCoffee - Før du forsøger at omskrive software, foreslår jeg, at du tager fat på dokumentationsaspektet af projektet. Hvis du ikke kan dokumentere det aktuelle system, kan du ikke omskrive systemet. Som andre mennesker har antydet det værste, en programmør kan gøre, er at foreslå at omskrive et fungerende system, selv et mangelfuldt arbejdssystem.
Bemærk, at dårlig kodestil er i øjet, hvis betragteren og den elendige dokumentation bare skal forbedres. Det alene fortjener ikke en omskrivning, men måske en omhyggelig refactoring
Fire svar:
the_reluctant_tester
2013-08-01 03:39:20 UTC
view on stackexchange narkive permalink

Du er nødt til at overbevise ham på det sprog, han forstår.

Er du i stand til at kvantificere virkningen af ​​en "dårlig" kode?

Hvor meget teknisk gæld har du fået, hvordan det påvirker udviklerens produktivitet, kodestabilitet, kvalitet.

Er du i stand til at give ham en demo på linierne af

  1. Tag det værste område af koden kan være det buggiest, ustabilt eller udvideligt på grund af dårlig kode.
  2. Vælg en aktuel metric - X antal timer, der skal gennemgås kode, Y antal fejl i øjeblikket i koden på grund af at den er af dårlige standarder, Z antal timer for at udvide den aktuelle kode til implementering af funktion A
  3. Refactor eller redesign det
  4. Reflekter over ændring og demonstrer, hvor meget tid det tager nu ..... X1, Y1, Z1

Dette vil ikke være trivielt indsats og kunne være et miniprojekt. Men hvis du føler stærkt om situationen og ønsker at ændre den, skal du ikke bede om tilladelse og gøre det og vise ham resultaterne.

Meredith Poor
2013-08-01 02:51:26 UTC
view on stackexchange narkive permalink

For det første er 'behov for en omskrivning' vagt. Du skal være i stand til at tegne kasser omkring fornærmende kode eller definitioner.

Hvis den gamle udvikler skrev kode, der efterlod webstedet udsat for SQL-injektionsangreb, skal du vise din chef før og efter (hvad du har, hvad det skulle være, og konsekvenserne af den gamle stil). Er applikationen simpelthen formularer uden klasser til tabeller, ingen datatjenester, ingen brugerkontroller og ingen enhedstest? Vis ham derefter, hvordan du gennemgår 50 formularer, der foretager in-situ-kodedigeringer, når en enkelt kolonne føjes til en tabel. Uoverensstemmelser - vis ham form A udført på en måde og form B gjort en anden, og hvorfor de skulle have mere til fælles.

Hvis det ikke virker, bliver du nødt til at vise ham dårligt strukturerede biologiske systemer, og forklar, hvorfor den kode, du har, svarer til global opvarmning og forsuring af havet.

Givet yderligere detaljer (Python og spredt global variabel anvendelse) vil jeg beskrive det nuværende system i følgende udtryk: 'Inden for denne 200.000 linje codebase er der definitioner, der er 'synlige' for enhver kodelinje, og disse definitioner er tilfældigt spredt i filerne. Hvis nogen ændrer eller tilføjer nogen af ​​disse definitioner, skal alle involverede i projektet vide om dem, før de foretager ændringer fra deres side. En programmør, der gør dette alene, kan holde det lige, men det er ikke sådan, vi gør det. Vi er nødt til at udpege bestemte steder for ting at være, visse regler for ting, der skal følges, og visse mønstre, som, hvis vi ved, hvordan man gør det, ved vi lidt, hvad vi kan forvente for alle lignende strukturer. '

Start med at bladre ned gennem filerne, mens din chef er fjernbetjent i eller kigger over din skulder, søger efter de globale og beder din chef om at huske hver enkelt. Fortæl derefter ham, at du bliver nødt til at bringe ham i gang, når som helst nogen af ​​programmørerne ændrer eller tilføjer nogen af ​​disse variabler. Har en form for strukturel dokumentation, der forklarer, hvad dit mål er, og den minimale omkostningsmetode for at nå det.

En anden tilgang: antyd, at du har et regneark med 100 sider. Hver side har 1000 rækker gange 100 kolonner med værdier. Inden for disse 100 sider er der 100 'primitive' celler, der ikke har nogen formel - alle andre celler beregnes ud fra disse 100 'primitiver'. Hans job er at vide, hvor alle disse 100 primitive celler er, og holde i hovedet, hvad de gør for at påvirke regnearkberegningerne. Celler er forskellige steder i hvert regneark, og ingen har særlig fremhævning, skrifttyper eller baggrunde. I betragtning af dette regneark, bed 3 personer om at foretage strukturelle ændringer (ikke blot dataelementer), som i nogle tilfælde indebærer tilføjelse af nogle få 'primitive' celler. Det er op til alle i teamet at sikre, at disse ændringer koordineres.

Fra vores (mig og den anden projektledelse) vurdering er koden i det væsentlige utilgængelig, i det mindste delvis på grund af misbrug af pythons `lokale` og` globaler` gennem hele koden. I det væsentlige blev hele kodebasen skrevet af en programmør
@SnakesandCoffee - Selvom jeg ikke er fortrolig med Python, kan jeg se et scenarie, hvor du får en fejltilstand, og derefter skal finde ud af, hvad der er inden for anvendelsesområdet for hvert potentielt fejlfindingspunkt. Er din chef den slags person, hvad der ville sidde og se, mens du gennemgik denne øvelse? Ville dette være overbevisende?
Desværre flyver han normalt et sted for at holde en tale om noget / møde med professorer, og så ser jeg sjældent ham (han er i Michigan).
Det jeg ser her er et forsøg på at opretholde hele projektets 'symboltabel' (hver variabel og konstant i systemet) i hovederne på alle i et hold. En person kan gøre dette, men nu har du flere mennesker, som alle skal vide 'alt', inklusive de nye objekter, der er oprettet af andre mennesker, så hurtigt som de opretter dem. Det lyder meget farligt for mig.
Neil T.
2013-08-01 12:47:15 UTC
view on stackexchange narkive permalink

Jeg har været i din situation mange gange før og har haft lignende problemer med arv af dårlig arkitektur og dårligt vedligeholdt kode i fortiden og nutiden. Heldigvis i min nuværende position har min chef en programmeringsbaggrund og har opmuntret mig til at gøre hvad jeg har brug for for at forbedre kvaliteten både fra et præstations- og forandringsledelsesperspektiv.

Fordi din chef mangler den tekniske ekspertise til fuldt ud at forstå, hvad du mener, vil du aldrig få hans / hendes buy-in på at foretage engrosændringer i koden. Det bedste, du kan håbe på, er at omstrukturere en genopbygning af den stykke for stykke, når du går videre. Udarbejd en masterinfrastrukturplan og instruer de andre udviklere om, at eventuelle fremtidige tilføjelser eller revisioner skal implementeres i henhold til denne plan. På denne måde får alle det, de ønsker - din chef får vandet til at køre, og du får installeret helt nye rør, hvor de er mest nødvendige, i stedet for at skulle lappe oven på pletter. Derudover vil det give dig lidt ekstra tid til at grave dybere ned i systemets eksisterende krav og indarbejde eventuelle "nye" anmodninger, der har siddet på bagbrænderen på grund af det nuværende systems ustabilitet.

m-oliv
2013-08-01 02:17:08 UTC
view on stackexchange narkive permalink

Jeg oplevede de samme problemer med min nuværende chef. Jeg sad dog med ham og forklarede ham, hvorfor jeg troede, at det var nødvendigt at ændre koden. Da din chef ikke har en programmeringsbaggrund, skal du måske prøve at forklare ham problemet med en analogi. Forklar problemet som et dagligdags problem, for eksempel: hvis vi byggede en bil, ville køretøjet ikke fungere på grund af dette og det designproblemer, derfor skulle vi redesigne. Måske med en anden tilgang vil din chef forstå mere klart hvorfor du skal omskrive koden. Jeg må understrege, at du ikke nødvendigvis skal "bebrejde" forfatteren af ​​koden for de åbenlyse mangler (selvom han skrev det dårligt i første omgang), fordi det kunne give dit chef et forkert indtryk og give dig unødvendige problemer. Foreslå i stedet måder, hvorpå du kan forbedre koden, og forklar, hvorfor du mener, at det er den rigtige vej.

Analogi er en god idé. Ikke-programmeringsbaggrund betyder dog ikke nødvendigvis ikke-teknisk. I nogle tilfælde er folks forståelse tæt nok til, at en forklaring fra programmør til programmør fungerer.


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...