Monatsarchiv Juli 31, 2023

VonHickyGreen

Anforderungen erheben

Wie fängt man denn jetzt nun an eine Software zu planen?

kurzes Vorwort:

Ich muss sagen, ich habe mir die letzten Tage mehrfach an das Thema versucht und ich glaube eine kompetente Erklärung die alles abdeckt ist in einem überschaubaren Beitrag kaum möglich. Ich denke niemand will hier einen Beitrag sehen mit 40.000 Wörter…

Das wird sich durch alle Themen ziehen, je nach dem wie tief man in einzelne Thematiken abdriften will, können wir hier ganze Bücher schreiben, einerseits kenne ich mich dann doch nicht so gut aus andererseits ist das nur ein Hobby und mir fehlt dazu dann doch etwas die Zeit.

Im Endeffekt möchte ich eine kleine Sammlung der wichtigsten Methoden, Begriffe und Standards aufarbeiten, die man dann für Fragen oder zur Lösung dieser heranziehen kann.

ANFORDERUNGEN FESTLEGEN

Der allseits anerkannte erste Schritt eine Software zu planen ist es die Anforderungen an die Software festzulegen.

Dazu muss man aber erstmal Wissen was Anforderungen einer Software sind, um diese festzulegen zu können.

Das heißt im Grunde welche Person ist von dem Projekt betroffen oder beteiligt (Stakeholder) und was erwartet dieser Stakeholder (eine Fähigkeit oder Eigenschaft, die ein System haben soll) von meiner Software.

Das ganze macht man mit einer Anforderungsanalyse:

Je nach Organisation geht man da etwas anders an die Sache ran bzw. von einem anderen Blickwinkel heran, jedoch gibt es 3 Schritte die in allen Varianten irgendwie vertreten sind.

  1. Ermittlung, Analyse
  2. Strukturierung und Abstimmung
  3. Prüfung und Bewertung

Ermittlung und Analyse

Nichts geht über…“ sagt man schnell mal aber Nichts geht über das Wissen welche Anforderungen wirklich gebraucht werden, ja wirklich! Du willst nicht Tage vielleicht sogar Wochen mit Dingen verbringen, für die dich keiner bezahlt, nicht in der Softwareentwicklung aber auch in keinem anderen Beruf, damit das nicht vorkommt ermittelt und analysiert man welche Anforderungen ein Projekt hat.

Alle Anforderungen des Kunden müssen so genau wie möglich beschrieben sein, es darf keine mit gemeinten Annahmen des Kunden über das zu entwickelnde System geben. Will der Kunde das das wirklich oder glaube ich nur zu Wissen das er es will, diese beiden Zustände können manchmal gewaltig von einander abweichen.

Anforderungen müssen eindeutig definiert sein das hilft extrem Missverständnisse zwischen Entwickler und Auftraggeber zu vermeiden. Will der Entwickler diesen Knopf dort in grün oder will er alle Knöpfe in grün.

Die Anforderungen sollten in einer Sprache und in einem Sprachniveau verständlich formuliert sein womit sich alle Seiten auskennen, soweit Fachsprache benutzt werden muss, sollte diese so genau wie möglich erklärt sein(Jeder ist ein Fachmann aber in seinem eigenem Gebiet, das sollte man berücksichtigen), eine verständlich und übersichtlich geschriebene Dokumentation der Anforderung die an alle beteiligten Seiten ausgegeben wird, kann im Zweifel viel Nachsprache und Probleme verhindern.

Jede Anforderung muss eindeutig identifizierbar sein, über eine Kennung oder oder ID sodass man im Nachgang immer ein identifizierbare Anforderung bekommt

Anforderungen sollten mit Abnahmekriterien(erreichbaren Ziel) verknüpft sein sodass man diesen in der Abnahme auch problemlos nachvollziehen kann, ob diese Anforderung erfüllt ist, dies ist der Weg um eine Anforderung vorwärts verfolgbar macht.

Wenn man eine Rückwärtsverfolgung möglich machen will, sollte jede implementierte Funktion einer Software kontrollierbar sein, aufgrund welcher Anforderungen sie erstellt wird, des weiteren sollten alle implementierten Funktionen widerspruchsfrei zu anderen Funktionen sein um die Anforderung konsistent zu halten.

Strukturierung und Abstimmung

Wenn du die Anforderungen erfasst hast, stellst du bei der ein oder anderen Anforderung schnell fest das sie im ersten Moment machbarer, realistischer, notwendiger sind als andere, deshalb beginnt nach der Erfassung der nächste logische Schritt, die Strukturierung und die Klassifizierung!

Anforderungen werden dadurch schnell übersichtlicher, das wiederum das Verständnis der Zusammenhänge zwischen den Anforderungen erhöht, jetzt kannst du als nach folgenden Gründen sortieren:

  • gibt es Anforderungen die abhängig von andere Anforderungen sind
  • gehören Anforderungen fachlich-logisch zusammen
  • Welche Anforderungen gehören zu welcher Benutzerrollen

