Ein typischer Testfall wäre eine mathematische Routine zu testen. Hierbei soll ein Beispiel eines FIR Filters aufgezeigt werden.

Motivation: Erstellung eines FIR Filters

Aus der Sequenz von Werten wird ein Fenster um den zu filternden Wert geschnitten, die
Fensterbreite muss für Symmetrie ungerade sein. Alle Werte in diesem Fenster werden
gewichtet. Die Summe der Gewichte wird normiert. Der zu filternde Wert wird durch die
gewichtete Summe ersetzt. Die Gewichte innerhalb vom Fenster werden hierbei vom Basisgewicht abgeleitet.
Ein Wert mit Abstand n vom zu filternden Wert (n) positiv oder negativ innerhalb der Fensterbreite,
z.B. [-2 bis +2] für Fensterbreite 5 wird mit der Potenz |n| vom Basisgewicht gewichtet.

Am Rand der Sequenz wird das Fenster auf die vorhandenen Werte verkleinert, wobei die
Gewichte neu normiert werden müssen. Eine Sequenz wird erst ab einer vorgegebenen
minimalen Länge gefiltert.

Die SW Komponente kann als Funktion nach der Ermittlung der Messwerte einfach aufgerufen werden
um die Messwerte entsprechend zu glätten:

Parameter Optionen

Option Bedeutung
Filter aktivieren Ein/Ausschalten des Filters
Fenster Breite Anzahl der Stützstellen
Basis Gewicht Gewichtung

Anwendung

Die folgende Darstellung zeigt eine Verteilung von Messwerten und den gefilterten Werten

Testfallbeispiel in Visual Studio C#

 

  [TestFixture]
  public class FilterTest
  {
    private List _istwertTestdaten;
    private List _gefilterteIstwerte;

    [SetUp]
    public void Init()
    {
      //Istdaten
      _istwertTestdaten = new List
      {
        10.8,
        8.9,
        8.9,
        8.9,
        8.5,
        7.8,
        10.1,
        8.4,
        9.1,
        8.8,
        8.3,
        4,
        7,
        7.9,
        9.7,
        6.9,
        6.4,
        7.6,
        8.2,
        7.8,
        7.8,
        8.6,
        7.5,
        9.5,
        8.1,
        7.8,
        7.2,
        6.6,
        7.4,
        6.7,
        8.1,
        6.7,
        7.4,
        7.5,
        7.6,
        8.1,
        6.4,
        6.8,
        5.7,
        6.4,
        7.9,
        4.6,
        6.7,
        6.9,
        7.7,
        8.1,
        7.8,
        6.7,
        6.5,
        8.4,
        6.9,
        5.9,
        6.1,
        7.3,
        6.2,
        5.7,
        5.6,
        6.8,
        7,
        7.9,
        5.4,
        4.9,
        6.7,
        3.8,
        6.8,
        6,
        6,
        5.1,
        6.4,
        6.5,
        6.8,
        7.5,
        7.1,
        6.5,
        5.3,
        3,
        6.5,
        5.9,
        3.8,
        4.1,
        4.6,
        5.3,
        5.4,
        4.7,
        4.5,
        6.1,
        5.3
      };

      //in Excel berechnete Werte
      _gefilterteIstwerte = new List
      {        
        9.14742268,
        8.636082474,
        8.768041237,
        8.698969072,
        8.846391753,
        8.86185567,
        8.926804124,
        7.901030928,
        7.434020619,
        6.940206186,
        7.226804124,
        7.277319588,
        7.76185567,
        7.654639175,
        7.591752577,
        7.393814433,
        7.630927835,
        7.981443299,
        7.981443299,
        8.224742268,
        8.287628866,
        8.370103093,
        8.079381443,
        7.820618557,
        7.381443299,
        7.103092784,
        7.173195876,
        7.116494845,
        7.291752577,
        7.264948454,
        7.424742268,
        7.467010309,
        7.451546392,
        7.332989691,
        6.915463918,
        6.639175258,
        6.549484536,
        6.334020619,
        6.349484536,
        6.389690722,
        6.671134021,
        6.842268041,
        7.469072165,
        7.526804124,
        7.404123711,
        7.396907216,
        7.213402062,
        7.006185567,
        6.805154639,
        6.790721649,
        6.454639175,
        6.330927835,
        6.208247423,
        6.227835052,
        6.197938144,
        6.593814433,
        6.649484536,
        6.522680412,
        6.290721649,
        5.687628866,
        5.532989691,
        5.560824742,
        5.868041237,
        5.653608247,
        6.012371134,
        5.932989691,
        6.15257732,
        6.475257732,
        6.865979381,
        6.943298969,
        6.712371134,
        5.963917526,
        5.568041237,
        5.251546392,
        5.011340206,
        4.815463918,
        4.872164948,
        4.636082474,
        4.641237113,
        4.879381443,
        4.954639175,
        5.132989691,
        5.151546392,
        5.242268041,
        5.332989690
      };
    }
    [Test, Description("Prüft, anhand der vorgegebenen (in Excel berechneten) Ist- u. gefilterten Daten mit deren der SW Funktion übereinstimmen")]
    public void ErmittlePositionsDaten_Test()
    {
      //Arrange
      IFilterParameter parameter = new GlaettungsFilterParameter();
      parameter.BasisGewicht = .8;
      parameter.FensterBreite = 5;
      parameter.FilterEin = false;
      GlaettungsFilter filter = new GlaettungsFilter();

      //Act
      List GefilterteDaten = filter.Filtern(parameter, _istwertTestdaten); //Ermittelte Ergebnisse der zu entwickelnden Funktion

      //Assert
      for (int n = 0; n < _istwertTestdaten.Count; n++)
      {
        string soll = String.Format("{0:F5}", _istwertTestdaten[n]);
        string ist = String.Format("{0:F5}", GefilterteDaten[n]);
        Assert.AreEqual(soll, ist);
      }
    }
  
    }

 

 

zurück