Verwenden eines "Dead Man's Switch" zum Verwalten von zeitkritischem Code


8

In unserer Softwareumgebung führen wir häufig A / B-Tests durch, wie dies wahrscheinlich eine gute Praxis ist. Unsere Umgebung ist jedoch so eingerichtet, dass der Code in sehr kurzer Zeit mit toten Tests sehr mürrisch wird. Die Testregistrierung ist kaum mehr als eine Sammlung interner Wiki-Seiten.

Ich dachte an einen "Dead Man's Switch" -Stil für nicht mehr funktionierendes Code-Management. Wenn Sie mit dem Begriff nicht vertraut sind, bezieht er sich auf einen Schalter, der regelmäßig zurückgesetzt werden muss, damit nichts ausgelöst wird. Wenn Sie nicht reagieren, wird der Schalter ausgelöst und was auch immer Sie möchten Trigger wird ausgeführt.

Zum Beispiel würde ich einen Code schreiben, ihn auf irgendeine Weise bei diesem System registrieren und wenn ein Datum meiner vorher festgelegten Auswahl herumläuft, würde ich eine Benachrichtigung erhalten, dass dieser Code entfernt (automatisch bereinigt) wird, wenn ich nicht eingreife (manuell) aufräumen oder ein Nickerchen machen).

Was sind die Vor- und Nachteile und die Realisierbarkeit eines solchen Systems? Ist es möglich oder weise? Was könnten alternative Möglichkeiten sein, um Code gegen Fäulnis zu verwalten?


1
Ich habe "Dead Man's Hand" in "Dead Man's Switch" geändert, da dies der Begriff zu sein schien, den Sie meinten: en.wikipedia.org/wiki/Dead_man's_switch
Vaughandroid

Antworten:


8

Ich würde mir Sorgen um ein System machen, das Code automatisch entfernt . Wenn Ihr Team nicht sehr gut diszipliniert ist, kann ich dies nur als Weg zu Tränen und Schmerz sehen. Dinge passieren: Leute machen Urlaub, werden krank, verlassen das Unternehmen, vergessen, was der Code abläuft, der abläuft, ... und wenn der Code automatisch bereinigt wird, klingt das so, als würde er alle Arten von Ärger verursachen. Sie müssen sicherstellen, dass zwischen diesen Modulen keine Compiler-Abhängigkeiten bestehen, da sie sonst plötzlich nicht mehr kompiliert werden können, wenn etwas, von dem sie abhängen, abgelaufen ist. Und vergessen Sie nicht, was passieren würde, wenn jemand im Produktionssupport an einem älteren Trouble Ticket arbeitet und der Stack-Trace in der Fehlermeldung auf den gelöschten Code verweist. Und das würde auch nicht dazu führen, dass Leute, die Audits machen, passieren, stelle ich mir vor ...

Etwas, das sicherer sein könnte, ist ein Framework, in dem Ihre kleinen Codemodule nach einem Aktivierungs- und einem Deaktivierungsdatum fragen können. Wenn der Code ausgeführt werden soll, prüft er in einer Datenbank, welche Datumsangaben vorliegen. Wenn das aktuelle Datum zwischen dem Aktivierungs- und Deaktivierungsdatum liegt, lässt Ihr Framework die Ausführung des Codes zu. Wenn Sie diese Daten in einer Datenbank speichern, können Sie problemlos ein Skript schreiben, das einen Bericht über alle Module generiert, die in den nächsten n Tagen ablaufen , und ihn per E-Mail an Sie senden, damit er am Montagmorgen als erstes in Ihrem Posteingang angezeigt wird.


Dies könnte großartig sein, wenn es in ein Ticketsystem integriert wird. Vielen Dank!
dclowd9901

2
Die Aktivierung / Deaktivierung kann mit einem Lizenzierungssystem ausgedrückt werden, von dem viele verfügbar sind, sodass Sie nicht einmal selbst eines schreiben müssen. Auf einzelne Assemblys können solche Lizenzierungssysteme angewendet werden, sodass beim Zugriff auf eine der exportierten Schnittstellen dieser Assemblys automatisch überprüft wird, ob Sie über eine verfügbare Lizenz (die nicht abgelaufen ist) mit einem Floating-Lizenzserver verfügen.
Jimmy Hoffa

6

Dieses System führt zu einem Problem verwaister Tests: Wenn jemand, der eine Reihe von Tests und einen damit verbundenen Produktionscode geschrieben hat, das Unternehmen verlässt, besteht die Gefahr, dass die Tests vorzeitig entfernt werden, wenn der neue Eigentümer weggelassen wird.

Ich denke nicht, dass "zu viele Tests" ein Problem sind: Solange die Tests automatisiert sind, beschränkt sich Ihr Abfall hauptsächlich auf die CPU-Stunden, was im Vergleich zu den Arbeitsstunden eine kleine Änderung darstellt. Ein Test, der automatisch über den Schalter des Toten entfernt wird, kann Fehler auffangen, die andernfalls in der Produktion landen und später zu schwerwiegenden Wartungsproblemen führen.

