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 < [EMAIL PROTECTED]> 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 < [EMAIL PROTECTED]>:

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: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED]] 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 <[EMAIL PROTECTED] >:

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: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED]] 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 < [EMAIL PROTECTED] >:

Hello Martin,

 

"Interface" allow syntax check during compile time.

"Tests" allow semantic validation during runtime.

 

Regards

Bernd

 


Von: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED]] 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 <[EMAIL PROTECTED] >:

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: [EMAIL PROTECTED] [mailto: [EMAIL PROTECTED]] Im Auftrag von Miguel Serrano Milano
Gesendet: Samstag, 7. Oktober 2006 16:09
An: [email protected]
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" < [EMAIL PROTECTED]>

Subject: [osflash] Design By Contract on ActionScript 2

Message-ID:

            < [EMAIL PROTECTED]>

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

 

 

 


_______________________________________________
osflash mailing list
[email protected]
http://osflash.org/mailman/listinfo/osflash_osflash.org




--
ICQ: 117662935
Skype: mastakaneda


_______________________________________________
osflash mailing list
[email protected]
http://osflash.org/mailman/listinfo/osflash_osflash.org




--
ICQ: 117662935
Skype: mastakaneda


_______________________________________________
osflash mailing list
[email protected]
http://osflash.org/mailman/listinfo/osflash_osflash.org




--
ICQ: 117662935
Skype: mastakaneda


_______________________________________________
osflash mailing list
[email protected]
http://osflash.org/mailman/listinfo/osflash_osflash.org





--
ICQ: 117662935
Skype: mastakaneda

_______________________________________________
osflash mailing list
[email protected]
http://osflash.org/mailman/listinfo/osflash_osflash.org





--
j:pn
http://www.lennel.org
_______________________________________________
osflash mailing list
[email protected]
http://osflash.org/mailman/listinfo/osflash_osflash.org

Reply via email to