Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  13 3201
Hei freaks.

Jeg har lagt merke til etterhvert som utviklings oppdragene jeg påtar meg har begynt å bli større å større, så har også det å holde kontroll på all koden blitt vanskeligere. Jeg har pønsket en del på hvordan jeg skal løse dette problemet på en fornuftig måte, har prøvd å tegne flowchart over virkemåten til forskjellige funksjoner o.l. Men dette tar jo veldig mye lengere tid og gir ikkje noe bedre oversikt. Jeg har også prøvd å lage lister med funksjonsprototyper etterhvert som jeg utvikler dem, dette gir delvis bedre oversikt, men jeg bruker fortsatt en del tid på å finne ut hva jeg har gjort, ikkje gjort og hvordan jeg har gjort det.

Grunnen til at jeg lager denne tråden er fordi jeg har blitt spurt for noen måneder siden om å utvikle en programvare for et stort norsk selskap, jeg lovte jeg skulle gjøre det men måtte fullføre prosjektet jeg holdt på med. Nå er tiden kommer og fra å med mandag kommer jeg til å utvikle for dette selskapet og trenger noen gode råd rundt planleggingen. Jeg har tenkt å bruke mye tid på planleggingen, slik at jeg slipper å havne i situasjoner der jeg må sitte å leite igjennom titusenvis av linjer med kode for å finne ut hvordan jeg hadde tenkt det.

Noe av grunnen til denne manglende planleggingen er at jeg jobber som oftest alene, og ser for meg virkemåten i hodet, og begynner å kodeskrivingen nesten med engang. Men nå begynner kildekodene å bli såpass store at det er problematisk å huske hvordan man først tenkte seg det.

Selvsagt så forventer jeg ikkje at alle freakene skal kunne svare på dette spørsmålet, men håper de freakene som har erfaring innen større programmerings prosjekter har noen gode råd å komme med, eventuelt noe lesestoff på forskjellige planleggings teknikker som jeg kan lese løpet av helgen.

Takker for alle råd.
Gode søkeord kan være "software architecture". Skulle ønske jeg hadde noen gode bøker å anbefale, men ingen av dem jeg har er jeg spesielt godt fornøyd med.
En god funksjonsbeskrivelse er jo viktig å ha.
Har du den og følger den slavisk, så vil du alltid ha kontroll på hvilken funksjon de forskjellige delene skal ha.

Så, en funksjonsbeskrivelse med avsjekkingsruter kan kanskje være løsningen?
Bruk git og host koden enten på en privat repo, eller på en egen server med f.eks gitlab. Da kan du holde øye med koden og f.eks bruke git blame om du lurer på "I hvilken sammenheng gjorde jeg denne forandringen?".

Utover det tror jeg du må nesten holde et fokus med å dokumentere for mye enn for lite, evt samle opp ark eller notater med hvordan du har planlagt alt.
Jeg har ikke tenkt å gjøre noe annet enn å anbefale deg en bok. Det kommer til å være den viktigst boken du noensinne har skaffet deg:

http://www.amazon.com/The-Pragmatic-.../dp/020161622X
Man kommer langt med å lære seg de mer avanserte formene for objektorientering, vanlige design patterns, dependency injection osv. Det er utrolig hvor store og komplekse prosjekter man kan lage uten, men det blir veldig mye lettere med.
sindre@puse.cat:~$
Synderen's Avatar
For bachelor oppgaven min har jeg så langt brukt en slags blanding av XP og FDD. Jeg har vært ekstremt nøye på å skrive unit tests, og prøvd å gjort det så skikkelig som mulig. Fra XP har jeg tatt user stories og acceptance tests veldig nytting, de har har hjulpet meg veldig med å visualisere hva som skal gjøres, hva som er gjort, hva som funker, og hvor lang tid det vil ta for meg å bli ferdig. Ta en titt på CRC kort, de har jeg skrevet på post it notes som jeg har hengt på veggen, fordelen over UML er at de er rask og enkel å lage, i tillegg er det lett å flytte de rundt. Martin Fowler har en rekke artikler om, alt dette. Et godt sted å starte kan være denne.
Bryt opp løsningen din i deler og gjør den eksponerte delev av hver del (modulens API) så liten og tydelig som mulig. High cohesion og low coupling - altså: det som hører naturligsammen finnes på samme sted, og det er få avhengigheter mellom de ulike delene.

