Architektura oprogramowania – podstawowa organizacja systemu wraz z jego komponentami, wzajemnymi powiązaniami, środowiskiem pracy i regułami ustanawiającymi sposób jej budowy i rozwoju[1].
Opis architektury oprogramowania (ang. Software Architecture Description) postrzegany jest jako platforma porozumiewania się wszystkich osób zaangażowanych w proces wytwórczy systemów informatycznych.
Architektura oprogramowania jest stosunkowo młodą dziedziną informatyki i choć w ostatnich dwóch dekadach dość mocno się rozwinęła i nawet osiągnęła poziom dojrzałości, to nadal trwają dyskusje nad jej miejscem w informatyce, a przede wszystkim nie ma zgody szerokiego gremium w zakresie określenia samej definicji architektury oprogramowania. Stąd SEI na swojej stronie[2] publikuje definicje architektury oprogramowania różnych autorów.
Na obecnym etapie rozwoju architektury oprogramowania systemów informatycznych duże nadzieje wiąże się z rozwojem odpowiednich języków opisu architektury, które pozwolą w łatwy sposób przekształcać opisy architektoniczne w modele analityczne, a nawet wygenerować kody źródłowe, co jest przedmiotem Model Driven Development. Architektura sterowana modelem (MDA), wykorzystywana przez MDD, obecnie nadal jest mocno związana z językiem modelowania UML, toteż rozwój tej dziedziny wiąże się z opracowaniem odpowiedniego języka opisu architektury, który w tym względzie zastąpiłby UML[3]. Podobnie uważa Mary Shaw[4], twierdząc, że osoba proponująca nowy język opisu architektury, musi odpowiedzieć na pytanie „Czy ta propozycja ma jakieś szanse zastąpienia UML? Jakie narzędzia pozwolą to osiągnąć?”. Ponadto Mary Shaw w swoim artykule nakreśliła również pewne obiecujące obszary, które w najbliższym czasie mogą zmienić oblicze architektury oprogramowania m.in.: