Wytwarzanie softu w ujęciu jakości - dobre praktyki

Wytwarzanie softu w ujęciu jakości - dobre praktyki
SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:616
0

Hej,
mam do was pytanie odnośnie procesu developerskiego, zwłaszcza jak w nim zapewniacie jakość, może opisze jak to u nas wygląda i ciekawi mnie jak to jest u was z jakich narzędzi korzystacie, jakie standardy macie ?

Status:
System w Java (Spring,Hiiberante,Swing) około 3 mln linii kody, modułowy monolit (około 500 modułów mavena zależnych od siebie), rozwijany przez 20 osób od 15 lat, aktualnie aplikacja jest wdrożona na wielu serwerach (100) u wielu klientów w wielu wersjach (5), najstarsza wersja ma rok, system jest customizowany na produkcji stąd proces aktualizacji niezawsze jest prosty (nawet przy nastawieniu kontatybilności wstecznej)

Proces:

  1. Klient zgłasza błąd do programu w wersji X, HelpDesk /JIRA
  2. Błąd jest klasyfikowany priorytet + moduł
  3. Błąd trafia do backloga skąd kierownik modułu przypisuje błąd do programisty, jak planować prace rozwojowe skoro nie wiadomo ile błędów wpadnie :-/
  4. Programista rozwiązuje błąd i zrzuca do SVN do master (rozwój) + do wersji (branche'a) którego błąd dotyczy
    4.1) W trakcie pracy programista może pisać testy jednostkowe lub integracyjne ale nikt tego nie sprawdza, brak wytycznych jak je robić
    4.2) Nikt nie przegląda kodu który zrzuca programista, kto to u was robi, przypadkowa osoba czy osoba która ma pojęcie o zadaniu robionym przez programiste
    4.3) Ewentualne błędy może wychwycic CI jako Jenkins czyli błędy kompilacji + testów, kto tropi ewentualne problemy, że cześć testów przestała chodzić po ostatnim buildzie na jenkins w sytuacji kiedy do tego samego code base zrzuca 20 osób, kto jest winny?
    4.4) Brak narzędzi i kultry pracy z narzędziami typu Sonar, kiedyś był Sonar ale wygenerował on 10 tys ostrzeżeń i nie wiadomo co było z tym robić - w sensie zatrzymać prace rozwojowe na 6 miesięcy czy jak
  5. Z brancha wychodzi wersja z poprawka -> tag
    5.1) Brak CD, wersje wypuszcza sie narzędziem manualnie
  6. Nowa wersja jest wgrywana na środowisko testowe klienta i tam weryfikowana przez klienta

W jakis sposób wy wytwarzacie i zapewniacie jakość na każdym z tych etapów, ilu osób jest w to zaangażowane, kiedyś pracowałem w firmie gdzie na 4 programistów jeden tylko robił przeglądy kodu

edytowany 2x, ostatnio: Szczery
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1

Jeśli chodzi o Sonara to działa mi (czasem lepiej, czasem gorzej) jedna zasada i to od dawna: nie pogarszać.
Czyli nawet jak jest tam 10000 problemów to zmianie ma być max 10000, oczywiście fajnie jak jest mniej.
W dość syfnym kodzie bywa tak, że naprawiamy 4 sonaroww problemy... ale dokładamy 2 nowe (i tak jest na plus).
Zasada mocniejsza - nie dokładamy żadnych nowych issues.

Sonar prawie od zawsze ma możliwośc pokazywania delty, ma też możliwośc pokazywania "my issues"

Poza sonarem to dokładam checkstyle, a od czasu kotlinowania - detekt, dzięki temu sprawdzanie jest w buildzie - zrobisz syf to się paczka nie zbuduje.
Detekt ma tą zaletę, że można ustawić ile punktów spie...nia przepuszczamy - czyli można wstawić do już mocno popsutego projektu, żeby pilnować coby nie zepsół się bardziej.

Ważne, żeby móc zmieniać reguły sonara (jak jest konsensus)- nie ma nic gorszego niż sonar wymuszający styl, którym wszyscy w zespole gardzą, albo raportujący totalnie bzdetne problemy (nagłówki plików :-)).

