Skip to content

Commit 265fb73

Browse files
committed
Revise L19
1 parent 780496d commit 265fb73

5 files changed

Lines changed: 49 additions & 107 deletions

File tree

19_Testen.md

Lines changed: 11 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
author: Sebastian Zug, Galina Rudolf & André Dietrich
44
email: sebastian.zug@informatik.tu-freiberg.de
5-
version: 1.0.9
5+
version: 1.0.10
66
language: de
77
narrator: Deutsch Female
88
comment: Softwarefehler, Testen zur Qualitätssicherung, Planung von Tests, Konzepte und Umsetzung in dotnet
@@ -23,114 +23,17 @@ import: https://raw.githubusercontent.com/TUBAF-IfI-LiaScript/VL_Softwareentwick
2323
| Parameter | Kursinformationen |
2424
| ------------------------ | -------------------------------------------------------------------------------------- |
2525
| **Veranstaltung:** | `Vorlesung Softwareentwicklung` |
26-
| **Teil:** | `19/27` |
26+
| **Teil:** | `19/27` |
2727
| **Semester** | @config.semester |
2828
| **Hochschule:** | @config.university |
2929
| **Inhalte:** | @comment |
30-
| **Link auf den GitHub:** | https://github.com/TUBAF-IfI-LiaScript/VL_Softwareentwicklung/blob/master/16_Testen.md |
30+
| **Link auf den GitHub:** | https://github.com/TUBAF-IfI-LiaScript/VL_Softwareentwicklung/blob/master/19_Testen.md |
3131
| **Autoren** | @author |
3232

3333
![](https://media.giphy.com/media/26tn33aiTi1jkl6H6/source.gif)
3434

3535
---------------------------------------------------------------------
3636

37-
## Exkurs - Abhängigkeitsmanagment / Paketmanagement
38-
39-
> **Merke:** Erfinde das Rad nicht neu!
40-
41-
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
82-
83-
```xml
84-
<Project Sdk="Microsoft.NET.Sdk">
85-
86-
<PropertyGroup>
87-
<OutputType>Exe</OutputType>
88-
<TargetFramework>net8.0</TargetFramework>
89-
</PropertyGroup>
90-
91-
<ItemGroup>
92-
<PackageReference Include="MathNet.Symbolics" Version="0.24.0" />
93-
</ItemGroup>
94-
</Project>
95-
```
96-
97-
```csharp PreprocessorConsts.cs
98-
using System;
99-
using System.Collections.Generic;
100-
using MathNet.Symbolics;
101-
using Expr = MathNet.Symbolics.SymbolicExpression; // Platzhalter für verkürzte Schreibweise
102-
103-
class Program
104-
{
105-
static void Main(string[] args)
106-
{
107-
Console.WriteLine("Beispiele für die Verwendung des MathNet.Symbolics Paketes");
108-
var x = Expr.Variable("x");
109-
var y = Expr.Variable("y");
110-
var a = Expr.Variable("a");
111-
var b = Expr.Variable("b");
112-
var c = Expr.Variable("c");
113-
var d = Expr.Variable("d");
114-
Console.WriteLine("a+a =" + (a + a + a).ToString());
115-
Console.WriteLine("(2 + 1 / x - 1) =" + (2 + 1 / x - 1).ToString());
116-
Console.WriteLine("((a / b / (c * a)) * (c * d / a) / d) =" + ((a / b / (c * a)) * (c * d / a) / d).ToString());
117-
Console.WriteLine("Der zugehörige Latex Code lautet " + ((a / b / (c * a)) * (c * d / a) / d).ToLaTeX());
118-
}
119-
}
120-
```
121-
```-xml PreprocessorConsts.csproj
122-
<Project Sdk="Microsoft.NET.Sdk">
123-
<PropertyGroup>
124-
<OutputType>Exe</OutputType>
125-
<TargetFramework>net8.0</TargetFramework>
126-
</PropertyGroup>
127-
<ItemGroup>
128-
<PackageReference Include="MathNet.Symbolics" Version="0.24.0" />
129-
</ItemGroup>
130-
</Project>
131-
```
132-
@LIA.eval(`["Program.cs", "project.csproj"]`, `dotnet build -nologo`, `dotnet run -nologo`)
133-
13437

13538
## Softwarefehler
13639

@@ -302,8 +205,8 @@ Welche Unterschiede sehen Sie in den Definitionen?
302205

303206
> Unterschied Verifikation vs. Validierung
304207
>
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?_)
307210
308211
### Ablauf beim Testen
309212

@@ -372,7 +275,7 @@ Abbildung motivierte aus [^Liggesmeyer]
372275

373276
**Statische Code Analysen**
374277

