Кіріспе

Бағдарламалық шешімдерді жоспарлау процесі

Бағдарламалық жасақтаманы жобалау – бағдарламалық жүйені іске асыру немесе өзгерту алдында оның қалай жұмыс істейтінін ұғымдау процесі. Бағдарламалық жасақтаманы жобалау сонымен қатар жобалау процесінің тікелей нәтижесін – бағдарламалық жасақтаманың қалай жұмыс істейтіні туралы түсініктерді білдіреді, ол жобалау құжаттамасы мен құжатталмаған ұғымдардан тұрады. Бағдарламалық жасақтаманы жобалау әдетте нәтижедегі жүйеге қойылған мақсаттармен басқарылады және мәселелерді шешуді, жоспарлауды қамтиды, соның ішінде жоғары деңгейдегі бағдарламалық жасақтама архитектурасы және төмен деңгейдегі компоненттер мен алгоритмдерді жобалау. Суарнау әдісімен бағдарламалық жасақтаманы әзірлеу процесінде, бағдарламалық жасақтаманы жобалау – талаптарды нақтылаудан кейін және кодтаудан бұрын орындалатын шара.

Жалпы процесс

Жобалау процесі дизайнерге бағдарламалық жүйенің әртүрлі аспектілерін оның құрылымына дейін модельдеуге мүмкіндік береді. Шығармашылық, бұрынғы тәжірибе, "жақсы" бағдарламалық жүйенің қандай екенін түсіну және сапаға ұмтылу – бұл тиімді жобалаудың табысқа жету факторылары. Дегенмен, жобалау процесі әрқашан тікелей болмайды. Бағдарламалық жүйенің дизайнын үйдің архитектуралық жоспарымен салыстыруға болады. Жоғары деңгейдегі жоспарлар үйдің толық бейнесін көрсетеді (мысалы, үйдің үш өлшемді суреті). Төменгі деңгейдегі жоспарлар әрбір егжей-тегжейді салуға бағыттайды (мысалы, су құбырларының схемасы). Сол сияқты, бағдарламалық жүйе дизайны моделі ұсынылып отырған бағдарламалық шешімнің әртүрлі көріністерін ұсынады.

Құны

Бағдарламалық жасақтаманы жобалау құжаттамасы кодтау басталмас бұрын шектеулерді, ерекшеліктерді және тіпті талаптарды түзету үшін қарастырылуы немесе ұсынылуы мүмкін. Бағдарламаланған симуляция немесе прототипті қараудан кейін қайта жобалау жүзеге асуы да мүмкін. Жоспар немесе талаптарды талдаусыз, кодтау процесінде бағдарламалық жасақтаманы жобалауға болады, бірақ бұл күрделі жобалар үшін қиынға соғады. Кодтауға дейін жеке жобалау, салалық дизайнерлер мен сарапшылардың (СМЕ) бағдарламашылармен бірлесіп жұмыс істеуіне және пайдалы әрі техникалық тұрғыдан дұрыс бағдарлама жасауына мүмкіндік береді.

Талаптарды талдау

Бағдарламалық жасақтаманы жобалаудың бір құралы – бағдарламалық жасақтаманың талаптарын талдау (SRA). SRA – бағдарламалық жасақтаманы әзірлеу процесінің бір бөлігі болып табылады және бағдарламалық инженерияда қолданылатын техникалық талаптарды тізімдейді. Талдаудың нәтижесі – шешілуге тиіс кішігірім мәселелердің анықталуы. Ал жобалау, керісінше, мүмкіндіктерге бағытталған, сондықтан бір мәселеге қатысты бірнеше жобалау нұсқасы болуы мүмкін. Ортаға байланысты, жобалау көбінесе сенімді құрылымдар негізінде жасалады немесе тиімді жобалау үлгілерін пайдаланады, сондықтан әртүрлі болуы мүмкін.

Құрылыс қағидалары

