CSC/ECE 517 Fall 2013/ch1 1w48 x: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
Line 59: Line 59:


====Agile Methods====
====Agile Methods====
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.  For some reason many people within IT have seem to have forgotten that the goal of software development should be the development of software.  Or, perhaps the problem is that they think that they need to define everything up front before they can start building software, whereas an evolutionary approach to development seems to work much better.


Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.  Like it or not, requirements will change throughout a software development project.  Traditional software developers will often adopt change management processes which are designed to prevent/reduce scope creep, but when you think about it these are really change prevention processes, not change management processes.  Agilists embrace change and instead follow an agile change management approach which treats requirements as a prioritized stack which is allowed to vary over time.


Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter time scale. Frequent delivery of working software provides stakeholders with concrete feedback, making the current status of your project transparent while at the same time providing an opportunity for stakeholders to provide improved direction for the development team.
Agile Alliance refined the philosophies captured in agile manifesto into a collection of twelve principles to get a better understanding of agile methods.
 
# Satisfy the customer through early and continuous delivery of valuable software.
Business people and developers must work together daily throughout the project. Your project is in serious trouble if you don't have regular access to your project stakeholders.  Agile developers adopt practices such as on-site customer and active stakeholder participation, and adopt inclusive tools and techniques which enable stakeholders to be actively involved with software development.
 
Build projects around motivated individuals.  Give them the environment and support they need, and trust them to get the job done. Too many organizations have a vision that they can hire hordes of relatively unskilled people, provide them with a CMMI/ISO/...-compliant process description, and that they will successfully develop software.  This doesn't seem to work all that well in practice.  Agile teams, on the other hand, realize that you need build teams from people who are willing to work together collaboratively and learn from each other.  They have the humility to respect one another and realize that people are a primary success factor in software development.
 
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.  For a software development team to succeed its members must communicate and collaborate effectively.  There are many ways which people can communicate together, and as you can see face-to-face communication at a shared drawing environment (such as paper or a whiteboard) is the most effective way to do so.
 
Working software is the primary measure of progress.  The primary measure of software development should be the delivery of working software which meets the changing needs of its stakeholders, not some form of "earned value" measure based on the delivery of documentation of the holding of meetings.
 
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.  Just like you can't sprint for an entire marathon, you can't successfully develop software by forcing people to work overtime for months at a time.  My experience is that you can only do high-quality, intellectual work for 5-6 hours a day before burning yourself out.  Yes, the rest of the day can be filled up with email, meetings, water cooler discussions, and so on, but people's ability to do "real work" is limited.  Yes, you might be able to do high-quality work for 12 hours a day, and do so for a few days straight, but after awhile you become exhausted and all you accomplish is 12 hours of mediocre work a day.
 
Continuous attention to technical excellence and good design enhances agility.  It's much easier to understand, maintain, and evolve high-quality source code than it is to work with low-quality code.  Therefore, agilists know that they need to start with good code, to keep it good via refactoring, and take a test-driven approach so that they know at all times that their software works.  We also adopt and follow development guidelines, in particular coding guidelines and sometimes even modeling guidelines.
 
Simplicity – the art of maximizing the amount of work not done – is essential.  Agile developers focus on high value activities, we strive to maximize our stakeholder's return on investment in IT, and we either cut out or automate the drudge work.
 
The best architectures, requirements, and designs emerge from self-organizing teams.  This is one of the most radical principles of the agile movement, one which I would love to see researched thoroughly by the academic community.  The Agile Model Driven Development (AMDD) and test-driven design (TDD) methods are the primary approaches within the agile community for ensure the emergence of effective architectures, requirements, and designs.
 
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.  Software process improvement (SPI) is a continual effort, and techniques such as retrospectives should be adopted to enable you to improve your approach to software development.


= Examples =
= Examples =

Revision as of 21:16, 6 October 2013

Under Construction

Introduction

