Upravljanje konfiguracijom softvera

Upoznavanje sa predmetom

Prof. dr Igor Dejanović (igord at uns ac rs)

Kreirano 2021-10-15 Fri 11:03, pritisni ESC za mapu, m za meni, Ctrl+Shift+F za pretragu

1. Opšte informacije

2. Šta predstavlja upravljanje konfiguracijom softvera?

  • Upravljanje konfiguracijom softvera (Software Configuration Management) predstavlja disciplinu koja se bavi kontrolisanom evolucijom složenih softverskih sistema.

3. Zašto koristiti SCM?

  • Softverski proizvodi često “žive” godinama pa čak i decenijama.
  • Softverski proizvodi su često izuzetno kompleksni.
  • Da bi obezbedili kontinualnu evoluciju moramo uvesti procese, tehnike i alate koji će to omogućiti.
  • Praksa je pokazala da je uspeh projekta direktno povezan sa upotrebom efikasnih SCM tehnika i alata.
  • Prva 4 na listi od 12 koraka za bolji razvoj softvera1 istaknutog softver inženjera, pisca i autora izuzetno popularnog servisa StackOverflow Joela Spolskog predstavljaju SCM tehnike (kontrola verzija izvornog koda, automatizovana i kontinualna izgradnja i praćenje grešaka).

4. Zašto koristiti SCM?

  • Podrška za paralelni rad. Ručno spajanje paralelnih izmena nije ni malo zabavno.
  • Upotreba SCM alata, pre svega distribuiranih sistema za kontrolu verzija je dovela do pojave tzv. društvenog kodiranja (Social Coding) i servisa kao što su GitHub, BitBucket i dr. Ovo je omogućilo eksploziju razvoja slobodnog softvera.
  • Zato što vam to traži poslodavac.
  • Zato što vam to traži klijent.
  • Savet: Ako firma ne koristi SCM tehnike (pre svega kontrolu verzija) zapitajte se da li želite da radite u takvoj firmi.

5. Cilj predmeta

  • Savladavanje teoretskih osnova discipline upravljanja konfiguracijom softvera (Software Configuration Management).
  • Osposobljavanje za uvođenje i primenu procesa upravljanja konfiguracijom softvera.
  • Upoznavanje sa industrijskim standardima, okvirima i alatima iz oblasti upravljanja konfiguracijom softvera.
  • Savladavanje modernih SCM tehnologija (Git, pytest, GitHub/GitLab, Docker, Docker Compose, Chef/Ansimble/Teraform).

6. Struktura ocene

  • Predispitne obaveze - 60%
  • Teorijski deo ispita - 40%

7. Projekat

  • Timski rad - timovi od 4±1 studenta.
  • Obavezna upotreba sistema za kontrolu verzija (Git).
  • Obavezna upotreba sistema za praćenje projekta (GitHub).

8. Projekat - raspodela bodova

Aktivnost Bodovi
Model 6
Implementacija projekta 20
Implementacija testova 6
Git 10
GitHub 10
SCM 8
Ukupno 60

I pored timskog rada svi bodovi se dobijaju individualno.

9. Plan izvođenja nastave

  1. Upoznavanje sa predmetom
  2. Programski jezik Python
  3. Osnove upravljanja konfiguracijom softvera
  4. Django framework
  5. Upravljanje izvornim kodom (Source Code Management)
  6. DVCS, Git
  7. Git
  8. Postavka zadatka. Modelovanje rešenja (plantUML)
  9. docker, docker-compose
  10. Pisanje dokumentacije (mkdocs, Sphinx)
  11. Infrastructure as Code (IaC) - (Chef, Puppet, Ansimble, Terraform, Kubernetes) - videćemo šta od alata
  12. Testiranje (pytest, PyUnit, doctest), TDD, kontinualna integracija (Jenkins, GitHub Actions, GitLab pipelines)
  13. Prezentacije projekata

10. Projektni zadatak

  • Veb aplikacija za upravljanje promenama.
  • Slično GitHub-u.
  • Od zahteva za promenom do uvođenja i puštanja u rad.
  • Veza prema promenama u izvornom kodu - koristiti GitHub.
  • Krajnji cilj: definisan SCM proces za upravljanje promenama, podržan aplikacijom. Preći na sopstvenu aplikaciju u upravljanju projektom (dogfooding)

11. Osnove upravljanja konfiguracijom softvera

  • Osnovni pojmovi i koncepti.
  • Šta sve obuhvata SCM? Koji su razlozi uvođenja?
  • Tradicionalna i moderna shvatanja SCM discipline.
  • SCM procesi.
  • SCM obrasci i preporučena praksa (best practice).
  • SCM alati.
  • SCM industrijski okviri i standardi.

12. Upravljanje izvornim kodom (Source Code Management)

  • Algoritmi i modeli. Distribuirani i centralizovani sistemi.
  • Upravljanje alternativnih tokovima razvoja. Grananje.
  • Formiranje osnovne linije (Baseline).
  • Upravljanje konkurentnim radom. Optimističko i pesimističko zaključavanje.
  • Preporučena praksa.
  • Alati.

13. Sistemi za kontrolu verzija

  • Pregled osnovnih osobina najpopularnijih alata za kontrolu verzija (Subversion, Mercurial, Bazaar, Git).
  • Detaljno upoznavanje sa Git alatom.

14. Upravljanje promenama (Change Control)

  • Šta predstavlja upravljanje promenama?
  • Kakve sve promene mogu nastati i u kojim fazama životnog ciklusa?
  • Kako se promene prate? Životni ciklus zahteva za promenom.
  • Kako se analizira uticaj promena na komponente sistema?
  • Izveštavanje.

15. Upravljanje izgradnjom i uvođenje (Build and Deploy)

  • Šta predstavlja izgradnja a šta uvođenje softvera?
  • Zašto je potrebno postupak automatizovati?
  • Kako se izgradnja i uvođenje mogu automatizovati?
  • Šta predstavlja kontinualna izgradnja (Continuous Build) i kontinualna dostava (Continuous Delivery)?
  • Puppet, Teraform, Fabric, Docker, …

16. Upravljanje izdanjima (Release Management)

  • Šta predstavlja izdanje softvera?
  • Zašto je bitno da uvedemo upravljanje u ovaj segment?
  • Tehnike vođenja verzija izdanja?
  • Alternativna izdanja.
  • Sledljivost i povezivanje izdanja za komponente i njihove verzije od kojih je izdanje kreirano.

17. Literatura za predmet

  • J. Humble and D. Farley, Continuous delivery: reliable software releases through build, test and deployment automation Addison-Wesley Professional, 2010
  • S. Berczuk and B. Appleton, Software configuration management patterns: effective teamwork, practical integration, Addison-Wesley Professional, 2003
  • M. Handbook, Configuration management guidance, tech. rep., MIL-HDBK-61A (SE), Department of Defense–United States of America, 2001
  • Scott Chacon and Ben Straub, Pro Git. APress, 2014.
  • Beazley, David M. Python essential reference Addison-Wesley Professional.
  • The Python Tutorial