Негізгі жобалау принциптері бағдарламалық жасақтама инженеріне жобалау процесін басқаруға мүмкіндік береді. Дэвис бағдарламалық жасақтаманы жобалау үшін принциптер жиынтығын ұсынады, олар төмендегі тізімде бейімделіп, кеңейтілген: Жобалау процесі «тоннельдік көруден» зардап шекпеуі керек. Жақсы дизайнер мәселенің талаптары мен жұмысты орындауға қолда бар ресурстарды ескере отырып, балама тәсілдерді қарастырып, оларды бағалауы тиіс. Жобалау талдау моделімен байланысты болуы керек. Жобалау моделінің бір элементі көбінесе бірнеше талапқа сәйкес келуі мүмкін болғандықтан, жобалау моделінің талаптарды қалай орындағанын қадағалау үшін құрал қажет. Жобалау дөңгелекті қайтадан ойлап табуға тиіс емес. Жүйелер жобалау үлгілерінің жиынтығын пайдалана отырып құрастырылады, олардың көпшілігі бұрыннан белгілі болуы мүмкін. Мұндай үлгілерді қайта ойлап табудың орнына әрқашан таңдау керек. Уақыт тар және ресурстар шектеулі; жобалау уақытын қажет болған жағдайда қолда бар үлгілерді біріктіру арқылы жаңа идеяларды іске асыруға жұмсау керек. Жобалау бағдарламалық жасақтама мен мәселенің арасындағы «интеллектуалдық қашықтықты» азайтуы керек, яғни нақты әлемдегідей. Бағдарламалық жасақтаманың құрылымы, мүмкіндігінше, мәселе доменінің құрылымын қайталай білуі керек. Жобалау біркелкілік пен интеграцияны көрсетуі керек. Жобалау толыққанды үйлесімді болып көрінсе, ол біркелкі деп есептеледі. Мұндай нәтижеге жету үшін жобалау тобы үшін стиль және формат ережелері жобалау жұмысы басталғанға дейін анықталуы керек. Жобалау интеграцияланған деп есептеледі, егер жобалау компоненттері арасындағы интерфейстерді анықтауға көңіл бөлінетін болса. Жобалау өзгеріске бейімделуге мүмкіндік беруі керек. Келесі бөлімде талқыланатын жобалау тұжырымдары осы принципті жүзеге асыруға мүмкіндік береді. Жобалау дұрыс емес деректер, оқиғалар немесе жұмыс жағдайлары кездескен кезде де жұмсақ түрде бұзылуы керек. Жақсы жобаланған бағдарламалық жасақтама «құлап» жармауы керек; ол ерекше жағдайларды ескеретіндей етіп жасалуы керек, ал өңдеуді тоқтату қажет болса, ол әдепті түрде тоқтауы керек. Жобалау – кодтау емес, кодтау – жобалау емес. Бағдарлама компоненттері үшін егжей-тегжейлі процедуралық жобалар жасалғанда да, жобалау моделінің абстракция деңгейі бастапқы кодтан жоғары болады. Кодтау деңгейіндегі жобалау шешімдері процедуралық жобалауды кодтауға мүмкіндік беретін шағын егжей-тегжейлерді ғана қарастыруы керек. Жобалау сапасы оны жасау кезінде, кейін емес, бағалануы керек. Дамыту процесіндегі сапаны бағалауға дизайнерге көмектесетін әртүрлі жобалау тұжырымдары мен өлшемдері бар. Жобалау концептуалды (семантикалық) қателерді азайту үшін қарастырылуы керек. Жобалауды қарау кезінде шағын нәрселерге тым көп көңіл бөліп, маңызды мәселелерді жіберіп алуға бейімділік бар. Жобалау тобы жобалау моделінің синтаксисі туралы уайымдамас бұрын жобалаудың негізгі концептуалды элементтеріне (жоюлар, түсініксіздік, сәйкессіздік) назар аударғандығын қамтамасыз етуі керек.

Құрылыс тұжырымдамалары

Дизайн тұжырымдамалары дизайнерге күрделі әдістерді қолдануға негіз береді. Дизайн тұжырымдамаларының жиынтығы қалыптасты, оның ішінде:

Абстракция – Бұл белгілі бір мақсат үшін маңызды ақпаратты ғана сақтап қалу үшін, түсінік немесе байқалатын құбылыстың ақпараттық мазмұнын азайту арқылы жалпылау процесі немесе нәтижесі. Бұл маңызды ерекшеліктерді, бірақ олардың толық мазмұнын немесе түсіндірмелерін бермей көрсету.

Нақтылау – Бұл дамыту процесі. Иерархия бағдарламалау тілінің операторларына (statement) жеткенше функцияның макроскопиялық сипаттамасын кезең-кезеңімен бөлу арқылы құрылады. Әр кезеңде берілген бағдарламаның бір немесе бірнеше операторы толыққанды операторларға жіктеледі. Абстракция және Нақтылау – бір-бірін толықтыратын ұғымдар.

Модульдік – Бағдарламалық архитектура модульдер деп аталатын компоненттерге бөлінеді.

Бағдарламалық архитектура – Бұл бағдарламаның жалпы құрылымы және осы құрылымның жүйе үшін тұжырымдамалық тұтастықты қамтамасыз ету жолдары. Сапалы бағдарламалық архитектура жобаның күтілетін нәтижесіне қатысты инвестицияны тиімді қайтаруға мүмкіндік береді, мысалы, өнімділік, сапа, кесте және құн тұрғысынан.

Басқару иерархиясы – Бағдарлама компонентінің ұйымдастырылуын көрсететін және басқару иерархиясын білдіретін бағдарлама құрылымы.

Құрылымдық бөлу – Бағдарлама құрылымын көлденең және тік бөлуге болады. Көлденең бөлулер әрбір негізгі бағдарлама функциясы үшін модульдік иерархияның жеке тармақтарын анықтайды. Тік бөлу басқару мен жұмыстың бағдарлама құрылымында жоғарыдан төменге қарай бөлінуі керек екенін көрсетеді.

Деректер құрылымы – Бұл деректердің жеке элементтері арасындағы логикалық қатынастың бейнеленуі.

Бағдарламалық процедура – Әрбір модульді жеке өңдеуге бағытталған.

