Programmkonzipierung - Planung - Vorbereitung

  • Allgemein

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Programmkonzipierung - Planung - Vorbereitung

    Yo Leute,

    ich würde gerne wissen wie man ein neues Programm "richtig" "konzipiert".

    Ich muss bald ein Sicherungsprogramm entwickeln (FW 2.0).
    Es wird ansich nichts großartiges (sichert SQL-Backups und paar andere Sachen auf ein externes Medium) jedoch wird das mein erstes Projekt welches ich alleine machen werde und da will ich das Ganze so gut es geht "richtig" angehen. Natürlich sollte das ganze dem OOP Konzept unterliegen.

    Nun zu den Fragen:
    - Wie beginnt man generell mit der Erstellung (Es folgen noch Termine bezüglich der Funktionalität)?
    - Wie sollte das Konzept aussehen (im Groben)?
    - Hat wer spezielle Tips auf was besonders geachtet werden sollte?
    - Gibt es irgendwelche Stolpersteine welche man gerne übersieht?

    Im Grunde genommen intressiert es mich wie ihr die Programme "von Grund auf" erstellt. (Noch bevor Codezeilen existieren)

    Besten Dank im Voraus! :thumbup:

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Also:
    Lastenheft, Pflichtenheft.
    Im Lastenheft wird aufgeschrieben, was der Kunde / Nutzer haben will. Vom grünen Button bis zu Wolkenkukuksheim, negativen Kosten und negativen Laufzeiten und all das sinnlose und sinnvolle Zeugs halt.
    Im Pflichtenheft auf Basis dieses Lastenhefts wird aufgeschrieben, was der Entwickler dann tatsächlich implementiert, da sollte eigentlich nur sinnvolles Zeugs drin stehen.
    Dieses Pflichtenheft wird von allen Beteiligten (Kunde, Firma / selbst) unterzeichnet und hat dann den Status eines Vertrages.
    Dies ist dann die Spezifikation, nach der das Produkt getestet wird.
    Noch mal also:
    Mach eine gute und detaillierte Spezifikation, eas das Programm können soll, aber auch, was es nicht können soll (z.B. Speichern über FTP oder so). Da kann dann auch stehen: Ab Version 2.0 oder so.
    Eine schlechte Spezifikation führt immer zu Ärger, im schlimmsten Fall wird die Leistung nicht bezahlt.
    Wenn dies alles steht, werden die ersten Tasten gedrückt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das schon mal sehr hilfreich.
    Was mich auch noch intressiert wie man es nachdem angeht.

    Angenommen Pflichtenheft und die Spezifikationen sind erledigt.
    Fangt man da einfach an Code zu tippseln oder überlegt man sich das Klassenkonzept oder macht man ganz was anderes?

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Das hängt von Deiner Erfahrung und dem Füllegrad Deiner Trickkiste ab.
    Außerdem ist es hilfreich, Kollegen um sich zu haben, neben dem Forum natürlich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erfahrung naja geht so. Könnte sicher mehr sein.
    Kollegen ist klar. Diese sind jedoch VB6-Veteranen (sid nur zu 3t) und deswegen hätte ich auch gerne eine Meinung von euch wie ihr das so angehen würdet um in Zukunft dies bei uns auch so zu durchführen zu können. :)

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    mehr allgemeine Vorschläge, als nach der Erstellung des Pflichtenheftes anzufangen kann man glaub nicht geben - kommt auf den Einzelfall an.
    Nach meiner Erfahrung (ist auch nicht viel) ergibt sich immer die Notwendigkeit, ein Datenmodell zu erstellen.

    Eiglich klingt Backup-Software ja total einfach, aber es ist sicherlich einiges zu konfigurieren: welche DBs zu backupen sind und in welchem Intervall.
    Und dann braucht man vmtl. eine Aufstellung der Backupse, und vlt. Konfigurations-möglichkeiten für die Wiederherstellung.

    Halt für so Sachen muß ein Datenmodell her, wo der User seine Eingaben machen kann, und dann bei Klick - Abfahren.
    Und das Datenmodell muss natürlich persisteable sein, also es muß auch die Buttons "Load Config" und "Save Config" geben oder sowas.

    Ach - und betrachte das Pflichtenheft nicht als in Stein gemeißelt: Tun sich während der Entwicklung neue Optionen auf, oder stellen sich bestimmte Pflichten als idiotisch heraus, oder mit anneren Ansätzen viel eleganter umzusetzen, dann besteht sauberes Programmieren darin, Rücksprache zu halten, und das Pflichtenheft zu modernisieren.

    Kann übrigens auch sein, dass dem Kunden noch iwas einfällt, um euch auf die Nerven zu fallen. Das ist sein gutes Recht, und kost ja auch extra, und's sichert eure Arbeitsplätze - also freut euch drüber. :D
    Mir hat nach den ersten beiden genannten "Phasen" geholfen, erstmal ein wenig zu konzeptionieren.

    Dazu habe ich mir das Lastenheft ausgedruckt und dort erstmal geschaut, was irgendwie zusammen gehört und was nicht. Dazu einfach ein paar Bundstifte her und farblich markieren, was zusammen gehört.

    Bspw. Gehört Sichern und Rücksichern zusammen, aber Sichern gehört nicht zum Auswählen, was gesichert werden woll (Das wäre Businnes und im Gegensatz dazu Benutzerinterface bzw. Benutzer-Steuerung).
    Also kannst du dort auch super (wie du siehst) trennen, was zum Buseinnes gehört und was zum Benutzer gehört.

    Danach würde ich beginnen, was alles zum Businnes gehört: Was muss es können, was wird dafür benötigt, auf was kannst du da zurück greifen etc pp.. Dort bist du dann auch schon beim technischen.

    Zu den einzelnen Teilen vielleicht noch PAP´s (evtl. Komponentendiagramme, wenn du es dann schon kannst => Mir hat dazu allerdings schon spezifischer Code gefehlt).

    Dann würde ich - mit diesen PAP´s, evtl Komponentendiagrammen und zumindest einer Liste der benötigten Klassen - anfangen das Businnes zu implementieren.
    Dazu deine Unittests, damit du es immer testen kannst zwischen drin.

    Wenn das alles funktioniert, is tder größte Teil neben der Dokumentation schon getan, das Benutzerinterface stellt vor allem in dem Projekt dann nur noch einen kleinen Teil da, der eben "nur noch" implementiert werden muss und deine geschriebene Klassen-Bibliothek nutzt.
    Danke habt mir schon mal geholfen :)

    @Kagurame: was sind PAPs?
    Habe mir da gerade ein bisschen was über UnitTests durchgelesen und finde das ja mal sehr intresannt!
    Kennt jemand dazu eine gute Lektüre, weil dieses Thema scheint mir ja sehr breit gefächtert :)

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    was sind PAPs?
    Programm-Ablauf-Plan.
    Eher ein Relikt aus der Nicht-OOP-Zeit.
    Da wurde der logische Ablauf mit schönen Symbolen aufgemalt:
    If Bedungung True ==> Dies; False ==> Jenes
    Springe hier hin, mach da weiter und solch.
    Gemalt sieht das ganz nett aus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich persönlich bin kein Freund von Programm Ablauf Plänen.
    Aber in bestimmten Fällen, zeichne ich mir ein Struktogramm.
    Nicht für das gesammte Programm nur für einzelne Algorithmen.
    Dafür habe ich mir ein Whiteboard gekauft.
    Ich denke aber dass ist geschmackssache, ich persönlich komme beim zeichnen des Problemes schneller zur lösung.

    Noch was zum Thema Lasten- und Pflichtenheft. Ich schreibe das mit Hand in ein normales karriertes A4 Schulheft.

    Nassi-Shneiderman-Diagramm

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Dizzy“ ()

    also von so Diagrammen bin ich ja nicht so der Freund, und grad der verlinkte Wiki zeigt meine Bedenken schön auf: Da gibtsn Nasi-Diagramm für eine Funktion, und das hat in der Darstellung einen größeren Platzbedarf als die beschriebene Funktion selbst.
    Da guck ich doch lieber gleich die Funktion an, die kannich nämlich auch testen.

    ERM-Diagramm zur Datenmodellierung findich gut, das ist ja im VS eingebaut.

    Und EBC-Diagramme findich toll, weil die bilden tatsächlich den Datenfluss ab - was im Code nicht so erkennbar ist. Aber EBC-Programmierung ist ein ganz spezieller Architektur-Pattern - guggemol Multi-Tutorial
    Ich selbst male die Diagramme auch ungern, zumal sie wirklich nicht viel zeigen, aber ich finde sie manchmal einfacher als Code, wenn ich irgendwo nicht auf die Lösung komme.

    Vor allem wenn ich mir zu bestehendem Code PAP´s zeichne, fallen mir leicher ungereimtheiten auf, bspw. wenn ich irgendwo etwas sinnlos doppelt lade oder anderen unnötigen Content drinne habe.
    Von solchen Diagrammen hab ich bereits mal was gehört/gelesen. Find die auch etwas "altertümlich".
    Den Link von @ErfinderDesRades: werd ich mir mal zu Gemüte führen. Sind ja ein paar Zeilen zu lesen :)

    Danke euch allen.
    Als Abschluss zusammengefasst:
    - Lastenheft erstellen. Hier kommt jegleicher "Hirnfurz" mal rein. (Sozusagen Ideensammlung)
    - Pflichtenheft erstellen. Detailierte Aufstellung der Funktionen. Quasi was schlussendlich das Programm alles beinhaltet ("können muss")
    - Interne Aufteilung der einzelnen Punkte und Gruppieren von zusammenhängenden Funktionen, etc...
    - Code tippseln

    Hoffe das hab ich mal so richtig verstanden. :) Korrigiert mich wenn ich falsch liege.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    Dizzy schrieb:

    Noch was zum Thema Lasten- und Pflichtenheft. Ich schreibe das mit Hand in ein normales karriertes A4 Schulheft.
    Lasten- und Pflichtenhefte sind (bei Firmen) juristische Dokumente, die gehören nicht in ein Schulheft, da kommen nämlich Stempel und Unterschriften drauf.
    @fichz: Unterscheide gleich am Anfang zwischen Must Have und Nice to have. Setze Prioritäten von 1 bis 10, wenn alle Posten die Priorität 1 haben, ist was schief gelaufen.
    Die Aussage "Wird erst in Version 2.7 angegangen" ist völlig in Ordnung.
    Ein Auto muss fahren können; welche Farbe es hat, ist primär egal.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    wie vlt. angeklungen: Es gibt da ein Spannungsfeld zwischen strukturierter Vorgehensweise und gleichzeitig erheblicher Flexiblität. Zw. Top-Down- und Bottom-Up-Developping, zw. Planung und Entwidklung.

    Die Projektplanerei grad inne Softwäre-Branche hat da glaub geniale Organisations und Management-Konzepte entwickelt, gugge zB. agile SoftwareEntwicklung

    Haben wir eiglich auch BrainStorming mal erwähnt?
    Es ist ja möglich, dasses verschiedene Ansätze gibt, was zu lösen: Suche ich mir meine Backup-Elemente in einem Treeview aus? Oder OpenFileDialog? Oder ziehe ich die aussm DateiExplorer auf die Anwendung?
    Kann man nicht immer von vornherein entscheiden, und kann auch sein, dass man mal ein oder zwei Proof-of-concept-Projekte schreibt, um was vom späteren Look-and-Feel erahnen zu können.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Aber:
    Dies wird normalerweise von der Firma vorgegeben und ist auch abhängig vom jeweiligen Produkt.
    Die Software, die ein Laserskalpell bei Augenoperationen steuert
    oder
    eine Ariadne-Rakete ins All steuert
    wird ein wenig anders entwickelt als eine Foto-Bearbeitungs-Software.
    Allerdings nur eine winzige Spur. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Man sollte vielleicht noch gesagt haben:
    Wir sind kein Software-Entwicklungsunternehmen. Wir sind ein Lebensmittelgroßhädler der für interne Abteilungen die Programme entwickelt.
    Wir haben denk ich mehr "Freiraum" als "richtige" Software-Buden.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    "Freiraum"
    Aha, das hättest Du vllt. im Eröffnungspost erwähnen können.
    Trotzdem ist es wichtig, sich bei einer solchen Gelegenheit auch über interne Codierungsrichtlinien Gedanken zu machen, da spart Ihr Euch viel Ärger, wenn gelegentlich Praktikanten was machen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Praktikanten werden wir nicht haben.
    Mein Ziel bei der ganzen Sache ist es, das ganze vielleicht etwas von dem "alten" Schema welches wir derzeit haben zu lösen und der Zeit entsprechend anzupassen.
    Deshalb bin ich für jegliche Tips dankbar :)

    Die Posts hier haben mir schon viel geholfen.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    von dem "alten" Schema welches wir derzeit haben zu lösen
    Da kommen ggf. Probleme auf Dich zu, von wegen Kompatibilität, insbesondere bei Datenbanken.
    Vielleicht bist Du so stark, durchzusetzen, dass nun, da die Gelegenheit da ist, den Quantum Loop zu machen und keinerlei Kompatibilitätskriterien beachten zu müssen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!