Frage

Angenommen, Sie über eine Legacy-NET-Anwendung einnehmen. geschrieben in C #

Was sind die Top-5-diagnostische Maßnahmen, Profilieren oder auf andere Weise, dass Sie die Gesundheit der Anwendung zu beurteilen, würden verwenden?

Ich suche nicht nur auf dem „Was“ Teil der Diagnose, sondern auch auf dem „Wie“. Für z.B. Es ist in der Tat notwendig, schnell / optimale Reaktionszeiten der App zu bewerten. aber ... ist es eine Möglichkeit, zu etablieren / messen sie durch technische Diagnose der Code-Basis statt nur User-Experience Feedback bekommen?


(Quelle: gmu.edu )

Und ja, es sind verpflichtet zu sein, einige super Tools, die Sie für den Zweck verwenden ... es wäre toll, wenn Sie sie auch auflisten.

War es hilfreich?

Lösung

1. User-Perception

Die sehr erste, was ich tun würde, ist einfach die Nutzer überblicken. Denken Sie daran, sie sind diejenigen, die wir dies tun. Allerdings schrecklich eine Anwendung kann nach innen schauen, wenn die Benutzer es lieben (oder zumindest nicht aktiv mag es nicht), dann wollen Sie nicht sofort beginnen, es auseinander zerreißt.

Ich würde wollen, Fragen stellen wie:

  • Does es reibungslos laufen?
  • Ist es leicht zu bedienen?
  • Wenn Sie es verwenden, fühlen Sie zuversichtlich , dass er tut, was Sie erwarten?
  • Ist es ein BMW, ein Civic oder ein Pinto?

Die Antworten werden subjektiv. Das ist okay. An dieser Stelle freuen wir nur für allgemeine Trends. Wenn eine überwältigende Zahl der Nutzer sagen, dass es die ganze Zeit abstürzt, oder dass sie Angst haben, grundlegende Aufgaben zu erfüllen, dann sind Sie in Schwierigkeiten.

Wenn die App Rassen Aberglaube , und man hört Dinge wie „es am Donnerstagmorgen zu einpennen scheint“ oder „Ich weiß nicht, was diese Taste funktioniert, aber es funktioniert nicht, es sei denn ich klicken sie zuerst“, laufen in die Berge.

2. Dokumentation

Ein Mangel an Dokumentation oder Dokumentation, die scheußlich veraltet ist, ist ein sicheres Zeichen einer kranken Anwendung. Keine Dokumentation bedeutet, dass Entwicklungspersonal geschnittene Ecken, oder sind so mit der ständigen Todesmarsch überlasten, dass sie einfach nicht die Zeit für diese Art von „unnötiger“ Arbeit finden können.

Ich spreche nicht Benutzerhandbuch - eine gut konzipierte App sollte sie nicht brauchen - ich technische Dokumentation bedeuten, wie die Architektur aussieht, was die Komponenten tun, Umwelt Abhängigkeiten, Konfigurationseinstellungen, Anforderungen / Anwenderberichte, Testfälle / Testpläne, Dateiformate, erhalten Sie die Idee. Ein Defekt-Tracking-System ist auch ein wesentlicher Bestandteil der Dokumentation.

Entwickler am Ende machen (falsche) Annahmen in Abwesenheit der richtigen Dokumentation. Ich habe in der Industrie zu mehreren Leuten gesprochen, die denken, dass dies optional ist, aber jedes System, das ich je gesehen habe oder gearbeitet, die wenig oder gar keine Dokumentation hatten am Ende mit Bugs und Designfehlern gespickt ist.

3. Tests

Kein besserer Weg, um die Gesundheit einer Anwendung als durch seine eigenen Tests zu beurteilen, wenn sie verfügbar ist. Unit-Tests, Code-Coverage, Integrationstests, auch manuelle Tests, alles hier funktioniert. Je vollständiger die Reihe von Tests, desto besser ist die Chance des Systems gesund sein.

Erfolgreiche Tests nicht Garantie viel überhaupt, außer, dass die spezifische Arbeit der Art und Weise getestet Features ist, dass die Menschen, die die Tests geschrieben erwarten, dass sie zu. Aber viele Prüfungen nicht oder Tests, die seit Jahren nicht aktualisiert haben, oder keine Tests überhaupt - das sind rote Fahnen

.

Das kann ich nicht Punkt auf spezifische Tools hier, weil jedes Team verschiedene Werkzeuge zum Testen verwendet. Arbeit mit dem, was bereits in der Produktion.

4. Statische Analyse

Einige von euch wahrscheinlich dachte sofort „FxCop.“ Noch nicht. Das erste, was ich tun würde, ist auszubrechen NDepend .