4.3) wszyscy są winni. Wolne CI jest winne, osoby które commitowały do projektu z wywalonymi testami są winne.
Jeśli nikt nie zgłasza sie do naprawania, (ewentualnie tylko ty) lub są nienaprawialne to:
a) zmień firmę lub zespół,
b) skasuj te testy (i tak są niepotrzebne) (ale żadnego @Ignore, kasuj na twardo - to potrafi przemówić do ludzi, potrafi też nie przemówić :-( )

4.2) przeglądy - prawie nie pamiętam sytuacji, żeby tu nie było jakiejś farsy
najczęściej działa zasada: wrzuć commit na 5 linii dostaniesz 10 uwag, zrób commit na 10000 linii i nie będzie żadnej
teoria jest taka, żeby commity były małe - praktyka jest taka, że nie umiem nad tym zapanować, sam wrzucam potwory


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 11x, ostatnio: jarekr000000
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:7 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
4

SVN i dalej można nie czytać. Nie da się dobrze pracować na branchach w SVNie. Bo SVN nie umożliwia w łatwy sposób merdzowania zmian. A jak nie da się w łatwy sposób pracować na branchach to robienie review i na CI testów osobno po każdej zmianie jest w zasadzie niemożliwe albo bardzo trudne.

Co do Sonara to jak ostatnio konfigurowałem z architektem Sonara to okazało się że domyślnie posiada on sprzeczne reguły. I dla wielu par sprzecznych reguł trzeba było wybrać tą którą chcemy. Poza tym sonar posiada priorytety ostrzeżeń. Zwykle na 100 tylko 5 jest krytyczne i to je trzeba poprawić w pierwszej kolejności


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
GK
Dlaczego bez branchowania nie da się robić efektywnie code review i testów na CI?
KamilAdam
Bo nikomu nie chce się poprawiać kodu po review gdy i tak jest już na masterze. Bo ludzie zwracają uwagę na testy gdy testy są wymagane do merdza brancha. Smutna rzeczywistość
GK
Ale można robić review zanim się zrobi commit?
KamilAdam
A jak inni mają zobaczyć kod? Znasz jakieś narzedzia do tego? bez ironi pytam, bo ja nie znam
GK
Crucible, ma opcję "code review before check in"
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:2787
1

U mnie code review czynione jest przez wszystkich pozostałych członków zepsołu (oczywiście backend developer robi tylko review backendowe). Nie korzystamy z Sonara.

jarekr000000 napisał(a):

najczęściej działa zasada: wrzuć commit na 5 linii dostaniesz 10 uwag, zrób commit na 10000 linii i nie będzie żadnej

Zależy też, na jakim poziomie te uwagi z code review. Faktycznie jest tak, że pull request z 10000 linii kodu ciężko analizować, bo trzeba by naprawdę długo nad tym siedzieć i wnikliwie czytać. Natomiast wydaje mi się, że oprócz samych "poprawek estetycznych", można wówczas ocenić trochę na wyższym poziomie abstrakcji - styl architektoniczny, jakie wzorce projektowe zostały zastosowane, jak klasy i ich powiązania zostały zaprojektowane. Czy testy obejmują żądane przez nas flow. Skorzystam z chwili uwagi i wkleję artykuł w którym pisałem właśnie o różnych rodzajach uwag w code review: https://www.sages.pl/blog/code-review-czyli-merytoryczna-krytyka-siebie-i-innych

edytowany 1x, ostatnio: Pinek
Zobacz pozostałe 12 komentarzy
Charles_Ray
Dziwne rzeczy piszesz, ale może się z tym spotkałeś. Decyzję czy coś puścić czy nie podejmuje autonomicznie zespół. Może to nie wina scruma, tylko ego :)
jarekr000000
Ileś razy na różnych spotkaniach zadawałem pytanie do product ownera - czy bardzo nam się spieszy? (i okazywało się, że nie). Typowy zespół jaki znam narzeka, że nie ma czasu na porządny kod i testy, a jednocześnie wypycha niedoróbki na demo, bo przecież velocity spaść nie może.
Charles_Ray
Dlaczego nie może? :) wiesz, że piszesz o objawach, a nie przyczynach?
jarekr000000
Tak, to są objawy Scrumozy - ludzie durnieją od wykresówi i punkcików. Btw. nawet w rozsądnym teamie mieliśmy z tym problem - gdzieś tam wysoko w górze siedział management i oglądał te liczby - co z tego, że zupełnie bez sensu- jakby coś tąpnęło to zaraz masz z głowy parę dni, bo policja scrumowa będzie robić śledztwo co się stało(tak - to był akurat korpo scrum - ostateczna patologia).
Charles_Ray
A no właśnie. I wtedy zaczyna się hackowanie systemu, żeby tylko wykresiki ładnie wyglądały :)
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Nikt nie przegląda kodu który zrzuca programista

