Describe and showReference App functionality and architecture.Describe whatNant is.
Talk about build process at a high level before drilling into details.
Show Nunit GUIShow FxCop GUIWalk through Nunit and FxCop steps in build scriptDemonstrate what happens when a unit test fails.
Show Deployment script section of Build Script.Discuss process for deploying database scripts.Show resulting scripts
Show Cruise Control .netShow cctrayDemonstrate what happens when a build is triggered.
Real World Software Development Methodology<br />Bart Lowe<br />Senior Consultant <br />
Agenda<br />Decision Source Methodology<br />Iterative Deployments<br />Importance of Analysis<br />Continuous Integration<br />Role of Testing<br />Job Seeking Advice<br />
Analysis<br />Improper analysis is the number one cause for project failure<br />The goal of analysis is to make sure that the software actually solves someone’s problem.<br />Proper analysis ensures that everyone has the correct assumptions and expectations.<br />
Continuous Integration<br />Source Control<br />Automated Builds<br />Self-Testing Builds<br />Automated Deployment<br />Continuous Integration Server<br />Contrary to popular belief, continuous integration is an attitude, not a tool.<br />--James Shore<br />
Source Control<br />Developers should commit to the mainline frequently.<br />Ensures problems are found quickly when used in conjunction with self-testing builds.<br />Don’t commit changes that will break the build.<br />Developers should get the latest version and run a local test build before committing changes.<br />Store everything required to ship the product (including database scripts).<br />
Automatic Builds<br />Ensures that your build is documented & repeatable.<br />Tips<br />Build only from a full checkout of source control.<br />Maintain a history of past builds.<br />Make it easy for everyone to get latest executables.<br />Broken builds should be fixed ASAP.<br />Number your builds.<br />Keep your builds fast.<br />Treat build scripts as code. <br />Use a build scripting tool such as Nant.<br />
Self Testing Builds<br />Unit Testing<br />Test Driven Development <br />Failed Tests should cause the build to fail<br />Tool: Nunit<br />Code Coverage Testing<br />Tests the how much of your code is exercised by your unit tests.<br />Tool: NCover<br />Code Analysis<br />Validates conformance to design guidelines.<br />Tool: FxCop<br />
Automatic Deployment<br />Deployments can be just as error prone as builds.<br />Strive for one click deployments.<br />Create a deployment script for each environment (Dev, QA, Production)<br />Include a rollback mechanism in your deployment<br />Create deployment scripts with every build.<br />
Continuous Integration Server<br />A Continuous Integration server brings it all together.<br />Automatically triggers a build when a developer checks in code.<br />Provides a communication center for your build. <br />Records what changes where made since the last build along with who made the changes.<br />Alerts team members when a build breaks<br />Allows you to see detailed test results<br />Provides build history reporting<br />
Other Tools <br />Ndoc<br />Automatic class library documentation<br />http://ndoc.sourceforge.net/<br />Watir<br />Ruby based web application testing<br />http://wtr.rubyforge.org/<br />Fitnesse<br />Allows non-technical users to define acceptance tests<br />http://fitnesse.org/<br />Simian <br />Looks for duplication in large software code bases.<br />http://www.redhillconsulting.com.au/products/simian/<br />
Role of Testing<br />Testing is often the most disrespected role of software development<br />A testing strategy should be formed at the very beginning of a project. <br />Test Early Test Often.<br />Testing is a very specialized skill<br />A defect database is a critical component of any competent software team.<br />