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 !
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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 !
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 !