Was ist Behavior-Driven-Development?

Behavior-Driven-Development (oder BDD) ist eine Softwareentwicklungstechnik, die die Zusammenarbeit zwischen Entwicklern, Qualitätssicherung und nicht-technischen Teilnehmern an einem Softwareprojekt ermöglicht.

BDD konzentriert sich darauf, durch Diskussionen mit den Beteiligten ein klares Verständnis des gewünschten Software- oder Hardware-Verhaltens zu erlangen.

Es erweitert Test-Driven-Development (TDD), indem es Testfälle in einer natürlichen Sprache schreibt, die auch Nicht-Programmierer lesen und verändern können.

Es ist möglich, Tests in der Muttersprache zu verfassen und somit das gewünschte Verhalten des getesteten Software- oder Hardware-Systems zu beschreiben und zu spezifizieren.

Somit wird den Entwicklern ermöglicht, sich weniger auf die technische Umsetzung, sondern ausschließlich auf das tatsächlich gewünschte Verhalten des zu testenden Systems zu konzentrieren.

Ein weiterer Vorteil ist die geringe Distanz zwischen festgelegter Spezifikation (Anforderungen) und den entsteheneden Tests.

Mit HILSTER Test Bench ist es möglich, flexible Hardware-in-the-Loop Tests neben TDD auch mit Hilfe von BDD zu erstellen, zu warten und auszuführen.

Beispiel

                            
    Feature: Temperature controlling of a refrigeration machine
            This feature checks that the temperature of a refrigeration
            machine is controlled according to the requirements.

        Scenario: Cool down
            Given the refrigeration machine controller is running
            When the initial temperature is 0 °C
            Then the refrigeration machine controller is cooling down

        Scenario: Heat up
            Given the refrigeration machine controller is running
            When the initial temperature is -100 °C
            Then the refrigeration machine controller does not cool down
                            
                        

Die Implementierung der einzelnen Schritte in Python sieht folgendermaßen aus:

                            
    @htf.given("the refrigeration machine controller is running")
    def start_refrigeration_machine(dut):
        """
        Start the refrigeration.
        """
        dut.start()

    @htf.when(r"the initial temperature is (?P<temperature>\d+) °C")
    def set_temperature(temperature, dut):
        dut.set_temperature(temperature)

    @htf.then("the refrigeration machine controller is cooling down")
    def assert_machine_is_cooling_down(dut):
        htf.assert_true(dut.cooling_down())

    @htf.then("the refrigeration machine controller does not cool down")
    def assert_machine_not_cooling_down(dut):
        htf.assert_false(dut.cooling_down())