Forum: PC-Programmierung Wie nennt man das Überprüfen von Code?


von Straßenbauer (Gast)


Lesenswert?

Hallo guten Tag,

ich frage mich wie man den Vorgang nennt, wenn man einen Programmteil 
hat und diesen überprüft.
Also angenommen meine Funktion f(int x) soll immer int 2 ausgeben.
Ich gebe alle Werte ein die ich als relevant "empfinde" und vergleiche 
dann die Ausgabe mit 2.
Wie nennt man diesen Vorgang. Also im Bereich der Informatik.

Wäre das eine Verifizierung?

Validierung ist ja eher die Überprüfung der Kundenanforderungen(?)

Ich habe diese Begriffe nie korrekt gelernt, deswegen frage ich jetzt.

Vielen Dank :)

von Émile (Gast)


Lesenswert?

Straßenbauer schrieb:
> Wäre das eine Verifizierung?

Nö, das ist ein Test. Einer, der auch nur so gut ist wie Deine 
Einschätzung, welche Werte "relevant" sind.

von Einheit (Gast)


Lesenswert?

Unit test.

von Volkslehrer (Gast)


Lesenswert?

Straßenbauer schrieb:
> Ich habe diese Begriffe nie korrekt gelernt, deswegen frage ich jetzt.

Dann wird es Zeit das Du dir mal die kostenlose Begriffserklärung als 
PDF runterziehst. Ist auf deutsch und Englisch.

https://www.german-testing-board.info/wp-content/uploads/2018/09/ISTQB_GTB-Standardglossar-der-Testbegriffe-in-CTFL-2018-Englisch-Deutsch.pdf

von Bichael M. (Gast)


Lesenswert?

(Unit) Test, im weiteren Sinne Validierung.

Straßenbauer schrieb:
> Wäre das eine Verifizierung?

Nein.

Straßenbauer schrieb:
> Validierung ist ja eher die Überprüfung der Kundenanforderungen(?)

Nein, Validierung ist generell die Prüfung gegen eine Anforderung. 
Beziehungsweise umgekehrt ist ja jede Softwareanforderung irgendwo von 
einer Kundenanforderung abgeleitet, so ein solcher existiert.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

"Debugging" ist der erste Schritt

von Maulwurfmann (Gast)


Lesenswert?

Das nennt man Unittest.

Verifizierung: Ich prüfe ob richtig entwickelt wurde (z.B. ob 
Richtlinien eingehalten wurden)

Validierung: Ich prüfe, dass das richtige gebaut wurde (gegen 
Anforderungen)

von Straßenbauer (Gast)


Lesenswert?

Danke sehr :)

von Boomer (Gast)


Lesenswert?

Straßenbauer schrieb:
> einen Programmteil hat und diesen überprüft

Zeitverschwendung.

Also in den Augen des Managements.

Ansonsten schreibt man einen Test, baut diesen ins CI und implementiert 
dagegen.

von Christian M. (christian_m280)


Lesenswert?

Testen wird generell völlig überbewertet! Dafür gibt es doch Kunden die 
bei Problemen ein Formular ausfüllen...

Gruss Chregu

von Da Baby [reformed] (Gast)


Lesenswert?

Der Freitagstroll ist wieder da

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Computer sind quasi-chaotische Gebilde, da kann man nichts zuverlässig 
testen. Eigentlich determinert, aber viel zu komplex um sagen zu können, 
dass man eine Software 100%ig getestet habe.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Ich werfe noch

break point

in die Runde. Kann man für das laufende Programm einfügen, wenn
man z. b. Zwischenergebnisse überprüfen will.

von A. S. (Gast)


Lesenswert?

Straßenbauer schrieb:
> Ich gebe alle Werte ein die ich als relevant "empfinde

Je nach Einsatzgebiet müssen die Werte so gewählt werden, dass jede 
Zeile mindestens einmal durchlaufen wird oder jeder Pfad (also dass ein 
if auch nicht durchlaufen wird)

Tools geben das als test-coverage aus

von rbx (Gast)


Lesenswert?

