I am really happy with how web2py development is going. As long as the project keeps growing, the code will keep getting better. You guys are doing a great job!
On May 23, 11:34 am, Iceberg <[email protected]> wrote: > > On May 22, 1:56 pm, b00m_chef <[email protected]> wrote: > > > Learn from the best on how to manage a release > > > cycle:http://www.youtube.com/watch?v=i7pkyDUX5uM > > On May23, 9:17pm, mdipierro <[email protected]> wrote: > > > > > > > Let me explain what we do now because it has some similarities with > > what described in the video below (above). > > > There is a single web2py. I do not branch a release and fix bugs in > > the brunched release. A release in web2py is just a snapshot in time > > of the official web2py branch. This means we do not need to have a > > testing team and a development team. We do not have problems with > > people working on different branches. I always run the latest (trunk) > > version and I hope other developers are doing the same. > > > Because web2py has to keep API backward compatibility we do not the > > concept of "locking" the API because they are always locked. > > > When I receive patches they belong to one of the following categories: > > 1) a bug fix. Usually they are in response of a clear problem and > > problem and self contained. > > 2) a new feature. In this case I look at the code and make sure it is > > backward compatibility. I may or may not test the new feature. I > > usually ask users to do so. The person who proposed the new feature > > usually tests and maintains the new feature. > > 3) a rewrite. This happened rarely but has been the cause of some > > problem. Once in a while we feel that some piece of code (complex, > > designed and optimized over years) needs to be rewritten (this may be > > necessary because users feel the code could be more readable, faster > > or simply in order to a new "major" feature). > > > We never had problems with 1 and 2. The problems we have had were > > always due to 3, code rewrite. Whether it was a single function or an > > entire module. The problem with code rewrite is that there is some > > collective knowledge about the code to be rewritten and no individual > > has the same knowledge about all the details. For example a certain > > line of code may be written in certain way to make sure that it works > > on python 2.4 or to provide a certain obscure feature that is not > > documented (not even designed) but users have unknowingly started to > > rely on it. When code is rewritten people make sure that the new code > > behaves exactly like the old code in regard to documented features but > > that is not enough. New code should behave exactly as old code even > > (before new features are added) in all cases. That is very hard to > > test. > > > How do I handle this? If there is a minor code rewrite I test it > > myself and assign somebody to look at it. If the code rewrite is > > major, I keep it in a separate file (dal.py intead of sql.py and > > template2.py instead of template.py) and ask people to run web2py with > > the new module instead of the old module. We do not branch web2py > > because small (and safe) features and bug fixes are being added to > > web2py that do not interfere with the rewrite. > > > What can we do? 1) we should have more unittests; 2) we should lock a > > release for one week before releasing and allow people testing it; 3) > > we should keep track of how many people are using the release > > candidate. > > > Some people think that unittests fix all problems. That is not true. > > Consider the case of the rewrite of the template module. The new > > module worked almost identical to the original one (except for the new > > features) with one caveat: It changed the way application bugs were > > going to reported in the ticket. How do you write unittests for > > application bugs? It is possible but very time consuming. Even if the > > code has been in the nightly built for two weeks and even if emailed > > other developers for checking it, some of the issues did not come up > > because web2py developers tend not to introduce bugs in their > > application code and therefore they did not notice the differences in > > how errors were reported. Only once released to the general public the > > problem showed up. The problem was identified and fixed in 24 hours. > > Unfortunately some of the new features introduced in the rewrite had > > to be reverted and their release postponed pending more testing (now > > that we know what to test). > > > Massimo > > I used to work for a big company for a big product, therefore kind of > knew how difficult to maintain a product with many branches, in the > traditional way, a.k.a. new features are only added into trunk, and > each release is tagged and forked as a bugfix-only branch. > > Now I would like to say, web2py uses a completely different approach, > that is "no need to branch", therefore do not have problems when > people would work on different branches. Thanks to web2py's stable API > from the beginning (awesome job, Massimo), and the promise of backward > compatibility. > > Unittest surely can not prevent all problem, but I think we are now > doing less than enough, rather than overcooked. Most features are > testable but still without test cases. I admit sometimes it can feel > boring and time consuming to write test cases, but it is still worthy > if you believe test cases should be considered a valuable part of > source code and it pays off when doing TDD or recursive test after > refactoring. Ok, ok, enough preachment here. :) > > Locking a release (candidate) for one week before releasing and allow > people testing it, is the way python doing. It should work as long as, > enough people, even those who would not update his work copy > frequently, are willing to response to the call of "Uncle M" saying "I > want you to test web2py RC-1.x" > :-)http://blogs.gnome.org/dcbw/files/2009/03/unclesam.jpg > > Let's keep making web2py better! > > Regards, > Iceberg

