C# – How to reduce the amount of time it takes to fully regression test an application ready for release

cguiproject-managementunit testingwpf

An app I work on is being developed with a modified version of scrum. If you are not familiar with scrum, it's just an alternative approach to a more traditional watefall model, where a series of features are worked on for a set amount of time known as a sprint. The app is written in C# and makes use of WPF. We use Visual C# 2010 Express edition as an IDE.

If we work on a sprint and add in a few new features, but do not plan to release until a further sprint is complete, then regression testing is not an issue as such. We just test the new features and give the app a good once over. However, if a release is planned that our customers can download – a full regression test is factored in. In the past this wasn't a big deal, it took 3 or 4 days and the devs simply fix up any bugs found in the regression phase, but now, as the app is getting larger and larger and incorporating more and more features, the regression is spanning out for weeks.

I am interested in any methods that people know of or use that can decrease this time. At the moment the only ideas I have are to either start writing Unit Tests, which I have never fully tried out in a commercial environment, or to research the possibilty of any UI Automation API's or tools that would allow me to write a program to perform a series of batch tests. I know literally nothing about the possibilities of UI automation so any information would be valuable. I don't know that much about Unit testing either, how complicated can the tests be? Is it possible to get Unit tests to use the UI? Are there any other methods I should consider?

Thanks for reading, and for any advice in advance.

Edit: Thanks for the information. Does anybody know of any alternatives to what has been mentioned so far (NUnit, RhinoMocks and CodedUI)?

Best Answer

Naturally if you test everything manually, it will take you a lot of time. Especially in scrum projects, where testing is frequent and the time constants are short, it is important to use automated testing.

A good testing solution is a combination of unit tests (that test a small part of the code, typically a class), and automated integration tests (which follow end-to-end processes and use cases in your application). Some of the integration tests can definitely be UI tests, and there are frameworks for UI testing that you can use.

You can move from manual tests to automated tests gradually. Start by enforcing a practice that every new code written by the team must have unit testing. Read about Test-Driven Development, it's a bit of a harsh approach but it's a good point to start from when designing your own best practices.

NUnit, combined with RhinoMocks, is an excellent solution both for unit tests and integration tests.