https://de.wikipedia.org/wiki/Validität
https://de.wikipedia.org/wiki/Reliabilitäts-Validitäts-Dilemma

Validität ginge beim Code ein wenig in die Richtung, dass man schon 
vorher sehen könnte, was rauskommt.
Objektiv wäre dann auch die Wiederholbarkeit.

So grob fällt mir noch der Begriff Ökonomie ein. Beispielsweise, wenn 
man mehrere Compiler diesbezüglich durchprobiert,  - dann den Eindruck 
gewinnt, dass man beim gcc mittlerweile vor lauter peniblen 
Fehlermeldungen kaum noch auf einen grünen Zweig kommt.

Man muss ja mit dem Kram arbeiten können. Bewährt haben sich gute 
Zusatzprogramme, gute Bibliotheken, oder wirklich fundierte, Spaß 
machende Hilfen bzw. Tutorials.

Recht beliebt beim Testen ist z.B. ein Zufallsgenerator, der immer die 
gleiche Zahl herausgibt ;)

von Rolf M. (rmagnus)


Lesenswert?

Christoph db1uq K. schrieb:
> Computer sind quasi-chaotische Gebilde, da kann man nichts zuverlässig
> testen. Eigentlich determinert, aber viel zu komplex um sagen zu können,
> dass man eine Software 100%ig getestet habe.

100% testen kann man eh nicht, da selbst bei recht trivialen Dingen der 
Testaufwand explodieren würde. Das ist die Crux beim Testen.

rbx schrieb:
> Recht beliebt beim Testen ist z.B. ein Zufallsgenerator, der immer die
> gleiche Zahl herausgibt ;)

Also so eine Funktion?
https://xkcd.com/221/

von Purzel H. (hacky)


Lesenswert?

Das Ueberpruefen von Code heisst Review

von Imonbln (Gast)


Lesenswert?

Rolf M. schrieb:
> 100% testen kann man eh nicht, da selbst bei recht trivialen Dingen der
> Testaufwand explodieren würde. Das ist die Crux beim Testen.

Nicht zu verwechseln mit 100% Testcoverage, welche durchaus erreicht 
werden kann, ohne dass der Aufwand explodiert. Meine Erfahrung nach 
hilft es ungemein, die Tests parallel zum Code zu entwickeln, das hat 
den Vorteil, dass schon bei der Implementierung ein Design gewählt wird, 
welches das Testen vereinfacht.

von Georg (Gast)


Lesenswert?

Purzel H. schrieb:
> Das Ueberpruefen von Code heisst Review

Wenn es jemand anders macht. Seinen eigenen Code zu "reviewen" ist wenig 
sinnvoll, da fällt einem ein Fehler, den man gemacht hat, beim 2. 
Hinschauen auch nicht auf.

Das grösste Hindernis ist eh die Überzeugung der meisten Entwickler 
keine Fehler zu machen.

Georg

von Vn N. (wefwef_s)


Lesenswert?

Georg schrieb:
> Seinen eigenen Code zu "reviewen" ist wenig
> sinnvoll, da fällt einem ein Fehler, den man gemacht hat, beim 2.
> Hinschauen auch nicht auf.

https://www.nerdwallet.com/blog/engineering/why-you-should-be-doing-self-reviews/

von A. S. (Gast)


Lesenswert?

Imonbln schrieb:
> das hat den Vorteil, dass schon bei der Implementierung ein Design
> gewählt wird, welches das Testen vereinfacht.

Was zugleich auch dessen Nachteil ist: Funktionen haben dann einstellige 
McCabes.

von vn nn (Gast)


Lesenswert?

A. S. schrieb:
> Was zugleich auch dessen Nachteil ist: Funktionen haben dann einstellige
> McCabes.

Inwiefern ist das ein Nachteil? McCabe hat selbst <10 angestrebt wenn 
möglich.

von rbx (Gast)


Lesenswert?

Georg schrieb:
> Wenn es jemand anders macht. Seinen eigenen Code zu "reviewen" ist wenig
> sinnvoll, da fällt einem ein Fehler, den man gemacht hat, beim 2.
> Hinschauen auch nicht auf.

