W Inżynieria oprogramowania zamieszamy pytania odnoszące się do praktyk w wytwarzaniu oprogramowania, metodyk, procesów oraz narzędzi używanych podczas programowania, wliczając w to testowanie, debugowanie, wersjonowanie, wdrażanie i wszystkie inne aspekty związane z powstawaniem software'u.

Tematy w Inżynieria oprogramowania nie powinny dotyczyć żadnego konkretnego języka bądź technologii, a samego procesu powstawania oprogramowania. Unikajmy tematów odnoszących się do konkretnych narzędzi lub bibliotek, skupiajmy się na na samej ich idei. Skupiajmy się na wspomaganiu pracy programisty, tj. językach programowania, rozwiązań współdzielonych między technologiami.

  • Nie umieszczajmy w tej kategorii pytań o projektowanie stron www (photoshop, figma, szablony), od tego jest kategoria Webmastering.
  • Nie umieszczajmy w tej kategorii pytań o narzędzia używane przez programistów, ale nie mające nic wspólnego z programowaniem (curl, postman, sublimetext, keypass, vpn, jira, trello, confluence, gmail, filezilla, ssh)
  • Unikaj tematów nt. "generatorów kodu" (swagger, docusaurus, jekyll, squarespace)

Przykładowe tematy mogące się znaleźć w Inżynieria oprogramowania:

Dbanie o jakość oprogramowania:

  • Jak oszacować czas potrzebny na naprawę błędu
  • Czy opłaca się wydzielać mikroserwis do walidacji aby uniknąć duplikacji kodu
  • Jak zachęcić kolegę, by pisał czyste funkcje?
  • Czy według was różne message wyjątków z polimorficznych implementacji to zło?

Wytwarzanie oprogramowania:

  • Opcjonalne parametry metod — hit czy kit?
  • Czy powinno się zwracać Optional?
  • Ankieta — Jakbyście nazwali funkcję do wyszukiwania pozycji stringa w innym stringu?
  • Migracja legacy projektu do nowszych wersji języka
  • Modularyzacja aplikacji monolitycznej
  • Czy powinno się unikać metod, które nic nie zwracają (void)?

Wzorce i dobre praktyki w oprogramowaniu

  • Czy klasy modelu mogą być anemiczne jeśli nie robię DDD?
  • Jak precyzyjnie zdefiniować pojedynczą odpowiedzialność w kontekście zasady SRP?
  • Static factory method - pattern czy antypattern?
  • Dependency injection vs strategy
  • Sens i sposób oddzielania logiki od interfejsu

Nazewnictwo w oprogramowaniu:

  • Jak nazywacie zmienne odnoszace sie do polozenia w duwymiarowej tablicy

Wersjonowanie oprogramowania:

  • Tworzenie nowego commita z zawartością innego
  • Backend i frontend w jednym repo
  • jak wyczyścić stan feature_brancha2 powstałego na podstawie feature_brancha1 który już jest zmergowany
  • Praca tylko na Masterze

Testowanie oprogramowania

  • Na jakim poziomie najwięcej testów?
  • Ile powinno wynosić Code Coverage?
  • Czy testy mogą się opierać o losowość?
  • Czy testujecie aplikację manualnie jako dodatek do testów automatycznych?
  • Rozmiar testów przebija rozmiar kodu?

Wdrażanie i dystrybucja oprogramowania:

  • "W zasadzie oprogramowanie jest gotowe do Release" - co to znaczy?
  • Zastosowanie kontenerów
  • Pod jaką nazwą wydać wersję 1.0 biblioteki?
  • Jak chcielibyście, żeby było oznaczone to, że w następnej wersji klasa nie będzie implementowała interfejsu?
  • Jak mała część biblioteki nadaje się do wyciągnięcia jako dodatkowa zależność?

Dokumentowanie oprogramowania:

  • Czy jest sens prezentować redundantną wersję dokumentacji?

Aspekty techniczne, ogólnojęzykowe

  • Praktycznie zastosowanie WeakRefów
  • Czemu używanie break jest złe?
  • Kiedy używać properties, a kiedy metod

Zarządzanie projektem:

  • Scrum of scrums
  • Scrum, sprint, jak pogodzić implementacje i testy
  • Co to ten scrum, bo już nie wiem.