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 960 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

Don't find fault, find a remedy.
- Henry Ford