En aquest tema, aprendrem com assegurar-nos que el nostre codi funciona correctament mitjançant proves i com identificar i corregir errors a través de la depuració. Aquestes habilitats són essencials per a qualsevol desenvolupador, ja que ajuden a mantenir la qualitat del codi i a reduir el nombre de bugs en les aplicacions.
- Introducció a les Proves
1.1. Què són les Proves?
Les proves són un conjunt de tècniques i eines utilitzades per verificar que el codi compleix amb els requisits especificats i funciona com s'espera. Hi ha diversos tipus de proves, però en aquest tema ens centrarem en les proves unitàries i les proves d'integració.
1.2. Tipus de Proves
- Proves Unitàries: Verifiquen la funcionalitat de components individuals del codi, com ara mètodes o classes.
- Proves d'Integració: Verifiquen que diferents components del sistema funcionen correctament quan es combinen.
- Proves Unitàries amb Minitest
2.1. Configuració de Minitest
Minitest és una biblioteca de proves inclosa amb Ruby. Per començar a utilitzar-la, només cal que creïs un fitxer de prova i l'executis amb el comandament ruby
.
# test_example.rb require 'minitest/autorun' class ExampleTest < Minitest::Test def test_addition assert_equal 4, 2 + 2 end end
2.2. Estructura d'una Prova Unitària
- Setup: Configura l'entorn necessari per a les proves.
- Test: Defineix els casos de prova.
- Teardown: Neteja l'entorn després de les proves.
class ExampleTest < Minitest::Test def setup @value = 2 end def test_addition assert_equal 4, @value + 2 end def teardown # Neteja si cal end end
- Depuració
3.1. Utilització de puts
i p
Una manera senzilla de depurar el codi és utilitzar puts
o p
per imprimir valors a la consola.
3.2. Utilització del Depurador de Ruby (byebug
)
byebug
és una eina poderosa per a la depuració en Ruby. Permet aturar l'execució del codi i inspeccionar l'estat del programa.
Instal·lació de byebug
Utilització de byebug
Quan el codi arriba a byebug
, l'execució s'atura i pots inspeccionar les variables i executar comandes per entendre millor el comportament del codi.
3.3. Comandes Bàsiques de byebug
next
: Executa la següent línia de codi.step
: Entra dins de la següent línia de codi si és una crida a un mètode.continue
: Continua l'execució fins al següent punt de depuració.list
: Mostra el codi al voltant de la línia actual.display
: Mostra el valor d'una expressió cada vegada que s'atura l'execució.
- Exercicis Pràctics
Exercici 1: Prova Unitària
Crea una prova unitària per a una funció que calcula el factorial d'un nombre.
# factorial.rb def factorial(n) return 1 if n == 0 n * factorial(n - 1) end # test_factorial.rb require 'minitest/autorun' require_relative 'factorial' class FactorialTest < Minitest::Test def test_factorial assert_equal 1, factorial(0) assert_equal 1, factorial(1) assert_equal 2, factorial(2) assert_equal 6, factorial(3) assert_equal 24, factorial(4) end end
Exercici 2: Depuració
Utilitza byebug
per depurar la següent funció i corregir l'error.
def reverse_string(str) reversed = "" str.length.times do |i| reversed += str[i] end reversed end puts reverse_string("hello") # Ha de retornar "olleh"
Solució
require 'byebug' def reverse_string(str) reversed = "" str.length.times do |i| byebug reversed = str[i] + reversed end reversed end puts reverse_string("hello") # Ha de retornar "olleh"
- Resum
En aquesta secció, hem après la importància de les proves i la depuració en el desenvolupament de programari. Hem vist com utilitzar Minitest per escriure proves unitàries i com utilitzar byebug
per depurar el codi. Aquestes eines i tècniques són essencials per assegurar la qualitat i la fiabilitat del nostre codi.
En el següent tema, ens centrarem en el desplegament de la nostra aplicació, on aprendrem com posar en producció el nostre projecte final.
Curs de Programació en Ruby
Mòdul 1: Introducció a Ruby
Mòdul 2: Conceptes Bàsics de Ruby
Mòdul 3: Treballant amb Col·leccions
Mòdul 4: Programació Orientada a Objectes en Ruby
- Classes i Objectes
- Variables i Mètodes d'Instància
- Variables i Mètodes de Classe
- Herència
- Mòduls i Mixins
Mòdul 5: Conceptes Avançats de Ruby
- Blocs, Procs i Lambdas
- Metaprogramació
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Expressions Regulars
Mòdul 6: Introducció a Ruby on Rails
- Què és Ruby on Rails?
- Configuració de l'Entorn Rails
- Creació d'una Aplicació Simple en Rails
- Arquitectura MVC
- Rutes
Mòdul 7: Proves en Ruby
- Introducció a les Proves
- Proves Unitàries amb Minitest
- Desenvolupament Basat en Comportament amb RSpec
- Mocking i Stubbing
Mòdul 8: Millors Pràctiques en Ruby
- Estil de Codi i Convencions
- Refactorització
- Optimització del Rendiment
- Millors Pràctiques de Seguretat