Nur ein kurzer Blick auf die Abhängigkeitsstruktur einer Anwendung werden Sie geben enorme Mengen an Informationen darüber, wie gut die Anwendung ausgelegt ist. Die meisten der schlimmsten Design anti-Muster - die Big Ball of Mud , Zyklische Abhängigkeiten, Spaghetti-Code , Gott Objekte - fast sofort von nur einer Vogelperspektive der Abhängigkeiten.

Als nächstes würde ich eine volle Build läuft, auf den „Warnungen als Fehler behandeln“ Einstellung drehen. Ignoriert spezifische Warnungen durch Compiler-Direktiven oder Flags ist in Ordnung, die meiste Zeit, aber wörtlich ignoriert die Warnungen ZauberÄrger. Auch dies wird Ihnen nicht garantieren, dass alles in Ordnung ist, oder dass etwas gebrochen ist, aber es ist eine sehr nützliche Heuristik in das Versorgungsniveau zu bestimmen, die in den eigentlichen ging Codierung Phase.

nach Ich bin davon überzeugt, dass die gesamte Design / Architektur nicht vollständig Müll ist, und Ich würde a href Blick auf <= "http://msdn.microsoft. com / en-us / library / bb429476 (VS.80) aspx“rel = "noreferrer"> FxCop . Ich nehme seine Ausgabe nicht als Evangelium, aber ich bin speziell in design Warnungen und Usage Warnungen (Sicherheitswarnungen sind auch eine rote Fahne, aber sehr selten).

5. Laufzeitanalyse

An diesem Punkt bin ich schon zufrieden, dass die Anwendung, auf hohem Niveau, ist nicht ein riesiger Haufen saugen. Diese Phase würde ziemlich viel in Bezug auf die spezifische Anwendung unter dem Mikroskop variieren, aber einige gute Dinge zu tun sind:

  • Log alle ersten Chance Ausnahmen unter einem normalen Lauf. Dies wird helfen, die Robustheit der Anwendung zu messen, um zu sehen, wenn zu viele Ausnahmen geschluckt werden oder wenn Ausnahmen als Flusssteuerung verwendet werden. Wenn Sie eine Menge von Top-Level-Exception Instanzen oder SystemException Derivate erscheinen sehen, Angst zu haben.

  • Ausführen es durch einen Profiler wie EQATEC . Das sollte man ziemlich leicht identifizieren irgendwelche ernsten Leistungsproblemen helfen. Wenn die Anwendung ein SQL-Back-End verwendet, verwenden Sie ein SQL-Abfragen Profilierungswerkzeug zu beobachten. (Wirklich gibt es getrennte Schritte zur Prüfung der Gesundheit einer Datenbank, die ist ein wichtiger Bestandteil, eine Anwendung zu testen, die auf einem basiert, aber ich will nicht zu weit vom Thema zu erhalten).

  • Sehen Sie einige Benutzer - Blick vor allem für „Rituale“, Dinge, die sie scheinbar ohne Grund tun. Dies sind in der Regel das Zeichen von Bugs Verweilen und Zeitbomben ticken. sehen Sie auch, ob es eine Menge von Fehlermeldungen erzeugt, sperrt die Benutzeroberfläche für lange Zeiträume, während „Denken“, und so weiter. Im Grunde alles, was Sie persönlich würde hassen als Benutzer zu sehen.

  • Stresstests. Auch hier hängen die spezifischen Tools auf der Anwendung, aber dies ist vor allem für Server-basierten Anwendungen. Prüfen Sie, ob die Anwendung noch unter hohen Last funktionieren kann. Wenn es beginnt in der Nähe der Bruchstelle einer Zeitüberschreitung, die in Ordnung ist; wenn es bizarr Fehlermeldung oder schlechter beginnt zu erzeugen, scheint beschädigte Daten oder Staat, das ist ein sehr schlechtes Zeichen.


Und das ist alles, was ich von jetzt denken kann. Ich werde aktualisieren, wenn nicht mehr in den Sinn kommen.

Andere Tipps

Diese sind Codierung nicht Tipps oder Ratschläge Profilierung, sondern eine allgemeine Art und Weise, die Gesundheit eines Programms in jeder Sprache zu beurteilen. In der Reihenfolge ihrer Bedeutung

  1. Ist der Endbenutzer zufrieden?
  2. Ist es stabil?
  3. Ist es robust?
  4. Ist es schnell?
  5. Ist der Speicherbedarf über lange Zeiträume stabil und was würde ich erwarten?

