Testfall



  • und warum ?



  • und was ich auch noch wissen will.
    Beruht die automatische Löschung von einem auto_ptr Zeiger darauf,
    dass er ein lokales Objekt ist ?



  • blurry333 schrieb:

    und was ich auch noch wissen will.
    Beruht die automatische Löschung von einem auto_ptr Zeiger darauf,
    dass er ein lokales Objekt ist ?

    Ähm... Probably...
    Habs nicht so ganz verstanden.
    Jedes Objekt, das du auf dem Stack anlegst, wird automatisch (beim Verlassen des Scopes)
    gelöscht.
    Die Eigenart des auto_ptr ist, dass er zusätzlich das Objekt, auf das er
    intern verweist ebenfalls löscht.





  • Funktion berechnet Winkel zwischen 2 vektoren

    calculateAngle(Vektor 1 ,Vektor 2, bool AngleinDegrees)

    AngleINDegress: 0:Grad 1:Bogenmaß

    wenn ich die Funktion jetzt teste muss ich Testfälle aufstellen.

    Es reicht doch eigentlich den Parameter AngleinDegress 2 mal zu testen,
    eben ob er das Bogenmaß richtig ausgibt oder eben das Gradmaß.
    Für diese Funktion müßten doch 2 Testfälle reichen ?


  • Mod

    Wenn du so testest, dann entgehen dir jede Menge Fehler. Üblich wäre es ein paar typische Fälle zu testen, dann alle Extremfälle und dann noch eine Reihe zufällige Fälle.

    Was ist zum Beispiel, wenn die Funktion nur zwischen 0 und 90 Grad korrekt ist? Oder sie bei gleichen Vektoren ein falsches Ergebnis liefert? Oder sie bei Nullvektoren abstürzt? Oder die Umrechnung in Grad für einige Fälle Ergebnisse über 360 liefert? Es gibt so viel das schiefgehen könnte...



  • ja schon aber ich kann doch nicht für jeden Testfall sowohl Grad als auch
    Bogenmaß Ausgabe testen.

    Und außerdem den Winkel zwischen 2 Vektoren berechnet man über eine mathematische Funktion. Da dürfte doch gar nichts schiefgehen ??


  • Mod

    blurry333 schrieb:

    Und außerdem den Winkel zwischen 2 Vektoren berechnet man über eine mathematische Funktion. Da dürfte doch gar nichts schiefgehen ??

    Mit der Argumentation brauchste gar nichts testen. Selbst das komplizierteste Programm lässt sich über mathematische Funktionen beschreiben (zumindest theoretisch). Die Argumentation funktioniert sogar im Falle funktionaler Sprachen, wo man Algorithmen tatsächlich "beweisen" kann.

    Aber:
    1. C++ ist nicht funktional
    2. Der Sinn und Zweck dieser Aufgabe ist ja gerade, dass du lernst nicht faul zu sein, sondern darüber nachzudenken was du tust.

    blurry333 schrieb:

    ja schon aber ich kann doch nicht für jeden Testfall sowohl Grad als auch
    Bogenmaß Ausgabe testen.

    Ist das wirklich so schwierig, für jeden Fall zwei Werte zu prüfen?



  • Nicht schwierig aber sagen wir es sind 10 Fälle dann muss ich also 2*10 testen.

    Ich frag mich ob das sinnvoll ist oder ob man bei dem ein oder anderen
    Testfall auch nur mal z.B. das Bogenmaß berechnen kann.

    Bogenmaß zu Gradmaße ist eine feste Formel . Also was soll da schieflaufen ?
    Jetzt ernsthaft. Bogenmaße=180/pi * Winkel oder so ähnlich.

    Aber es ist eine reine Zuweisung. Also für mich nix zu testen ????



  • blurry333 schrieb:

    Also was soll da schieflaufen ?

    Genau die falsche Einstellung bei der Qualitätssicherung 🤡



  • blurry333 schrieb:

    Nicht schwierig aber sagen wir es sind 10 Fälle dann muss ich also 2*10 testen.

    Ich frag mich ob das sinnvoll ist oder ob man bei dem ein oder anderen
    Testfall auch nur mal z.B. das Bogenmaß berechnen kann.

    Bogenmaß zu Gradmaße ist eine feste Formel . Also was soll da schieflaufen ?
    Jetzt ernsthaft. Bogenmaße=180/pi * Winkel oder so ähnlich.

    Aber es ist eine reine Zuweisung. Also für mich nix zu testen ????

    Du glaubst gar nicht was bei solchen "einfachen" Funktionen alles schieflaufen kann. ZB du hast eine lokale Variable die genauso oder ähnlich heißt wie der Parameter, beim schnellen drüber schauen siehst du so was nicht. Also immer schön testen und lieber 5 Tests zu viel als 1 zu wenig.

    Und wegen deinen 2*10 Tests. Wenn du es gut Organisierts dann ist es im Enddefekt egal wie viele Tests du machst, nur die Auswertung dauert länger.
    Könntest ja einen Vector mit deinen Testdaten versorgen und dieser wird dann 2 mal durchlaufen. Nicht viel Aufwand und du hast genug Testwerte. Und Probiere immer auch Werte die nicht gehen dürfen!

    Mfg marco.


  • Mod

    Bist du denn sicher, dass die Funktion intern so arbeitet?

    Was wenn jemand auf die Idee gekommen ist, pi als globale variable anzulegen? Und diese geändert wird?

    Oder jemand macht es ganz clever und gibt immer das gleiche zurück, nämlich das eine Ergebnis was dein Testfall nachprüft.

    Oder die Formel die benutzt wird ist falsch (es ist nämlich nicht das was du schreibst), aber liefert für ein paar Extremfälle wie 0 zufällig doch das richtige Ergebnis.

    Oder jemand hat 3.142 für Pi eingesetzt.

    Oder es wird eine Referenz auf ein lokales Objekt anstatt einer Kopie zurückgegeben.

    Oder die Funktion gibt nur Ganzzahlen zurück, was bei Grad nicht ganz so tragisch wäre, bei Bogenmaß aber schon.

    Oder das Bogenmaßergebnis könnte zwischen -pi und +pi liegen, aber bei Gradangaben sind negative Zahlen eher ungewöhnlich.

    P.S.: Machst du den Test etwa von Hand? Oder warum sträubst du dich so gegen eine mickrige Verdoppelung der Testfälle?


Anmelden zum Antworten