Behaviour Driven Development

Alguien con experiencia en esta disciplina?? A veces el nombre da miedito, pero Jez Humble también lo llama simplemente “Acceptance Testing” en su Continuous Delivery.

Ojalá alguien pueda aportar con su experiencia

Algunos links a los libros, que pueden ser de ayuda:

2 Me gusta

Pienso que BDD depende del lenguaje (Ruby) en todo caso me he encontrado que en el area donde trabajo que es devop la mayor parte de las tareas son predecibles.
Crear un archivo de conf, escribir valores en el, instalar sotware …
en es caso uso TDD por que me interesa probar el flujo del código y haga lo supuestamente debe hacer.
En cambio BDD me viene super, cuando hago nuevas funcionalidades donde describo como debe comportarse el objeto y a partir de ahi escribo el código.

Ejemplo TDD
Aca testeo la instalación de openoffice con Chefspec, tengo que probar que los estoy bajando los paquetes por yum con las versiones epecificas.
Bajar un paquete por yum es un tarea predecible, a lo mas cambia algunos parametros pero nada más. no es necesario describir el objeto.

describe 'denodo_cookbook::openoffice_headless' do
  let(:openoffice_pkg) { 'libreoffice-headless' }
  let(:pkg_version) { '4.0.4.2-14.el6' }
  let(:pkg_options) { '--nogpgcheck' }
  let(:chef_run)  {  ChefSpec::SoloRunner.converge(described_recipe) }

  context 'openoffice' do
    it 'install without version' do
      chef_run.node.set['denodo_cookbook']['openoffice_headless']['package_version'] = '5.0.0.6'
      chef_run.converge(described_recipe)

      expect(chef_run).to install_yum_package(openoffice_pkg).with(
        options: pkg_options,
        version: '5.0.0.6'
      )
    end
  end

  context 'openoffice' do
    it 'install with version' do
      expect(chef_run).to install_yum_package(openoffice_pkg).with(
        options: pkg_options,
        version: pkg_version
      )
    end
  end

  context 'Install extra packages' do
    %w(libreoffice-writer libreoffice-calc  libreoffice-impress).each do |extra_ooffice_pkg|
      it "install #{extra_ooffice_pkg}" do
        expect(chef_run).to install_yum_package(extra_ooffice_pkg).with(
          options: pkg_options,
          version: pkg_version
        )
      end
    end
  end
end

Ejemplo BDD
Aca lo que hago es describir el objeto DenodoHelper, rebibe un string y la salida debe ser xxxxx, no esoty describiendo la funcionalidad interna de la clase. cualquier cosa que cumpla esto va a pasar el tests

describe DenodoHelper do
  context '#output' do
    subject do
      DenodoHelper.new('/foo/bar/zzz').to_array
    end

    it 'check output' do
      is_expected.to eq(%w(/foo /foo/bar /foo/bar/zzz))
    end
  end

  context '#error' do
    it 'raises an exception for empty path or nil' do
      expect { DenodoHelper.new('') }.to raise_error(ArgumentError)
      expect { DenodoHelper.new(nil) }.to raise_error(ArgumentError)
    end

    it 'raises an exception non string argument' do
      expect { DenodoHelper.new({}) }.to raise_error(ArgumentError)
    end
  end
end

BDD es basicamente cambiar el assert por el should be. ahora, esta el ATDD, que es TDD con Pruebas de aceptacion y que usa la sintaxis GWT(Given,When,Then)

specification by example toma como fuente BDD,agile testing y Domain Driven Design.
se basa en la idea de que realmente especificamos con ejemplos y estos ejemplos deben ser testeables.

tengo el libro de specification by example y bridging the communication gap .Que son los 2 libros del mismo autor que hablan del tema. yo no lo domino completamente pero tengo una idea de que se trata
existe una herramienta que se basa en SBE que es speclog para .net que trabaja con specflow, que es un herramienta BDD.

Ese temas es super interesante. Que tal si hacemos una charla de Domain Driven Design
Es fundamental en el desarrollo de microservicios.

Alguien que domine el tema puede apuntarse para una charla

Los ejemplos que di son de recetas hecha por mi en Chef.

Te recomiendo este libro que está escribiendo @lunivore en https://leanpub.com/bdd
Su mirada es conceptual, no basada en lenguajes específicos, y me encantó