Valideringen av programvaruspecifikationer med avseende på uttryckliga och implicita användarkrav är mycket svår. För att underlätta valideringsuppgiften och för att ge användare omedelbar återkoppling av beteendet hos den framtida programvaran föreslogs det att göra specifikationer körbara. Hayes och Jones [Hayes, Jones 89] hävdar dock att exekverbara specifikationer bör undvikas eftersom körbarhet kan begränsa uttryckligheten i specifikationsspråk och kan påverka genomförandet negativt. I detta dokument kommer jag att argumentera för exekverbara specifikationer genom att visa att icke-verkställbara formella specifikationer kan göras exekverbara på nästan samma abstraktionsnivå och utan att i grunden ändra deras struktur. Inga nya algoritmer behöver införas för att få körbarhet. I många fall kombinationen av egendom-orientering och sökresultat i specifikationer baserade på generera-och-test metod. Dessutom kommer jag att visa att deklarativa specifikationsspråk gör det möjligt att kombinera hög uttrycksfullhet och körbarhet. På mer än ett sätt spelar specifikationerna en central roll i mjukvaruutvecklingen. De definierar alla nödvändiga egenskaper hos den programvara som ska implementeras och utgör därmed utgångspunkten för alla programvaruutvecklingsprocesser. Specifikationer är också ett viktigt kommunikationsmedel mellan användare och utvecklare - de kan till och med vara kontrakt. Som formaliserade uttryck för kraven står specifikationerna vid gränsen mellan informella och formella beskrivningar av ett tillämpningsområde. För att exakt och koncis definiera de egenskaper som krävs måste specifikationerna skrivas på formella och mycket uttrycksfulla språk [Wing 90]. För en omedelbar återspegling av konsekvenserna av specifikationerna och för en tidig validering har det föreslagits att specifikationerna dessutom bör vara körbara [Agresti 86]. Hayes och Jones [Hayes, Jones 89] hävdar dock att kraven på hög expressivitet och körbarhet utesluter varandra och att körbara specifikationer bör undvikas. Dessutom anges att körbara specifikationer kan påverka genomförandet negativt. De stöder sina argument genom en detaljerad och uttömmande diskussion om problem med specifikationen som enligt deras uppfattning inte på ett tillfredsställande sätt kan hanteras med hjälp av körbara specifikationer. Av två skäl är jag oense. För det första anser jag att bristen på korrekt programvara är det allvarligaste problemet med programvaruutveckling, och inte - som Hayes och Jones - den eventuella bristen på uttrycksfullhet i specifikationsspråk. Eftersom det korrekta beteendet hos programvaran definieras av kraven, och eftersom specifikationerna är grunden för programvaruutveckling, bör alla tillgängliga medel finnas tillgängliga för att validera specifikationerna med avseende på uttryckliga och implicita krav. Utförbara specifikationer kan vara avgörande för detta eftersom de tillåter - utöver formella resonemang om specifikationen - omedelbar validering genom utförande, och de ger användare och utvecklare den touchand-feel erfarenhet som krävs för att validera icke-funktionellt beteende, t.ex. användargränssnitt. Att utesluta körbarhet från specifikationsspråk innebär därför att man berövar sig en kraftfull metod för validering. För det andra - vilket jag kommer att visa i detta dokument - behöver hög expressivitet och körbarhet inte utesluta varandra om specifikationerna är skrivna på deklarativa språk.
Som svar på dessa farhågor svarade REF att det är frågan om korrekthet som är den största utmaningen när det gäller programvaruutveckling och inte specificeringsspråkens uttrycklighet.
Specifications Are (Preferably) Executable
{'venue': 'Softw. Eng. J.', 'journal': 'Softw. Eng. J.', 'mag_field_of_study': ['Computer Science']}