B är en mjukvaruutvecklingsmetod framtagen av Jean-Raymond Abrial, tillika ett språk och CASE-verktyg från B-Core (UK) Ltd..
B-metoden är nästan unik bland formella mjukvaruutvecklingsmetoder i det avseendet att den använder samma notation för specifikation, design och programmeringen.
Språket B byggs upp med hjälp av matematiska formler med vars hjälp det går att validera programmet. På detta sätt går det att ta fram matematiska bevis att programmet fungera innan det riktiga programmet skrivs.
Matematik | motsvarighet i B | Beskrivning |
---|---|---|
P & Q | Konjunktion | |
P or Q | Disjunktion | |
P=>Q | Implikation | |
P<=>Q | Ekvivalens | |
not P | Negation | |
!(z).P | Allkvantifikator | |
#(z).P | Existenskvantifikator | |
[G]P | substitution |
Kompilatorn i B omvandlar språkets olika element i matematiska formler. Nedan följer exempel på några sådana Substitutioner
Psedu-program | Regel | Beskrivning |
---|---|---|
[BEGIN G END] Q | Villkor Q måste uppfyllas medan G execueras. | |
[PRE P THEN G END] Q | Innan programmet G execuerats måste villkoret P uppfyllas och villkoret Q måste uppfyllas under hela execueringen. | |
[IF P THEN G ELSE H END] Q | Om villkoret P uppfylls execueras kod G, annars H. Oavsett vilken kod som execueras måste villkor Q uppfyllas hela tiden. | |
[G ; WHILE P DO H VARIANT E INVARIANT I END] Q |
|
Efter att kod G execuerats execureras kod H så länge villkor P uppfylls. Loopvariabel är E och under hela tiden måste villkor I uppfyllas. |
Detta program definierar en maskin Positive som representera ett naturligt tal mellan 0 och maxint med startvärde 0. Till maskinen finns operationerna set (för att ändra värde), read (för att läsa värde) och incr (för att öka med ett).
MACHINE Positive (maxint) VARIABLES val INVARIANT val 0 .. maxint INITIALISATION val := 0 OPERATIONS set (xx) = PRE xx 0 .. maxint THEN val := xx END ; vv ← read = vv := val ; incr = PRE val < maxint THEN val := val + 1 END ; END
Det som mest skiljer detta programmet från vanliga program är INVARIANT som måste uppfyllas under hela programmets gång och PRE som måste uppfyllas vid execuering. Om det finns någon matematisk sannolikhet att dessa villkor inte uppfylls någon gång under programmets gång misslyckas kompileringen. På så sätt går det att redan under kompileringen få reda på om det finns någon bugg i programmet som annars kanske skulle ha upptäckts först efter att ha kört programmet under lång tid.