Over the last few decades technology has become integrated within our lives, and the user's expectations of applications have grown more and more. The software processes got longer and more complex, which implies inevitable mistakes. One of the causes can be a slight inattention of a developer, but it's hard not to make any mistakes in a big and complex software code. Also there might be errors in the specification, or even in the requirements, which can lead to serious consequences.
In this thesis I start with presenting the basic concepts and ideas of software testing, which are crucial to effective testing. Also a developer should be familiar with the basic design principles, the guidelines which make the testing possible; therefore I present the SOLID principles. The usage of these principles will make the software code cleaner, more maintainable and more testable.
After introducing the tested Windows Phone application, I plan the testing process. I determine the effective testing techniques for the different parts of the software: I cover the low level software components using unit tests with consideration of the dependencies between the components, I make sure of the correctness of cooperation between the components using integration tests, and finally I investigate the application's full functionality with system tests.
Before presenting the test implementations, I cover the operation of the testing tools on different platforms, because the .NET and Visual Studio provided tools have some limitations on the mobile platform. One of the most significant limitations is the lack of code coverage measurement, so I examine the reasons and present a workaround. After that, through the application's unit and integration tests, I present some typical test coding problems and their solutions.
In the end the planned testing process prevented and discovered several defects, also it had a positive effect on code quality. 112 unit and integration tests were made for this application, which resulted in a 99.1% code coverage in the model layer and a 100% code coverage on the service layer, while the test code remained clean and maintainable.