Upgrade to Pro — share decks privately, control downloads, hide ads and more …

High-quality software practices

High-quality software practices

The purpose of the talk is to show some of the methodologies, tools and practices performed in MagmaLabs that have helped us to become a world-class company.

Talk given in FSLVallarta 2016:
http://fsl.mx

Fernando Perales

November 04, 2016
Tweet

More Decks by Fernando Perales

Other Decks in Programming

Transcript

  1. “Es un enfoque colaborativo para definir requetimientos y pruebas funcionales

    orientadas al negocio para productos de software con base en capturar e ilustrar los requerimientos usando ejemplos reales en lugar de sentencias abstractas”
  2. Feature: Login In order to use the application As a

    user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
  3. “Es un lenguaje de dominio específico, leíble desde el lago

    de negocios que permite describir el funcionamiento del software sin detallar cómo será implementado”
  4. “Una holística y flexicle estrategia de desarrollo de producto donde

    un equipo de desarrollo trabaja como una unidad para alcanzar un objetivo común "
  5. “Una comprensible lista de tareas, expresadas en orden de importancia

    para el negocio y cuánto valor aportan al mismo”
  6. “Un sistema que guarda los cambios hechos a un archivo

    o conjunto de archivos a través del tiempo”
  7. “Una metodología de pruebas de software en la que las

    unidades individuales de código son probadas para determinar si son aptas para ser utilizadas”
  8. class User < ActiveRecord::Base # Método que prueba si un

    usuario tiene una cuenta de @magmalabs.io def has_magmalabs_account? !!self.email.match(/@magmalabs.io$/) end end
  9. require 'rails_helper' describe User do let(:user_with_magmalabs_account) { User.create email: '[email protected]'

    } let(:user_with_gmail_account) { User.create email: '[email protected]' } describe '.has_magmalabs_account?' do it 'returns true when email ends with "@magmalabs.io"' do expect( user_with_magmalabs_account.has_magmalabs_account? ).to be true end it 'returns false when email ends with "other domain"' do expect( user_with_gmail_account.has_magmalabs_account? ).to be false end end end
  10. “La fase de pruebas de software en la cual las

    unidades individuales se combinan y prueban como un grupo”
  11. “Un método de pruebas en el que se utilizan ejemplos

    para describir el comportamiento de la aplicación o el comportamiento de la misma”
  12. Feature: Login In order to use the application As a

    user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
  13. Feature: Login In order to use the application As a

    user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
  14. Feature: Login In order to use the application As a

    user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
  15. And(/^I have entered (.*) as my username$/) do |username| fill_in

    'user[login]', with: username end And(/^I have entered (.*) as my password$/) do |password| fill_in 'user[password]', with: password end
  16. Feature: Login In order to use the application As a

    user I want to be able to login Scenario: with invalid credentials Given I visit the / page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be shown a message error Scenario: with valid credentials Given I have created an account in the past And I visit the /events page And I have entered demo as my username And I have entered demo1234 as my password When I press Sign in Then I will be redirected to events page
  17. Given(/^I have created an account in the past$/) do @user

    = FactoryGirl.create :user, username: 'demo', password: 'demo1234' End Then(/^I will be shown a message error$/) do expect(page).to have_content 'Invalid login or password.' end When(/^I press Sign in$/) do click_button 'Sign in' end Then(/^I will be redirected to home page$/) do expect(page).to have_content 'Login successful' end Then(/^I will be redirected to (.*) page$/) do |url| path = URI.parse(current_url).path expect(path).to match "/#{url}" end
  18. role :demo, %w{example.com example.org example.net} task :uptime do on roles(:demo),

    in: :parallel do |host| uptime = capture(:uptime) puts "#{host.hostname} reports: #{uptime}" end end
  19. “Continuous Integration is the practice of merging development work with

    a Master/Trunk/Mainline branch constantly so that you can test changes, and test that changes work with other changes” http://blog.assembla.com/AssemblaBlog/tabid/12618/bid/92411/Continu ous-Delivery-vs-Continuous-Deployment-vs-Continuous-Integration-Wait- huh.aspx
  20. “Continuous Delivery is the continual delivery of code to an

    environment once the developer feels the code is ready to ship.” http://blog.assembla.com/AssemblaBlog/tabid/12618/bid/92411/Continu ous-Delivery-vs-Continuous-Deployment-vs-Continuous-Integration-Wait- huh.aspx
  21. “Continuous Deployment is the deployment or release of code to

    Production as soon as it is ready” http://blog.assembla.com/AssemblaBlog/tabid/12618/bid/92411/Continu ous-Delivery-vs-Continuous-Deployment-vs-Continuous-Integration-Wait- huh.aspx
  22. scss_files: "**/*.scss" linters: BangFormat: enabled: true space_before_bang: true space_after_bang: false

    BorderZero: enabled: true convention: zero # or `none` ColorKeyword: enabled: true ColorVariable: enabled: true Comment: enabled: true DebugStatement: enabled: true