Å bryte et problem opp i mindre og enklere problemer er verktøy numero uno for utviklere, og man bør bruke tid på å finne den "riktige" oppbrytningen for å ende opp med en løsning som er lett å finne frem i, utvide ved behov, fikse feil i, osv. Når du gjør dette ender du ikke opp med ett stort system på titalls tusen linjer som du må forstå på en gang og navigere i, men mange små programmer som sammen løser problemet ditt.

De som tar dette til det ekstreme begynner å snakke om microservices.

Dependency injection og utstrakt bruk av automatisert testing er også veldig gode tips, men om du skal igang med et større prosjekt for en kunde så er ikke det tidspunktet for å eksperimentere med mye nytt. Har du lite erfaring med dette bør du nok derfor introdusere dette i små steg.

Du kan også ta en titt (mest for fun) p åmine 11 arkitektur-illustrasjoner: http://blog.kjempekjekt.com/2012/09/...llustrasjoner/
Sist endret av tormaroe; 26. april 2014 kl. 23:30. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
War room
0xFF's Avatar
Trådstarter Donor
Takker for svar så langt, jeg skal se på hva dere har foreslått når jeg er tilbake i kveld. Og vuderer hva jeg kan bruke.

Jeg må stikke ut en tur, men har et lite kjapt spørsmål angående UML, jeg har jo vært borti dette før og brukt det til å beskrive class'er. Men jeg har syntes det har vært litt vanskelig med å drive å oppdatere UML diagramet kontenuerlig når man skrev koden, så har lagt det på is for noen år siden. Samt at man måtte drive å tegne opp relasjonene manuelt ( brukte Dia til linux ).

Jeg var litt nyskjerrig i går og besøkte programmeringsbloggen til tormaroe, og var å hørte på forskjellige podcaster på Software Engineering Radio, på en av disse podcastene så snakket dem om automatisert generering av UML diagram fra kildekode? Har noen av freakene noen gode anbefalinger til en slik UML editor, men mulighet for automatisk generering av diagramet?

Helst til Linux, men jeg har Windows maskiner å tilgjengelig om nødvendig.

EDIT: Språkene det er snakk om er C, C++ og PHP.
Sist endret av 0xFF; 27. april 2014 kl. 20:18.
UML er så mangt. Dvs. det kan brukes til så mangt. Til å tegne ulike typer diagrammer. Å bruke verktøy til å generere statiske relasjonsdiagrammer over hvilke klasser du har i systemet, og hvilke avhengigheter du har mellom dem, er greit nok. Det kan du for eksempel gjøre for C#-prosjekter i Visual Studio (kjenner ikke verktøy for C/C++/PHP, men de finnes sikkert).

De diagrammene som har størst verdi er likevel ikke disse. Diagrammene som kan være lurt å tegne opp er de som viser flyten i de mest komplekse delene av systemet ditt. Flytdiagrammer og samhandlingsdiagrammer. Og disse må du nok satse på å gjøre og vedlikeholde manuelt.

Husk på at diagrammene ikke er et mål i seg selv. Det er den eksekverbare koden som er mest verdifull, og som forteller den absolutte sannheten om systemet. Diagrammer kan visualisere, dokumentere og kommunisere hva du lager, og hjelpe deg å tenke og vurdere om noe er riktig (før du implementerer). Men ofte er et ad-hoc diagram tegnet der og da det du trenger - et diagram som du kaster like etterpå når det har gjort nytten sin. Å holde dokumentasjon oppdatert er en kostnad. Men det er ofte verdt det når man dokumenterer "kjernen" i systemet - elementer som er viktige å forstå godt, og som endrer seg lite over tid.
Jeg har tenkt å bruke mye tid på planleggingen, slik at jeg slipper å havne i situasjoner der jeg må sitte å leite igjennom titusenvis av linjer med kode for å finne ut hvordan jeg hadde tenkt det.
Vis hele sitatet...
lang og detaljert planlegging for så skrive "titusenvis av linjer",og så og utgi det perfekte program har slått feil før.

