Några reflektioner kring programutveckling
På senare år har jag i allmänhet drivit mina egna projekt och fungerat som en kombination
av projektledare, programmerare, systemadministratör, försäljare och allmänt bollplank.
I mina projekt arbetar jag mestadels ganska fritt och inte enligt någon speciell
metod, utan snarare med sunt förnuft och de erfarenheter av praktisk programutveckling
som jag samlat på mig under åren som mina främsta vapen. Nedan följer några korta
reflektioner häromkring som kanske kan tyckas ganska banala, men icke desto mindre
inbegriper ett antal faktorer som enligt min erfarenhet är väsentliga
för framgångsrika utvecklingsprojekt.
Det arbetssätt som jag normalt begagnar mig av bygger i grund och botten på principerna
för objektorienterad analys, design och programutveckling, men utgör som sagt inte
en formellt specificerad metod. Arbetet framskrider mestadels, åtminstone i stora
drag, i enlighet med de klassiska utvecklingsfaserna vid programutveckling:
- Analys
- Design
- Implementation
- Test
- Driftsättning
Under analys- och designfaserna, mellan vilka gränsen sällan är knivskarp, gör jag
i dialog med kunden en skriftlig förstudie som kan vara mer eller mindre omfattande
beroende på projektets storlek och komplexitet. I förstudien ingår i de flesta fall
en mer eller mindre detaljerad kravspecifikation, användargränssnittsdesign, systemarkitektur,
datamodell inkl. tabellbeskrivningar och någon form av objektmodell. Till förstudien
fogas diverse diagram och en förteckning av utestående frågor och problem, vars
lösning efter dialog med kunden dokumenteras. Tidsuppskattningar och vidare planering
baseras på förstudien. Under arbetet med förstudien är kontakterna med kunden intensiva
och innefattar normalt ett flertal kundmöten och daglig direkt- eller telefonkontakt.
Ibland kan det också bli aktuellt att göra en enkel prototyp som underlag för kunddialogen.
Under designfasen kommer, när så faller sig lämpligt, design- och arkitekturmönster
och diverse ”best practices” och insikter från ”software engineering”- och ”software
architecture”-områdena till användning.
I implementationsfasen arbetar jag för det mesta med objektorienterade programmeringsspråk
(vanligen C#), relationsdatabaser (mestadels SQL Server och MySQL)
och utvecklingsmiljön Visual Studio. Jag försöker följa god praxis och sunt
förnuft när det gäller kommentering och annan dokumentation av koden. Jag återanvänder
ganska ofta kod genom egendefinierade API:er och ”master pages” som kraftigt underlättar
skapandet av uniforma användargränssnitt i ASP.NET. Större delen av den programutveckling
som jag är engagerad i avser idag webbapplikationer, varför jag sammanställt ett
antal enkla regler som utan stora arbetsinsatser ökar säkerheten i ASP.NET-applikationer
ganska väsentligt och som jag därför försöker följa i de webbprojekt som jag arbetar
med.
Testning görs i två eller tre steg, nämligen av mig själv som utvecklare, ibland
av en projektledare och slutligen av kunden. Före driftsättningen görs i regel en
form av acceptanstest av kunden. I mer omfattande projekt kan testningen ske modulvis
efter hand som modulerna färdigställs. Ibland kan givetvis testerna leda till iterationer
enligt spiralmodellen. Innan driftsättningen sker, skall alla kända fel vara åtgärdade.
Driftsättningen föregås av ett mer eller mindre omfattande planeringsarbete, vilket
vid behov dokumenteras skriftligt och ibland inbegriper en dialog med driftspersonal
och andra intressenter. Efter driftsättningen följer oftast ett antal iterationer,
då kunden kommer med kompletterande önskemål om modifikationer och ny funktionalitet.