Menschen hassen es, wenn Apps abstürzen oder wenn sie für einige Sekunden langsamer werden oder einfrieren. Laut einer Umfrage von Dimensional Research erwarten 61 Prozent der Benutzer, dass mobile Apps innerhalb von vier Sekunden gestartet werden, während 49 Prozent Antworten auf Eingaben in zwei Sekunden wünschen. Wenn eine App abstürzt, einfriert oder Fehler aufweist, deinstallieren 53 Prozent der Benutzer sie.
Unabhängig davon, ob Ihre Zielgruppe Verbraucher oder Unternehmen sind, ist es der schnelle Weg, eingefroren zu werden, wenn Sie sie enttäuschen. Ich habe mit einer Reihe von mobilen Entwicklern gesprochen und nach den häufigsten Problemen gefragt, auf die sie gestoßen sind. Hier sind sechs der wichtigsten Möglichkeiten, wie Ihre Entwicklung in die Irre gehen und Ihre App in Gefahr bringen kann, von einer Leistungsklippe zu stoßen.
1. Speicherverwaltung Einer der größten Problembereiche für praktisch alle, mit denen ich gesprochen habe, ist die Speicherverwaltung. Eine App spinnt möglicherweise zu viele Threads und nimmt Speicherressourcen auf oder läuft auf einem System, auf dem zu viele Apps geöffnet sind. Die Leute schreiben Code, als ob nur ihre Apps existieren, sagt Sachin Agarwal, VP Marketing bei OpsClarity. Ihre Software muss ein "guter Bürger im App-Ökosystem" sein, sagt er. "Ich schaue mir einige Nachrichten-Apps an und sie sehen sich fast einen Gig an Daten an. Sie archivieren Nachrichten aus dem letzten Monat. Es gibt ein Maß an Corporate Citizenship, das für mobile Apps erforderlich ist."
Nicht dass das Problem für alle Entwickler gleich wäre. "Unter iOS können Sie noch mehr tun, um Objective-C für viele Speicherprobleme zu nutzen", sagt Andrew Whiting, Vice President Business Development bei Solstice Mobile. Aber es gibt einen Kompromiss. "Unter Android haben Sie eine viel tiefere [Speicher-] Kontrolle und können normalerweise genau das tun, was Sie möchten, was die Komplexität erhöht."
"In Java geht es um Dinge [mit Android] wie [Speichermangel], die normalerweise mit Dingen wie dem Laden großer Bilder oder der Verarbeitung von Bitmaps zusammenhängen", sagt Jonathan Karon, Senior Software Engineering Manager bei New Relic, der a vertreibt Mobile SDK, das über die technische Leistung berichtet und häufige Problemursachen zusammengestellt hat. "Es gibt tatsächlich eine überraschende Anzahl von Linker-Problemen unter Android, bei denen eine Klasse nicht gefunden werden kann, oder es gibt eine Ausnahme, die als nicht klassifizierter Link bezeichnet wird." Auf der anderen Seite leiden iOS-Apps häufig unter der Ausnahme NSInternalInconsistency, die auftritt, wenn ein Entwickler ein Array oder eine Datenerfassung an einem Ort ändert, "während etwas anderes die Liste der vorhandenen Dinge liest".
2. Software-Lebenszyklus Der iterative App-Entwicklungsprozess mit seiner ständigen Reihe häufiger Veröffentlichungen öffnet Türen, um ein Produkt mit minimaler Lebensfähigkeit auf den Markt zu bringen und es dann im Laufe der Zeit zu verbessern und ein Publikum aufzubauen. Der Verlust des herkömmlichen Software-Lebenszyklus führt jedoch zu erheblichen Komplikationen aufgrund von Abhängigkeiten vom Betriebssystem und APIs von Drittanbietern.
"Wenn Sie sich die neuesten Android-Updates ansehen, stürzen die Apps häufig ab", sagt Agarwal. "Das Betriebssystem selbst ist instabil. Oder das Betriebssystem wird aktualisiert und die App wurde nicht aktualisiert." Oder der Benutzer lädt die neue Version nicht herunter. "Sie haben keine Kontrolle und es spricht für einen zentralen Entwicklungsprozess."
Das Wachstum von Mobile und Cloud Computing hat die Nutzung von Diensten von Drittanbietern und den damit verbundenen APIs erhöht, die Zeit sparen und dazu beitragen, dass eine App schneller auf den Markt kommt. Aber sie haben ihre eigenen Probleme.
"Viele Bibliotheken sind die kleinsten gemeinsamen Nenner", sagt Whiting. "Sie versuchen, alle Probleme zu lösen und für niemanden eine optimale Lösung zu finden." Beispielsweise kann eine bestimmte API eine Leistungsbeschränkung für eine bestimmte App aufweisen.
Die API verwendet möglicherweise auch Techniken, die schwierig sein können, z. B. das Swizzling der iOS-Methode. Ein Entwickler ändert Zuordnungen von einem Methodennamen zu einer Implementierung, wodurch die ursprüngliche Methode geändert werden kann, wenn der ursprüngliche Code wie eine API von Apple nicht verfügbar ist. "Man könnte es als eine der" dunklen Künste "der iOS-App-Entwicklung bezeichnen", sagt Raman Bhatia, Director of Mobile beim Online-Reisebüro Fareportal. "[Aber] wenn Ihr App-Code auf eine bestimmte Weise geschrieben ist, kann dies zu einem Absturz führen."
APIs können auch unerwartete Änderungen einführen. "API-Latenzen, Fehlerraten, Datenbandbreite, verwendete API-Version und die Anzahl der API-Anforderungen können zu kleinen Problemen führen, die zu großen Problemen werden", sagt Agarwal. Dann gibt es die Abhängigkeitskette für die APIs selbst, die spezielle Tools benötigt, um alles zu verfolgen.
Eine API kann auch andere Probleme verursachen, z. B. Speicherfehler. "Sie zeigen auf ein Objekt, das Sie bereits aus dem Speicher entfernt haben, und das ist normalerweise kein Problem, wenn Sie alle Objekte selbst erstellt haben, weil Sie wissen, ob Sie darauf verweisen können oder nicht", sagt Long Le, Mitbegründer und Entwickler von We Get Fit, eine kommende Fitness-App für Apple Watch und iPhone. "Das Problem tritt auf, wenn Sie Frameworks von Drittanbietern einbringen. Sie sind sich nie sicher, was sie bereinigen und was sie erstellen."
3. Unzureichende Prüfung Die Notwendigkeit zum Testen liegt auf der Hand, aber eine angemessene Abdeckung, insbesondere mit der Vielzahl von Android-Versionen und -Geräten, kann eine Herausforderung sein. Es gibt Simulatoren, aber auf einem Server ausgeführte Software weist möglicherweise nicht dieselben Leistungseinschränkungen auf.
Beispielsweise könnte ein Thread einer App versuchen, eine Datenbank zu lesen, während ein zweiter Thread versucht, dieselbe Datenbank zu ändern. "Es ist ein Zeitproblem", sagt Wayne Carter, Chefarchitekt von Mobile bei Couchbase. "Wenn sie nicht genau zum richtigen Zeitpunkt treffen, tritt das Problem nicht auf. Es kann mit etwas so Einfachem wie einer Protokollanweisung vertuscht werden." Ein Simulator weist häufig nicht die gleichen grundlegenden Leistungsbeschränkungen wie ein mobiles Gerät auf, sodass die Rennbedingungen nicht ersichtlich sind.
Es gibt Dienste, die Paarungen verschiedener Geräte und Betriebssystemvarianten ausführen und verfügbar machen, aber das wäre wahrscheinlich teurer als ein Simulator. Die Wahl wird zu einem Kompromiss zwischen Budgets und Bedürfnissen.
Tests sollten mit Benchmarking anhand von Industriestandards und Benutzererwartungen kombiniert werden, um sicherzustellen, dass das, was für Entwickler akzeptabel erscheint, auch für Benutzer akzeptabel ist. Die Tests sollten auch kontinuierlich durchgeführt werden. Überwachen Sie die Leistung und suchen Sie nach Feedback von Benutzern, das auf Probleme hinweist, und beheben Sie die Probleme so schnell wie möglich.
4. Netzwerkverwaltung Da Apps zunehmend vom Netzwerkzugriff abhängig sind, entweder für Daten oder für Dienste von Drittanbietern, ist das Netzwerkmanagement zu einer Problemquelle geworden.
"Der wichtigste Grund [Absturz von Apps] ist die Reaktionsfähigkeit und das Hängen Ihrer App, wenn Sie versuchen, Daten abzurufen, oder wenn Sie etwas übermittelt haben und auf eine Antwort warten", sagt Pravin Vazirani, Associate Vice President of Operations für Chetu, eine Softwareentwicklungsberatung. Es könnte sein, dass der Entwickler eine gute Wi-Fi-Verbindung hatte, der Benutzer sich jedoch in einem Mobilfunknetz in einem Gebiet mit schlechtem Empfang befindet.
Eine Änderung der Netzwerke, die durch den Wechsel von 3G zu 2G, das Ein- und Aussteigen in Aufzüge oder den Verlust des Empfangs verursacht wird, ist besonders schwierig und kann zu verlorenen oder verschlüsselten Paketen führen. Glücklicherweise "können viele dieser Bedingungen mit wenigen Szenarien [modelliert] werden", sagt Roi Carmel, Senior Vice President für Produkte und Strategien beim Testunternehmen Perfecto Mobile für mobile Apps.
Eine gute Möglichkeit, ein Netzwerkproblem zu lösen, besteht darin, den Benutzer über die Verbindungsunterbrechung zu informieren und nach Möglichkeit die Möglichkeit zu bieten, etwas anderes zu tun, das von Interesse sein könnte. Wenn die Benutzer die Ursache eines vorübergehenden Zustands verstehen, der außerhalb der Kontrolle der App liegt, bleiben sie eher ruhig und ärgern sich nicht über die Software oder den damit verbundenen Markennamen.
5. Fehlerbedingung und Ausnahmebehandlung Angesichts der Komplikationen bei der mobilen Entwicklung sind einige Fehler unvermeidlich, sei es eine unerwartete API-Änderung, ein Speicherproblem, das eine vorherige Erkennung vermieden hat, oder ein Netzwerkzustand, der die Konnektivität beendet oder sogar nur die Datengeschwindigkeit während der Übertragung großer Dateien wie Bilder oder Videos verlangsamt .
Was zwischen einer solchen Situation und einem Absturz steht, ist eine gute Fehler- und Ausnahmebehandlung. Auf diese Weise kann eine App nicht durch einen unerwarteten Versuch, durch Null zu teilen, eine falsch eingegebene Antwort eines Benutzers, eine API, die plötzlich Text als Antwort anstelle eines numerischen Werts bereitstellt, oder den vorübergehenden Verlust der Konnektivität ausgelöst werden.
In jedem dieser Fälle merkt eine ordnungsgemäß codierte App das Unerwartete und bietet eine ordnungsgemäße Möglichkeit, einen Prozess oder eine Aktivität zu beenden, während der Benutzer über den Fehler informiert wird. Es ist vielleicht nicht ideal, aber wenn Sie die Kommunikationswege offen halten können, besteht eine bessere Chance, dass Sie den Benutzer behalten.
6. Zu viel Code Aber vielleicht ist der beste Rat, eine App einfach zu halten. Stellen Sie das von den Benutzern gewünschte Einzweckwerkzeug bereit und verwenden Sie die Übung, um nur das zu codieren, was erforderlich ist. "Der beste und fehlerfreieste Code ist der Code, den Sie nicht schreiben", sagt Felipe Laso-Marsetti, leitender Systemingenieur bei Lextech Global Services, einem Unternehmen für mobile Unternehmensentwicklung.
Können Sie eine fehlerfreie App realistisch erstellen, insbesondere in einer ersten Runde? Wahrscheinlich nicht. Sie können sich jedoch auf diese Fehlerquellen konzentrieren und Ihr Bestes tun, um eine starke Ausnahmebehandlung für die Dinge zu erstellen, die schief gehen können und werden. Murphy mag durch die Welt der Softwareentwicklung wandern, aber Sie können sicherstellen, dass er so leicht wie möglich tritt.