Ma question peut sembler très scientifique, mais je pense que c'est un problème courant et les développeurs et programmeurs chevronnés auront, espérons-le, quelques conseils pour éviter le problème que je mentionne dans le titre. Btw., Ce que je décris ci-dessous est un vrai problème que j'essaie de résoudre de manière proactive dans mon projet iOS, je veux l'éviter à tout prix.
Par machine à états finis, je veux dire ceci> J'ai une interface utilisateur avec quelques boutons, plusieurs états de session pertinents pour cette interface utilisateur et ce que cette interface utilisateur représente, j'ai des données dont les valeurs sont partiellement affichées dans l'interface utilisateur, je reçois et gère certains déclencheurs externes (représenté par les rappels des capteurs). J'ai fait des diagrammes d'état pour mieux cartographier les scénarios pertinents qui sont souhaitables et qui peuvent être autorisés dans cette interface utilisateur et cette application. Alors que j'implémente lentement le code, l'application commence à se comporter de plus en plus comme elle le devrait. Cependant, je ne suis pas très sûr qu'il soit suffisamment robuste. Mes doutes viennent du fait que j'observe mon propre processus de réflexion et de mise en œuvre au fur et à mesure. J'étais confiant que j'avais tout couvert, mais c'était suffisant pour faire quelques tests bruts dans l'interface utilisateur et je me suis vite rendu compte qu'il y avait encore des lacunes dans le comportement .. Je les ai corrigés. cependant, comme chaque composant dépend et se comporte en fonction des entrées d'un autre composant, une certaine entrée de l'utilisateur ou d'une source externe déclenche une chaîne d'événements, des changements d'état ... etc. J'ai plusieurs composants et chacun se comporte comme ce déclencheur reçu en entrée -> déclencheur et son expéditeur analysés -> sortie quelque chose (un message, un changement d'état) basé sur l'analyse
Le problème est que ce n'est pas complètement autonome et mes composants (un élément de base de données, un état de session, l'état de certains boutons) ... POURRAIENT être modifiés, influencés, supprimés ou autrement modifiés, en dehors de la portée de la chaîne d'événements ou scénario souhaitable. (le téléphone se bloque, la batterie est vide, le téléphone s'éteint soudainement). Cela introduira une situation non valide dans le système, à partir de laquelle le système NE POURRAIT PAS être CAPABLE de récupérer. Je vois cela (bien que les gens ne réalisent pas que c'est le problème) dans beaucoup de mes applications concurrentes qui sont sur Apple Store, les clients écrivent des choses comme ça> "J'ai ajouté trois documents, et après y être allé et là, je ne peux pas les ouvrir, même si on les voit. " ou "J'ai enregistré des vidéos tous les jours, mais après avoir enregistré une vidéo trop log, je ne peux pas désactiver les sous-titres sur eux .., et le bouton pour les sous-titres ne fonctionne pas"
Ce ne sont que des exemples abrégés, les clients le décrivent souvent plus en détail ... à partir des descriptions et du comportement qui y sont décrits, je suppose que l'application particulière a une panne FSM.
La question ultime est donc de savoir comment puis-je éviter cela et comment protéger le système contre le blocage?
EDIT> Je parle dans le contexte de la vue d'un contrôleur de vue sur le téléphone, je veux dire une partie de l'application. Je comprends le modèle MVC, j'ai des modules séparés pour des fonctionnalités distinctes .. tout ce que je décris est pertinent pour un canevas sur l'interface utilisateur.