Sometimes you buy a new app for you iPhone or Android device (or any device for that matter), run it for a while, then it crashes. I can think of one book library app I have for my iPhone which just crashes occasionally for no apparent reason. Crashing software is nothing new of course. However what is new on many mobile devices is the lack of notification – on computers you might get a nice message like “the application X has unexpectedly quit“. On mobile devices it often just crashes. You run the program again, it may be fine… or not. Let’s face it, not every app is well tested. Many rely on a process such as user-based crowdsource-testing. People buy the app, it crashes, they report when the crash occurred and what they were doing. Enough people report similar symptoms, the developers attempt to find the bug and fix it. The bug gets fixed, the app gets updated and everyone is happy.
Why do the bugs occur in the first place? Because code is complex, and the more it has to do, the more complex it becomes. The more complex it becomes, the harder it is to test effectively. Some apps just crash because they are memory hogs. Others because they read in a spurious piece of input that they can’t deal with and baulk – in other words, there is little or no defensive programming going on. User-based crowdsource testing is an effective way for small companies to have their software tested in diverse, realistic situations to find the bugs that developers just can’t find.
Let’s face it software isn’t perfect. The closest thing to perfection may be the software that runs critical systems such as driverless trains – but it is also less complex than some apps.