Ақпаратты жасыру – Модульдердегі ақпаратқа мұқтаж болмаған басқа модульдердің қол жеткізе алмайтындай етіп, модульдер сипатталып, жобалануы керек.

Грейди Буч өзінің объектілік моделінде абстракцияны, инкапсуляцияны, модульдеуді және иерархияны бағдарламалық жасақтаманың негізгі принциптері ретінде атап көрсеткен. Осы төрт негізгі принциптерді білдіретін PHAME (Иерархия, Абстракция, Модульдеу және Инкапсуляциялау принциптері) аббревиатурасы кейде қолданылады.

Құрылыс мәселесі

Бағдарламалық жасақтаманы жобалауда көптеген аспектілерді қарастыру қажет. Әрбір фактордың маңыздылығы бағдарламалық жасақтаманың құрылу мақсаты мен күтілетін нәтижелерге сай болуы керек. Осы аспектілердің кейбіреулері:

Үйлесімділік – Бағдарламалық жасақтама басқа өнімдермен өзара іс-қимыл үшін жасалған өнімдермен жұмыс істей алуы тиіс. Мысалы, бағдарламалық жасақтама өзінің бұрынғы нұсқасымен кері үйлесімді болуы мүмкін. Кеңейтілімділік – Бағдарламаның негізгі архитектурасын үлкен өзгерістерге ұшыратпай, жаңа мүмкіндіктерді қосуға болады. Модульділік – Нәтижесіндегі бағдарламалық жасақтама жақсы анықталған, тәуелсіз компоненттерден тұрады, бұл оны күтіп ұстауды жеңілдетеді. Компоненттерді біріктіріп, қажетті бағдарламалық жүйені құру алдында оқшауланып сынауға және іске асыруға болады. Бұл бағдарламалық қамтамасыз етуді әзірлеу жобасында жұмысты бөлуге мүмкіндік береді. Қатеге төзімділік – Бағдарлама компоненттердің істен шығуына төтеп беруге және олардан қалпына келуге қабілетті. Жөндеуге қолжетімділік – Ақауларды жою немесе функционалдық өзгерістерді оңай жүзеге асыру шамасы. Модульділік пен кеңейтілімділік жоғары жөндеуге қолжетімділіктің нәтижесі болуы мүмкін. Сенімділік (бағдарламалық қамтамасыз етудің беріктігі) – Бағдарлама белгілі жағдайларда белгілі бір уақыт аралығында қажетті функцияларды орындай алуы тиіс. Қайта пайдалану мүмкіндігі – Бұрыннан бар бағдарламалық жасақтаманың кейбір немесе барлық аспектілерін басқа жобаларда аз немесе мүлдем өзгеріссіз пайдалану мүмкіндігі. Беруділік – Бағдарлама стресстік жағдайларда жұмыс істей алуы немесе күтпеген немесе жарамсыз кірісті қабылдауға төтеп беруі керек. Мысалы, оны жадтың жетіспеуіне төзімділікпен жобалауға болады. Қауіпсіздік – Бағдарлама жауыздық әрекеттер мен ықпалдарға қарсы тұруға және олардан қорғануға қабілетті. Пайдаланушыға ыңғайлылық – Бағдарламалық жасақтаманың пайдаланушы интерфейсі оның мақсатты пайдаланушылары үшін қолдануға оңай болуы тиіс. Параметрлердің бастапқы мәндері көптеген пайдаланушылар үшін жақсы таңдау боладындай етіп таңдалуы керек. Өнімділік – Бағдарлама өз міндеттерін пайдаланушы үшін қанағаттанарлық уақыт ішінде орындауы керек және көп жадты қажет етпеуі тиіс. Портативтілік – Бағдарлама әртүрлі жағдайлар мен орталарда қолданылуы тиіс. Өлшемділік – Бағдарлама деректердің көлемі немесе қосымша мүмкіндіктер немесе пайдаланушылар санының артуына оңай бейімделуі керек.

Құрылыс үлгілері

Бағдарламалық жасақтаманы жобалаушы бұрын басқалар қарастырып, тіпті шешкен дизайнның кейбір аспектілерін анықтауы мүмкін. Қайта ортақ проблеманы шешу жолын сипаттайтын шаблон немесе үлгі – дизайн үлгісі деп аталады. Мұндай үлгілерді қайта қолдану бағдарламалық жасақтаманы әзірлеу жылдамдығын арттырады.

Құрылыс ретінде код

Бағдарламалық жасақтамаға қатысты "дизайн" терминін қолданудың қиындығы, кейбір жағдайларда бағдарламаның бастапқы коды – осы бағдарламаның өзінің дизайны болып табылады. Осыған орай, "бағдарламалық дизайн" – дизайнның дизайнын жасау дегенді білдіреді. Эдсгер В. Дикстра осы семантикалық деңгейлердің қабаттасуын компьютерлік бағдарламалаудың "радикалды жаңалығы" деп атады, ал Дональд Кнут TeX құрамындағы тәжірибесін бағдарламаны іске асырмастан бұрын жобалауға тырысудың нәтижесіздігін көрсету үшін пайдаланды.