CSC/ECE 517 Fall 2010/ch6 6e sc: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
Line 6: Line 6:


=== Collective Ownership ===
=== Collective Ownership ===
Chengbo's section...
Best Definition
When we talk about ownership, we are generally talking about following 5 factors
Direct benefit from increases in value or generated income
� Pride in appearance, achievement, and improvement
� Responsibility for problems, flaws, or routine maintenance
� Commitment to long-term involvement
� Potential for successful resale (reuse)
Regarding the XP practice as a development practice guide, the collective code ownership doesn't deal with warefare directly. It gets credit in the virtue of knowledge and development procedure. In the words of Kent Beck (Kent Beck is an American software engineer and the creator of the Extreme Programming[1]and Test Driven Development software development methodologies. Beck was one of the 17 original signatories of the Agile Manifesto in 2001)  means "Anyone can change anything at anytime", which works similarly to open source programming. This definition directly deal with the Responsibility for problems, flaws, or routine maintenance, but not saying things about warefare brought by the ownership.
Benefit:
Collective code ownership    avoiding truck factor. The truck factor is used to describe what would happen if one of the coding team member gets hit by a truck. For example, the truck factor is one, if there is only one person working on a sub-system. As if this person got hit on the road, then the odds for the team to lose the knowledge of the sub-system at least temparury is 100%. The truck factor is 0.5 if there are 2 person working on the same project. Collective code ownership enables the knowledge of certain code is shared within the development team and thus has a low truck factor. This will be very important for an volatile coding team with frequent developers move in and out.
Except to avoid very high truck factor, collective code ownership is also believed to minimize the politics turf in the developing team. This is commonly seen when a developer or small group of developer are doing a subsystem. Then different groups of people would build obstacle between. To complete certain function system wide, you have to concult each of these develop groups or individuals one by one. This slows down the development.  


Essential concepts to put CCO in practice
As mentioned above, CCO is not simply ownership concept in daily life, rather it emphasi on code knowledge sharing. But it is the way how it is practised that makes it controversial. Typically it will have two other principles to serve as the most fundamental support to ensure an effecitive CCO, pair programming and complete unit test before check in code changes.
Pair programming is essential for knowledge sharing. Only if the person who is working on the code block could be said as truly know this code. Common bad practice is that the sub-system is still worked out be one person, only difference is he 'tells' other what he does. And this pair programming would require frequent partner changes. So in this senario, each person has the experience of every part of the sub system. The knowledge of the code is truely shared by all the team members.
Complete unit test is of the key importance to make a good quality code. So is it in CCO consideration. As different developer may have different view point on certain code segment, if there is no test framework to serve as a coding standard for each function, the behavior of certain sub-system would be totally unpredictable. This will only lead the CCO into no ownership chaos.
As mentioned in many articles, except the two mention above, other practise principles, (including but not limited to continuous integration, code management tools like SVN, powerful refactoring and browing tools to check old methods) are believe to help with building up CCO in development team. Actually, after look into each of the principles, you will find the help is essentially coming from the two key practise which is coincidently lying within these other principles.
What makes it not widely practised, if any, or what makes it controversial
Areas where it is popular and where it is cumbersome
Limitation in programming for large business.
In real world, it is the lack of the ability to implement these two practise required inherently in CCO that makes ownership sharing become a little bit controversial. Especially for a large development team, the overhead for sharing code knowledge could be un-acceptable big. In the company doing out-sourcing or gloable developing, almost no way to do pair programming and even simple oral report for code change will be impossible.
Therefore, CCO is considered not good for very large group, such as 100+. In fact, most people would consider it is an effective coding practice if there are only 20- develop. If only 3 or 6 people are involved, in the most common cases, it will get the most positive comments. On the other hand, for a large number of developers, it will be hard to carry on a well focused system skeleton. And even on the contrary to the initial goodwill, it will be hard to establish the resposibility for tasks or problems.
Not the most efficient programming style for different development period
After all, XP practise is mostly focused on light weight but rapid code writing, and thus may not have the best effect for use cases collection, architecture design or after production maintenance. This will give trouble to a whole project release period. A more advanced idea on code ownership is dynamic code ownership. It focuses on the whole development period under the Unified software development process framework and make use of different kind of ownership at different development stage. For short, at the inception period, one or two product specialist collects the system requirement and build up the documentation. Then several experienced chief architects make up the blue print for the whole project. Further increasing the development team, the project runs into code writing session and CCO is implemented. After production release, only a small portion of people is needed to do maintenance.
Conflicts with other programming practise guide
Except not suitable for whole development period and large development teams, without careful training of each programmer, it breaks out the brief hold by OOP -- information hiding. If each programmer well knows each part of the code, he/she may easily get into the idea to change other implementation of a class out of his working code segment. This is for sure bad practise considered in OOP. This is the outcome of the root debate between agile practise and traditional design-first practice. The latter one tends to separate the whole project into small ones, and each of the small one doesn't need the knowledge of other part. We can readily to say, this is coming from the difference for a very big project and small project. Then we falls back into the project team size debate again.
The good Collective code ownership example
"A team follow Continuous Integration, Pairing, Story Test-Driven Development and Coding Standard. As programmers work in pairs, at any point, two people will know about a part of the system. Frequently rotating pairs helps diffuse knowledge across the team. After a point, it would be impossible to associate one programmer with any portion of the system, as everyone on the team has worked on it at some point. "
The Bad Collective code ownership example
A team with not complete unit test framework and have no submitter's name in the source code repository. Some one gets furious because another incompetent developer is free to make stupid mistakes everyday and not being blamed. Obviously, they are not implementing a good pair programming scheme as well.


