Frage

So ...

Ich lehre formale Methoden in der Softwareentwicklung. Ich lehre auch „agile Methoden“. Die meisten Menschen scheinen dies steht im Widerspruch zu denken. Ich denke, es ist sehr viel Sinn macht ... ich auch für ein Unternehmen arbeiten, wo wir tatsächlich benötigen, um Dinge zu erledigen :) Während ich meine verdienten Fähigkeitspunkte auf „Spezifikation“ in einem Tag zu Tag Grundlage anwenden können, meine Kollegen aus dem Wort „formal“ typisch fliehen.

Früher dachte ich, dass dies auf die intrinsische Weg zurückzuführen wir lernen, wie man programmiert: wir sind in der Regel angetrieben, um eine funktionierende Lösung zu finden, die nicht das Problem zu verstehen. Dann dachte ich, dies auf die Tatsache zurückzuführen, dass die meisten Menschen in der formellen Gemeinschaft sind keine Ingenieure, sondern Mathematiker oder Informatiker. Heute frage ich mich, wenn es nur, weil die formal-Methoden Gemeinschaft verstecken sich hinter einer Art von „Verschleierung“ Gesetz alle verfügbaren UNICODE Symbole zu verwenden, aktiv unhöflich, unästhetisch Werkzeuge entwickeln, und angesichts der Standards lachen.

Ja, ich habe von einer „Schuld sie“ zu einer „Schuld uns“ Perspektive zu bewegen; -)

Also, meine Frage ist: Verwenden Sie jede Art von formalen Methoden in Ihrem Unternehmen? Haben Sie stellte sie, oder waren sie Voraussetzungen? Welche Techniken verwenden Sie den Nebel der Mathematik von den Leuten die Angst zu löschen und anregen sie formale Methoden zu bedienen? Was denken Sie aktuelle Tools für eine allgemeinere Verwendung fehlen?

War es hilfreich?

Lösung

Der Schlüssel, um Menschen in kaufen beliebigen Methoden oder Methoden ist es, sich zu zeigen, wie sie löst Probleme, die sie haben, werden. Wenn sie sehen, können sie ihr Leben machen wird besser haben Sie eine viel bessere Chance, sie zu bekommen, die Techniken zu übernehmen.

Und wenn Sie nicht ihnen zeigen, dass vielleicht Sie die Methoden auf die Philosophie verabschieden wollte, anstatt Praktikabilität. Es sei denn, die andere Ihre Philosophie teilen, dann wirst du nicht überall bekommen. Und vielleicht sollten Sie nicht.

Im Laufe der Jahrzehnte gab es sehr viele Methoden gewesen. Neueren Adresse immer die Mängel der alten, noch Projekte immer noch in Schwierigkeiten und fehlschlagen. Warum? Weil die Rockstars, die mit neuen Methoden sind Rockstars kommen, und haben eine neue Methodik genau gemacht, weil sie die zugrunde liegenden Probleme und wie man sich bewirbt sie verstehen. Diejenigen, die kommen, neigen dazu, nach blind dem Rezepte zu folgen, und es funktioniert nicht so gut funktionieren.

Also ich denke, das Beste, was über die zugrunde liegenden Probleme zu unterrichten ist, und dann zeigen, wie verschiedene Methoden versuchen, mit diesen Problemen fertig zu werden. Die Unterschiede in Unternehmen, Projekte und Teams ist so groß, dass niemand Methodik erfolgreich auf alle Kombinationen angewendet werden können. zu wählen, das Lernen mit einem geeigneten Werkzeug und wenden Sie es gut ist von entscheidenden Bedeutung.

Andere Tipps

Vielen Dank für alle Beiträge. Sie sind sehr aufschlussreich. Erlauben Sie mir, ein wenig Flamme (Sie es nicht persönlich nehmen, wenn: -)

Die meisten Leute scheinen zu denken, dass formale Methoden nur über Programmverifikation sind. Oder kritische Systeme. Das mag richtig sein, wenn wir das ultimative Klischee verfolgen. Beweisen wir das Programm richtig machen (v.s. Validierung, die fragt, wie ein Mitarbeiter sagte, wenn wir das richtige Programm tun)

Aber betrachten Modell finden / Prüfwerkzeuge, wie Alloy. Lernen, ein Werkzeug zu benutzen, wie dies jemand eine vernachlässigbare ammount Zeit in Anspruch nimmt zu UML und OO verwendet. Dennoch kann es Ihnen sofort Einblick über Ihr Modell geben. Es dauert in der Regel nicht mehr als 10 Minuten, um ein Gegenbeispiel über eine kleine genug Teilmenge des Modells zu verwenden, eine versucht zu finden (und das schließt das Modell in der Legierung in erster Linie beschreibt).

Nehmen Sie Requirements Engineering als Beispiel. Ein in der Regel eine Menge von UML zeichnen. Nur wenige Menschen nutzen OCL, aber, und viele Geschäftsregeln in natürlicher Sprache informell annoted. Warum? Zeitdruck?

Betrachten sie nun die Tatsache, dass die Mehrheit nutzt nur sein / ihr Bauchgefühl zu beweisen, dass ein Modell erfüllbar ist. Wieder warum? Ich kann die gleiche Menge an Zeit in Anspruch nehmen, dieses Modell in der Legierung (wahrscheinlich noch weniger, da ich nicht über Zeichnung Ästhetik brauche Pflege) zu schreiben, und prüfen Sie nur für die Erfüllbarkeit? Und welche Art von Mathematik brauche ich jetzt? „Prädikate“? Ausgefallener Name für IFs und booleans ;-) Quantifiers? Phantasienamen für ForEachs () ...