Object-Oriented(O-O) design tools are mainly used to create UML visual model for software design, such as the IBM® Rational Rose®, Microsoft Visio and PowerDesigner. The Unified Modeling Language(UML) is a standardized language approved by the Objective Management Group™ (OMG™). UML is used for sepcifying, visualizing, constructing, and documenting models in software systems.The UML was developed by Grady Booch, Ivar Jacobson and James Rumbaugh at Rational Software in the 1990s.<ref>Marc Hamilton (1999) Software Development: A Guide to Building Reliable Systems p.48</ref>The UML has synthesized the notations of the Booch method, the Object-modeling technique (OMT) and Object-oriented software engineering (OOSE) by fusing them into a single, common and widely usable modeling language.<ref>OMG Unified Modeling Language (OMG UML), Superstructure. Version 2.4.1 http://www.omg.org/spec/UML/2.4.1/Superstructure</ref>

O-O Design Tools

There are a lot of object oriented design tools can be used for software development.<ref>List of UML modeling tools http://en.wikipedia.org/wiki/List_of_Unified_Modeling_Language_tools</ref> Rational Rose® and Enterprise Architect are the most popular commercial design tools used for developing complex software system.

IBM® Rational Rose®

Rational Rose®<ref>IBM® Rational Rose® family http://www-03.ibm.com/software/products/us/en/ratirosefami</ref> is a set of UML modeling tools for software design, which is produced and marketed by the Rational division of IBM (previous Rational Software Corporation, the developer of UML). By use of Rational Rose® software engineers can create visual models of software architectures, databases, application requirements and reusable assets. The Rational Rose® product family provides a set of model-driven capabilities for developing Java Platform, UNIX and Linux Platforms, and Microsoft Visual Studio-based software applications. Rational Rose® includes tools for reverse engineering and code generation of classes and architectures, for example, it allows software developers to generate code for Java Enterprise Edition software applications from visual models using the UML. Rational Rose® supports various of software development languages, it offers round-trip engineering for Ada, ANSI C++, C, C++, CORBA, Java, MicrosoftVisual Basic and MicrosoftVisual C++ languages, as well as database designs.<ref>IBM Rational Rose Datasheet ftp://public.dhe.ibm.com/software/rational/web/datasheets/rose_ds.pdf</ref> Rational Rose® provides full team support. The team management features support the development of large and complex projects. By the help of configuration management and version control system, changes made to a model can be set available to other teammates. Rational Rose® helps teams create rich applications based on robust architectures.<ref>IBM Rational Rose Datasheet ftp://public.dhe.ibm.com/software/rational/web/datasheets/rose_ds.pdf</ref>

Enterprise Architect

Enterprise Architect is a visual modeling, comprehensive UML analysis and design tool. Enterprise Architect supports a number of methods of modeling business processes using UML as the foundation modeling language.<ref>Enterprise Architect http://en.wikipedia.org/wiki/Enterprise_Architect_(Visual_Modeling_Platform)#General_features</ref> Enterprise Architect supports round-trip engineering (generation and reverse engineering) of source code for many programming languages, such as ActionScript, C, C++, C#, PHP, Python and so on.<ref>Enterprise Architect http://www.sparxsystems.com/products/ea/index.html</ref> Like Rational Rose®, Enterprise Architect also provides full life cycle support for software and system engineering. The reverse engineering supported by Enterprise Architect can help developers visualize applications of a wide range of programming languages and database repository schema.

Microsoft Visio

Microsoft Visio is a diagramming and vector graphics application. In Microsoft Visio Professional 2000, it first time provide support for UML modeling. The Microsoft Visio UML Model Diagram template provides full support for creating object-oriented models of complex software system. But it only support programming languages developed by Microsoft, such as Visual Basic, Visual Basic.NET and Microsoft Visual C#.NET.

Agile Development

Overview

