Frage

Normalerweise verwende ich ASP.net Web-Formulare für GUI, vielleicht eines der am meisten „Stateful“ -Technologien. Aber es gilt für jede Technologie, die Zustände hat. Manchmal sind die Formen kompliziert und komplex, mit> 30 Elementen und> 3 Zustände jedes Elements. Intuitive Art und Weise, eine solche Form der Gestaltung funktioniert in der Regel für 90%. Weitere 10% in der Regel finden Tester oder Endnutzern.)

Das Problem, wie ich es sehe, dass wir eine Menge Szenarien auf demselben Objekt vorstellen sollen, die viel härter als eine Folge von unabhängigen Operationen sind.

Von der funktionalen Programmierung Kurse Ich weiß, dass beste Weg ist, keine staatliche Verwaltung zu nutzen und reine Funktionen und Variable vorbei Wert verwenden und all diese Dinge, die stark formalisiert ist. Manchmal können wir es nicht vermeiden.

Sie mathematische Formalismen Verwenden Sie und Ansätze zur staatlichen Verwaltung von komplexen Objekten? Nicht wie Monaden in Haskell, die aber in eher traditionellen Business-Anwendungen und Sprachen verwendet werden - Java, C #, C ++.

Es kann sein, nicht Turing-complete Formalismus, aber 99% wird groß sein auch:).

Sorry, wenn es nur eine andere tumbleweed Frage ist:)

War es hilfreich?

Lösung

Mit Message-Passing als Abstraktion. Vorteile:

  1. Die Schwierigkeit bei komplexem Zustand komplexe Wechselwirkungen, die in parallelen Systemen wie typische GUIs besonders haarig sind. Message-Passing, von gemeinsam genutzten Zustand zu beseitigen, stoppt die Komplexität des Zustandes in einem Prozess von infektiösen zu sein.
  2. Message-Passing Gleichzeitigkeit hat schöne grundlegende Modelle. B. die Schauspieler-Modell CSP, von denen beide Erlang beeinflusst
  3. Es integriert sich gut mit der funktionalen Programmierung: wieder Erlang überprüfen. Peter van Roy Buch * Konzepte, Techniken und Modelle aus Computer-Programmierung ist ein ausgezeichneter Text, der die grundlegenden Bestandteile von Programmiersprachen, wie reine Funktionen und Message-Passing zeigt, und wie sie kombiniert werden. Der Text ist avilable als kostenloses PDF.

Andere Tipps

  

Es kann sein, nicht Turing-complete Formalismus, aber 99% wird groß sein auch:).

Es tut uns Leid, aber ich würde eher bieten NP-Komplettlösung:)

Kurze Antwort von mir wäre Testgetriebene Ansatz . Aber lesen Sie weiter für mehr.

  

Das Problem, wie ich es sehe, wir sollten   stellen Sie sich eine Menge von Szenarien auf der gleichen   Gegenstand, der viel härter als a ist   Folge unabhängiger Operationen.

In solchen Fällen ist die Zersetzung (nicht nur in Informatik Sinn, aber in mathematischen auch) ist sehr nützlich. Sie zersetzen komplexes Szenario in vielen einfacheren , die wiederum immer noch komplex selbst sein können und weiter zerlegt werden kann.

Als Ergebnis eines solchen Prozesses Sie mit einer Reihe von einfachen Funktionen (Aufgaben) weitgehend unabhängig von jeweils diejenigen am Ende sollte. Dies ist sehr wichtig, denn dann können Sie Unit-Test diese einfachen Szenarien. Darüber hinaus ist es viel einfacher und besser folgen Test-First-Ansatz , die sehen können die Zersetzung in ganz am Anfang des Entwicklungsprozesses.

  

Verwenden Sie mathematische Formalismen und Ansätze zur staatlichen Verwaltung von komplexen Objekten?

Um fortzufahren, was ich gesagt, für mich das Wichtigste ist eine gute Zersetzung zu machen, so dass ich die Qualität sicherstellen können, und die Möglichkeit, auf einfache Weise Fehler in automatisierter Weise zu reproduzieren.


Damit Sie ein abstraktes Beispiel :

Sie haben ein komplexes Szenario A. Sie müssen immer schreiben mindestens 3 Tests für jedes Szenario. Korrekte Eingabe falsche Eingabe und Ecke Fall (n)

Starten ersten Test (korrekte Eingabe) Ich weiß, zu schreiben, dass der Test zu komplex wird .

Als Ergebnis I Szenario zersetzen A in weniger komplexen A1, A2, A3. Dann habe ich Tests für jeden von ihnen das Schreiben beginne wieder (Ich sollte mit mindestens 3 * 3 = 9 Tests am Ende).

Ich weiß, dass A1 immer noch zu komplex ist, zu testen, so I es zersetzen wieder in A1-1, A1-2. Jetzt habe ich 4 verschiedene Szenarien (A1-2, A1-2, A2, A3) und 3 * 4 = 12 Potentialtests. Ich fahre fort, die Tests zu schreiben.

Nachdem ich fertig bin. I Start Implementierung , so dass alle meine Tests bestehen. Danach haben Sie 12 dieses Szenario A beweisen (genauer gesagt deren Teile) arbeitet richtig . Zusätzlich könnten Sie weitere 3 Tests für das Szenario A schreiben, die alle seiner zerlegt Teile kombiniert - diese Art von Tests ist oft (aber nicht immer!): Integrationstest .

Dann lassen Sie uns einen Fehler übernehmen wird in Szenario A gefunden. Sie sind sich nicht sicher, welcher Teil es gehört, aber Sie vermuten, dass es zu A1-2 oder A3 verwandt ist. So Sie schreiben 2 weitere Tests für jeden der Szenario reproduzieren der Fehler (schreiben einen solchen Test, die nicht reißen Ihre Erwartungen zu erfüllen). Nachdem Sie den Fehler reproduziert beheben Sie es und alle Tests übergehen zu lassen.

Jetzt haben Sie 2 weitere erweist sich als korrekt funktionierendes System, das alle vorherigen Functionalit gewährleistety ist die gleiche Art und Weise zu arbeiten.

Es gibt 2 große Probleme mit diesem Ansatz IMO.

  1. Sie brauchen eine Menge Tests zu schreiben und zu unterstützen. Viele Entwickler wollen einfach nicht , das zu tun.
  2. Darüber hinaus ist der Prozess der Zersetzung mehr Kunst als Wissenschaft. Gute Zersetzung führt zu einer guten Struktur, Tests und Wartbarkeit, während ein schlechter in einer Menge Schmerz und verschwendete Zeit führen wird. Und es ist schwer zu sagen, ob die Zersetzung gut oder schlecht ist auf den ersten.

Dieser Prozess wird als Test-Driven-Entwicklung . Ich finde es die am nächsten „Formalisierung“ des Entwicklungsprozesses sein, die zwischen der Wissenschaft und den realen Welt schön spielt.

Also ich weiß nicht wirklich über Zustand hier reden, sondern Verhalten und zu beweisen, es funktioniert einwandfrei.

Aus persönlicher Erfahrung, soll ich erwähnen, dass ASP.NET Web Form technisch sehr schwer zu testen ist. Zu überwinden, dass, würde ich vorschlagen gelten MVP-Muster für ASP.NET WebForms .

Wie zu WebForms Gegensatz ASP.NET MVC ist so viel einfacher, zu testen. Aber dennoch sollte man von sogenannten „Diensten“ festgelegt hat (unsere Szenarien) und (Einheit) testet sie separat, dann testen Sie die UI-Integration in der Umgebung in der Nähe Integrationstests.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top