You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Wie schaffen es erfahrene Entwickler innerhalb kürzester Zeit Prototypen mit beeindruckender Funktionalität zu entwerfen? Sicher, die Erfahrung spielt hier eine Große Rolle aber auch die Wiederverwendung von existierendem Code. Häufig wiederkehrende Aufgaben wie zum Beispiel:
42
-
43
-
+ das Logging
44
-
+ der Zugriff auf Datenquellen
45
-
+ mathematische Operationen
46
-
+ Datenkapselung und Abstraktion
47
-
+ ...
48
-
49
-
werden bereits durch umfangreiche Bibliotheken implementiert und werden entsprechend nicht neu geschrieben.
50
-
51
-
Ok, dann ziehe ich mir eben die zugehörigen Repositories in mein Projekt und kann die Bibliotheken nutzen. In individuell genutzten Implementierungen mag das ein gangbarer Weg sein, aber das Wissen um die zugehörigen Abhängigkeiten - Welche Subbibliotheken und welches .NET Framework werden vorausgesetzt? - liegt so nur implizit vor.
52
-
53
-
Entsprechend brauchen wir ein Tool, mit dem wir die Abhängigkeiten UND den eigentlichen Code kombinieren und einem Projekt hinzufügen können.
54
-
`NuGet` löst diese Aufgabe für .NET und schließt auch gleich die Mechanismen zur Freigabe von Code ein. NuGet definiert dabei, wie Pakete für .NET erstellt, gehostet und verarbeitet werden.
55
-
56
-
Ein `NuGet`-Paket ist eine gepackte Datei mit der Erweiterung `.nupkg` die:
57
-
58
-
+ den kompilierten Code (DLLs),
59
-
+ ein beschreibendes Manifest, in dem Informationen wie die Versionsnummer des Pakets, ggf. der Speicherort des Source Codes oder die Projektwebseite enthalten sind sowie
60
-
+ die Abhängigkeiten von anderen Paketen und dessen Versionen
61
-
enthalten sind
62
-
Ein Entwickler, der seinen Code veröffentlichen möchte generiert die zugehörige Struktur und läd diese auf einen `NuGet` Server. Unter dem [Link](https://www.nuget.org/) kann dieser durchsucht werden.
63
-
64
-
**Anwendungsbeispiel: Symbolisches Lösen von Mathematischen Gleichungen**
65
-
66
-
Eine entsprechende Bibliothek steht unter [Projektwebseite](https://symbolics.mathdotnet.com/). Das Ganze wird als `Nuget` Paket gehostet [MathNet](https://www.nuget.org/packages/MathNet.Symbolics/).
67
-
68
-
Unter der Annahme, dass wir `dotnet` als Buildtool benutzen ist die Einbindung denkbar einfach.
69
-
70
-
```
71
-
dotnet new console -o SymbolicMath
72
-
cd SymbolicMath
73
-
dotnet add package MathNet.Symbolics
74
-
Determining projects to restore...
75
-
Writing /tmp/tmpNsaYtc.tmp
76
-
info : Adding PackageReference for package 'MathNet.Symbolics' into project '/home/zug/Desktop/Vorlesungen/VL_Softwareentwicklung/code/16_Testen/ConditionalBuild/ConditionalBuild.csproj'.
77
-
info : GET https://api.nuget.org/v3/registration5-gz-semver2/mathnet.symbolics/index.json
78
-
...
79
-
```
80
-
81
-
Danach findet sich in unserer Projektdatei `.csproj` ein entsprechender Eintrag
@LIA.eval(`["Program.cs", "project.csproj"]`, `dotnet build -nologo`, `dotnet run -nologo`)
133
-
134
37
135
38
## Softwarefehler
136
39
@@ -302,8 +205,8 @@ Welche Unterschiede sehen Sie in den Definitionen?
302
205
303
206
> Unterschied Verifikation vs. Validierung
304
207
>
305
-
> +**Verifikation** ... ist der Prozess, der sicherstellt, dass ein Softwareprodukt die Spezifikationen erfüllt und korrekt implementiert wurde.
306
-
> +**Validierung** ... ist der Prozess, der sicherstellt, dass das Softwareprodukt die Bedürfnisse des Kunden erfüllt und die richtige Software entwickelt wurde.
208
+
> +**Verifikation** ... ist der Prozess, der sicherstellt, dass ein Softwareprodukt die Spezifikationen erfüllt und korrekt implementiert wurde. (_Bauen wir das Produkt richtig?_)
209
+
> +**Validierung** ... ist der Prozess, der sicherstellt, dass das Softwareprodukt die Bedürfnisse des Kunden erfüllt und die richtige Software entwickelt wurde. (_Bauen wir das richtige Produkt?_)
307
210
308
211
### Ablauf beim Testen
309
212
@@ -372,7 +275,7 @@ Abbildung motivierte aus [^Liggesmeyer]
372
275
373
276
**Statische Code Analysen**
374
277
375
-
... ist ein Software-Testverfahren, das zur Übersetzungszeit durchgeführt wird. Der
278
+
... ohne eine Ausführung allein anhand des Codes durchgeführt. Der
376
279
Quelltext wird hierbei einer Reihe formaler Prüfungen unterzogen, bei denen
377
280
bestimmte Sorten von Fehlern entdeckt werden können, noch bevor die
378
281
entsprechende Software (z. B. im Modultest) ausgeführt wird. Die Methodik gehört
+**Codereviews** ... Reviews sind manuelle Überprüfungen der Arbeitsergebnisse der Softwareentwicklung. Jedes Arbeitsergebnis kann einer Durchsicht durch eine andere Person unterzogen werden.
393
296
394
297
Der untersuchte Gegenstand eines Reviews kann verschieden sein. Es wird vor
395
298
allem zwischen einem Code-Review (Quelltext) und einem Architektur-Review
396
299
(Softwarearchitektur, insbesondere Design-Dokumente) unterschieden.
300
+
301
+
https://www.codereviewchecklist.com/
397
302
398
303
+ ...
399
304
@@ -622,6 +527,7 @@ Attribute werden in rechteckigen Klammern den jeweiligen Codeelementen vorangest
0 commit comments