Kunskapsbaserad mjukvaruassistent
The Knowledge Based Software Assistant (KBSA) var ett forskningsprogram finansierat av United States Air Force . Målet med programmet var att tillämpa begrepp från artificiell intelligens till problemet med att designa och implementera datorprogramvara . Programvara skulle beskrivas av modeller på mycket högnivåspråk (i huvudsak likvärdig med första ordningens logik ) och sedan skulle transformationsregler omvandla specifikationen till effektiv kod. Flygvapnet hoppades kunna generera programvaran för att styra vapensystem och andra kommando- och kontrollsystem som använder denna metod. När mjukvaran blev allt mer kritisk för USAFs vapensystem insåg man att en förbättring av kvaliteten och produktiviteten i mjukvaruutvecklingsprocessen kunde ha betydande fördelar för militären, såväl som för informationsteknologin i andra stora amerikanska industrier.
Historia
I början av 1980-talet insåg det amerikanska flygvapnet att de hade fått betydande fördelar av att tillämpa artificiell intelligensteknik för att lösa expertproblem som att diagnostisera fel i flygplan. Flygvapnet gav en grupp forskare från artificiell intelligens och formella metoder i uppdrag att utveckla en rapport om hur sådan teknik kan användas för att hjälpa till med det mer allmänna problemet med mjukvaruutveckling.
Rapporten beskrev en vision för ett nytt tillvägagångssätt för mjukvaruutveckling. Istället för att definiera specifikationer med diagram och manuellt omvandla dem till kod som den nuvarande processen, var Knowledge Based Software Assistant (KBSA) vision att definiera specifikationer på mycket högnivåspråk och sedan använda transformationsregler för att gradvis förfina specifikationen till effektiv kod på heterogena plattformar.
Varje steg i utformningen och förfining av systemet skulle registreras som en del av ett integrerat förvar. Utöver artefakterna för mjukvaruutveckling skulle processerna, de olika definitionerna och transformationerna också registreras på ett sätt så att de kunde analyseras och även spelas upp senare vid behov. Tanken var att varje steg skulle vara en transformation som tog hänsyn till olika icke-funktionella krav för det implementerade systemet. Till exempel krav på att använda specifika programmeringsspråk som Ada eller för att härda kod för uppdragskritisk feltolerans i realtid.
Flygvapnet beslutade att finansiera ytterligare forskning om denna vision genom deras Rome Air Development Center- laboratorium vid Griffiss flygvapenbas i New York. Majoriteten av den tidiga forskningen utfördes vid Kestrel Institute i norra Kalifornien (med Stanford University ) och Information Sciences Institute (ISI) i södra Kalifornien (med USC och UCLA ). Kestrel Institute fokuserade främst på den bevisligen korrekta omvandlingen av logiska modeller till effektiv kod. ISI fokuserade i första hand på processens frontend på att definiera specifikationer som kunde mappas till logiska formalismer men som var i format som var intuitiva och bekanta för systemanalytiker. Dessutom gjorde Raytheon ett projekt för att undersöka informell kravinsamling och Honeywell och Harvard University arbetade med underliggande ramverk, integration och aktivitetskoordinering.
Även om det inte primärt finansierades av KBSA-programmet hade MIT Programmer's Apprentice-projektet också många av samma mål och använde samma tekniker som KBSA.
I de senare stadierna av KBSA-programmet (med början 1991) utvecklade forskare prototyper som användes för medelstora till stora problem med mjukvaruutveckling. I dessa senare skeden flyttades också tyngdpunkten från ett rent KBSA-förhållningssätt till mer allmänna frågor om hur man använder kunskapsbaserad teknik för att komplettera och utöka befintliga och framtida datorstödda mjukvaruteknikverktyg ( CASE). I dessa senare skeden fanns en betydande interaktion mellan KBSA-gemenskapen och de objektorienterade och mjukvarutekniska gemenskaperna. Till exempel spelade KBSA-koncept och forskare en viktig roll i megaprogrammering och användarcentrerade programvaruutvecklingsprogram som sponsrades av Defense Advanced Research Projects Agency (DARPA). I dessa senare skeden bytte programmet namn till Knowledge-Based Software Engineering (KBSE). Namnbytet speglade det annorlunda forskningsmålet, inte längre att skapa ett helt nytt allomfattande verktyg som skulle täcka hela mjukvarans livscykel utan att gradvis arbeta in kunskapsbaserad teknologi i befintliga verktyg. Företag som Andersen Consulting (en av de största systemintegratörerna och då leverantör av sitt eget CASE-verktyg) spelade en stor roll i programmet i dessa senare skeden.
Nyckelbegrepp
Förvandlingsregler
De transformationsregler som KBSA använde var annorlunda än traditionella regler för expertsystem. Transformationsregler matchade mot specifikations- och implementeringsspråk snarare än mot fakta i världen. Det var möjligt att specificera transformationer med hjälp av mönster, jokertecken och rekursion på både höger och vänster sida av en regel. Det vänstra uttrycket skulle specificera mönster i den befintliga kunskapsbasen att söka efter. Högerhandsuttrycket kan specificera ett nytt mönster att förvandla den vänstra sidan till. Omvandla till exempel en uppsättningsteoretisk datatyp till kod med hjälp av ett Ada-uppsättningsbibliotek.
Det ursprungliga syftet med transformationsregler var att förfina en logisk specifikation på hög nivå till väldesignad kod för en specifik hård- och mjukvaruplattform. Detta inspirerades av tidigt arbete med teoremprovning och automatisk programmering. Men forskare vid Information Sciences Institute (ISI) utvecklade begreppet evolutionstransformationer . Istället för att omvandla en specifikation till kod var en evolutionsomvandling avsedd att automatisera olika stereotypa förändringar på specifikationsnivån, till exempel att utveckla en ny superklass genom att extrahera olika förmågor från en befintlig klass som kan delas mer allmänt. Evolutionstransformationer utvecklades ungefär samtidigt som framväxten av mjukvarumönstergemenskapen och de två grupperna delade koncept och teknologi. Evolutionstransformationer var i huvudsak vad som kallas refactoring i den objektorienterade mjukvarumönstergemenskapen.
Kunskapsbaserat arkiv
Ett nyckelbegrepp i KBSA var att alla artefakter: krav, specifikationer, transformationer, design, kod, processmodeller etc. representerades som objekt i ett kunskapsbaserat arkiv . Den ursprungliga KBSA-rapporten beskriver vad som kallades ett Wide Spectrum Language. Kravet var ett ramverk för kunskapsrepresentation som kunde stödja hela livscykeln : krav, specifikation och kod samt själva mjukvaruprocessen. Kärnrepresentationen för kunskapsbasen var avsedd att använda samma ramverk även om olika lager kunde läggas till för att stödja specifika presentationer och implementeringar.
Dessa tidiga kunskapsbaserade ramverk utvecklades främst av ISI och Kestrel som bygger ovanpå Lisp och Lisp maskinmiljöer . Kestrel-miljön förvandlades så småningom till en kommersiell produkt som heter Refine som utvecklades och stöddes av ett spin-off-företag från Kestrel som heter Reasoning Systems Incorporated.
Förfina språket och miljön visade sig också vara tillämpbar på problemet med omvänd konstruktion av programvara: ta äldre kod som är kritisk för verksamheten men som saknar korrekt dokumentation och använda verktyg för att analysera den och omvandla den till en mer underhållbar form. Med den växande oro över år 2000-problemet var reverse engineering ett stort affärsproblem för många stora amerikanska företag och det var ett fokusområde för KBSA-forskning på 1990-talet.
Det var betydande interaktion mellan KBSA-gemenskaperna och Frame-språket och objektorienterade gemenskaper. De tidiga KBSA-kunskapsbaserna implementerades i objektbaserade språk snarare än objektorienterade . Objekt representerades som klasser och underklasser men det var inte möjligt att definiera metoder på objekten. I senare versioner av KBSA som Andersen Consulting Concept Demo utökades specifikationsspråket för att även stödja meddelandeöverföring.
Intelligent assistent
KBSA tog ett annat grepp än traditionella expertsystem när det gällde hur man löser problem och arbetar med användare. I det traditionella expertsystemet svarar användaren på en rad interaktiva frågor och systemet ger en lösning. KBSA-metoden lämnade användaren i kontroll. När ett expertsystem försökte, i viss mån ersätta och ta bort behovet av experten, försökte den intelligenta assistentmetoden i KBSA att återuppfinna processen med teknik. Detta ledde till ett antal innovationer på användargränssnittsnivå.
Ett exempel på samarbetet mellan den objektorienterade gemenskapen och KBSA var arkitekturen som användes för KBSA-användargränssnitt. KBSA-system använde ett modell-vy-kontroller (MVC) användargränssnitt. Detta var en idé inkorporerad från Smalltalk-miljöer. MVC-arkitekturen var särskilt väl lämpad för KBSA-användargränssnittet. KBSA-miljöer innehöll flera heterogena synpunkter på kunskapsbasen. Det kan vara användbart att titta på en framväxande modell utifrån entiteter och relationer, objektinteraktioner, klasshierarkier, dataflöde och många andra möjliga vyer. MVC-arkitekturen underlättade detta. Med MVC-arkitekturen var den underliggande modellen alltid kunskapsbasen som var en metamodellbeskrivning av specifikations- och implementeringsspråken. När en analytiker gjorde någon förändring via ett visst diagram (t.ex. lade till en klass i klasshierarkin) gjordes den förändringen på den underliggande modellnivån och de olika vyerna av modellen uppdaterades alla automatiskt.
En av fördelarna med att använda en transformation var att många aspekter av specifikationen och implementeringen kunde modifieras på en gång. För småskaliga prototyper var de resulterande diagrammen enkla nog att grundläggande layoutalgoritmer i kombination med att användarna förlitade sig på att rensa upp diagram var tillräckliga. Men när en transformation radikalt kan rita om modeller med tiotals eller till och med hundratals noder och länkar blir den ständiga uppdateringen av de olika vyerna en uppgift i sig. Forskare vid Andersen Consulting inkorporerade arbete från University of Illinois om grafteori för att automatiskt uppdatera de olika vyerna som är förknippade med kunskapsbasen och för att generera grafer som har minimal korsning av länkar och även tar hänsyn till domän- och användarspecifika layoutbegränsningar.
Ett annat koncept som användes för att ge intelligent assistans var automatisk textgenerering. Tidig forskning vid ISI undersökte möjligheten att extrahera formella specifikationer från informella textdokument på naturligt språk. De konstaterade att tillvägagångssättet inte var genomförbart. Naturligt språk är till sin natur helt enkelt för tvetydigt för att fungera som ett bra format för att definiera ett system. Naturligt språkgenerering ansågs dock vara genomförbart som ett sätt att generera textbeskrivningar som kunde läsas av chefer och icke-teknisk personal. Detta var särskilt tilltalande för flygvapnet eftersom de enligt lag krävde alla entreprenörer att generera olika rapporter som beskriver systemet ur olika synvinklar. Forskare vid ISI och senare Cogentext och Andersen Consulting demonstrerade lönsamheten i tillvägagångssättet genom att använda sin egen teknik för att generera den dokumentation som krävs enligt deras flygvapenkontrakt.