Programmerare förlorar arbetet till verktyg med namn som Metaedit, KCG och Simulink. De är kodgeneratorer. Människorna får rita arkitekturer. Koden genereras - säkerhetscertifierad och klar - på en knapptryckning.
Handkodade program är fortfarande vanligast i inbyggnadsprojekt. Men robotar tar över allt mer av programmerandet.
- Vi brukar inte använda den bilden, men den finns i bakhuvudet, säger Juha-Pekka Tolvanen vd för finska Metacase.
- Ordet robot upplevs kanske som lite skrämmande, men det är väl en lagom provokativ inledande beskrivning, säger Per Blysa, chef för modellbaserad utveckling på Telelogic.
Kodgenerering går till så att generella kodsnuttar - i allt från programspråket Ada till hårdvaruspråket Verilog - skrivs en gång för alla och göms i en modul. De används sedan som byggblock i flödesplaner, tidsscheman och andra konstruktioner som kan finns i modellspråket.
Poängen är tydligast där det finns möjlighet till återanvändning, där man producerar många versioner av samma programsystem.
- Det är ingen poäng att använda en robot när du bara ska göra en sak en enda gång, säger Juha-Pekka Tolvanen.
Skapar Nokias mobilgränssnitt
Verktyget från Metacase verktyg heter Metaedit+. Det producerar programkoden till användargränssnittet i Nokias mobiltelefoner så att det blir konsistent mellan telefongenerationerna. Metaedit+ används också för att skapa kod till säkerhetskritiska tillämpningar. Bland annat i en serie pacemakers.
- Det finns minst 15-20 olika typer av pacemakers eftersom människokroppar är olika och sjukdomar är olika, säger Juha-Pekka Tolvanen.
I Metaedit+ är det expertprogrammerarna hos kunden som skapar modellspråket. Det som kan uttryckas i modellspråket blir därmed identiskt med det som fysiskt kan göras - de som programmerar mobiltelefonserien arbetar med begrepp som knappar och display
Här skiljer sig Metacase från modellspråket Unified Modelling Language (UML) där modellspråket är standardiserat och generellt - mobiltelefoner och pacemakers konstrueras i samma sorts diagram.
Företaget som säljer UML-verktyget har också konstruerat den kod som genereras. I alla fall en del av den - det finns alltid möjlighet för programmeraren att lägga in egen programkod.
UML är den kanske viktigaste orsaken till intresset för automatgenererad kod. I version 2.0 standardiserades en semantik för diagrammen i UML. Det betyder att det är entydigt vilken algoritm ett diagram motsvarar och programkod kan därmed genereras automatiskt. Företag som Ericsson använde UML på detta sätt redan ett par år innan standardiseringen.
Där Metaedit+ främst används för mindre programsystem eller enskilda funktioner i större system, är UML och SDL språk som kan fånga hela systemarkitekturer.
Med några klickningar i UML-verktyget byter man ut komponenter och skapar en ny variant av hela programvaran för nästa generations 3G-basstation.
UML-verktygen gör mycket mer än att bara generera kod.
Den som arbetar i UML får en konkret koppling mellan specifikation och implementering - det går att se exakt vilken kod som motsvarar en viss del av specifikationen. Det gör det enklare att avlusa koden och skapa nya versioner.
SDL lever ännu
Diagramsemantiken, och möjligheten att modellera realtidsprocesser i sekvensdiagram och automater, gjorde att UML kom ikapp kusinen Specification and Description Language (SDL) i funktionalitet. Och nu stjäl UML allt mer av SDL:s uppmärksamhet.
SDL har dock inte försvunnit från banan. Franska Pragma Dev presenterade nyligen verktyget Real Time Developer Studio som autogenererar kod från SDL till Eneas minimala realtidsoperativsystem (RTOS) OSE Epsilon.
OSE Epsilon är till och med konstruerat för att vara enkelt att översätta till och från SDL. Bland annat används samma termer för att beskriva kommunikation mellan komponenter.
Kodgeneratorerna är konkurrenter men kompletterar också varandra.
Verktyget Simulink från Mathworks kan något som inget av hittills nämnda verktyg kan, nämligen modellera kontinuerlig tid. Och därmed modellera fysiska förlopp - UML 2.0 klarar bara diskret tid.
Den genererade Simulinkkoden kan till exempel implementera en reglerfunktion som anpassar styrningen av landningshjul efter däcktryck och luftfuktighet.
Säker kod från generatorn
Programmeraren använder grafiska block som representerar till exempel integratorer eller andra matematiska transformationer. Koden som genereras är optimerad och - förhoppningsvis - ordentligt avlusad. Simulink brukade anklagas för dålig prestanda, men används idag i hårda realtidssystem.
Ett annat intressant komplement är franska Esterel Technologies verktyg Scade. Det erbjuds i paketlösningar med både Mathworks Simulink och med Telelogics UML-verktyg. I Scade finns kodgeneratorn KCG som programmerat både civilplanet Airbus 380 och stridsplanet JAS.
Finessen med KCG är att koden som genereras är "halvcertifierad" enligt säkerhetsstandarden DO178B. Funktionaliteten i KCG i sig är säkerhetsgranskad.
Konkret betyder det att utvecklaren kan hoppa över delar av den testning som är obligatorisk för säkerhetskritisk programvara. Vilket enligt Esterel skurit ner utvecklingstiden till hälften i vissa projekt.
Jan Tångring