Der Punkt ist interessant, so wurden früher beim Diktat-Korrigieren 
immer die Hefte mit dem Nachbarn getauscht. Nicht unbedingt ein 
Qualitätsgarant (war Comic-Freak, sehr gut in Rechtschreibung, was die 
Einschätzung diesbezüglich einfach machte) - aber trotzdem eine wirksame 
Maßnahme. Man hat selber auch immer so "blinde Flecken" oder sieht 
manchmal den Wald vor lauter Bäumen nicht.

Ziemliches Highlight ist es ja sowieso, wenn mehrere gute Leute an einem 
Stück Code zum Optimieren zusammenfinden - und das ist bei anderen 
Beziehungen wie Witze konstruieren, Tischerücken oder Computerdesign 
ganz ähnlich.

Oder umgekehrt: Manchmal kann eine Gruppe sehr gut sein - zusammen. Und 
dann nur noch Hamsterhusten, wenn einer aussteigt:

http://www.katzenjammer.com/story/
(hätte man jetzt bei dem Video 
https://www.youtube.com/watch?v=3KOvbx9Ivjk nicht gedacht - ist für mich 
aber wieder ein gutes Beispiel dass das Ganze doch mehr ist als die 
Summe seiner Teile)

Grundsätzlich beschreibt die Frage oben auch eher eine Art "Hausarbeit" 
(einzelne Funktionen werden sowieso meist gut durchgetestet) - und 
weniger ein Prinzip der Informatik.

von Folge dem Style guide (Gast)


Lesenswert?

rbx schrieb:
> Georg schrieb:
>> Wenn es jemand anders macht. Seinen eigenen Code zu "reviewen" ist wenig
>> sinnvoll, da fällt einem ein Fehler, den man gemacht hat, beim 2.
>> Hinschauen auch nicht auf.

"Source-Review" ist ohnehin kein Test, sondern man verschafft sich 
lediglich durch den Review einen Überblick/Zusammenfassung über das 
Ge-code.

Zum etwas Test-ähnlichen wird es erst, wenn man es neben den Review aka 
Zusammenfassung des Anforderungsdokument tut und versucht die 
Anforderungen in der Implementierung wiederzufinden.

Review dient lediglich der Austauschbarkeit des Coders: Kann das, was 
Coder A geschrieben hat von Coder B nach dem möglichen Ausscheiden von 
Coder A gewartet werden? Diese Austauschbarkeit versucht man dadurch zu 
erreichen, das sich alle dem Company-Code-Style unterwerfen.

Auch die Linux-Entwicklung ist einem Code-Style verpflichtet: 
https://slurm.schedmd.com/coding_style.pdf

von A. S. (Gast)


Lesenswert?

vn nn schrieb:
> Inwiefern ist das ein Nachteil? McCabe hat selbst <10 angestrebt wenn
> möglich.

Es gibt viele gute wichtige kleine Funktionen. Ein Bit zu setzen oder ob 
eine Zahl in einem Bereich ist.

Es gibt aber auch große komplexe Funktionen, die man nicht wirklich gut 
zerlegen kann.

Genau das passiert dann trotzdem, um die Test einfacher zu halten.

von vn n (Gast)


Lesenswert?

A. S. schrieb:
> Es gibt aber auch große komplexe Funktionen, die man nicht wirklich gut
> zerlegen kann.
>
> Genau das passiert dann trotzdem, um die Test einfacher zu halten.

Wenn zerlegen den Test einfach hält, ist die Funktion offensichtlich 
sehr wohl gut zu zerlegen.

Und

A. S. schrieb:
> Es gibt viele gute wichtige kleine Funktionen. Ein Bit zu setzen oder ob
> eine Zahl in einem Bereich ist.

Wer mit einem McCabe < 10 (von mir aus auch < 20) lediglich ein Bit 
setzen oder eine Zahl auf größer/kleiner testen kann, sollte vermutlich 
keine professionelle Software entwickeln. Folgende 
Bubblesort-Implementierung geht sich mit 5 aus:
1
def bubblesort(array):
2
    length = len(array)
3
    for i in range(length - 1):
4
        swapped = False
