Agile Programming
Agile Development
Agile Software programming is a framework for undertaking high risks projects that embraces evolutionary change throughout the lifecycle of the project. Agile programming is developing in short timeframes called iterations which typically last one to four weeks. Each iteration is like a miniature software project of its own, and includes all of the tasks necessary to release the mini-increment of new functionality: planning, requirements analysis, design, coding, testing, and documentation. While an iteration may not add enough functionality to warrant releasing the product, an agile software project intends to be capable of releasing new software at the end of every iteration.
Agile methods emphasize real-time communication, preferably face-to-face, over written documents. Most agile teams are located in a common area and include all the people necessary to finish software. At a minimum, this includes programmers and their "customers" (customers are the people who define the product; they may be product managers, business analysts, or actual customers). The common area may also include testers, interaction designers, technical writers, and managers. Agile methods also emphasize working software as the primary measure of progress.
Tasks for establishing Agile programming
Technologies required for Agile development
- Cruise control .Net - continuous Integration
- Visual Source Safe
- Group WIKI - MediaWiki
- Nunit - unit testing
- NunitFoms -unit testing for UI
- NCover - Code coverage
- Ndoc - code documentation
- Resharper - Code Refactoring
- CodeSmith - Code generation
- Bugzilla - manage software development
- ORM - Object relational mapping
Continuous integration
What is continuous integration?
Continuous integration is the process of generating a build whenever a programmer checks code into the source control server. When you use this process, it is a good idea to have a dedicated build server where you can synchronize and compile the sources, and run unit tests.
Practices of Continuous Integration
- Automate the Build
- Everyone Commits Every Day
- Every Commit Should Build the Mainline on an Integration Machine
- Keep the Build Fast
- Test in a Clone of the Production Environment
- Everyone can see what's happening
- Automate Deployment
Code Templates and generation
Code generation is the technique of using or writing programs that write source code using templates. The main benefits of code generation are
- Reduce repetitive code tasks
- Generate our code in less time with fewer bugs
- Produce consistent code that adheres to standards
- Ability to leverage templates and frameworks that are tested and proven.
- Ability to integrate with other time consuming functions like unit testing, logging, profiling
- Keeping the database in sync with your code.
What tools do we have to do this?
CodeSmith is a template-based code generator that allows you to generate code for any text language. The code generated can be customized by the use of properties. CodeSmith comes with many standard property types and is 100% extensible by allowing the user to create custom property types.
CodeSmith's syntax is almost identical to ASP.NET. So if you are familiar with ASP.NET then you should be able to quickly learn the template syntax. You can use the C#, VB.NET or JScript.NET languages in your templates and your templates can output any ASCII-based language.
http://www.codesmithtools.com/
Available templates
The choice of templates is important as it would complement/implement the architecture and design of the application.
Some framework templates that are available are
- Nhibernate
NHibernate is a .NET based object persistence library for relational databases. NHibernate handles persisting your .NET objects to and from an underlying relational database. Rather than you having to write SQL to get your objects in and out of the database, NHibernate takes care of this for you. Your code only needs to be concerned with your objects, NHibernate generates the SQL and makes sure that things end up in the correct tables and columns.
http://www.hibernate.org/343.html