Ich denke, Sie können eine prozessbasierte Alternative erstellen, indem Sie eine Registrierung erstellen, in der Testsuiten mit Modulen Ihres Codes gepaart werden. Jedes Mal, wenn eine Wartung an einem Modul durchgeführt wird, muss für den Prozess entschieden werden, ob die entsprechende Testsuite beibehalten, entfernt oder aktualisiert werden soll. Da es sich um eine reine Buchhaltung handelt, besteht keine Gefahr, dass Code automatisch aus der Liste entfernt wird.


1
Ich dachte, das Problem mit verwaistem Code wäre sehr relevant, hoffte aber, dass ich gerade dumm genug war, keine Automatisierungsalternative zu kennen. Aber ich bin froh, dass Sie eine andere Alternative vorgestellt haben, auch wenn sie nicht automatisiert ist (was wir beide zustimmen können, würde mit ziemlicher Sicherheit in Tränen enden).
dclowd9901

@ dclowd9901 - Warum entfernen Sie keine Tests, die den Code testen, den Sie entfernen? Sollten die Tests nicht in derselben Datei enthalten sein, in der sie getestet werden, oder zumindest einen Kommentar im Code, welche Tests ausgeführt werden?
Ramhound

Faulheit? Ehrlich gesagt bin ich lange nach seiner ersten Implementierung in dieses System gekommen. Die Tests selbst lösen unter bestimmten Umständen den Code ab. Sie sitzen buchstäblich selbst neben dem Code.
dclowd9901

3

Ich habe lange Zeit einfache Kalenderbenachrichtigungen verwendet (unabhängig davon, welche Kalendersoftware Ihr Unternehmen verwendet, sollte ausreichen), bei der ich sie einfach so eingestellt habe, dass sie mich zu jeder Zeit benachrichtigt, und alle erforderlichen Informationen eingefügt habe, vorausgesetzt, ich habe zum Zeitpunkt der Benachrichtigung alles vergessen.

Ein SSL-Zertifikat installieren? Schauen Sie sich das Ablaufdatum an, legen Sie ein Kalenderereignis für mich fest (und einen Manager und einen anderen Ingenieur, falls einer oder zwei von uns drei nicht mehr im Unternehmen sind, was passiert ist), 2 Monate zuvor, um mit dem Auslösen des Ereignisses zu beginnen Alarm für wen auch immer, dass es ersetzt werden muss, geben Sie für den Fall, dass die Kontaktinformationen für die Personen, von denen wir das Zertifikat erhalten haben, die spezifischen Orte, an denen das Zertifikat verwendet wird, und Einzelheiten zu systemischen Auswirkungen des Ablaufs des Zertifikats an (möglicherweise handelt es sich um ein totes System und das Zertifikat) sollte ablaufen, wenn diese Zeit gekommen ist).

Die automatische Codeänderung ist eine geradezu schreckliche, gefährliche Idee. Alles, was Sie tun müssen, ist, Ihren Kalender mit Bedacht zu verwenden, um sicherzustellen, dass Sie über zeitkritische Dinge informiert werden, wenn deren Zeit relevant wird. Genau dafür sind Kalender gedacht. Wenn Sie nun das Problem haben, zeitkritische Ereignisse nicht verantwortungsbewusst zu beachten, haben Sie meines Erachtens ein ganz anderes Problem, nach dem Sie am Arbeitsplatz fragen möchten .


2

Klingt wie eine sehr schlechte Idee, denn später Code wird auf diese Änderungen ab. Das automatische Zurückrollen verursacht weit verbreitete Schäden.

Schreiben Sie Ihre Tests stattdessen als automatisierte (Einheits-) Tests und führen Sie sie jede Nacht aus.


Automatisierte Unit-Tests? Wie würde das mit Interaktionstests funktionieren?
dclowd9901

@ dclowd9901 - Wenn dies der Fall ist, werden sie nur so oft ausgeführt, wie alle anderen Interaktionstests ausgeführt werden. Es sollte nicht schwer sein herauszufinden, welche Interaktion zu einem bestimmten Zeitpunkt ausgeführt werden muss. Wenn es schwierig ist, ist Ihr Prozess das Problem.
Ramhound

@ dclowd9901: Ich hoffe, Sie ändern die Benutzeroberfläche nicht wöchentlich, auch wenn sich der Code hinter der Benutzeroberfläche so häufig ändert. Benutzer mögen keine Änderungen an der Benutzeroberfläche. Fragen Sie einfach Microsoft. Sie würden also testen, ob die Benutzeroberfläche ausreichend identisch bleibt.
MSalters

In Webanwendungen haben wir die Möglichkeit, verschiedene UI-Ansätze (sei es eine Änderung der Platzierung oder Farbe oder was auch immer) auf sehr schnelle, iterierbare Weise zu testen, sodass wir dies nutzen. Wöchentliche Änderungen sind dies jedoch nicht. Im Allgemeinen werden Daten über Monate gesammelt.
dclowd9901
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.