Bo i jak to ma robić skoro nie macie do tego narzędzi? Jakbyście mieli jakiegoś gitlaba to robisz merge request i ktoś go może wygodnie reviewować i potem mergować.

kto to u was robi, przypadkowa osoba czy osoba która ma pojęcie o zadaniu robionym przez programiste

Ktoś kto ma pojęcie o projekcie, a o konkretny task może ewentualnie spytać, ale też powinno być dość jasne co ten merge request robi.

W trakcie pracy programista może pisać testy jednostkowe lub integracyjne ale nikt tego nie sprawdza, brak wytycznych jak je robić

To jest problem wśród zespolu programistów, bo to wy ustalacie "wytyczne" oraz co jest konieczne do "zakończenia" taska.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
SZ
Czym u was są te wytyczne i jak je weryfikujecie?
Shalom
Wewnętrzne ustalenia w zespole -> pull request nie może być mergowany póki nie ma testów integracyjnych do niego a sam task nie jest "skończony" póki nie ma testów e2e. Oczywiście też nie ma merge póki ktoś nie zrobi review i nie zaakceptuje. Nie trzeba niczego "weryfikować", przecież jesteśmy dorośli o_O
Charles_Ray
Hehe ktoś tu chyba potrzebuje „architekta” który wszystko ustali odgórnie :)
Shalom
No właśnie takie odebrałem wrażenie widząc wytyczne i weryfikacje xD Dorośli ludzie a zachowują sie jak dzieci :D
SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:616
0

No właśnie takie odebrałem wrażenie widząc wytyczne i weryfikacje xD Dorośli ludzie a zachowują sie jak dzieci

Może odniosę się do komentarza @Shalom, zgadza się, jesteśmy dorośli tylko od dłuższego czasu do IT przyszło sporo osób skuszonych $$$, to już nie są pasjonaci, a robotnicy, którzy mają ogólnie gdzieś standardy, testy, pokrycie kodu itp, ogólnie o tym nie słyszeli (nie mówie, że wszyscy) i w sytuacji kiedy tacy ludzie stanowią 50% zespołu to robi się problem, dlatego zastanawiamy się jak wy sobie radzicie z zapewnianiem jakość pracując z takimi ludzmi. Umówmy się, że odpowiedz "nie no robimy dobrze bo tak trzeba" tutaj nie działa.

P.S Przypomnijcie sobie projekty w których pracowaliście i były "spierniczone", przecież to nie jest tak, że kiedyś Ci pierwsi programisci tego systemu powiedzieli sobie "ale to teraz specjalnie spierdo....", pewnie też chcieli dobrze a coś nie wyszło...

edytowany 2x, ostatnio: Szczery
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

w sytuacji kiedy tacy ludzie stanowią 50% zespołu

Jak sobie takich ludzi pozatrudnialiście do zespołu, to jest wasz problem.

jak wy sobie radzicie z zapewnianiem jakość pracując z takimi ludzmi

Zatrudniasz A-playerów i problem w ogóle nie występuje.

przecież to nie jest tak, że kiedyś Ci pierwsi programisci tego systemu powiedzieli sobie "ale to teraz specjalnie spierdo....", pewnie też chcieli dobrze a coś nie wyszło...

Generalnie każdy system z czasem się "psuje", niewiele da się z tym zrobić, trzeba co jakis czas orać i przepisywać. Ale im więcej masz w teamie słabych ludzi, tym szybciej to będzie przebiegać.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)