Testowanie, CI i dobre praktyki w prowadzeniu projektu - jak zacząć?

1

Cześć wszystkim. Tytuł może brzmi zbyt ogólnie, ale postaram się w kilku słowach zawrzeć kilka konkretnych pytań.

Ostatnio zacząłem się interesować tematami związanymi z continuous integration i testowaniem aplikacji. Czytam znalezione w sieci artykuły i próbuję ułożyć sobie w głowie plan działania. Mam na myśli naukę, pierwszy projekt, ścieżkę jego rozwoju. Chciałbym poprosić bardziej doświadczone osoby żeby w tym temacie napisały coś od siebie, może podrzuciły przydatne materiały i podzieliły się doświadczeniami.

Po pierwsze chodzi mi o to jak w ogóle zacząć poważny projekt? Mam za sobą kilka niewielkich projektów, trochę doświadczenia z testami jednostkowymi, mniej więcej wiem jak wygląda ścieżka od developera przez serwer testowy po produkcję. Chciałbym jednak usystematyzować tę wiedzę, rozwiać wątpliwości i podejść do sprawy poważnie, od "wewnętrznej" strony, zaczynając własny projekt. Niezbyt skomplikowany, żebym sam mógł udźwignąć wszystkie etapy jego tworzenia.
Chciałbym poznać schemat działania, elementy składowe takiego systemu i całą drogę od "pustej kartki" po gotową aplikację, którą można w łatwy sposób rozbudowywać, kilkoma kliknięciami testować i deployować nową wersję. Mógłby wypowiedzieć się tu ktoś z doświadczeniem w takim tworzeniu projektu od podstaw?

Konkretnie, co do mojego przypadku - ostatni mój projekt umarł, głównie dlatego, że zacząłem gubić się w kodzie, nie pisałem testów i ogólnie straciłem kontrolę nad wszystkim. Do tego żmudne przerzucanie przez FTP odpowiednich plików na serwer, problemy z migracją bazy danych... ogólnie klapa, ale o dziwo zmotywowało mnie to do podjęcia się stworzenia podobnego projektu, albo wręcz wersji drugiej tego samego projektu, tym razem robiąc to "jak Pan Bóg przykazał".
Projekt to dość rozbudowane forum internetowe. Nie wiem czy taki projekt potrzebuje tego wszystkiego, ale chciałbym dzięki niemu po prostu nauczyć się czegoś więcej, co później mógłbym wykorzystać w większych projektach.
Technologie jakie chcę wykorzystywać to PHP Symfony3 i MySQL. Do testów jednostkowych PHPUnit i Mockery. Do tego momentu jestem w stanie sobie poradzić. Dalej - CI. Chciałbym użyć Jenkinsa, ale mam z nim praktycznie zerowe doświadczenie. Chciałbym też nauczyć się testowania z użyciem Selenium. Chciałbym na wirtualnych maszynach stworzyć sobie środowisko testowe i mieć możliwość łatwego wgrywania aktualizacji na serwer produkcyjny. Tu moja prośba o pomoc - nie bardzo wiem jak się do tego wszystkiego w poprawny sposób zabrać, żeby się nie zniechęcić. Będę wdzięczny za wszelkie konkrety, dobre rady czy wartościowe materiały.

3

ja bardzo cenię książki sygnowane przez Martina Folwera np: "Ciągłe dostarczanie oprogramowania. Automatyzacja kompilacji, testowania i wdrażania", Autorzy: Jez Humble, David Farley
Ale nie powiem żeby to było do PHP, nada się się ale książki szczegółowo o tym nie powie raczej nic.

Jenkins czy inny system CI, nie da Ci nic bez repozytorium kodu - rozumiem że git, hg czy svn'a masz ?
W technologiach o których piszesz warto też zahaczyć o Dockera - pozwoli Ci tworzyć wirtualne instancje prosto i czysto.

Jenkins ma bardzo bogatą bibliotekę pluginów i dużą społeczność. Mów co będziesz potrzebował - podpowiem co u mnie się udało zrobić. Od biedy możesz też sam dorobić sobie własny plugin.