Weitere Strukturierungsmöglichkeiten sind :

  • funktionale und nicht funktionale Anforderungen von einander abgrenzen oder
  • fachliche sowie technische Anforderungen (fachlich motiviert)
  • rein technische Anforderungen (technisch motiviert)
Tabelle Abgrenzung nicht funktionale von funktionalen Anforderungen

Die so strukturierten Anforderungen werden zwischen Kunde(oder einem Vertreter des Kunden) und des Entwicklers(oder einen Vertreter des Entwicklers) weiter verfeinert in dem durch einen iterativen Prozess sich dem besten Ergebnis angenähert wird!

Prüfung und Bewertung

Wenn die Strukturierung erfolgte oder sogar schon zum Teil während diese noch läuft, erfolgt die wichtige Qualitätssicherung der Anforderungen nach entsprechende Merkmale:

  • korrekt: Die Anforderungen müssen widerspruchsfrei sein
  • machbar: Die Anforderung muss realistisch sein
  • notwendig: Die Anforderungen müssen vom Kunden(Auftraggeber) gewollt sein
  • priorisiert: Es muss eine der Vorrang(Reihenfolge) von Anforderungen geklärt sein
  • nutzbar, nützlich: Die Realisierung muss ein produktives System im Auge behalten

Das Ergebnis dieser Informationen dient als Basis zum Beispiel für das Pflichtenheft auch wenn dieses gar nicht mehr so häufig anzutreffen ist, durch den starken Wachstum der letzten Jahre von agilen Projektentwicklungen, das wir unter anderem Scrum oder andere agile Methoden zu verdanken haben!

Es benötigt aber grundsätzlich in jeder Methode, sei wie agil oder auch nicht eine gute Aufnahme der Anforderungen

VonHickyGreen

Die Motivation Programmieren zulernen!

Programmieren lernen ist nicht leicht, das steht fest. Es geht nicht nebenbei, es geht auch nicht eben mal so – jedenfalls bei mir – es geht nicht -gut- ohne bestimmte Sachen zu verstehen, die einfach essentiell sind.

Die Sprache ist eigentlich egal, der Grund ist wichtig. Es bringt rein gar nichts programmieren zu lernen weil du es interessant findest, es brauch praktische Gründe warum du programmieren lernen willst.

Es ist dieses eine Problem das dich seit Tagen oder sogar schon Wochen bis Monate (immer mal wieder) beschäftigt, das dich zum lernen einer Programmiersprache veranlasst :

  • Das Spiel das du schon immer selbst mal machen wolltest,
  • Die eine App die du dir schon immer gerne mal auf deinem Handy gewünscht hast
  • die neue Software die deinen Büroalltag erleichtert,
  • die vorhandene Software die einfach nicht so funktioniert wie du es willst oder
  • Software die gut ist aber wo Funktionen fehlen die du gerne hättest,
  • eine abgespeckte Version einer bereits vorhanden Software,
  • Die Software die du gerne hättest die aber viel zu teuer ist für dich,
  • die Menge an Daten die du ver.- oder bearbeiten musst,
  • die Zeit die dir verloren geht, weil du bestimmte Sachen immer und immer wieder machst,
  • die Internetseite für deinen Clan, deine Firma, dein Hobby,
  • deine Begrenztheit technische Möglichkeiten zu nutzen
  • Hardware nutzbar zu machen zB RaspberryPI
  • und vieles mehr

Es ist vor allem nicht unwichtig zu Wissen warum man programmieren lernen will um die „richtige“ Sprache für sein Ziel zu wählen. Es macht aus meiner Sicht keinen Sinn mit einer Sprachen anzufangen, die du nicht benötigst.

Ja es gibt auch Gründe eine Sprache nach der Schwierigkeit oder nach Hardwarenähe oder nach anderen Kriterien zu lernen, jedoch spielt das für den Einstieg in die Programmierung nur eine untergeordnete Rolle, es ist in erster Linie eine bedeutende Rolle der Motivation beizumessen und wenn du HTML und CSS lernst(HTML und CSS sind keine Programmiersprachen) und danach JS, hast du einen guten Einstieg in die Webentwicklung.

Wenn du gerne programmieren lernen möchtest weil du das nächste Super Mario entwickeln willst, wird dich der Motivation irgendwann verlassen bevor du an deinem Ziel „angekommen“ bist.

Nehmen wir mal an du möchtest ein Spiel programmieren lernen, dann kannst du faktisch fast jede Sprache nehmen, möchtest du aber einen 2D Spiel entwickeln, so ein schönes Casual Super Mario inspiriertes Spiel, wo du Gegner auf dem Kopf springst und vielleicht mal nen paar Items sammelst, fällt C++ und vielleicht sogar schon C# für dich raus, da es wesentlich einfacher ist dein Ziel mit einer Godotlösung oder etwas von „Game Maker’s Tooklit“ anzugehen, neben dem Umgang von Godot zu lernen, bieten sich vor allem GDScript* (die Hausmarke von Godot) aber auch Python* als Sprache an, da Python3.x sehr sehr nah an GDScript liegt.