=== Continuous Integration ===
=== Continuous Integration ===
Shannon's section...
Shannon's section...

Revision as of 17:52, 16 November 2010

(THIS PARAGRAPH IS ONLY FOR OUR USE. WILL BE DELETED BEFORE SUBMISSION.) Two of the important Agile methodologies that we have not said much about in this course are collective ownership and continuous integration. What are the best definitions or examples you can find? Are these widely practiced? Are they controversial? Are there adherents of other design methodologies who consider them harmful? Investigate, through the Web and through the ACM DL.

Collective Ownership and Continuous Integration

In this chapter we will look into two important methodologies of Agile development: collective ownership and continuous integration. We will discuss what these methodologies are and provide examples. We will discuss the practice and acceptance of these methodologies as well as any drawbacks they have.

Collective Ownership

Best Definition When we talk about ownership, we are generally talking about following 5 factors Direct benefit from increases in value or generated income � Pride in appearance, achievement, and improvement � Responsibility for problems, flaws, or routine maintenance � Commitment to long-term involvement � Potential for successful resale (reuse) Regarding the XP practice as a development practice guide, the collective code ownership doesn't deal with warefare directly. It gets credit in the virtue of knowledge and development procedure. In the words of Kent Beck (Kent Beck is an American software engineer and the creator of the Extreme Programming[1]and Test Driven Development software development methodologies. Beck was one of the 17 original signatories of the Agile Manifesto in 2001) means "Anyone can change anything at anytime", which works similarly to open source programming. This definition directly deal with the Responsibility for problems, flaws, or routine maintenance, but not saying things about warefare brought by the ownership. Benefit: Collective code ownership avoiding truck factor. The truck factor is used to describe what would happen if one of the coding team member gets hit by a truck. For example, the truck factor is one, if there is only one person working on a sub-system. As if this person got hit on the road, then the odds for the team to lose the knowledge of the sub-system at least temparury is 100%. The truck factor is 0.5 if there are 2 person working on the same project. Collective code ownership enables the knowledge of certain code is shared within the development team and thus has a low truck factor. This will be very important for an volatile coding team with frequent developers move in and out. Except to avoid very high truck factor, collective code ownership is also believed to minimize the politics turf in the developing team. This is commonly seen when a developer or small group of developer are doing a subsystem. Then different groups of people would build obstacle between. To complete certain function system wide, you have to concult each of these develop groups or individuals one by one. This slows down the development.


