Monday, May 23, 2011

Agile software development

Agile software development based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. Agile came about because methods like waterfall didn’t allow high level customer involvement, or change. Taking weeks to months to document what we think our customers want no longer work.

Agile methods break tasks into small increments with minimal planning, and do not directly involve long-term planning. Each iteration involves a team working through a full software development cycle including planning, requirements analysis, design, coding, unit testing, and acceptance testing when a working product is demonstrated to stakeholders. This minimizes overall risk and allows the project to adapt to changes quickly. Stakeholders produce documentation as required. An iteration may 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. Multiple iterations may be required to release a product or new features.

Most agile implementations use a routine and formal daily face-to-face communication among team members. This specifically includes the customer representative and any interested stakeholders as observers. In a brief session, team members report to each other what they did the previous day, what they intend to do today, and what their roadblocks are. This face-to-face communication exposes problems as they arise.

Some principles on Agile Development

  • Customer satisfaction by rapid delivery of useful software
  • Welcome changing requirements, even late in development
  • Working software is delivered frequently (weeks rather than months)
  • Working software is the principal measure of progress
  • Sustainable development, able to maintain a constant pace
  • Close, daily co-operation between business people and developers
  • Face-to-face conversation is the best form of communication (co-location)
  • Projects are built around motivated individuals, who should be trusted
  • Continuous attention to technical excellence and good design
  • Simplicity
  • Self-organizing teams
  • Regular adaptation to changing circumstances

Commenting on major difference between waterfall model vs. agile are

  • Waterfall model suites more when development of program are already stable. Their design doesn’t need any major makeover.
  • Communication/Involvement with customer is big difference between them. In Agile development customer involvement is much more than Waterfall development.
  • In Agile development because of the continuous feedback from customer,they know the product better way than waterfall model.

Thursday, May 19, 2011

C# Aggregate Method

You want to apply a function to each successive element in your C# collection. With the Aggregate extension method, you can apply each successive element to the aggregate of all previous elements. Here, we provide some simple examples of Aggregate.

Examples

There are two example calls to the Aggregate method here. The first call uses a Func that specifies that the accumulation should be added to the next element. This simply results in the sum of all the elements in the array. The second call is more interesting: it multiplies the accumulation with the next element. All the numbers are multiplied together in order.

 

Program that calls Aggregate method [C#]

using System;
using System.Linq;

class Program
{
static void Main()
{
int[] array = { 1, 2, 3, 4, 5 };
int result = array.Aggregate((a, b) => b + a);
// 1 + 2 = 3
// 3 + 3 = 6
// 6 + 4 = 10
// 10 + 5 = 15

Console.WriteLine(result);

result = array.Aggregate((a, b) => b * a);
// 1 * 2 = 2
// 2 * 3 = 6
// 6 * 4 = 24
// 24 * 5 = 120

Console.WriteLine(result);
}
}

Output

15
120