Well over a billion apps have been developed for the iOS platform since its inception.
Most of the early apps were rather simple and often developed by a single developer.
Over the years, iOS apps have become increasingly complex pieces of software that
often involve large, distributed teams of developers working in Agile environments with
complex build and release pipelines.
Modern apps often perform several complex operations including (but not limited to)
presenting a complex user interface, multithreading, storing data in local databases,
interfacing with multiple sensors, media recording and playback, and consuming
RESTful web API’s.
With such a complex interplay between components of an app and several thousand
lines of source code spread across several hundred classes, how do we know for certain
that the code we have written does what we think it does? How do we know that our
code can handle edge scenarios? And finally, how do we know that we have built the
right software that meets business requirements? The answer to the first two questions
is addressed by the practice of unit testing, and Behavior-Driven Development (BDD)
addresses the answer to the question of building the right software in the first place. BDD
is covered in Chapter 10. In this chapter and the next one you will learn about unit testing,
and the related discipline of Test-Driven Development (TDD).