Essential concepts to put CCO in practice As mentioned above, CCO is not simply ownership concept in daily life, rather it emphasi on code knowledge sharing. But it is the way how it is practised that makes it controversial. Typically it will have two other principles to serve as the most fundamental support to ensure an effecitive CCO, pair programming and complete unit test before check in code changes. Pair programming is essential for knowledge sharing. Only if the person who is working on the code block could be said as truly know this code. Common bad practice is that the sub-system is still worked out be one person, only difference is he 'tells' other what he does. And this pair programming would require frequent partner changes. So in this senario, each person has the experience of every part of the sub system. The knowledge of the code is truely shared by all the team members. Complete unit test is of the key importance to make a good quality code. So is it in CCO consideration. As different developer may have different view point on certain code segment, if there is no test framework to serve as a coding standard for each function, the behavior of certain sub-system would be totally unpredictable. This will only lead the CCO into no ownership chaos. As mentioned in many articles, except the two mention above, other practise principles, (including but not limited to continuous integration, code management tools like SVN, powerful refactoring and browing tools to check old methods) are believe to help with building up CCO in development team. Actually, after look into each of the principles, you will find the help is essentially coming from the two key practise which is coincidently lying within these other principles.

What makes it not widely practised, if any, or what makes it controversial Areas where it is popular and where it is cumbersome Limitation in programming for large business. In real world, it is the lack of the ability to implement these two practise required inherently in CCO that makes ownership sharing become a little bit controversial. Especially for a large development team, the overhead for sharing code knowledge could be un-acceptable big. In the company doing out-sourcing or gloable developing, almost no way to do pair programming and even simple oral report for code change will be impossible. Therefore, CCO is considered not good for very large group, such as 100+. In fact, most people would consider it is an effective coding practice if there are only 20- develop. If only 3 or 6 people are involved, in the most common cases, it will get the most positive comments. On the other hand, for a large number of developers, it will be hard to carry on a well focused system skeleton. And even on the contrary to the initial goodwill, it will be hard to establish the resposibility for tasks or problems.

Not the most efficient programming style for different development period After all, XP practise is mostly focused on light weight but rapid code writing, and thus may not have the best effect for use cases collection, architecture design or after production maintenance. This will give trouble to a whole project release period. A more advanced idea on code ownership is dynamic code ownership. It focuses on the whole development period under the Unified software development process framework and make use of different kind of ownership at different development stage. For short, at the inception period, one or two product specialist collects the system requirement and build up the documentation. Then several experienced chief architects make up the blue print for the whole project. Further increasing the development team, the project runs into code writing session and CCO is implemented. After production release, only a small portion of people is needed to do maintenance.

Conflicts with other programming practise guide Except not suitable for whole development period and large development teams, without careful training of each programmer, it breaks out the brief hold by OOP -- information hiding. If each programmer well knows each part of the code, he/she may easily get into the idea to change other implementation of a class out of his working code segment. This is for sure bad practise considered in OOP. This is the outcome of the root debate between agile practise and traditional design-first practice. The latter one tends to separate the whole project into small ones, and each of the small one doesn't need the knowledge of other part. We can readily to say, this is coming from the difference for a very big project and small project. Then we falls back into the project team size debate again.

The good Collective code ownership example "A team follow Continuous Integration, Pairing, Story Test-Driven Development and Coding Standard. As programmers work in pairs, at any point, two people will know about a part of the system. Frequently rotating pairs helps diffuse knowledge across the team. After a point, it would be impossible to associate one programmer with any portion of the system, as everyone on the team has worked on it at some point. "

The Bad Collective code ownership example A team with not complete unit test framework and have no submitter's name in the source code repository. Some one gets furious because another incompetent developer is free to make stupid mistakes everyday and not being blamed. Obviously, they are not implementing a good pair programming scheme as well.

Continuous Integration

Shannon's section...