Proqram dizaynı (ing.Software design) — proqram təminatının əsas strukturunun və davranışlarının necə qurulacağını müəyyən edən prosesdir. Bu proses proqramın funksionallığını, modul quruluşunu, və digər texniki aspektlərini planlaşdırır.[1] Proqram dizaynı, proqramın həm istifadəsini, həm də onun inkişaf və dəstəklənməsini asanlaşdıran ən yaxşı təcrübələrə və prinsiplərə əsaslanır.[2]
Tələblərin analizi — proqramın həll etməli olduğu məsələləri müəyyən etmək. Tələbləri toplamaq və dəqiq başa düşmək vacibdir, çünki dizayn bu tələblər əsasında qurulur.[3]
Arxitektura dizaynı — proqramın ümumi quruluşunun və arxitekturasının planlaşdırılması. Bu mərhələdə proqramın əsas komponentləri, modullar və onların qarşılıqlı əlaqələri müəyyən edilir. Məsələn, çoxmodullu bir sistemdə hər bir modulu, onun funksionallığını və digər modullarla əlaqələrini müəyyən etmək.[4]
Detallı dizayn — arxitektura dizaynından sonra hər bir modulun və funksiyanın təfərrüatları hazırlanır. Bu mərhələdə dəyişənlərin, funksiyaların, məlumat strukturunun və algoritmlərin təfərrüatları müəyyən olunur.
İstifadəçi interfeysi dizaynı — əgər proqram istifadəçilə birbaşa qarşılıqlı əlaqədə olacaqsa, istifadəçi interfeysinin dizaynı çox vacibdir. İstifadəçinin rahat və səmərəli şəkildə proqramdan istifadə etməsi üçün uyğun interfeys və naviqasiya qurulmalıdır.
Prototipləşdirmə və test dizaynı — proqramın funksionallığını ilkin mərhələdə sınamaq üçün prototip hazırlamaq və mümkün səhvləri aradan qaldırmaq üçün test dizaynını yaratmaq. Bu mərhələ proqramın dizaynını təkmilləşdirməyə və səhvləri erkən aşkar etməyə kömək edir.[5]
Modulyarlıq — proqram müxtəlif, müstəqil modullara bölünməli və hər modul öz funksiyasını yerinə yetirməlidir. Bu proqramın oxunaqlı və təkmilləşdirilə bilən olmasını asanlaşdırır.[6]
Abstraksiya — çətin məsələləri sadə formalarda təqdim etmək. Təfərrüatlara ilişmədən proqramın ümumi məqsədini saxlamağa kömək edir.
İstifadə asanlığı — hər bir funksional element və interfeys istifadəçi dostu və intuitiv olmalıdır.
Uyğunluq və təkrar istifadə — dizaynı elə qurmaq lazımdır ki, komponentlər başqa proqramlarda və ya digər hissələrdə də istifadə edilə bilsin.[7]
Çeviklik və uyğunlaşma — proqram dizaynı elə qurulmalıdır ki, proqram asanlıqla yeni funksionallıqlar əlavə etməyə və dəyişikliklərə uyğunlaşmağa imkan versin.[8]
Dizayn nümunələri müəyyən problemlərin sınanmış həll yollarını təklif edir. Məşhur dizayn nümunələrinə:[9]
Singleton — bütün proqramda bir obyektin yalnız bir dəfə yaradılmasını təmin edir.
Observer — bir obyektin vəziyyətində dəyişiklik baş verdikdə, digər obyektlərin bu dəyişikliklərə reaksiya verməsini təmin edir.
Factory — müxtəlif obyektlər yaratmaq üçün ümumi interfeysi təmin edir.[10]
Yaxşı düşünülmüş proqram dizaynı inkişaf və dəstək mərhələlərində daha az vaxt və resurs tələb edir, proqramın istifadəçi üçün funksional və sabit qalmasına kömək edir.[11]
↑Ralph, P. and Wand, Y. (2009). A proposal for a formal definition of the design concept. In Lyytinen, K., Loucopoulos, P., Mylopoulos, J., and Robinson, W., editors, Design Requirements Workshop (LNBIP 14), pp. 103–136. Springer-Verlag, p. 109 DOI:10.1007/978-3-540-92966-6_6.
↑Ralph, P., and Wand, Y. A Proposal for a Formal Definition of the Design Concept. In, Lyytinen, K., Loucopoulos, P., Mylopoulos, J., and Robinson, W., (eds.), Design Requirements Engineering: A Ten-Year Perspective: Springer-Verlag, 2009, pp. 103-136
↑Freeman, Peter; David Hart. "A Science of design for software-intensive systems". Communications of the ACM. 47 (8). 2004: 19–21 [20]. doi:10.1145/1012037.1012054.
↑Davis, A:"201 Principles of Software Development", McGraw Hill, 1995.
↑Suryanarayana, Girish. Refactoring for Software Design Smells. Morgan Kaufmann. November 2014. 258. ISBN978-0128013977.