5
        for j in range(length - i - 1):
6
            if array[j] > array[j + 1]:
7
                swapped = True
8
                array[j], array[j + 1] = array[j + 1], array[j]
9
        if not swapped:
10
            break

von A. S. (Gast)


Lesenswert?

vn n schrieb:
> Wer mit einem McCabe < 10 (von mir aus auch < 20) lediglich ein Bit
> setzen oder eine Zahl auf größer/kleiner testen kann, sollte vermutlich
> keine professionelle Software entwickeln.

Da stimme ich Dir zu. Es gibt trotzdem hilfreiche Funktionen mit McCabe 
<=2.

Es ist jedoch ein Trugschluss, dass komplexe Funktionen (z.B. McCabe 
>100) durch zerlegen (in Summe) einfacher werden. Auch wenn es oft Arten 
von Table-Driven-Design gibt, sowas einfacher zu machen, bleiben viele 
Fälle, wo es nicht geht.

Manchmal macht ein switch mit 100 cases Sinn. Und manchmal ein 
geschlossener Ablauf statt 30 kleinst-Funktionen mit je McCabe von 5 
oder so.

von Kiptdatbit (Gast)


Lesenswert?

Straßenbauer schrieb:
> Hallo guten Tag,
>
> ich frage mich wie man den Vorgang nennt, wenn man einen Programmteil
> hat und diesen überprüft.
> Also angenommen meine Funktion f(int x) soll immer int 2 ausgeben.
> Ich gebe alle Werte ein die ich als relevant "empfinde" und vergleiche
> dann die Ausgabe mit 2.

> Wie nennt man diesen Vorgang. Also im Bereich der Informatik.
>
> Wäre das eine Verifizierung?
>

> Validierung ist ja eher die Überprüfung der Kundenanforderungen(?)
>
> Ich habe diese Begriffe nie korrekt gelernt, deswegen frage ich jetzt.
>
> Vielen Dank :)

Dibagging

von Vn N. (wefwef_s)


Lesenswert?

A. S. schrieb:
> Es ist jedoch ein Trugschluss, dass komplexe Funktionen (z.B. McCabe
> >100) durch zerlegen (in Summe) einfacher werden. Auch wenn es oft Arten
> von Table-Driven-Design gibt, sowas einfacher zu machen, bleiben viele
> Fälle, wo es nicht geht.

Mir würde kaum eine sinnvolle Anwendung einfallen. Ein derartiges 
Monster wäre ja auch kaum sinnvoll testbar.

A. S. schrieb:
> Manchmal macht ein switch mit 100 cases Sinn.

Nein, einfach nur nein. Sowas ist zu 99,9% einfach nur ein Zeichen für 
mieses Design. Die arme Seele die die Tests dafür schreiben muss wäre ja 
echt zu bemitleiden.

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Vn N. schrieb:
> Die arme Seele die die Tests dafür schreiben muss wäre ja
> echt zu bemitleiden.

Damit haben wir uns jetzt einmal im Kreis gedreht.

von vn n. (Gast)


Lesenswert?

A. S. schrieb:
> Vn N. schrieb:
>> Die arme Seele die die Tests dafür schreiben muss wäre ja
>> echt zu bemitleiden.
>
> Damit haben wir uns jetzt einmal im Kreis gedreht

Inwiefern? Dass du gerne untestbare Software schriebst? Wie validierst 
du dann, dass die tut was sie soll?

von Volkslehrer (Gast)


Lesenswert?

Wie im Märchen:

"Heute debug ich, morgen browse ich,
 übermorgen caste ich die Königin zu int;"

...
(unbekanntes Rumpelcodchen)

von Georg (Gast)


Lesenswert?

vn n. schrieb:
> Inwiefern? Dass du gerne untestbare Software schriebst?

Als ich mich mit den Anfängen der Programmierung beschäftigt habe war 
die Einstellung verbreitet: "Auf keinen Fall darf mein Chef oder 
sonstjemand in der Firma verstehen, was ich programmiere. Dann bin ich 
praktisch unkündbar."

