Erik Persson - programutveckling i C# och .NET

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:

  1. Analys
  2. Design
  3. Implementation
  4. Test
  5. 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.