[osflash] Design By Contract on ActionScript 2

Johannes Nel johannes.nel at gmail.com
Sun Oct 8 10:11:15 EDT 2006


i used to do this via asserts inside my functions to test pre and post
conditions(and even mid way through functions) and then used a python script
to remove these from my functions before i released (just some targets in an
ant script). i thought this was quite a conveniant way to approach this.

it was ralf who brought my attention to design by contract on this list more
than a year ago :)

On 10/8/06, Martin Heidegger <mastakaneda at gmail.com> wrote:
>
> You think of runtime validation of parameters? Thats insane concerning
> performance and performance is what flash lacks in.
>
> yours
> Martin.
>
> 2006/10/8, Bernd Will < bernd at ewill.de>:
> >
> >  Hello Martin,
> >
> >
> >
> > You like to put the stuff outside the classes, while I would like to see
> > tests and validation being embedded as a kind of class documentation.
> >
> >
> >
> > Regards
> >
> > Bernd
> >  ------------------------------
> >
> > *Von:* osflash-bounces at osflash.org [mailto: osflash-bounces at osflash.org]
> > *Im Auftrag von *Martin Heidegger
> > *Gesendet:* Sonntag, 8. Oktober 2006 15:32
> > *An:* Open Source Flash Mailing List
> > *Betreff:* Re: [osflash] Design By Contract on ActionScript 2
> >
> >
> >
> > I merly know about DBC what Wikipedia tells me.
> >
> > Well, thats what mocks are supposed to do - at least they should help.
> > Once you use a mock in a unit test you should be able to check the state
> > before and the state afterwards. Interfaces are helpers that allow
> > generic/plugable designs. You assume a functionality by methods and
> > documentation. Then you check the implementation using mocks. I usually
> > create a Abstract test and extended versions for every implementation. I
> > usually check multiple valid and invalid inputs and check the output with a
> > Mock. That should be a fully working test of the implementation - right?
> >
> > yours
> > Martin.
> >
> > 2006/10/8, Bernd Will <bernd at ewill.de >:
> >
> > Hello Martin,
> >
> >
> >
> > you mean that every class should get an interface ?
> >
> > DBC is more than just a syntax check, DBC allows pre and post checking
> > as well:
> >
> > http://www.wayforward.net/pycontract/
> >
> >
> >
> > Regards
> >
> > Bernd
> >
> >
> >  ------------------------------
> >
> > *Von:* osflash-bounces at osflash.org [mailto: osflash-bounces at osflash.org]
> > *Im Auftrag von *Martin Heidegger
> > *Gesendet:* Sonntag, 8. Oktober 2006 15:14
> >
> >
> > *An:* Open Source Flash Mailing List
> > *Betreff:* Re: [osflash] Design By Contract on ActionScript 2
> >
> >
> >
> > Well - so what? Unittests together with interfaces seem to be a strategy
> > that matches enough - doesn't it?
> >
> > yours
> > Martin.
> >
> > 2006/10/8, Bernd Will < bernd at ewill.de >:
> >
> > Hello Martin,
> >
> >
> >
> > "Interface" allow syntax check during compile time.
> >
> > "Tests" allow semantic validation during runtime.
> >
> >
> >
> > Regards
> >
> > Bernd
> >
> >
> >  ------------------------------
> >
> > *Von:* osflash-bounces at osflash.org [mailto: osflash-bounces at osflash.org]
> > *Im Auftrag von *Martin Heidegger
> > *Gesendet:* Sonntag, 8. Oktober 2006 14:23
> > *An:* Open Source Flash Mailing List
> >
> > *Betreff:* Re: [osflash] Design By Contract on ActionScript 2
> >
> >
> >
> > To me working with interfaces is DBC. A object has a interface that
> > allows certain usage this usage is documented and tested with unit tests. is
> > there a need for more?
> >
> > greetings
> > Martin.
> >
> > 2006/10/7, Bernd Will <bernd at ewill.de >:
> >
> > Hello everybody,
> >
> >
> >
> > similar to doctest, DBC in Python is also easily injected by inserting
> > inside those comment tags at the beginning of a method.
> >
> > It is very nice seeing UNITTEST and DBC in one comment placed directly
> > below the method's head.
> >
> > Here an example for UNITTEST and DBC in Python:
> >
> >
> >
> > def sort(a):
> >
> >     """Sort a list *IN PLACE*.
> >
> >
> >
> >     >>> a = [1, 1, 1, 1, 1, 2, 2, 1]
> >
> >     >>> sort(a)
> >
> >
> >
> >
> >
> >
> >
> >
> >     >>> a
> >
> >
> >
> >     [1, 1, 1, 1, 1, 1, 2, 2]
> >
> >
> >
> >
> >
> >     >>> a = 'the quick brown fox jumped over the lazy dog'.split()
> >
> >
> >
> >     >>> sort(a)
> >
> >     >>> a
> >
> >
> >
> >     ['brown', 'dog', 'fox', 'jumped', 'lazy', 'over', 'quick', 'the', 'the']
> >
> >
> >
> >
> >
> >
> >     pre:
> >
> >         # must be a list
> >
> >
> >
> >
> >
> >
> >         isinstance(a, list)
> >
> >
> >
> >
> >
> >
> >
> >         # all elements must be comparable with all other items
> >
> >
> >
> >         forall(range(len(a)),
> >
> >
> >
> >
> >
> >                lambda i: forall(range(len(a)),
> >
> >
> >
> >
> >
> >                                 lambda j: (a[i] < a[j]) ^ (a[i] >= a[j])))
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >     post[a]:
> >
> >         # length of array is unchanged
> >
> >
> >
> >
> >
> >
> >
> >
> >         len(a) == len(__old__.a)
> >
> >
> >
> >
> >
> >         # all elements given are still in the array
> >
> >
> >
> >
> >
> >         forall(__old__.a, lambda e: __old__.a.count(e) == a.count(e))
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >         # the array is sorted
> >
> >         forall([a[i] >= a[i-1] for i in range(1, len(a))])
> >
> >
> >
> >
> >
> >
> >     """
> >
> >
> >
> >     a.sort()
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > # enable contract checking
> >
> >
> >
> >
> >
> > import contract
> >
> >
> >
> >
> >
> > contract.checkmod(__name__)
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > def _test():
> >
> >
> >
> >
> >
> >
> >
> >
> >     import doctest, sort
> >
> >
> >
> >
> >
> >     return doctest.testmod(sort)
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > if __name__ == "__main__":
> >
> >
> >
> >     _test()
> >
> >
> >
> >
> >
> > Regards
> >
> > Bernd
> >
> >
> >  ------------------------------
> >
> > *Von:* osflash-bounces at osflash.org [mailto: osflash-bounces at osflash.org]
> > *Im Auftrag von *Miguel Serrano Milano
> > *Gesendet:* Samstag, 7. Oktober 2006 16:09
> > *An:* osflash at osflash.org
> > *Betreff:* Re: [osflash] Design By Contract on ActionScript 2
> >
> >
> >
> >
> >
> >
> >
> > Hi! I've been thinking about this last days. There's no solution at the
> > moment, but it is not difficult to develop a solution by one of this two
> > ways:
> >
> >
> >
> > 1. Explicit asserts and an AOP approach to check and invariants. The
> > asserts are easy to define: just a collection of Assert.precondition()
> > and Assert.precondition(), and as invariants a method classInvariants()
> > could be defined to be invoked after every method call.
> >
> >
> >
> > 2. A precompiler. I think there are tools to write precompilers for any
> > language. Do somebody know something about this?
> >
> >
> >
> > What do you think?
> >
> >
> >
> >
> >
> >
> >
> > Message: 1
> >
> > Date: Thu, 5 Oct 2006 15:11:13 -0300
> >
> > From: "Marcelo de Moraes Serpa" < celoserpa at gmail.com>
> >
> > Subject: [osflash] Design By Contract on ActionScript 2
> >
> > To: osflash at osflash.org
> >
> > Message-ID:
> >
> >             <1e5bcefd0610051111u32390762kc43f423a31d8b4f5 at mail.gmail.com>
> >
> >
> > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> >
> >
> >
> > Is there any tool for AS2 that allows me to implement the DBC
> > methodology?
> >
> >
> >
> > Cheers,
> >
> >
> >
> > Marceo.
> >
> >
> >
> > Miguel Serrano Milano
> >
> > mserranom at gmail.com
> >
> >
> >
> >
> >
> >
> >
> >
> > _______________________________________________
> > osflash mailing list
> > osflash at osflash.org
> > http://osflash.org/mailman/listinfo/osflash_osflash.org
> >
> >
> >
> >
> > --
> > ICQ: 117662935
> > Skype: mastakaneda
> >
> >
> > _______________________________________________
> > osflash mailing list
> > osflash at osflash.org
> > http://osflash.org/mailman/listinfo/osflash_osflash.org
> >
> >
> >
> >
> > --
> > ICQ: 117662935
> > Skype: mastakaneda
> >
> >
> > _______________________________________________
> > osflash mailing list
> > osflash at osflash.org
> > http://osflash.org/mailman/listinfo/osflash_osflash.org
> >
> >
> >
> >
> > --
> > ICQ: 117662935
> > Skype: mastakaneda
> >
> > _______________________________________________
> > osflash mailing list
> > osflash at osflash.org
> > http://osflash.org/mailman/listinfo/osflash_osflash.org
> >
> >
> >
>
>
> --
> ICQ: 117662935
> Skype: mastakaneda
> _______________________________________________
> osflash mailing list
> osflash at osflash.org
> http://osflash.org/mailman/listinfo/osflash_osflash.org
>
>
>


-- 
j:pn
http://www.lennel.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://osflash.org/pipermail/osflash_osflash.org/attachments/20061008/fa086a17/attachment-0001.htm


More information about the osflash mailing list