Hoi,
Ten eerste, ik heb geen idee of mijn topic hier hoort, maar omdat het toch wel een beetje de theoretische kant is van software engineering dacht ik dat dit forum goed was... bij voorbaat excuses mocht het niet goed zijn
Goed, mijn vraag dan. Volgende week gaan wij op kantoor een overstap maken van CVS naar SubVersion (SVN). Tergelijkertijd willen wij onze branching strategie daarbij aanpassen, aangezien het nu te vaak op chaos uitloopt en we vaak niet meer oude versies kunnen bouwen (eerlijk gezegd doen we niet heel veel aan branchen in ons hoofdproduct).
Onze werkwijze:
Momenteel is het zo dat wij in principe elke vrijdag aan bugfixing doen in onze software (hoewel vaak ook wel andere dagen) en vrijdag ook elke keer een build klaar zetten voor QA. Deze build kan, mits goedgekeurd door QA, uitgeleverd worden (meestal de vrijdag daarop) hoewel dat op dat moment nog niet vaststaat.
Nu heb ik uit het boek Essential CVS een tweetal branching strategieën gehaald:
Beide methoden spreken me aan. Maar ik denk dat de eerste strategie (basically stable) voor ons niet haalbaar is, maar wellicht dat ik het mis heb. Zoals ik het zie gaat het als volgt:
1) Developer moet vrijdag bug fixing doen, en maakt van de trunk een branch (b1).
2) Bug fixes worden in die branch gedaan
3) Build wordt klaargezet voor QA
Na stap 3 is de programmeur klaar voor deze build, en dus branch b1. Echter, de code mag in principe niet worden gemerged naar de stable trunk want de software is nog niet goedgekeurd. Echter de developer moet maandag weer verder, maar mag in principe niet meer aan die branch komen, want die is potentieel stable. Dan kan je eventueel een branch maken vanaf b1, maar ik heb het gevoel dat je dan weer het doel voorbij schiet. Wat we ook kunnen doen is op maandag een nieuwe branch maken vanaf de trunk, en de wijzigingen van vrijdag daar weer in mergen (of juist wachten totdat deze wijzigingen stable zijn, maar dan zit je dus te ontwikkelen in een branch waar bug fixes niet in zitten, lijkt me ietwat te foutgevoelig)
Het idee van een branch maken van de stabiele software bevalt me echter wel, vooral als we ingrijpende wijzigingen moeten gaan doen.
Nog een alternatief is om gelijk van branch b1 terug te mergen naar de trunk, met de gedachte dat de vorige versie (die wel stabiel was) een aparte branch is.
De basically unstable strategie is wellicht wat meer toegesneden op onze manier van werken. Je werkt in de trunk, en elke keer als er een build voor QA wordt gemaakt wordt er ook een branch gemaakt. Het nadeel hier van is dat je niet zo heel makkelijk ingrijpende wijzigingen kan doen...
Kortom, ik hink een beetje op twee gedachten, en wellicht is mijn gedachtengang niet juist. Mijn voorkeur gaat uit naar basically stable, maar dan moet er iets veranderen aan de werkwijze (met SVN dan).
Of zijn er nog alternatieve werkwijzen te bedenken?
Ten eerste, ik heb geen idee of mijn topic hier hoort, maar omdat het toch wel een beetje de theoretische kant is van software engineering dacht ik dat dit forum goed was... bij voorbaat excuses mocht het niet goed zijn
Goed, mijn vraag dan. Volgende week gaan wij op kantoor een overstap maken van CVS naar SubVersion (SVN). Tergelijkertijd willen wij onze branching strategie daarbij aanpassen, aangezien het nu te vaak op chaos uitloopt en we vaak niet meer oude versies kunnen bouwen (eerlijk gezegd doen we niet heel veel aan branchen in ons hoofdproduct).
Onze werkwijze:
Momenteel is het zo dat wij in principe elke vrijdag aan bugfixing doen in onze software (hoewel vaak ook wel andere dagen) en vrijdag ook elke keer een build klaar zetten voor QA. Deze build kan, mits goedgekeurd door QA, uitgeleverd worden (meestal de vrijdag daarop) hoewel dat op dat moment nog niet vaststaat.
Nu heb ik uit het boek Essential CVS een tweetal branching strategieën gehaald:
Basically stable The basically stable branching philosophy states that the trunk should contain project data that is always close to being ready for release. Branches are used for development, bug fixes, prerelease QA (quality assurance), and refactoring. Branches are also used for experimental code. The strictest variation of this philosophy states that nothing should be merged to the trunk until it has been through QA. This ensures that at any time a release candidate can be taken from the trunk, put through a small amount of QA, and then published or sold. More lenient variations of this philosophy allow anything that passes developer unit-testing to be merged into the trunk. Such a relaxed approach requires a release candidate to be branched off and put through a full QA analysis before publication. Advantages of the basically stable method include the following:
Basically unstable The basically unstable philosophy states that the trunk should contain the latest code, regardless of its stability, and that release candidates should be branched off for QA. The strictest variation states that all development takes place on the trunk and branches are used only for release candidates, bugfix branches, and releases. More lenient variations also allow branching for experimental code, refactoring, and other special-case code. Merging of a branch back into the trunk is done by the managers of the branch. The advantage of this philosophy is that merging doesn't happen often and is easier to do because it is usually done by people familiar with the code. The disadvantage of this philosophy, especially when applied in its strictest form, is that the main trunk often contains buggy code, experimental work, and sometimes code that doesn't compile at all. Frequent tagging can reduce this disadvantage, so tag every time there's good code or whenever someone starts to experiment or refactor. The more lenient variations keep the buggiest code and the code most likely to cause significant breakage off the trunk, reducing the time it takes to prepare a release for publication. |
Beide methoden spreken me aan. Maar ik denk dat de eerste strategie (basically stable) voor ons niet haalbaar is, maar wellicht dat ik het mis heb. Zoals ik het zie gaat het als volgt:
1) Developer moet vrijdag bug fixing doen, en maakt van de trunk een branch (b1).
2) Bug fixes worden in die branch gedaan
3) Build wordt klaargezet voor QA
Na stap 3 is de programmeur klaar voor deze build, en dus branch b1. Echter, de code mag in principe niet worden gemerged naar de stable trunk want de software is nog niet goedgekeurd. Echter de developer moet maandag weer verder, maar mag in principe niet meer aan die branch komen, want die is potentieel stable. Dan kan je eventueel een branch maken vanaf b1, maar ik heb het gevoel dat je dan weer het doel voorbij schiet. Wat we ook kunnen doen is op maandag een nieuwe branch maken vanaf de trunk, en de wijzigingen van vrijdag daar weer in mergen (of juist wachten totdat deze wijzigingen stable zijn, maar dan zit je dus te ontwikkelen in een branch waar bug fixes niet in zitten, lijkt me ietwat te foutgevoelig)
Het idee van een branch maken van de stabiele software bevalt me echter wel, vooral als we ingrijpende wijzigingen moeten gaan doen.
Nog een alternatief is om gelijk van branch b1 terug te mergen naar de trunk, met de gedachte dat de vorige versie (die wel stabiel was) een aparte branch is.
De basically unstable strategie is wellicht wat meer toegesneden op onze manier van werken. Je werkt in de trunk, en elke keer als er een build voor QA wordt gemaakt wordt er ook een branch gemaakt. Het nadeel hier van is dat je niet zo heel makkelijk ingrijpende wijzigingen kan doen...
Kortom, ik hink een beetje op twee gedachten, en wellicht is mijn gedachtengang niet juist. Mijn voorkeur gaat uit naar basically stable, maar dan moet er iets veranderen aan de werkwijze (met SVN dan).
Of zijn er nog alternatieve werkwijzen te bedenken?
[ Voor 2% gewijzigd door ^Mo^ op 11-11-2006 19:56 . Reden: nog een alternatief toegevoegd ]
"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs