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

6c137ee3013821b517c4b9beed0145df?s=128

Fernando Perales

November 04, 2016
Tweet

Transcript

  1. http://images.meredith.com/wood/images/p_411_1_1.gif Prácticas de desarrollo de software de alta calidad

  2. <me>

  3. Ingeniero en Computación @ CUCEI Senior Consultant @ MagmaLabs http://ferperales.net

    Promotor @ FLOSS Apasionado @ Desarrollo Web
  4. <ad>

  5. None
  6. None
  7. None
  8. None
  9. None
  10. None
  11. None
  12. None
  13. None
  14. None
  15. Marzo 2017

  16. </ad>

  17. </me>

  18. None
  19. http://cwebhealth.com/wp-content/uploads/2013/12/need-want-like-keys- showing-craving-and-desire_GyMuC-vu-702x336.jpg REQUERIMIENTOS

  20. Entregar el software correcto

  21. Specification by example

  22. “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”
  23. Traducimos esto:

  24. http://www.pmscs.net/images/Client.png Quiero que mi sistema tenga un Login de usuarios

  25. En Esto:

  26. 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
  27. Gherkin!

  28. “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”
  29. Ya que Tenemos Lo que necesitamos

  30. Manejo del proyecto http://www.targetprocess.com/blog/wp-content/uploads/2014/06/Kanban-with-time.jpg

  31. “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 "
  32. Tres roles: http://braintrustgroup.com/assets/2012/09/SM-TM-PO-3pigs-01.png

  33. Team Members: hacen las cosas

  34. Product Owners: Representan la voz del cliente

  35. Scrum master: Se asegura de que todo marche sobre ruedas

  36. Product backlog

  37. “Una comprensible lista de tareas, expresadas en orden de importancia

    para el negocio y cuánto valor aportan al mismo”
  38. Herramientas

  39. Sistema de Control de Versiones http://blog.laaz.org/tech/wp-content/uploads/2011/08/git-tree.png

  40. “Un sistema que guarda los cambios hechos a un archivo

    o conjunto de archivos a través del tiempo”
  41. Herramientas

  42. Pruebas http://venturebeat.com/wp-

  43. Pruebas unitarias

  44. “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”
  45. Herramientas

  46. 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
  47. require 'rails_helper' describe User do let(:user_with_magmalabs_account) { User.create email: 'demo@magmalabs.io'

    } let(:user_with_gmail_account) { User.create email: 'demo@gmail.com' } 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
  48. None
  49. Pruebas de Integración

  50. “La fase de pruebas de software en la cual las

    unidades individuales se combinan y prueban como un grupo”
  51. Herramientas

  52. Desarrollo basado En comportamiento

  53. “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”
  54. ¿Recuerdan esto?

  55. 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
  56. ¡Se puede convertir en código!

  57. 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
  58. Given(/^I visit the (.*) page$/) do |page| visit page end

  59. 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
  60. 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
  61. 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
  62. 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
  63. Herramientas

  64. Pruebas multinavegador

  65. Tools

  66. Lanzamiento http://i.dawn.com/primary/2013/06/51b99d8da936d.jpg

  67. Platform as A Service (PaaS)

  68. Servicios

  69. Virtual Private Servers (VPS)

  70. Servicios

  71. Herramientas

  72. 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
  73. Hacer un deploy es tán fácil como correr:

  74. cap production deploy

  75. Continuos integration/ delivery/ deployment

  76. “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
  77. “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
  78. “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
  79. Herramientas

  80. Calidad de código http://www.pts-qc.com/images/AUDITING.jpg

  81. Code review

  82. Herramientas

  83. None
  84. Métricas de código

  85. Herramientas

  86. None
  87. Analizadores sintácticos

  88. Rubocop CSSLinter JSHint Hound CI Herramientas

  89. 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
  90. None
  91. Mantenimiento http://www.mengsolutions.com.au/wp-

  92. Reporte de errores

  93. Herramientas

  94. None
  95. Disponibilidad del sitio

  96. Herramientas

  97. None
  98. Hasta ahora sólo he hablado sobre herramientas y metodologías

  99. Pero lo más Importante es

  100. http://magmalabs.io/ about-us

  101. “El software de alta calidad es creado por personas que

    se preocupan y aman su trabajo”
  102. ¿Preguntas?

  103. ¡Gracias! me@ferperales.net