Ha fokus på Iterativ utvikling,og som nevnt av @tormaro "Å bryte et problem opp i mindre og enklere problemer er verktøy numero uno for utviklere"
Har du muligheter til tidlig utgivelser(mange utgivelser)lenge før et ferdig produkt for og få tilbakemeldinger fra brukere kan dette hjelpe mye.
Ikke mulig gjør dette for det selv,og tenk som en bruker av produktet.

Git som nevnt jeg liker Bitbucket som har ubegrenset bruk av privat reops,kommando linje Git er greit,men liker SourceTree(Windows) godt.
Fin video av @Alex Martelli "Good enough" is good enough! som tar for seg noe av det som er tatt opp her.
Sist endret av snippsat; 27. april 2014 kl. 22:42.
Sitat av 0xFF Vis innlegg
Har noen av freakene noen gode anbefalinger til en slik UML editor, men mulighet for automatisk generering av diagramet?
Vis hele sitatet...
Tja, jeg tror forøvrig du blander sammen dokumentasjon og dokumentasjon.

Når du snakker om klassediagram og automatisk generering av dokumentasjon snakker du om å beskrive hvordan koden virker. Det er selvfølgelig nyttig, fordi å lese kode tar tid, og kan dermed være verdt hvis man har satt det opp så det genereres uten spesielt mye arbeid. Med riktig verktøy kan dette tilogmed være pent (se javadoc). Primært er dette derimot et verktøy for bli kjent med kode, eller kunne jobbe opp mot annen kode.

Du kjenner derimot koden din i utgangspunktet (håper jeg), og er dermed i posisjon til å skrive gode diagram på et høyere abstraksjonsnivå. Dette vil avhengig av prosjektet du holder på med kunne beskrive arbeidsflyten til en typisk bruker, hvordan forskjellige deler av kodebasen din interagerer med hverandre, hvordan inndata prossesseres eller hvilken informasjon som hentes inn fra hvilke sensorer. Disse bør typisk beskrive grunnprosessene i programmet ditt, og skal hjelpe deg å holde styr på hvordan programmet som helhet fungerer. Disse skal også sørge for at eventuelle nye deler du lager passer riktig inn i hvordan du allerede har bestemt deg for at hovedlinjene skal være.

Disse skal i stor grad reflektere beslutninger som du gjør tidlig i prossessen og holder deg til, så de skal ha lang holdbarhetsdato. Om de ikke har det gjør du noe feil (eller eventuelt har en ubrukelig kunde).
Sitat av DumDiDum Vis innlegg
... Disse skal i stor grad reflektere beslutninger som du gjør tidlig i prossessen og holder deg til, så de skal ha lang holdbarhetsdato. Om de ikke har det gjør du noe feil...
Vis hele sitatet...
Jeg er enig i det DumDiDum sier, men må legge til at du må forvente å gjøre feil på dette området. Man må gjette på hvilke deler som vil være stabile i et system, men uventede endringer kommer alltid. Så ikke bli lei deg når du har gjort en antagelse som viste seg å ikke være riktig - bare forsøk å lære av det til neste gang.
Jeg føler at jo mer jeg jobber med prosjekter jo bedre rutiner får jeg. Det tar ofte litt lenger tid å skulle dokumentere funksjoner, hvordan ting henger sammen, og hva som skal gjøres til en hver tid.
Anbefaler å bryte ned prosjektet i mindre deler, og heller ha "sub-prosjekter".

Dette tar som sagt litt ekstra tid, men det er ofte anbefalt i lengden