B (mjukvaruutveckling)

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.

Exempel på notation

[redigera | redigera wikitext]
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

Exempel på Substitutioner

[redigera | redigera wikitext]

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.

Exempel på program i B

[redigera | redigera wikitext]

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.