Kenner werden jetzt sagen, das man auch in Godot mit C++ und C# programmieren kann. Ja, das geht auch aber das ist wiederum der einfachste Weg wenn du schon C++ oder C# kannst und aus Gründen jetzt ein Spiel entwickeln willst. Wenn ich C++ kann, bleib ich auch lieber bei der Unreal Engine oder als C# Entwickler greife ich ehr auf Unity zurück aber Godot möchte auch hier eine Alternative anbieten, da C# oder C++ nicht eben mal GDS oder Python lernen, nur wegen Godot. Zu diesen Engines(Unreal Engine 5.x oder Unity) samt Sprache würde ich z.b. ehr raten wenn dein Wunsch ist ein gutes stabiles 3D Game zu bauen, jedoch gehören noch einige Faktoren und auch der eigne Geschmack zu Auswahl zwischen diesen Engines als das ich hier groß weiter auf das Beispiel eingehen kann ohne zu komplex zu werden.

Du verstehst hoffentlich worauf ich hinaus will, um so genauer dein Ziel ist, um so genauer kannst du dir die passende Sprache zu deinem „Problem“ raus suchen und die Motivation das wirklich durchzuziehen ist ein ganz anderes Level, du kannst und wirst im laufe der Jahre einige Sprachen lernen, sofern du das Konzept einmal verstanden hast, es ist als nicht wichtig mit welcher Sprache du anfängst sondern „Warum“ du anfangen willst.

*Die enthaltenen Links, führen euch zu keinerlei bezahlter Werbung oder ähnliches, sondern zu Google oder entsprechende Quellen die ich selbst genutzt habe zum lernen.

VonHickyGreen

Hier bin ich!

Der Anfang ist getan!

Ich sitze jetzt hier seit 3 Jahren und versuche immer wieder Anlauf um Anlauf etwas hinzubekommen das mich zufrieden auf das blicken lässt was ich veröffentlichen möchte, diesmal bekomme ich das hin und bau hier einen Blog den ich auch anderen zeigen kann! Die Themen haben sich fast gehalten, es sind jedoch Sachen in den letzten Jahren passiert die einige Themen verdrängt haben oder in der Priorität verschoben haben aber das das Leben ein Weg ist der sich auch verändern kann ist auch so ein Punkt den ich hier behandeln werde.

… anders machen ist nicht immer richtig

Ich wollte alles anders machen und viele besser als andere und das 100% genau so wie ich mir das „vorstelle“, dabei hab ich gar nicht das Vermögen es so hinzubekommen wie ich es mir „vorstelle“.

Es ist auch nicht richtig nur weil es anders ist und wer sagt denn das es von Anfang an perfekt sein muss, das ist mein utopischer Gedanke alles 100% richtig hinbekommen zu müssen.

Themen des Blogs

Ich hab mir lange einen Kopf gemacht was ich wie sagen möchten, welche Themen wichtig sind und hab dabei gemerkt, das ich mich gar nicht so krass beschränken muss. Wenn es ein Thema gibt das mich interessiert ist es die Technik, sei es aus Sicht eines Nutzers oder eines angehenden Softwareentwicklers. Der Punkt Familie, Vater ist mir auch sehr wichtig, jedoch möchte ich hier nicht über meine Kinder ranten(oh Gott diese Anglizismen), weil’s auch einfach nichts zu meckern gibt, sondern über die Sicht als Vater schreiben, die bestimmten Thematiken mit sich bringen.

Es ist mir aber auch wichtig über Dinge und Geschehnisse schreiben zu können die in der Welt beziehungsweise in meinen Blasen passieren, ich sehe hier auch Themen über Mental Health oder mal ein politisches Thema, jedoch wird das hier kein politischer Blog aber eines kann ich vorweg schon mal sagen #NoAFD.

Ich liebe meinen Garten und habe auch technische Hobbies die ich gerne mehr oder ausführlicher wieder machen würde und das natürlich auch dokumentieren oder mit Meinungen veröffentlichen, hier zählen zum Bleistift 3D Drucken, Simson Mopeds aufbauen(restaurieren aber auch Alltagstauglich machen) und reparieren dazu.

YouTube, Twitch und was da noch so alles drunter zählt ist ebenfalls ein Hobby, nicht nur das Streamen und das Aufnehmen von Content sondern auch die Technik und Software und das miteinander was so dazugehört.

„Ich hoffe da ist was bei“

Ich hoffe doch das ich da ein paar Themen treffe die dir zusagen, ansonsten ist der Blog im stetigen Wandel und wer weiß welches Thema hier besprochen und ganz hobbymäßig analysiert wird, vielleicht ist es ja etwas was erst in Zukunft hier Platz finden, deshalb immer schön wieder mal rein schauen und Themen checken, das wäre mir ganz lieb!