OVH Cloud OVH Cloud

programmation par contrat et c# (DBC)

1 réponse
Avatar
azamruk
Bonjour, je m'intéresse à la programmation par contrat dans le monde
dotnet (en C#).

La programmation par contrat (DBC in english) est une technique
efficace pour construire des logiciels robustes et ça serait dommage
de s'en passer.

En gros ce que je recherche c'est quelquechose comme ça :

<<

[invariant( (m_a >= 0) && (m_a < MAX_A) )]
public class toto {

private int m_a = 0 ;
private const int MAX_A = 1000 ;

[save(old = m_a)]
[require(m_a >= 0)]
[ensure(m_a = old + a)]
public void addthis(int a) {
m_a += a ;
}
}

>>

L'utilisation des attributs n'est pas la seule possibilités, mais ça
me paraît une bonne idée dans ce contexte (à la fois code et
documentation)

Est-ce que quelqu'un connaît une implémentation existante, ou
approchante de ce genre de technique ?

Sinon, pour l'implémenter, j'ai un peu de mal à voir comment faire.

L'intérêt est aussi d'avoir un outil qui génère automatiquement la
documentation sur le contrat d'une classe.

Il y a bien http://www.codeproject.com/csharp/designbycontract.asp,
mais c'est assez limité par rapport à ce que l'on peut faire en
Eiffel, ou en C++ avec nana.

Il y a aussi des trucs en python qui utilisent la meta-programmation
et la réflexion.
Ce qui est une piste pour C#...

Enfin, si vous avez des idées, des remarques, je suis toutes ouïes
ouvertes !

__
Azam.

1 réponse

Avatar
Gauthier Segay
Au niveau dotnet j'ai déjà entendu parlé de ça:

http://www.resolvecorp.com/ qui a implementé le DBC dans une extension
au langage C#, cette extension semble aussi se baser sur les attributs.

sinon pour l'implémentation, ca se passe au niveau du compilateur a mon
sens, il faut:
-compiler le code avec les attributs.
-passer en revue chaque membre (chaque méthode) "signée" avec un
attribut de type DBC, afin d'y appliquer une sorte de test unitaire
généré dynamiquement.
-retourner des warnings ou des erreurs de compilation lorsque les tests
ont échoués.

Bref ca demande pas mal de boulot, et pour le moment je préfère rester
avec NUnit pour faire tout ça sans mettre au point mon propre
métalangage pour automatiser et permettre le DBC dans c#.

Ceci dit je n'ai pas jetté un coup d'oeil à la page codeproject, peut
être que cela délivre une bonne base pour implémenter la suite?

Gauthier

azamruk wrote:

Bonjour, je m'intéresse à la programmation par contrat dans le monde
dotnet (en C#).

La programmation par contrat (DBC in english) est une technique
efficace pour construire des logiciels robustes et ça serait dommage
de s'en passer.

En gros ce que je recherche c'est quelquechose comme ça :

<<

[invariant( (m_a >= 0) && (m_a < MAX_A) )]
public class toto {

private int m_a = 0 ;
private const int MAX_A = 1000 ;

[save(old = m_a)]
[require(m_a >= 0)]
[ensure(m_a = old + a)]
public void addthis(int a) {
m_a += a ;
}
}

> >

L'utilisation des attributs n'est pas la seule possibilités, mais ça
me paraît une bonne idée dans ce contexte (à la fois code et
documentation)

Est-ce que quelqu'un connaît une implémentation existante, ou
approchante de ce genre de technique ?

Sinon, pour l'implémenter, j'ai un peu de mal à voir comment faire.

L'intérêt est aussi d'avoir un outil qui génère automatiquement la
documentation sur le contrat d'une classe.

Il y a bien http://www.codeproject.com/csharp/designbycontract.asp,
mais c'est assez limité par rapport à ce que l'on peut faire en
Eiffel, ou en C++ avec nana.

Il y a aussi des trucs en python qui utilisent la meta-programmation
et la réflexion.
Ce qui est une piste pour C#...

Enfin, si vous avez des idées, des remarques, je suis toutes ouïes
ouvertes !

__
Azam.