Wenn die Antwort auf alle fünf dieser Fragen ja, dann haben Sie eine gesunde Anwendung. Ich würde behaupten, dass 1-3 ist wirklich das wichtigste. Es kann nicht schön auf der Innenseite sein, und möglicherweise nach unten rechts Hintern hässlich, aber es ist gesund, wenn es diese Spezifikationen und soll für immer bleibt im Legacy-Modus (das heißt kleine Fehlerbehebung)

erfüllt

Ich würde vorschlagen Schreiben Tests um bestimmte Bereiche. Ich bin kein großer Fan von Unit-Tests - obwohl ich ziemlich viele von ihnen am Ende zu schreiben. Ich ziehe Systemtests, dass der Test Teile des Systems - also von Domain nach unten, Service unten, Moderator nach unten usw. nicht neccesarily das ganze System, sondern Teile davon. Wenn Sie für die Effizienz sind suchen, dann können diese Tests eine Stoppuhr laufen um den Code und fehlschlagen, wenn es zu lange dauert.

Eine andere nette Sache zu tun ist, Standardaufgaben durchlaufen ANTs Profiler aus RedGate oder DotTrace aus Jetbrains. Es wird Ihnen sagen, was die Zeit ist zu nehmen und wie oft es ausgeführt worden, das heißt, Sie sehen können, wo optimiert werden kann / zwischengespeichert werden.

Wenn Sie NHibernate verwenden dann NHProf ist groß (oder ich denke, Ayende hat jetzt die Freigabe UberProf die Abdeckungen mehr DB Zugriffsstrategien.) Dadurch werden Sie warnen vor jede dumme DB-Zugriff geht. Geschieht dies nicht nur die Verwendung von SQL Server Profiler können Sie zeigen die gleichen Daten immer wieder anfordernden aber mehr Aufwand erfordern den Müll herausgefiltert werden. Wenn Sie am Ende mit, dass dann können Sie es auf eine DB-Tabelle speichern, die Sie dann Abfrage auf intelligentere Weise.

Wenn Sie für Robustheit suchen, eine gute Sache zu nutzen ist eine Logging-Strategie - alle Ausnahmen fangen und sie log. Dies ist leicht genug, um einzurichten mit log4net . Auch einloggen, wenn Sie bestimmte Punkte getroffen, dass Sie etwas suspekt. Dann müssen in einem Server ausgeführt wird dieses (ich benutze Kiwi Syslog-Server , die einfach einzurichten und sehr mächtig), die zu einem DB schreiben können, und Sie können Analyse der Ergebnisse führen. Ich würde für log4net gegen die ADO.NET appender empfehlen, da es nicht async ist und so wird Ihre App verlangsamen.

Schließlich je nachdem, was die App ist, wenn Sie wirklich, wirklich einige Zeit scharf sind auf die Ausgaben für seine Gesundheit testen können Sie Watin oder WinForms-Äquivalent die testen Vorderes Ende. Dies könnte auch ein längerer Test sein, den Speicher / Prozessor-Nutzung der Anwendung zu beobachten, während es verwendet wird. Wenn Sie nicht sind besorgt, dass dann die Fenster Performance Analyzer können Sie auf verschiedene Aspekte der Anwendung sehen, während Sie es verwenden. Immer nützlich, aber man muss wirklich herumzuzustochern, um die nützlichen Metriken zu erhalten.

Hope, das hilft.

Die ersten beiden großen Dinge, die ich in wäre aussehen:

  1. globale Ausnahme Hinzufügen mit der Protokollierung der Handhabung sowie für jede Ausnahme der Suche Handhabung Das könnte „Schluck“ Ausnahmen werden, versteckte Probleme mit Ihrer Anwendung (ich glaube, es gibt auch ein Fenster Performance-Zähler, der die Anzahl der Ausnahmen pro Sekunde aussetzen die von der Anwendung geworfen) werden. Dies kann helfen, mögliche Datenkonsistenzprobleme in der Anwendung aufzudecken.
  2. Fügen Sie einig Performance-Überwachung und Protokollierung jedes Datum Persistenz und / oder externe Netzwerk Service-Abhängigkeiten, die die Anwendung kann, wie die Protokollierung von Datenbankabfragen oder Web-Service-Anrufe verwenden, die länger dauern als X Höhe der Zeit abgeschlossen.

Wenn diese wirken mit einer Datenbank, Sie ein Gefühl für Disk I / O und den Grad der Fragmentierung der Disk-Array / Festplatte bekommen sollten. alle gespeicherten Prozeduren für MS SQL, analysieren und die Indizes und Primärschlüssel für die Tabellen überprüfen.

Sie wirklich braucht keine Werkzeuge dafür, nur die Grunzenarbeit Zähler der Überprüfung und im Gespräch mit dem DBA.

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