Design by Contract

Heinäkuu 11th, 2007

Etsiskelin tänään Javaan DbC-kirjastoa, joka tarjoaisi vastaavat ominaisuudet kuin Spec#. Optimaalisesti tämä tarkoittaisi siis kääntäjää, joka tarkistaisi pre-, post- ja invariant-säännöt metodeista ja muuttujista.

Lähimmäksi etsimääni pääsivät JML (Java Modeling Language) ja Contract4J. Jälkimmäinen käytti genericsejä ja ajonaikaista AspectJ:hin perustuvaa tarkistusta, kun taas ensimmäinen tarkisti säännöt jo käännösvaiheessa, mutta näytti syntaksiltaan aika rumalta.

Contract4J:

@Invar ("name != null")
private String name;

@Pre ("times > 0")
@Post("$return != null && $return.isValid()")
public String greet(int times) {

JML:

// In JML everyhing is not null by default:
private /*@ spec_public @*/ String name;

/*@
@ requires times > 0;
@ ensures \result != null && \result.isValid();
@ modifies \nothing
@*/
public String greet(int times) {

Itse pidän enemmän genericseistä, mutta tärkeämpää olisi kuitenkin saada virheet kiinni jo käännösaikana.

Paras vaihtoehto tietysti olisi, jos uuteen JSR 305:een saataisiin DbC-säännöt mukaan.

Artikkeli on luettu 926 kertaa. Kuuluu luokkiin: Ohjelmointi, Java, Test-Driven Development

1 Kommentti Lisää kommentti

Jätä kommentti

(ei näy sivuilla)

(kirjoita kuvassa näkyvät merkit, pakollinen)

Sallitut HTML-elementit:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Trackback this post  |  Subscribe to the comments via RSS Feed


Kalenteri

Heinäkuu 2007
M T K T P L S
« Kes   Syy »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

Uusimmat kirjoitukset

Sivusto

The important thing is not to stop questioning. Curiosity has its own reason for existing. One cannot help but be in awe when he contemplates the mysteries of eternity, of life, of the marvelous structure of reality.
- Albert Einstein