Циљ предмета
Циљ предмета је упознавање студената са принципима, моделима и техникама пројектовања и анализе архитектуре софтверских система, као и са процесом доношења архитектонских одлука у развоју сложених софтверских решења. Предмет омогућава студентима да стекну знања неопходна за разумевање структуре, понашања и међузависности компоненти у савременим софтверским системима, са посебним акцентом на одрживост, скалабилност и тестабилност.
Исход предмета
По завршетку предмета студент је способан да анализира захтеве и пројектује архитектуру сложеног софтверског система, да примени одговарајуће архитектонске стилове и обрасце, као и да документује и образложи донете архитектонске одлуке. Студент разуме утицај архитектуре на тестирање, одржавање и аутоматизацију развоја софтвера и оспособљен је за рад у тиму на развоју и унапређењу софтверских система.
Садржај предмета
Теоријска настава
Појам и улога софтверске архитектуре. Разлика између дизајна софтвера и архитектуре система. Архитектонске одлуке и компромиси. Технички дуг. Архитектонски стилови: слојевита архитектура, модуларни монолит, clean архитектура и хексагонална архитектура. Компоненте и модули софтверског система. Управљање зависностима и раздвајање одговорности. Архитектонски обрасци и њихова примена у сложеним системима. Догађајно оријентисана архитектура. Основе CQRS приступа. Архитектура система са базом података. Утицај архитектуре на перформансе и скалабилност. Архитектура и тестирање софтвера. Тестабилност као архитектонски захтев. Веза архитектуре и CI/CD процеса. Документовање архитектуре софтверских система. UML дијаграми у архитектонском контексту. C4 модел архитектуре. Архитектонске одлуке и њихова документација.
Практична настава
Анализа постојећих софтверских система. Пројектовање архитектуре софтверског система на основу задатих захтева. Дефинисање компоненти, модула и њихових међусобних односа. Израда архитектонских дијаграма. Примена архитектонских образаца у практичним примерима. Пројектовање тестабилне архитектуре. Повезивање архитектуре са аутоматизованим тестирањем и CI/CD процесима. Документовање архитектуре софтверског система. Рад на студијама случаја и пројектним задацима.