Code review – narzędzie (prawie) doskonałe
lipiec 22, 2007

Od pewnego czasu pracuję z grupą pięciu developerów nad aplikacją webową pisaną w Pythonie oraz Rubim (powód takiej mieszanki to temat na zupełnie inny post). Większość naszego zespołu to początkujący programiści tych technologii, wiec kod który produkują wymaga szczególnej uwagi i kontroli. Ponieważ nie jestem wstanie przydzielić każdemu juniorowi – seniora konieczne stało się wdrożenie narzędzia do recenzji kodu (ang. code review).
Pierwszym pomysłem jaki przyszedł mi do głowy było wykorzystanie rozszerzenia do Eclipsa o nazwie Jupiter. Niestety, nie wszyscy członkowie zespołu podzielają moją miłość do tego IDE, a że programistów nie można zmuszać do wyboru narzędzi pracy, to wdrożenie zakończyło się fiaskiem a my problem tymczasowo rozwiązaliśmy poprzez mailowanie plików różnicowych. Dość bolesna i czasochłonna metoda.
Poszukując innego rozwiązania znalazłem video o Google’s Mondrian. Po jego oglądnięciu od razu wiedziałem iż jest to rozwiązanie mojego problemu, dodatkowo zostały w nim wymienione inne problemy z narzędziami standalone o których wcześniej nie myślałem. Niestety Mondrian jest projektem wewnętrznym Googla i jak wynika z prezentacji dość mocno zintegrowanym z całą infrastrukturą tej firmy więc szanse na to iż pewnego dnia zostanie on udostępniony szerszej publiczności są raczej nikłe, choć można przeczytać w kilku miejscach iż takie plany istnieją. Jednym z dostępnych przeglądarkowych rozwiązań jest CodeStriker.
CodeStriker to napisane w perlu narzędzie, które nie zachwyca interfejsem i możliwościami – nie posiada opcji recenzji kodu który nie znajduje się jeszcze w repozytorium. Aplikacja ta jest darmowa, co odróżnia ja od Crucible, narzędzia twórców FishEye’a, rekomendacje tego produktu można było usłyszeć choćby w jednym z odcinków Podcasta JavaPosse.
Crucible oferuje bardzo przyjazny interfejs i dość rozbudowane opcje jeśli chodzi o reviewu kodu. Narzędzie to jest ściśle zintegrowane ze wspomnianym już FishEyem. Jako ze nie miałem właściwie innej alternatywy poza CodeStrikerem, którego interfejs mnie naprawdę odstraszał, zaczęliśmy używać Crucible. Nielicząc kilku przypadków, kiedy to przestał on chwilowo odpowiadać i wymagany był restart serwera aplikacji, całość działała dość szybko i sprawdzała się w naszym zespole mimo iż nie możliwa była recenzja kodu jeszcze nie w repozytorium (problem ten został rozwiązany poprzez stworzenie oddzielnej gałęzi dla każdego z programistów).
Kiedy skończył się darmowy okres i mieliśmy już wykupić licencję na rok dość przypadkowo natknąłem się na ReviewBoard.
Reviewboard to darmowa aplikacja stworzona przez kilku programistów z firmy VMware napisana w Pythonie z wykorzystaniem frameworka Django. Autorzy na pewno zanim przystąpili do prac widzieli wspomniane wcześniej video o Mondrianie, jak również spotkali się z wymienionymi tutaj projektami. Z ich blogów wynika również iż poprzednio przechodzili przez takie męki jak nasza firma, zaczynając od przesyłania plików różnicowych, a kończąc na szukaniu gotowego rozwiązania. Projekt ten jest w dość wczesnej fazie, ale jak widać z poniższych ekranów charakteryzuje go dbałość o detale i przyjazny interfejs:
ReviewBoard oferuje dwie możliwości tworzenia recenzji – z pliku różnicowego i na podstawie zmian w repozytorium. Ponieważ bardzo zależało mi na posiadaniu opcji automatycznej weryfikacji kodu jeszcze nie dodanego do repozytorium to w niespełna 5 godzin zmodyfikowaliśmy ten projekt tak aby pobierał on zmiany z serwera developerskiego (siła open source oraz Pythona). W efekcie czego otrzymaliśmy produkt zbliżony do Mondriana. ReviewBoard posiada dodatkowo “integrację” z Traciem, który jest przez nas wykorzystywany do zarządzania zadaniami więc na dzień dzisiejszy posiadamy stabilne i szybkie rozwiązanie które możemy łatwo rozbudować.
Swoja drogą od dłuższego już czasu chodzi mi po głowie napisanie narzędzia podobnego do wspomnianego Mondriana całkowicie w Rubim. Idealny dla mnie produkt generował by pliki różnicowe raz dziennie z katalogów roboczych programistów oraz repozytorium kodu, a następnie na podstawie ustawień projektu przypisywał by zmiany do odpowiedniego recenzenta. Ciekawą opcją mogła by być również integracja z Google Gears – pozwalało by to na recenzje offline.

październik 22, 2009 at 12:56 am
Very nice site! [url=http://apeyixo.com/ysyrxqs/2.html]is it yours too[/url]