Was große Informationssysteme? Sie müssen nicht kritisch sein ... Versuchen Sie einfach in Ihrem Kopf zu analysieren, um eine begriffliche (nicht Implementierung!) Diagramm mit über 600 Klassen. Ich sehe viele Menschen ihren Kopf in der Wand mit easy-to-make Fehler hämmern, weil sie eine gewisse Einschränkung verpasst haben, oder das Modell ermöglicht dumme Dinge zu passieren.

Die Tatsache ist, braucht man nicht formale Ansätze von Kopf bis Schwanz zu verwenden. Zugegeben, könnte ich eine ganze Anwendung in Coq, beweisen und bestätigen Sie, dass es mit einiger Spezifikation 100% kompatibel ist. Dies kann der Informatiker / Mathematiker Ansatz.

Still, mit einem GTD Philisophy, warum kann ich nicht einige Aufgaben für den Computer übertragen und erlauben es meine Entwicklung zu helfen, zu verbessern? Ist es wirklich eine Frage der „Zeit“, oder schlicht, einfach Mangel an technischen Fähigkeiten und den Willen zu lernen / INOVATE?

Arbeiten mit der Branche IT-Entwicklung in einem Unternehmen bedeutet, die von den tatsächlich Geschäftsleuten in die Köpfe der Entwickler Wissen über das Geschäft zu übertragen. Während ich mir abstrakte Mathematik findet eine der größten Freizeitbeschäftigungen gibt es zu sein, dann ist es ein schreckliches Kommunikations-Tool. Und Kommunikation ist, was es überhaupt geht. Während ich möglicherweise einen gewissen Erfolg zu überzeugen, IT-Leute haben könnte abstraktere Notationen zu umarmen, habe ich im Grunde keine Chance, mit den Geschäftsleuten.

Zwar gibt es einige Bereiche, in denen ich eine Rolle für formale Methoden in einem Unternehmen (Mathe- und Logikschweren Spezialsoftware, erheblichen Bedarf an beweisbar Eigenschaften wie in sicherheitskritischen Software) sehen sie bieten wenig Hilfe bei richtigen Anforderungen immer auf z.B wie durch die Ausgabe einer oder mehrerer Versorgungsaufträge zu einem Satz von möglichen externen oder internen Anbieter einen Kundenauftrag zu erfüllen.

Ich denke, die Jury ist noch heraus auf modellbasierte Ansätze und domänenspezifische Sprachen. Ich denke, sie werden Erfolg haben oder scheitern, je nachdem, ob sie ein schnelleres Feedback von IT auf die Wünsche und Bedürfnisse der Business-Seite, und ob sie Geschäftsleute vermuten tun müssen, um zu studieren jede Bedeutung.

Die Technologie ist einfach. Kommunikation ist hart. Formale Methoden können uns helfen, die Dinge richtig zu machen, aber die, die ich nichts gesehen habe tun, um zu helfen, die richtigen Dinge zu tun. (Ja, das sind Klischees, aber das ist, weil sie unentrinnbar und schmerzlich wahr sind.)

Ich nehme einen Kurs zum Thema ‚Spezifikation und Verifikation‘. Im Rahmen der Kursstruktur machen wir die folgenden- 1. Lernwerkzeuge wie PVS (Prototype Verification System) http://pvs.csl.sri.com/ und SMV (Softwaremodellierung und Verifikation) http: //www.cs.cmu edu / ~ Modelcheck / smv.html 2. von Apart, dass wir Unfälle sezieren, die aufgrund von Softwarefehlern passiert ist. Für z.B. - Ausfall der Ariane V

Ich fühle mich formale Methoden mehr für Szenarien, wo die Fehler Kosten mehr als die Designkosten. Und es scheint geeignet, um sie für die Software in kritischen Systemen verwendet wird. Ich denke, es in der Avionik verwendet wird, Chip-Design usw. und die aktuelle Automobilindustrie werden auch in der Praxis auszuarbeiten.

Ich habe versucht, die Menschen zu formalen Spezifikation Methoden ein paar Mal (Z und Alloy) umfassen und haben die gleiche expirience gemacht, die Sie haben: Die meisten Menschen, während das Gefühl, dass sie einen nützlichen Zweck dienen, sind sehr unbequem mit ihnen für eigentliche Arbeit.

Funny genug, sind die gleichen Leute mehr als glücklich, völlig nutzlos UML-Diagramme in ginormous Mengen zu produzieren.

Ich denke, es gibt zwei Hauptgründe dafür:

a.) Viele Entwickler sind unbequem mit der Ebene der Abstraktion durch einen formalen Ansatz erforderlich. Die Tatsache, dass die meisten Einstiegsmathematikunterricht ist alles Kalkül und nicht diskrete Mathematik könnten etwas damit zu tun haben.

b.) Formale Methoden erfordern eine sehr Bottom-up-Design aproach, wo Sie Ihre Kernmodell von Grund auf entwerfen und sie luftdicht machen und es dann an die tatsächlichen Anforderungen der Anwender verbinden, indem eine Schnittstelle auf ihm bietet. Da wir Anforderungen treiben Anstrengungen Entwicklung zu haben, neigen dazu, ein Top-down-Ansatz fühlt sich natürlicher, obwohl es oft zu inkonsistenten Modellen führt. Es ist wie ein Keller unter Ihrem Hause Nachrüstung, nachdem es bereits gebaut worden ist.

Formale Methoden machen keinen Sinn, in Systemen, in denen die Kosten des Scheiterns gering ist.

In einer Produktions Web-Anwendung, haben Sie mehr Front-End-Box, mehrere Back-End-Box, mehrere Datenbank-Box bekommen - wenn ein Programm auf einem von ihnen ausfällt, es ist ein Nicht-Ereignis. Hardware ist so billig, dass Sie diese Systeme für weit weniger als die Kosten für formal spezifiziert bauen können alle Ihre Software.

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