Heute sind solche Programmierer gottseidank fast ausgestorben, besonders 
in Firmen, die mehr als einen Softwarespezialisten beschäftigen. Dass 
die Zusammenarbeit ihre eigenen Probleme hat sieht man an dem Spruch, 
dass die Softwareerstellung im Team dem Versuch gleichkommt, eine 
Schwangerschaft durch den Einsatz von 9 Frauen auf einen Monat zu 
begrenzen.

Georg

von Oliver S. (oliverso)


Lesenswert?

Vn N. schrieb:
> A. S. schrieb:
>> Manchmal macht ein switch mit 100 cases Sinn.
>
> Nein, einfach nur nein. Sowas ist zu 99,9% einfach nur ein Zeichen für
> mieses Design. Die arme Seele die die Tests dafür schreiben muss wäre ja
> echt zu bemitleiden.

Na ja, macht 100 Testfälle ;)

Solchen Code mit xxx cases schreib man natürlich nicht von Hand, der 
purzelt automatisiert aus irgend einem Script.

Oliver

von Vn N. (wefwef_s)


Lesenswert?

Oliver S. schrieb:
> Solchen Code mit xxx cases schreib man natürlich nicht von Hand, der
> purzelt automatisiert aus irgend einem Script.

Womit sich das ganze ziemlich sicher auch ohne Swich-Monster lösen 
liese.

Oliver S. schrieb:
> Vn N. schrieb:
>> A. S. schrieb:
>>> Manchmal macht ein switch mit 100 cases Sinn.
>>
>> Nein, einfach nur nein. Sowas ist zu 99,9% einfach nur ein Zeichen für
>> mieses Design. Die arme Seele die die Tests dafür schreiben muss wäre ja
>> echt zu bemitleiden.
>
> Na ja, macht 100 Testfälle ;)
 Und dass keiner übersehen wurde prüfst du einfach mal schnell durch 
drüberlesen?

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

vn n. schrieb:
> Inwiefern? Dass du gerne untestbare Software schriebst? Wie validierst
> du dann, dass die tut was sie soll?

Der Kreis zum Ausgangsstatement: Man designt so, dass das Testen 
vereinfacht wird.

A. S. schrieb:
> Imonbln schrieb:
>> das hat den Vorteil, dass schon bei der Implementierung ein Design
>> gewählt wird, welches das Testen vereinfacht.
>
> Was zugleich auch dessen Nachteil ist: Funktionen haben dann einstellige
> McCabes.

Beispiel: embedded Tastatur mit 10 Tasten und McCabe 10.
1
void KeyCheck(struct KeyType k)
2
{
3
   if(k.key0) {EnableXY();}
4
   if(k.key1) {SwitchMenu();}
5
   if(k.key2) {...;}
6
   ...
7
   if(k.key9) {...;}
8
}

Und das gleiche ohne jede Verzweigung
1
void KeyCheck(struct KeyType k)
2
{
3
   KeyCheck0(k.key0);
4
   KeyCheck1(k.key1);
5
   KeyCheck2(k.key2);
6
   ...
7
   KeyCheck9(k.key9);
8
}

McCabe gering, einfacher zu testen, aber nicht einfacher zu lesen oder 
zu warten (+10 Funktionen)

Zudem steigt die Chance, dass der Test geschlampt wird:

Im ersten Beispiel testest Du, ob ein Aufruf mit k.key0 EnableXY 
aufruft.

Im zweiten erstellst Du 2 unabhängige Tests:
 a) ob KeyCheck0 bei k.key0 aufgerufen wird
 b) ob KeyCheck0 EnableXY aufruft.

Die Frage, ob k.key wirklich EnableXY aufruft, wird in den 
"Regressionstest" verschoben und nur noch halbherzig, stichpunktartig 
oder gar nicht verfolgt. Man hat ja 100% TestCoverage.

von vn n. (Gast)


Lesenswert?

A. S. schrieb:
> Der Kreis zum Ausgangsstatement: Man designt so, dass das Testen
> vereinfacht wird.

Gerade eben hast du noch erklärt dass dabei zu kleine Funktionen 
rausfallen.

