andrewlocatelliwoodcock

Thoughts on Software

Archive for the ‘Unit Testing’ Category

Waterfragile: Agile development in the Enterprise

with 3 comments

Waterfragile is my term for the most popular development methodology in use in Enterprises today.

Waterfragile is a heavily modified Agile methodology that adopts the best practises of Agile and Waterfall: the flexibility of Agile to adapt to changing (increasing!) requirements with the rigour of Waterfall to deliver promised features on a promised date. Waterfragile teams take on Agile overhead such as scrums, sprints, retrospectives, etc. but do not take on the bits they can’t be trusted with such as responsibility for the release or deciding which features should be included in each release or the deployment schedule. In fact, one of the central tenets of Waterfragile is that feature sets should only ever grow throughout the release cycle. Advanced Waterfragile practitioners refine this further by removing the ability to de-scope features as this focuses the team on developing 20 hours a day to meet the all-important external deadlines.

To do Waterfragile properly, only the development team should do scrums, sprints, etc. (it’s a development paradigm after all, no point wasting business analysis and test team time on this stuff!) and they should be slotted within a fully waterfall analysis, test and release cycle. If you fail to properly integrate the development team into the waterfall cycle, they may well miss their deadlines or skip features. Test teams should be fully prepped to pick up on all small visual defects – there’s no point spending too much time testing deep feature behaviour as that’s what development’s unit tests are for. Test teams should work to their own schedules and not waste time preparing tests ahead of the start of their test cycle so as to maximize their workload throughput.

Remember: what you are aiming for is separation not only of concerns but also of goals and responsibilities – teams should never be measured holistically on the successful delivery of a project but only on their part of it and the person responsible should never be the one making the decision as this can lead to dropping of features, missed deadlines, etc. The ability to add features, never remove them and still hit deadlines is Waterfragile’s killer feature – a minimum feature set and absolute delivery schedule can now be included in PowerPoint presentations about the project and as we all know “set in slide” is simply “set in stone 2.0”.

Done right, Waterfragile delivers all the benefits of Agile (faster release cycles, ability to make late changes to requirements) without losing any of the benefits of Waterfall (feature sets and delivery dates known months if not years in advance), a development methodology that has never failed to deliver even once over the last 40 years.

Written by andrewlocatelliwoodcock

November 14, 2013 at 19:08

Unit Testing Session State Dependent Code in ASP.Net MVC

with 2 comments

It can be pretty tricky to unit test code that’s dependent on Session State, a situation I needed to address recently when developing my talk for the MTUG Developer Day, largely because Session State is dependent on having a properly initialized Controller and a Controller, as it is built on top of ASP.Net is not an easy thing to initialize!

The MVCContrib Testhelper can help here though as it has a handy method to … initialize a Controller!

Here’s a sample:

var controller = new XXXController();

            // MVCContrib TestHelper is initializing the Controller for us INCLUDING session state!
            var builder = new TestControllerBuilder();
            builder.InitializeController(controller);

The InitializeController method performs all the necessary tasks to initialize the Controller including preparing Session State and we can now unit test code that depends on Session State.

Written by andrewlocatelliwoodcock

October 25, 2011 at 20:26