Question

Je l'habitude d'utiliser des formulaires web ASP.net pour l'interface graphique, peut-être une des technologies les plus « stateful ». Mais il applique à toute la technologie qui a des états. Parfois, les formes sont difficiles et complexes, avec> 30 éléments et> 3 états de chaque élément. manière intuitive de la conception d'une telle forme travaille habituellement pour 90%. Autres 10% trouvent généralement testeurs ou utilisateurs finaux.)

Le problème que je vois que nous devrions imaginer beaucoup de scénarios sur le même objet, ce qui est beaucoup plus difficile que la conséquence des opérations indépendantes.

Des cours de programmation fonctionnelle, je sais que la meilleure façon est de ne pas utiliser la gestion de l'Etat et d'utiliser des fonctions pures et variables passant par la valeur et toutes ces choses, ce qui est grandement officialisé. Parfois, nous ne pouvons l'éviter.

Utilisez-vous des formalismes mathématiques et les approches de gestion de l'état des objets complexes? Pas comme monades dans Haskell, mais qui peut être utilisé dans d'autres applications commerciales traditionnelles et langues - Java, C #, C ++.

Il est peut-être pas Turing-complet formalisme, mais 99% sera super aussi.)

Désolé si elle est juste une autre question Tumbleweed:)

Était-ce utile?

La solution

Utiliser un message de passage comme une abstraction. Avantages:

  1. La difficulté avec l'état complexe des interactions complexes, qui sont particulièrement poilu dans les systèmes concurrents comme typiques des interfaces graphiques. De passage de message, en éliminant l'état partagé, arrête la complexité d'état dans un processus d'être infectieux.
  2. Message Passing-concurrency a de bons modèles fondamentaux:. Par exemple, le modèle de l'acteur, CSP, qui sont tous deux influencés Erlang
  3. Il intègre bien avec la programmation fonctionnelle: consultez à nouveau Erlang. livre de Peter van Roy * Concepts, techniques et modèles de programmation informatique est un excellent texte qui montre les ingrédients fondamentaux des langages de programmation, telles que les fonctions pures, et passage de messages, et comment ils peuvent être combinés. Le texte est avilable sous forme de PDF gratuit.

Autres conseils

  

Il est peut-être pas Turing-complet formalisme, mais 99% sera super aussi.)

Désolé, mais je préfère fournir une solution NP-complet:)

Réponse rapide de moi serait piloté par les tests approche. Mais lisez plus pour plus.

  

Le problème que je vois que nous devrions   imaginer beaucoup de scénarios sur le même   objet, ce qui est beaucoup plus dur que le   conséquence des opérations indépendantes.

Dans ce cas, le décomposition (non seulement dans sens , mais dans mathématique aussi) est très utile. Vous décomposez scénario complexe dans de nombreux plus simples , qui peut encore être complexes par eux-mêmes et peuvent être décomposées plus loin.

En raison d'un tel processus, vous devriez finir avec un certain nombre de fonctions simples (tâches) pour la plupart indépendants de chacun ceux. Ceci est très important parce que vous pouvez TEST UNITÉ ces scénarios simples. De plus, il est beaucoup plus facile et mieux suivre test première approche qui permet de voir la décomposition au début du processus de développement.

  

Utilisez-vous des formalismes mathématiques et les méthodes de gestion de l'état des objets complexes?

Pour continuer ce que je dis, pour moi la chose la plus importante est de faire une bonne décomposition afin que je puisse assurer la qualité et être en mesure de reproduire facilement les erreurs de manière automatisée.


Pour vous donner un exemple abstrait :

Vous avez un scénario complexe A. Vous devez toujours écrire au moins 3 tests pour chaque scénario:. Entrée correcte, entrée incorrecte et cas de coin (s)

A partir d'écrire premier test (entrée correcte) Je me rends compte que le test devient trop complexe .

En conséquence, I décomposer le scénario A dans A1 moins complexe, A2, A3. Ensuite, je commence à écrire des tests pour chaque nouveau d'entre eux (je finirais avec au moins 3 * 3 = 9 essais).

Je me rends compte que A1 est encore trop complexe pour tester, donc je décomposer à nouveau dans A1-1, A1-2. Maintenant, j'ai 4 scénarios différents (A1-2, A1-2, A2, A3) et 3 * 4 = 12 tests potentiels. Je continue à écrire les tests.

Après je suis fait. I commencer la mise en œuvre , donc tous mes tests passent. Après cela, vous avez 12 prouve que le scénario A (plus précisément ses parties) fonctionne correctement . De plus, vous pouvez écrire un autre 3 tests pour le scénario A qui combine toutes ses parties décomposées - ce genre de test est souvent (mais pas toujours!) Peut être vu comme tests d'intégration .

Alors supposons un bug se trouve dans le scénario A. Vous n'êtes pas sûr quelle partie il appartient, mais vous pensez qu'il est lié à A1-2 ou A3. Alors vous écrire 2 autres tests pour chacun des scénarios reproduire le bug (écrire un tel test qui ne pas répondre à vos attentes). Une fois que vous avez reproduit le bug que vous le corriger et de faire tous les tests passent.

Maintenant, vous avez 2 plus du système de travail prouve bien qui assure toute la Functionalit précédentey travaille de la même manière.

Il y a 2 principaux problèmes majeurs avec cette approche de l'OMI.

  1. Vous devez écrire beaucoup de tests et de les soutenir. Beaucoup de les développeurs ne veulent pas pour le faire.
  2. En outre, le processus de décomposition est plus un art qu'une science. Bonne décomposition se traduira par une bonne structure, des tests et supportabilité alors qu'une mauvaise se traduira par beaucoup de douleur et de temps perdu. Et il est difficile de dire si la décomposition est bon ou mauvais dans un premier temps.

Ce processus est appelé Test-Driven-développement . Je trouve être le le plus proche « formalisation » du processus de développement qui joue bien entre le monde réel et la science .

Je ne parle pas vraiment d'état ici, mais plutôt le comportement et prouver qu'il fonctionne correctement.

Par expérience personnelle, je dois mentionner que ASP.NET WebForm est techniquement très difficile à tester. Pour remédier à cela, je suggère à appliquer modèle MVP pour ASP.NET WebForms .

Contrairement à WebForms, ASP.NET MVC est beaucoup plus facile pour tester. Mais encore, vous devriez avoir un ensemble de soi-disant « services » (nos scénarios) et (unité) de les tester séparément, puis tester l'intégration de l'interface utilisateur dans l'environnement proche des tests d'intégration.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top