Nie powiem Ci jak wdrażać aplikację na produkcji, bo u mnie to wygląda tak że to musi robić człowiek. Jenkins tworzy paczkę instalacyjną - wgrywa ją na środowisko do testów, idą automatyczne testy, potem ręczne, ale po akceptacji dokładnie ta sama paczka może iść na produkcję. Ograniczenie automatyzacji tego kroku spowodowane jest uprawnieniami do danych i serwera.

Nie wiem jak sobie poradzisz z Selenium w PHP. Java czy Python a ostatnio nawet node.js są do tego częściej używane. Wykonywać testy z selenium (nawet równolegle na wielu userach) też można robić na Dockerze!

4

Pytanie strasznie ogólne.... Tak generalnie potrzebne jest:

  1. system kontroli wersji
  2. system CI
  3. repozytorium artefaktów (czyli "paczek" z aplikacją do testowania)
  4. sporo skryptów/framework do złączenia tego wszystko w całość

Ogólnie zmiany wrzucone do kontroli wersji powinny się automatycznie kompilować, potem odpalić testy jednostkowe (zapewnia konfiguracja CI), potem deploy na środowisko testowe i testy integracyjne (do deployu potrzebny framework/skrypty). A potem to już zależy, czy chcesz mieć deployment automatyczny czy nie.

Warto też zapoznać się z blue green deployment, aby pomyłki z wdrożeniem zepsutej wersji na produkcję nie były bolesne i szybkie do wycofania.

0

Dzięki za odpowiedzi. Ogólnie korzystam z hg, a we własnych projektach z gita, repo przechowuję na githubie.
Co do automatycznego deploymentu - jeśli to będzie dobrze działać z takim projektem to bardzo chciałbym coś takiego skonfigurować i nauczyć się w taki sposób pracować - głównie chodziłoby chyba jedynie o wrzucenie plików na serwer i wprowadzenie zmian w bazie danych, obecnie korzystam ze zwykłego webhostingu, więc nie mam nawet dostępu przez ssh i nie mogę odpalić nawet migratora Doctrine, albo nie wiem jak to w takim przypadku zrobić. Jeśli to nie miałoby sensu - chciałbym po prostu żebym ostateczną wersję aplikacji mógł po prostu wrzucić na serwer nie martwiąc się o inną konfigurację itd (np. zdarzało mi się przez pomyłkę nadpisać pliki konfiguracyjne z danymi specyficznymi dla serwera produkcyjnego i musiałem znów ręcznie je poprawiać).
Co do książek - zerknę, chociaż szczerze mówiąc wolę polegać na krótszych, zwięzłych i konkretnych źródłach, a swoją dotychczasową naukę opierałem głównie o dokumentacje i tutoriale, dodatkowo czytając dużo artykułów i przede wszystkim pisząc kod. Tu jednak sprawa wygląda nieco inaczej, dlatego ciężko mi się za to zabrać. Wybrałem PHP, bo najłatwiej mi będzie skupić się na całej reszcie poza programowaniem. Rozważałem też Springa, ale nie czuję się na siłach oprzeć o niego jakiejś poważniejszej aplikacji, a nie chciałbym się męczyć z samym pisaniem kodu przez większość czasu.
Dużo pytań, dużo wątpliwości, a pytanie strasznie ogólne, gdyż i temat wydaje mi się bardzo ogólny i szeroki. Nie wiem nawet od czego zacząć na dobry początek, żeby później dokładać kolejne cegiełki do tego samego projektu i czerpać z tego satysfakcję.

0

I jak "CI" idzie? (mam nadzieję, że wychwycisz fantastyczną grę słów :D)

Jestem ciekawy Twoich doświadczeń po paru tygodniach zabawy, bo sam chciałbym wgryźć się w temat.

0

Podbijam, ponieważ jestem również zainteresowany jak Ci poszło i chętnie przeczytałbym jakieś guidelines albo todo listę rzeczy, które są wymagane aby projekt był prowadzony profesjonalnie. Ktoś, coś?

0

Zerknij na to:

Jenkins1

Jenkins2

1 użytkowników online, w tym zalogowanych: 0, gości: 1