375-
... ist ein Software-Testverfahren, das zur Übersetzungszeit durchgeführt wird. Der
278+
... ohne eine Ausführung allein anhand des Codes durchgeführt. Der
376279
Quelltext wird hierbei einer Reihe formaler Prüfungen unterzogen, bei denen
377280
bestimmte Sorten von Fehlern entdeckt werden können, noch bevor die
378281
entsprechende Software (z. B. im Modultest) ausgeführt wird. Die Methodik gehört
@@ -387,13 +290,15 @@ bestimmt.
387290

388291
![instruction-set](./img/16_Testen/SonarLinterVS.png)
389292

390-
Eine Übersicht zu den Standard-Regeln findet sich unter [Link](https://github.com/DotNetAnalyzers/StyleCopAnalyzers/blob/master/DOCUMENTATION.md).
293+
https://learn.microsoft.com/de-de/dotnet/fundamentals/code-analysis/overview?tabs=net-9
391294

392295
+ **Codereviews** ... Reviews sind manuelle Überprüfungen der Arbeitsergebnisse der Softwareentwicklung. Jedes Arbeitsergebnis kann einer Durchsicht durch eine andere Person unterzogen werden.
393296

394297
Der untersuchte Gegenstand eines Reviews kann verschieden sein. Es wird vor
395298
allem zwischen einem Code-Review (Quelltext) und einem Architektur-Review
396299
(Softwarearchitektur, insbesondere Design-Dokumente) unterschieden.
300+
301+
https://www.codereviewchecklist.com/
397302

398303
+ ...
399304

@@ -622,6 +527,7 @@ Attribute werden in rechteckigen Klammern den jeweiligen Codeelementen vorangest
622527
```csharp ConditionalExample.cs
623528
#define CONDITION1
624529
#define CONDITION2
530+
625531
using System;
626532
using System.Diagnostics;
627533

@@ -697,7 +603,7 @@ class Test
697603
<Project Sdk="Microsoft.NET.Sdk">
698604
<PropertyGroup>
699605
<OutputType>Exe</OutputType>
700-
<TargetFramework>net6.0</TargetFramework>
606+
<TargetFramework>net8.0</TargetFramework>
701607
<DefineConstants>CONDITION2;</DefineConstants>
702608
</PropertyGroup>
703609
</Project>

code/16_Testen/MathNetExample/MathNetExample.csproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net8.0</TargetFramework>
5+
<TargetFramework>net9.0</TargetFramework>
6+
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
67
</PropertyGroup>
78

9+
10+
811
<ItemGroup>
912
<PackageReference Include="MathNet.Symbolics" Version="0.25.0" />
1013
</ItemGroup>

code/26_LINQ/LINQbabynames/LINQbabynames.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net8.0</TargetFramework>
5+
<TargetFramework>net9.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
8+
<RunArguments>../babynames.csv</RunArguments>
89
</PropertyGroup>
910

11+
<ItemGroup>
12+
<PackageReference Include="Microsoft.VisualBasic" Version="10.3.0" />
13+
</ItemGroup>
14+
1015
</Project>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
Microsoft Visual Studio Solution File, Format Version 12.00
2+
# Visual Studio Version 17
3+
VisualStudioVersion = 17.5.2.0
4+
MinimumVisualStudioVersion = 10.0.40219.1
5+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINQbabynames", "LINQbabynames.csproj", "{DF0B99F2-E7AD-A0BE-D845-9E80774E6DE5}"
6+
EndProject
7+
Global
8+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
9+
Debug|Any CPU = Debug|Any CPU
10+
Release|Any CPU = Release|Any CPU
11+
EndGlobalSection
12+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
13+
{DF0B99F2-E7AD-A0BE-D845-9E80774E6DE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
14+
{DF0B99F2-E7AD-A0BE-D845-9E80774E6DE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
15+
{DF0B99F2-E7AD-A0BE-D845-9E80774E6DE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
16+
{DF0B99F2-E7AD-A0BE-D845-9E80774E6DE5}.Release|Any CPU.Build.0 = Release|Any CPU
17+
EndGlobalSection
18+
GlobalSection(SolutionProperties) = preSolution
19+
HideSolutionNode = FALSE
20+
EndGlobalSection
21+
GlobalSection(ExtensibilityGlobals) = postSolution
22+
SolutionGuid = {4723A947-DDAF-46EC-BAA8-86F51156D50A}
23+
EndGlobalSection
24+
EndGlobal

code/26_LINQ/LINQbabynames/Program.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ class Program
88
{
99
static void Main(string[] args)
1010
{
11+
string current_dir = System.IO.Directory.GetCurrentDirectory();
12+
string parent = System.IO.Directory.GetParent(current_dir).FullName;
13+
string path = Path.Combine(parent, "babynames.csv");
14+
Console.WriteLine("Current Directory: " + parent);
1115
var path = @"../babynames.csv";
1216
List<BabyName> namelist = new List<BabyName>();
1317
using (TextFieldParser csvReader = new TextFieldParser(path))

0 commit comments

Comments
 (0)