A. S. schrieb:
> Beispiel: embedded Tastatur mit 10 Tasten und McCabe 10.
> void KeyCheck(struct KeyType k)
> {
>    if(k.key0) {EnableXY();}
>    if(k.key1) {SwitchMenu();}
>    if(k.key2) {...;}
>    ...
>    if(k.key9) {...;}
> }
>
> Und das gleiche ohne jede Verzweigungvoid KeyCheck(struct KeyType k)
> {
>    KeyCheck0(k.key0);
>    KeyCheck1(k.key1);
>    KeyCheck2(k.key2);
>    ...
>    KeyCheck9(k.key9);
> }
>
> McCabe gering, einfacher zu testen, aber nicht einfache zu lesen oder zu
> warten, weil die Anzahl der Funktionen (+10) nicht eingeht.

Sorry, das Beispiel ist absoluter Bullshit, da ist gar nix einfach zu 
testen. Warum, hast du unmittelbar darunter ja schon selbst erklärt.

Abgesehen davon ist ja selbst der erste Codeblock noch einem akzeptablen 
McCabe-Bereich, es würde also kein Bedarf bestehen in zu ändern. Und 
wenn du jetzt mit "aber ist gibt key1 bis key999" ankommst, sorry, dann 
ist eine endlose Reihe an if-Statements einfach die falsche 
Herangehensweise. Verkacktes Softwaredesign wird halt auch durch 
Kosmetik nicht besser.

von vn n. (Gast)


Lesenswert?

A. S. schrieb:
> Die Frage, ob k.key wirklich EnableXY aufruft, wird in den
> "Regressionstest" verschoben

Du meinst vermutlich "Integrationstest".

von Gerald K. (geku)


Lesenswert?


von 🕵︎ Joachim L. (Gast)


Lesenswert?

Volkslehrer schrieb:
> Straßenbauer schrieb:
>> Ich habe diese Begriffe nie korrekt gelernt, deswegen frage ich jetzt.
>
> Dann wird es Zeit das Du dir mal die kostenlose Begriffserklärung als
> PDF runterziehst. Ist auf deutsch und Englisch.
>
> 
https://www.german-testing-board.info/wp-content/uploads/2018/09/ISTQB_GTB-Standardglossar-der-Testbegriffe-in-CTFL-2018-Englisch-Deutsch.pdf

Ein Plus von mir und nochmal extra Dank. Toller Fund.

Welche Lernbefreite geben bei sowas lehrreichem ein Minus? 
Schopfkuettel, nicht verstehen, Brr.

von Volkslehrer (Gast)


Lesenswert?

Joachim L. schrieb:
>>
> 
https://www.german-testing-board.info/wp-content/uploads/2018/09/ISTQB_GTB-Standardglossar-der-Testbegriffe-in-CTFL-2018-Englisch-Deutsch.pdf
>
> Ein Plus von mir und nochmal extra Dank. Toller Fund.
Gerne. Generell der Hinweis sich mal zu schauen was 
"User-Groups"/Zertifizierer und ähnliches so an öffentlichen Dokumenten 
publizieren.
https://www.istqb.org/certifications/certification-list

Und man kann ja auch mal das ein oder andere Fachbuch erwerben wie ISBN: 
978-3-89864-638-3 (https://www.vigenschow.com/softwaretest-qualitaet/ )

> Welche Lernbefreite geben bei sowas lehrreichem ein Minus?

Hier wird halt oft danach bewertet was im Feld "name" steht, und der 
eigentliche Beitrag wird komplett ignoriert. Ist halt zu "social media" 
verkümmert, vielleicht war es nie ein Fachforum.

von loeti2 (Gast)


Lesenswert?

Georg schrieb:
> Dass
> die Zusammenarbeit ihre eigenen Probleme hat sieht man an dem Spruch,
> dass die Softwareerstellung im Team dem Versuch gleichkommt, eine
> Schwangerschaft durch den Einsatz von 9 Frauen auf einen Monat zu
> begrenzen.

Und das Managen einer Softwareentwicklertruppe ist wie Katzen hüten :)

Mein Lieblingsvideo dazu:
https://youtu.be/hx1jdgTs03U?t=5

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.