CSC/ECE 517 Fall 2007/wiki3 10 tm: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
 
(85 intermediate revisions by the same user not shown)
Line 1: Line 1:
The Agile debate. Perhaps the most prominent controversy in o-o design today is whether it is possible to do a robust design with as little advance planning as agile methodologies recommend. Research this issue, on the Web and in the ACM DL, and report (fairly) on the major arguments of both sides, and on the evidence for both positions.''
''The Agile debate. Perhaps the most prominent controversy in o-o design today is whether it is possible to do a robust design with as little advance planning as agile methodologies recommend. Research this issue, on the Web and in the ACM DL, and report (fairly) on the major arguments of both sides, and on the evidence for both positions.''<br>
__TOC__


==What is 'Agile Methodologies'?==
==What is 'Agile Methodology'?==  
[http://en.wikipedia.org/wiki/Agile_software_development Agile Methodology] was introduced as an iterative approach for developing software as a counter to waterfall approach. Where the five main phases of waterfall (requirement, design, coding, integration, testing) are practiced through every iteration. Moreover, it suggested several practices to enhance the software developments, see next figure from [http://txpug.editme.com/files/Lec2004Jul26/rupvagile.1.ppt "Finding Agility -�A comparison of RUP and Agile"], *.PPT '' .<br>


'Principle of Least Astonishment' or 'Rule of minimum surprise' asserts that the system will cause the least surprise for the user by being as consistent and predictable as possible, and therefore usable. Which imply that in case of an ambiguity or a conflict in the system, the behavior of the system should be the one which will least surprise the user. In computer science, this principle has a wide range of application in topics such as user-interface design, programming language design, and programming. This principle is used in various disciplines as well as computer science such as engineering, science, and philosophy which are covered later in this wiki. After this brief information about the principle of least astonishment, now we are going to talk more about the sources found online about this topic and how well they explore the topic.
[[Image:XPpractice.jpg|center|320px]]
<br>Many Agile methodologies were introduced in the last decade ([http://en.wikipedia.org/wiki/Extreme_programming XP], [http://en.wikipedia.org/wiki/Scrum_%28development%29 Scrum], [http://en.wikipedia.org/wiki/DSDM DSDM], [http://en.wikipedia.org/wiki/Feature_Driven_Development FDD], [http://en.wikipedia.org/wiki/Adaptive_Software_Development Adaptive], [http://en.wikipedia.org/wiki/Crystal_Clear_%28software_development%29 Crystal]). It would be difficult to introduce every aspect of these methodologies in this wiki. That is why, ''This wiki will concentrate in the most popular agile methodology, XP (eXtreme Programming).''<br>


==Argument *Against* Agile Methodologies==
==Comparison Basis for Robust Design==
A comparison between Agile methodologies and Waterfall methodology is found to be a little out of scope, as the advantages of iterative methodologies already recognized. That is why the current wiki will concentrate to compare with other iterative methods, such as RUP (Rational Unified Process). RUP share many of Agile's practices. Other practices can be immigrated from XP to RUP, or vise versa. Other features will still be unique to XP or in RUP. Next figure outline these practices,  from [http://txpug.editme.com/files/Lec2004Jul26/rupvagile.1.ppt "Finding Agility -A comparison of RUP and Agile"], *.PPT '' .<br><br>


[http://c2.com/cgi/wiki?PrincipleOfLeastAstonishment "Principle of Least Astonishment at Portland Pattern Repository"] provides a simple explanation to the topic and gives a couple of easy-to-understand examples; this is one of the best sites that one should start to learn on this topic.
[[Image:XPvsRUP.jpg|center|420px]]


===Argument *With* Agile Methodologies===
<br>In the current wiki we will try to test the Agile Manifesto and its related practices relative to design quality. These found to be the comprehensive basis for comparison as it provide the basis Agile methodologies trying to establish over other methodologies.


[http://jooto.com/blog/index.php/2006/06/06/principle-of-least-astonishment/ "Ethical Software"] is a blog of an instructor, Alex Bunardzic, where he shares his in class experience when he was teaching Principle of Least Astonishment. The example that he gave in class is the Ruby on Rails code where he suggests using <%yield%> instead of <%content_for_layout%> to demonstrate this principle. This web page is not a good start to learn the topic, but it gives the idea of the principle and it demonstrates it with the Ruby on Rails code which is very related to what we have been doing in our class.
===Individuals and Interactions Over processes and tools===
Agile methodologies clearly state their believe that people is the main driver to the projects success, rather than the process and the tool. Agile Methodologies encourage individuals and their interaction through several practices and principles;  <br>
* Motivated individuals and Self organized team: Planning Game, Collective ownership.
* Face to Face Communication: Pair programming, Open space, On-site customer, Planning game.
* Sustainable Base.


==Success Stories==
====Critique====
* Requires too much cultural change to adopt.<br>
* Go against "Human Psychology": many human factors goes against Agile methodologies, such as: People prefer to follow a process, No milestones, People self-interest, mini-dictatorships, Knowledge monopolies, Resource management vanish, customer dissatisfaction.<br>
* The cost efficiency of pair programming is questionable.<br>
* No Documentaion is acquired, just keep it minimal!<br>


[http://news.bbc.co.uk/2/hi/technology/3129184.stm "Site finding system"] is a topic appeared in BBC News on September, 2003 which gives an real-life example of violation of this principle, and explains what it had caused.
[[Image:dilbert-Interaction.gif|center]]<br>
[[Image:dilbert-process.gif|center]]<br>


===Working software Over comprehensive documentation===
Agile Methodologies shows strong customer orientation by providing incremental delivery of an working software. This will also decrease the confusion while integrating at the end of the project and it become easier to zoom in the bug(s). Agile methodologies support this concept by:
* Continuous Releases: small releases and continuous integration.
* Face to Face Communication: Pair programming, Open space, On-site customer, Planning game.
* Executable Communication: Clear code (refactoring, simple design, standard code, metaphor), User stories.


== Agile Methodologies in Other Disciplines==
====Critique====
* Deliver to whom: In many times the customer(s) is not interested enough to use the incremental releases.
* 2-8 weeks releases is too short to accommodate.
* Only works with senior-level developers. Developers need to gather requirements, test, code, refactor the code, integrate, release and plan
* Developers need to do all this without stopping to design nor to give a deep thought about it.<br>
* Oral communication does not provide persistence and on-demand source of information.
* It is very difficult to keep the code clear to compensate the lack of necessary documentation.<br>


* [http://www.searchtruth.com/list.php "Quran"] Quran provides many arguments based upon 'Least Astonishment' and 'Occam's razor' principles for several controversies as [http://en.wikipedia.org/wiki/Creation-evolution_controversy creation/evolution controversy], [http://en.wikipedia.org/wiki/Existence_of_God existence of god], [http://en.wikipedia.org/wiki/Miracle miracles]. From the author point of view, Quran also obey the same rules of nature, which suggest it is from the same creator.
===Customer collaboration Over contract negotiation===
While Agile methodology keep a broad meaning of the customer, which can be a member of the team, another part of the company or a contract customer. It is still acquire his/her existence with the team. Which create a strong communication between the customer and development team.
 
====Critique====
* Can lead to more difficult contractual negotiations<br>
* This might make the customer controlling the development process, or in the other hand, not realizing what his/her business really need by being part of the development team. <br>
* Place large responsibility in the customer, as he manage the process, identify and test the requirements, and negotiate. While no responsibility in the developers and management team.
* No obligation for the developer to learn more by themselves about the business case and its requirements.<br>
 
[[Image:dilbert-Customer.gif|center]]<br>
 
===Responding to change Over following a plan===
Agile Methodologies incorporate the uncertainty existing in the project by creating an agile process that doesn't place planning further than existing iteration. This will reduce the cost of planning, and re-planning again. This principle is supported by many practices as incremental planning, <YAGNI principle>, <DTSTTCPW>, Refactoring and delaying decisions.<br>
 
====Critique====
* Management and customer need to know an estimation for the time and resources needed.<br>
* Incorporates insufficient software design and no front-end design.<br>
* <YAGNI principle> You Aren't Going to Need It, and <DTSTTCPW> Do The Simplest Thing That Could Possibly Work would not make sense for experienced developers; They say You ARE Going to Need It.<br>
* Don't use UML for design, and design session should be minimal.<br>
* No up-front design nor "Pre-factoring".<br>
 
[[Image:dilbert-plan.gif|center]]<br>
 
==Agile Methodologies' Paradox==
XP/Agile's practices are introduced to achieve certain values (Communication, Feedback, Courage, Simplicity, Respect). It is true that these practices will help to provide the best environment for these values to grow. Nevertheless, many of these practices acquire the existence of these values in the project, the company, the management, the individuals, and moreover the customer. Certain enough these values represent moral and professional values that should exist in every social and individual system. Nevertheless, we recognize their variation in every system. Moreover, many of these values might be out of the control as simplicity of the project or the courage of the customer. The author think that is why Agile approach will give even a better results in different area such as R&D or education, see links. <br>
 
The question will be '' "Which should exist first the values -the egg- or the Agile methodology -the chicken-." ''


==Conclusion==
==Conclusion==
This wiki is intended to be a Guide for Principle of Least Astonishment. It provides many links to online sources that explains the topic simply with easy-to-understand examples, and/or gives an idea where this principle can be used in real-life. These links should be helpful for the ones who want to learn more on this topic or understand the topic in more detail.
Agile methodologies provided a framework for software development. These methodologies not meant to be for every project, company and/or person.  To gain the promised savings in the documentations, architecture, tools and process, you need more than Agile practices; You will need its values (Communication, Feedback, Simplicity, Courage, Respect) existing in your company, project, individuals and in your customer.  If you can't achieve these conditions, then you will need to be assisted with more documentations, design and process. Still Agile methodology will provide you with a lot of useful tools, you can pick and match what is suitable for your company, project, customer and personality.


This principle can be used in many different disciplines for a universal useful solution for good designs. But it should be taken into consideration that the principle goes parallel with common sense, although it may not go with the convention.
==External Links by Side==


[[Image:LA_Science.gif]] <br>
===Arguments *Against* XP===
From  [http://ecommons.library.cornell.edu/retrieve/300/Art_of_Discovery_Oliver2.pdf "The Incomplete Guide to the Art of Discovery"], *.PDF ''  
*[http://www.amazon.co.uk/Extreme-Programming-Refactored-Case-Against/dp/1590590961 "Extreme Programming Refactored: The Case Against XP "] <br>
*[http://www.amazon.com/exec/obidos/ASIN/0201844575/ref=nosim/armaties "Questioning Extreme Programming"] <br>
*[http://www.ftponline.com/interviews/beck_cooper/default.asp "Extreme Programming vs. Interaction Design"]<br>
*[http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4293576 "Towards Extreme(ly) Usable Software"]<br>
*[http://c2.com/cgi/wiki?TheCaseAgainstExtremeProgramming "The Case Against Extreme Programming"]<br>
*[http://www.softwaremetrics.com/Agile/Agile%20Paper.pdf "The Agile Method and Other Fairly Tales"], *.PDF <br>
*[http://www.claretyconsulting.com/it/category/Methodology-Agile/ "Kevin Brady Blog"]
*[http://www.theserverside.com/news/thread.tss?thread_id=17635 "Opinion: Extreme Programming Is Evil"]<br>
*[http://c2.com/xp/XpCritique.html "Xp Critique"]<br>
*[http://www.softwarereality.com/lifecycle/xp/case_against_xp.jsp "The Case Against Extreme Programming"]<br>
* JC Lee and DS McCrickard, [http://people.cs.vt.edu/~mccricks/papers/leej-sbd_xp.pdf ''Towards Extreme(ly) Usable Software:Exploring Tensions Between Usability and Agile Software Development''], Agile 2007, (2007), IEEE.
* MK Spayd, [http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/proceedings/&toc=comp/proceedings/adc/2003/2013/00/2013toc.xml&DOI=10.1109/ADC.2003.1231454 ''Evolving Agile in the Enterprise: Implementing XP on a Grand Scale''], IEEE, Agile Development Conference (ADC '03), (2003): Give lesson learned why XP couldn't work in their case in large scale projetcs.
* George Mangalaraj, [http://portal.acm.org/citation.cfm?id=1060710.1060712 ''Challenges of Migrating to Agile Methodologies''], Communications of the ACM, Vol 48, Issue 5, (May 2005).
* PS Grisham, DE Perry, [http://portal.acm.org/citation.cfm?id=1083113 ''Customer Relationships and Extreme Programming''], ACM, Proceedings of the 2005 workshop on Human and social factors of software engineering, (2005): Show that Agile practices can be make the customer less satisfactory.
* MM Müller, F Padberg, [http://portal.acm.org/citation.cfm?id=940094 ''On the economic evaluation of XP projects''], Proceedings of the 9th European software engineering conference held jointly with 11th ACM SIGSOFT international symposium on Foundations of software engineering, (2003): Analysis shows that the economic value of, XP strongly depends on how large the XP speed and defect advantage really are. Also find that the market pressure is an important factor when assessing the business value of XP.
* J. Smith and T. Menzies. ''Should NASA embrace agile processes'', 2002. preprint, West Virginia University, Morgantown, USA: The answer was most of the time NO.


==Refrences==
===Arguments *Support* XP===
*[http://portal.acm.org/citation.cfm?id=962352&coll=GUIDE&dl=GUIDE&CFID=42425829&CFTOKEN=88673594 "Are agile methods good for design?"], Give how architecture can interact with XP environment, and how XP can be beneficial to design.<br>
*[http://www.amazon.com/Agile-Software-Development-Evaluating-Organization/dp/1580538428 "Agile Software Development: Evaluating The Methods For Your Organization"]<br>
*[http://www.sei.cmu.edu/cmmi/presentations/sepg05.presentations/jarvis-gristock.pdf "Extreme Programming (XP), Six Sigma and CMMI"] Place some metrics about why extreme programming and pair programming are good, i.e. errors, time, etc. Also give an approach how XP can be integrated in CMMI.<br>
* TCN Kazman et all, [http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?isnumber=4222554&arnumber=4222613&count=98&index=58 ''Agility and Experimentation: Practical Techniques for Resolving Architectural Tradeoffs''],  Software Engineering, 2007. ICSE 2007.: This paper has tried to show that up-front  architectural design is difficult, particularly when  working in an environment in which there are many variables.
* S Beecham et all, [http://ieeexplore.ieee.org/Xplore/login.jsp?url=/iel5/4293562/4293563/04293574.pdf&arnumber=4293574 ''Does the XP environment meet the motivational needs of the software developer?''], AGILE 2007: Show that XP teams ihad processes in place that supported many of the motivational needs voiced by developers coming from a traditional, heavyweight software development environment. However, the XP environment is at odds with developer self, and carrer needs.
* [http://www.foruse.com/articles/agiledesign.pdf  "Process Agility and Software Usability"]: Address Agile methodology benefits to design, although address as well neccessary Up-front design need in agile.
* CA Wellington , et all, [http://portal.acm.org/citation.cfm?id=1083106.1083122 ''Examining Team Cohesion as an Effect of Software Engineering Methodology''], Proceedings of the 2005 workshop on Human and social factors of software engineering, (2005): Show how Agile methodologies increase team cohesion.
* H Hulkko, P Abrahamsson, [http://virtual.vtt.fi/virtual/agile/docs/publications/2005/2005_multiple_case_study_pair_programming.pdf ''A Multiple Case Study on the Impact of Pair  Programming on Product Quality''], ACM, Proceedings of the 27th international conference on Software engineering, (2005): Show pair programming impact in software quality.
*[http://www.infoq.com/articles/Interview-Johnson-Standish-CHAOS "Interview: Jim Johnson of the Standish Group"]: Sate that Agile Methodologies is one of the most important reasons for project success. And more important than the formal methodologies, tools and infrastructure.
*[http://agilemanifesto.org/ "http://agilemanifesto.org/"]<br>
*[http://agilesoftwaredevelopment.com/ "http://agilesoftwaredevelopment.com/"]


==External Links by Side==
====Success Stories====
* [http://portal.acm.org/citation.cfm?id=999442&coll=Portal&dl=GUIDE&CFID=42448435&CFTOKEN=54833985 "Breaking the Ice for Agile Development of Embedded Software: An Industry Experience Report"] <br>
* [http://portal.acm.org/citation.cfm?id=1297967&coll=Portal&dl=GUIDE&CFID=42448435&CFTOKEN=54833985 "Agile enterprise software development using domain-driven design and test first"]<br>


===Against===
==External Links by Field==
* [http://www.faqs.org/docs/artu/ch11s01.html "Applying the Rule of Least Surprise"] from ''[[The Art of Unix Programming]]'' by [[Eric S. Raymond|E.S. Raymond]]
* [http://en.wikipedia.org/wiki/Principle_of_least_astonishment "Wikipedia"]
* [http://www.geocities.com/krishna_kunchith/misc/bscs.html "Confessions of a Coder"]


===With===
===Programming===
* [http://news.bbc.co.uk/2/hi/technology/3129184.stm "Site finding system faces suspension"]
* [http://portal.acm.org/citation.cfm?id=1119678&coll=Portal&dl=GUIDE&CFID=42448435&CFTOKEN=54833985 "XP over Eclipse"]
* [http://www.ibm.com/developerworks/web/library/us-cranky10.html "Applying the Rule of Least Surprise in webpages"]
* [http://www.amazon.com/Agile-Web-Development-Rails-Programmers/dp/097669400X "Agile Web Development with Rails"]


===Education===
* [http://portal.acm.org/citation.cfm?doid=1151954.1067531 "Extreme Learning"]
* [http://portal.acm.org/citation.cfm?id=1062543&coll=GUIDE&dl=GUIDE&CFID=42425829&CFTOKEN=88673594 "A cross-program investigation of students' perceptions of agile methods"]
* [http://portal.acm.org/citation.cfm?id=776897&coll=Portal&dl=GUIDE&CFID=42448435&CFTOKEN=54833985 "eXtreme Programming at universities: an educational perspective"]<br>


==External Links by Methodology==
===Project Management===
* [http://leadinganswers.typepad.com/leading_answers/2007/07/developments-in.html "Developments in Agile Project Management"]


===XP===
===R&D===
* [http://www.ibm.com/developerworks/web/library/us-cranky10.html "Applying the Rule of Least Surprise in webpages"]
* [http://portal.acm.org/citation.cfm?id=1094898&coll=Portal&dl=GUIDE&CFID=42448435&CFTOKEN=54833985 "agile practices for R&D projects"]<br>

Latest revision as of 17:52, 20 November 2007

The Agile debate. Perhaps the most prominent controversy in o-o design today is whether it is possible to do a robust design with as little advance planning as agile methodologies recommend. Research this issue, on the Web and in the ACM DL, and report (fairly) on the major arguments of both sides, and on the evidence for both positions.

What is 'Agile Methodology'?

Agile Methodology was introduced as an iterative approach for developing software as a counter to waterfall approach. Where the five main phases of waterfall (requirement, design, coding, integration, testing) are practiced through every iteration. Moreover, it suggested several practices to enhance the software developments, see next figure from [http://txpug.editme.com/files/Lec2004Jul26/rupvagile.1.ppt "Finding Agility -�A comparison of RUP and Agile"], *.PPT .


Many Agile methodologies were introduced in the last decade (XP, Scrum, DSDM, FDD, Adaptive, Crystal). It would be difficult to introduce every aspect of these methodologies in this wiki. That is why, This wiki will concentrate in the most popular agile methodology, XP (eXtreme Programming).

Comparison Basis for Robust Design

A comparison between Agile methodologies and Waterfall methodology is found to be a little out of scope, as the advantages of iterative methodologies already recognized. That is why the current wiki will concentrate to compare with other iterative methods, such as RUP (Rational Unified Process). RUP share many of Agile's practices. Other practices can be immigrated from XP to RUP, or vise versa. Other features will still be unique to XP or in RUP. Next figure outline these practices, from "Finding Agility -A comparison of RUP and Agile", *.PPT .


In the current wiki we will try to test the Agile Manifesto and its related practices relative to design quality. These found to be the comprehensive basis for comparison as it provide the basis Agile methodologies trying to establish over other methodologies.

Individuals and Interactions Over processes and tools

Agile methodologies clearly state their believe that people is the main driver to the projects success, rather than the process and the tool. Agile Methodologies encourage individuals and their interaction through several practices and principles;

  • Motivated individuals and Self organized team: Planning Game, Collective ownership.
  • Face to Face Communication: Pair programming, Open space, On-site customer, Planning game.
  • Sustainable Base.

Critique

  • Requires too much cultural change to adopt.
  • Go against "Human Psychology": many human factors goes against Agile methodologies, such as: People prefer to follow a process, No milestones, People self-interest, mini-dictatorships, Knowledge monopolies, Resource management vanish, customer dissatisfaction.
  • The cost efficiency of pair programming is questionable.
  • No Documentaion is acquired, just keep it minimal!



Working software Over comprehensive documentation

Agile Methodologies shows strong customer orientation by providing incremental delivery of an working software. This will also decrease the confusion while integrating at the end of the project and it become easier to zoom in the bug(s). Agile methodologies support this concept by:

  • Continuous Releases: small releases and continuous integration.
  • Face to Face Communication: Pair programming, Open space, On-site customer, Planning game.
  • Executable Communication: Clear code (refactoring, simple design, standard code, metaphor), User stories.

Critique

  • Deliver to whom: In many times the customer(s) is not interested enough to use the incremental releases.
  • 2-8 weeks releases is too short to accommodate.
  • Only works with senior-level developers. Developers need to gather requirements, test, code, refactor the code, integrate, release and plan
  • Developers need to do all this without stopping to design nor to give a deep thought about it.
  • Oral communication does not provide persistence and on-demand source of information.
  • It is very difficult to keep the code clear to compensate the lack of necessary documentation.

Customer collaboration Over contract negotiation

While Agile methodology keep a broad meaning of the customer, which can be a member of the team, another part of the company or a contract customer. It is still acquire his/her existence with the team. Which create a strong communication between the customer and development team.

Critique

  • Can lead to more difficult contractual negotiations
  • This might make the customer controlling the development process, or in the other hand, not realizing what his/her business really need by being part of the development team.
  • Place large responsibility in the customer, as he manage the process, identify and test the requirements, and negotiate. While no responsibility in the developers and management team.
  • No obligation for the developer to learn more by themselves about the business case and its requirements.


Responding to change Over following a plan

Agile Methodologies incorporate the uncertainty existing in the project by creating an agile process that doesn't place planning further than existing iteration. This will reduce the cost of planning, and re-planning again. This principle is supported by many practices as incremental planning, <YAGNI principle>, <DTSTTCPW>, Refactoring and delaying decisions.

Critique

  • Management and customer need to know an estimation for the time and resources needed.
  • Incorporates insufficient software design and no front-end design.
  • <YAGNI principle> You Aren't Going to Need It, and <DTSTTCPW> Do The Simplest Thing That Could Possibly Work would not make sense for experienced developers; They say You ARE Going to Need It.
  • Don't use UML for design, and design session should be minimal.
  • No up-front design nor "Pre-factoring".


Agile Methodologies' Paradox

XP/Agile's practices are introduced to achieve certain values (Communication, Feedback, Courage, Simplicity, Respect). It is true that these practices will help to provide the best environment for these values to grow. Nevertheless, many of these practices acquire the existence of these values in the project, the company, the management, the individuals, and moreover the customer. Certain enough these values represent moral and professional values that should exist in every social and individual system. Nevertheless, we recognize their variation in every system. Moreover, many of these values might be out of the control as simplicity of the project or the courage of the customer. The author think that is why Agile approach will give even a better results in different area such as R&D or education, see links.

The question will be "Which should exist first the values -the egg- or the Agile methodology -the chicken-."

Conclusion

Agile methodologies provided a framework for software development. These methodologies not meant to be for every project, company and/or person. To gain the promised savings in the documentations, architecture, tools and process, you need more than Agile practices; You will need its values (Communication, Feedback, Simplicity, Courage, Respect) existing in your company, project, individuals and in your customer. If you can't achieve these conditions, then you will need to be assisted with more documentations, design and process. Still Agile methodology will provide you with a lot of useful tools, you can pick and match what is suitable for your company, project, customer and personality.

External Links by Side

Arguments *Against* XP

Arguments *Support* XP

Success Stories

External Links by Field

Programming

Education

Project Management

R&D