Sep 052012
 
Share...Tweet about this on TwitterShare on Facebook4Share on Google+0Share on StumbleUpon1Share on LinkedIn3Flattr the authorPin on Pinterest7Share on Reddit0Share on Tumblr0Digg this

I’ve started adopting what I could call “agile” way of developing software only in 2007-2008. Since then I’ve become a Certified Scrum Master and trying to adopt as much techniques and methodologies to make the process of developing software in my team as much as possible. I am sure that I am still far from saying that it is perfect and there is always room for improvement :). Agile for me is definitively the way to go, but be aware, it is not a silver bullet.

There is really a lot to say about agile, and internet is full of articles related to its various topics. I wanted to honor it with this short article putting what I believe are the most important parts of agile that I came across and that other developers should know about.Rather than inventing myself definitions or trying to fully explain so large concepts in what is intended to be a short article, I am mainly taking citations from various sources to best describe the techniques listed below. Is up to you to read and get a deeper knowledge of each individually. That said, all credits are going to the authors mentioned as a source. As usually, if you think I missed something please let me know.

About Agile

Personally I would divide Agile into two distinct parts

  • Agile Project Management and
  • Agile approach to Coding

both concepts are interlaced and the best option is to adopt both at the same time.

Agile Project Management

The following is a citation taken from Wikipedia and describes what is the Agile Project Management.

Agile project management is an iterative method of determining requirements for engineering and information technology development projects in a highly flexible and interactive manner, for example agile software development. It requires empowered individuals from the relevant business, with supplier and customer input. …  Agile techniques are best used in small-scale projects or on elements of a wider programme of work, or on projects that are too complex for the customer to understand and specify before testing prototypes.”

Agile Project Management

Agile Project Managementb
(c) http://leadinganswers.typepad.com/leading_answers/2007/02/agile_project_m.html

In other words, what we call Agile, is a great way of managing the software development in a process that is highly flexible and that requires empowered individuals that would drive this process successfully. In my experience I could see that Agile won’t work properly if one of the following haven’t been met:

  • True collaboration between all the stakeholders (users, developers, testers, managers, etc..)
  • Common agreement on the process and common goals
  • Dedication
  • Willingness for knowledge sharing
  • Openness

Project Management Methodologies/Frameworks

There are different methodologies when it comes to the agile process definition itself. Each of the methodologies, or frameworks is pretty much similar as it requires the iterative process, but on the other side each methodology has its own particularities.

Examples of agile software project management frameworks (or methodologies):

  • Scrum is an iterative and incremental agile software development method for managing software projects and product or application development
  • Extreme Programming (XP) is a software development methodology which is intended to improve software quality and responsiveness to changing customer requirements. As a type of agile software development, it advocates frequent “releases” in short development cycles (timeboxing), which is intended to improve productivity and introduce checkpoints where new customer requirements can be adopted.
  • Kanban is a method for developing software products and processes with an emphasis on just-in-time delivery while not overloading the software developers. It emphasizes that developers pull work from a queue, and the process, from definition of a task to its delivery to the customer, is displayed for participants to see

Agile coding techniques

As mentioned earlier, together with the Agile Project Management, there is a part of agile that is connected to the code development techniques

Continuous Integration

“Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily – leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. This article is a quick overview of Continuous Integration summarizing the technique and its current usage” — Source: Martin Fowler’s article.

Automated Testing

Unit Testing

“In computer programming, unit testing is a method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures, are tested to determine if they are fit for use.[1] Intuitively, one can view a unit as the smallest testable part of an application.” — Source: Wikipedia

Previously I have written some posts about Unit Testing or related, so you may check it here:

Test Driven Development

“Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: first the developer writes an (initially failing) automated test case that defines a desired improvement or new function, then produces the minimum amount of code to pass that test and finally refactors the new code to acceptable standards. Kent Beck, who is credited with having developed or ‘rediscovered’ the technique, stated in 2003 that TDD encourages simple designs and inspires confidence.” — Source: Wikipedia

Pair programming

“Pair programming is an agile software development technique in which two programmers work together at one workstation. One, the driver, writes code while the other, the observer (or navigator[1]), reviews each line of code as it is typed in. The two programmers switch roles frequently.” — Source: Wikipedia

Design Patterns

“In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Patterns are formalized best practices that the programmer must implement themselves in the application.[1] Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved. Many patterns imply object-orientation or more generally mutable state, and so may not be as applicable in functional programming languages, in which data is immutable or treated as such.” — Source: Wikipedia

Domain-driven design

“Domain-driven design (DDD) is an approach to developing software for complex needs by deeply connecting the implementation to an evolving model of the core business concepts.[1] The premise of domain-driven design is the following:
– Placing the project’s primary focus on the core domain and domain logic
– Basing complex designs on a model
Initiating a creative collaboration between technical and domain experts to iteratively cut ever closer to the conceptual heart of the problem.
Domain-driven design is not a technology or a methodology. DDD provides a structure of practices and terminology for making design decisions that focus and accelerate software projects dealing with complicated domains.” — Source: Wikipedia

Code refactoring

“Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code yet improves its internal structure.” — MartinFowler in Refactoring – Improving The Design Of Existing Code

If you are looking for some code refactoring software I have listed some of them in this blog post: List of Visual Studio Code Refactoring tools. On the other hand you may have more info about Refactoring with Composed Method pattern.

A fantastic article that explains code refactoring could be found here: http://c2.com/cgi/wiki?WhatIsRefactoring

Further reads

In one of my previous posts I have written about Top 10 books every microsoft software developer should have where a lot of concepts here mentioned (if not all of them) are discussed in depth.

References and resources.

    Share...Tweet about this on TwitterShare on Facebook4Share on Google+0Share on StumbleUpon1Share on LinkedIn3Flattr the authorPin on Pinterest7Share on Reddit0Share on Tumblr0Digg this

    I'm a Software Developer and Solution Architect interested in Software Development, Object-Oriented Design and Software Architecture all this especially bound to the Microsoft.NET platform. Feel free to contact me or know more in the about section

      7 Responses to “Agile software development tools and techniques – introduction”

    1. yes of course the full information of software development is here.

    2. […] Agile Software Development Tools and Techniques- Introduction […]

    3. Thank You

      Your blog is very informative & important :

      software development company

    4. I am fresher software developer. Thanks for sharing Great techniques methodologies of software development. I like your valuable information of Project Management , frameworks and Unit Testing topic. I learn lot’s of thing form you.

    5. […] [1] Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved. Many patterns imply object-orientation or …  […]

    6. software development process that relies on the repetition of a very short development cycle: first the developer writes an (initially failing) automated test case that defines a desired improvement or new function..

    Leave a Reply

    catacun-man@mailxu.com