TDD (Test Driven Development) - Tesztvezérelt fejlesztés

A TDD (Test Driven Development) egy szoftverfejlesztési módszertan, amelyben a teszteket a tényleges kód írása elõtt hozzuk létre. Ez egy fordított megközelítés a hagyományos fejlesztéshez képest.

Lépései

A TDD három alapvetõ lépésbõl áll, amelyeket ciklikusan ismételünk:

1. Teszt írása - Red (Piros)

Elõször írunk egy tesztet, amely az elvárt viselkedést fejezi ki. Mivel az adott funkciót még nem implementáltuk, a teszt sikertelen lesz (piros).

2. Minimális kód írása - Green (Zöld)

Ezután a lehetõ legegyszerûbb kódot írjuk meg, amely szükséges ahhoz, hogy a teszt zöld (sikeres) legyen. Nem kell a tökéletességre törekedni, csak a tesztet kell teljesíteni.

3. Újradolgozás - Refactor

A végén megtisztítjuk, optimalizáljuk és rendezzük a kódot, miközben a teszt zöld marad. Eltávolítjuk a duplikációkat, javítunk az olvashatóságon.

Ezt a három lépést addig ismételjük, amíg az összes funkciót meg nem valósítjuk.

Elõnyei

Hátrányai


Példa feladat

Írj egy függvényt, amely visszaadja egy adott szám faktoriálisát.

Teszt:

import unittest class TestFactorial(unittest.TestCase): def test_factorial(self): self.assertEqual(factorial(5), 120) def test_factorial_zero(self): self.assertEqual(factorial(0), 1) def test_factorial_negative(self): with self.assertRaises(ValueError): factorial(-1) if __name__ == '__main__': unittest.main()

Megoldás (kezdetben nem működik):

def factorial(n): pass

TDD lépések:

  1. Futtasd a tesztet és nézd meg, hogy megbukik-e.
  2. Írj kódot a teszt teljesítésére.

Megoldás (működik):

def factorial(n): if n < 0: raise ValueError("n nem lehet negatív") elif n == 0: return 1 else: result = 1 for i in range(1, n + 1): result *= i return result

Feladatok

Az alábbi feladatokhoz írj függvényeket, amelyek a kívánt funkciókat valósítják meg. A függvényeket a TDD elvei alapján fejleszd és teszteld!

1. feladatsor

  1. Függvény: add(a, b)
  2. Függvény: subtract(a, b)
  3. Függvény: multiply(a, b)
  4. Függvény: divide(a, b)
  5. Függvény: is_even(n)
  6. Függvény: is_odd(n)
  7. Függvény: max(a, b)
  8. Függvény: min(a, b)
  9. Függvény: absolute(n)
  10. Függvény: square(n)

2. feladatsor

  1. Függvény: sum_of_even_numbers(numbers)
  2. Függvény: count_odd_numbers(numbers)
  3. Függvény: find_max_number(numbers)
  4. Függvény: find_min_number(numbers)
  5. Függvény: is_palindrome(s)
  6. Függvény: remove_duplicates(numbers)
  7. Függvény: find_common_elements(list1, list2)
  8. Függvény: is_prime(n)
  9. Függvény: find_factors(n)
  10. Függvény: is_sorted(numbers)

3. feladatsor

  1. Függvény: find_max(numbers)
  2. Függvény: find_min(numbers)
  3. Függvény: is_sorted(numbers)
  4. Függvény: remove_duplicates(numbers)
  5. Függvény: find_common_elements(list1, list2)

4. feladatsor

  1. Függvény: calculate_area(shape, side)
  2. Függvény: calculate_perimeter(shape, side)
  3. Függvény: is_rectangle(sides)
  4. Függvény: find_diagonals(sides)