Agile development is a methodology that reduces software development cost and risk, improves quality and enhances your customers’ satisfaction by better meeting their needs and expectations.<ref>IBM what is agile? http://www-01.ibm.com/software/rational/agile/</ref> Agile development methods promote evolutionary development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project, and encourage rapid and flexible response to change.<ref>Agile software development http://en.wikipedia.org/wiki/Agile_software_development</ref> Agile development is based on iterative and incremental development. It break tasks into small increments with minimal planning and do not directly involve long-term planning. Iterations are short time frames that typically last from one to four weeks. Each iteration involves a cross function team working in all functions: planning, requirements analysis, design, coding, unit testing, and acceptance testing.At the end of the iteration a working product is demonstrated to stakeholders. This minimizes overall risk and allows the project to adapt to changes quickly. An iteration might not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of each iteration.<ref name="embracing change"> Beck, Kent (1999). "Embracing Change with Extreme Programming". Computer 32 (10): 70–77. doi:10.1109/2.796139</ref> Multiple iterations might be required to release a product or new features.

A customer representative is appointed by stakeholders to act on their behalf and makes a personal commitment to being available for Developers to answer mid-iteration questions in every agile team.<ref>Gauthier, Alexandre (17 August 2011). "What is scrum". Planbox. http://support.planbox.com/knowledgebase/topics/34844-agile-project-management-resources#roles</ref> After each iteration, stakeholders will review progress and evaluate priorities with a view to optimizing the return on investment and ensuring alignment with customer needs and company goals.<ref>Agile software development http://en.wikipedia.org/wiki/Agile_software_development#cite_ref-12</ref>

Agile Manifesto

In February 2001, 17 software developers<ref>Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Stephen J. Mellor, Ken Schwaber, Jeff Sutherland, and Dave Thomas</ref> published the Manifesto for Agile Software Development to define the approach now known as agile software development at Snowbird, Utah.Some of the authors formed the Agile Alliance<ref>Agile Alliance http://www.agilealliance.org/</ref><ref>Agile software development http://en.wikipedia.org/wiki/Agile_software_development</ref>, a nonprofit organization that support those who explore and apply Agile principles and practices to make the software industry productive, humane, and sustainable.<ref>The Alliance Mission and operations http://www.agilealliance.org/the-alliance/</ref> The Agile Manifesto reads, in its entirety, as follows:<ref>Manifesto for Agile Software Development http://agilemanifesto.org/</ref>


We are uncovering better ways of developing

software by doing it and helping others do it.

Through this work we have come to value:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan


That is, while there is value in the items on

the right, we value the items on the left more.

The further explanation of the manifesto items on the left with the agile software development context are describe as follow:<ref>Ambler, S.W. "Examining the Agile Manifesto". Retrieved 6 April 2011. http://www.ambysoft.com/essays/agileManifesto.html</ref>

  • Individuals and interactions – in agile development, self-organization and motivation are important, as are interactions like co-location and pair programming.
  • Working software – working software will be more useful and welcome than just presenting documents to clients in meetings.
  • Customer collaboration – requirements cannot be fully collected at the beginning of the software development cycle, therefore continuous customer or stakeholder involvement is very important.
  • Responding to change – agile development is focused on quick responses to change and continuous development.

Agile Methods

Agile Alliance refined the philosophies captured in agile manifesto into a collection of twelve principles to get a better understanding of agile methods.

  1. Satisfy the customer through early and continuous delivery of valuable software.

Examples

O-O Design Tools example. Rational Rose

Hyperlinks to important terms

UML

1. Agile and Iterative Development: A Manager's Guide http://www.amazon.com/dp/0131111558/?tag=stackoverfl08-20


2. Beck, Kent (1999). "Embracing Change with Extreme Programming". Computer 32 (10): 70–77. doi:10.1109/2.796139 http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=796139

Ambler, S.W. "Examining the Agile Manifesto". Retrieved 6 April 2011. http://www.ambysoft.com/essays/agileManifesto.html

List of UML Modeling tools

How to choose a UML modeling tool

Rational Rose

Microsoft Visio

PowerDesign

IBM Rational Software's UML Resource Page http://www-01.ibm.com/software/rational/uml/

References

<references/>