Знайте, Intuit, лекция, проблеми на развитието на сложни софтуерни системи

Анотация: Концепцията за комплексна програма и различия на сложни програми от проста. Основните проблеми на развитие на комплексни програми. Към софтуерното инженерство с основните принципи на работа с сложни системи, които са приложими към широк спектър от задачи.

"Big" програма и "малки"

Основната тема на курса - как да се развиват "големи" и сложни програми.

Всеки, след като е написал програма, тя може много добре да си представите как да се разработи "малък" програма, обикновено решаваща един конкретен проста задача и са предназначени най-често се използва от един човек или малка група от хора.

Пример за това е програмата. изчислява достатъчно (но не прекалено много, не повече от 30 000), броят на знаците.

Ние използваме следните формули:

Като се има предвид, подходящ Java програма може да изглежда така:

Програмата - "малък", тъй като размера (

150 линии) и по други начини:

  • Тя решава един ясни цели (постижения на десетични цифри?) В най-известните ограничения (не повече от 30 000 знака), освен това, не е много важно за всички практически или изследователски дейности.
  • Без значение колко бързо става това - да се изчисли 30000 цифри отнема не повече от половин час, дори и на по-стари компютри, и това е достатъчно.
  • Щети от неправилна експлоатация на програмата е почти нула (с изключение на възможността за разпадането на тяхната система, които се извършват и други, по-важни задачи).
  • Не е нужно да допълни програмата с нови функции, почти никой не трябва да разработи нови версии или за коригиране на грешки, открити.
  • Във връзка с горното, наистина не е необходимо да се направи програмата по-подробна и ясна документация - за един човек, който я интересуваше, не бъди твърде трудно да разбера как да го използвате, просто изходния код.

Комплекс или "голям" програма, наричана още софтуерни системи, софтуерни системи, софтуерни продукти. различен от този "малък" е не толкова в размера (въпреки че те обикновено са много повече), но с наличието на допълнителни фактори, свързани с тяхното търсене и желанието на потребителите да плащат пари, за закупуване на програмата, както и за неговата подкрепа и дори за специално обучение за работа с това.

Обикновено комплексна програма има следните свойства:

  • Тя решава един или повече от свързаните с това задачи, често в началото не са имали ясна формулировка толкова важно за всички физически или юридически лица, които стават все по-значителни ползи от неговото използване.
  • Важно е, че то е лесно за използване. По-специално, тя трябва да включва достатъчно пълна и ясна документация за потребителя, може би също специфична документация за администратори, както и набор от документи за обучение за работа с програмата.
  • лошото й представяне на реални данни, води до значителни загуби за потребителя.
  • Нейната неизправност причинява значителни щети на потребителите и други организации и лица, дори и да повреди не се срещат твърде често.
  • За да изпълни задачите, той трябва да си взаимодействат с други софтуерни и хардуерни и софтуерни системи, които работят на различни платформи.
  • Потребителите, които работят с него, да получат допълнителни ползи от факта, че програмата е разработена, тя въвежда нови функции и коригиране на грешки. Трябва да имате проектната документация, която дава възможност да се развива, може би не на разработчиците, които са я създали, без високата цена на обратен инженеринг (реинженеринг).
  • В своето развитие участват значителен брой хора (повече от 5 човека). "Big" е почти невъзможно да се напише програма на първия опит, с малко усилия и сам.
  • Много по-голям брой потенциални своите потребители, а дори и повече от тези лица, чиито дейности ще бъдат засегнати по един или друг от своята работа и резултати начин.

Един пример за "голям" програмата може да служи като стандарт клас библиотека Java. член на комплекта за развитие на Java [1].

Строго погледнато, нито една от тези имоти не се изисква за програмата може да се счита за "велик", но ако има два или три от тях са достатъчно уверени, можете да се твърди, че това е "голям".

Въз основа на някои от тези свойства може да се заключи. че "голям" програма или софтуер, система често не е просто код или изпълним файл. и той също така включва набор от дизайн и потребителска документация.

Изискват се специални техники за разработване на софтуерни системи - както вече бе споменато, те не могат да напише "наглост". Проучването на организационни, инженерно-технически аспекти на разработката на софтуер. включително разработването на методи, участващи в дадена дисциплина, наречена софтуерно инженерство. Повечето от трудностите при разработването на софтуерни системи, свързани с организацията на икономически ефективна съвместна работа на много хора, което води до практически полезни резултати. Това изисква да се вземат следните аспекти.

Важно е да се отбележи, че практическата полза от сложен софтуер система не е задължително "право".

Повечето опитни предприемачи и изследователи смятат, че на практика значителни софтуерни системи винаги съдържат грешки. В прехода от "малките" програми за "голям" концепция за "правилната" програма става почти безсмислена. Говорейки за софтуерната система (за разлика от по-горе програма за изчисляване на броя?), Не може да се каже, че това е "правилно", т.е. винаги правилно решаване на всички задачи, възложени му. Този факт се свързва както с практическата невъзможност за пълното доказване или проверка на тази и на факта, че причината за съществуване на софтуерна система - задоволяване на нуждите и изискванията на различни заинтересовани страни. И тези нужди са не само добре дефинирани, различна за различните групи потребители, и понякога е противоречива, но и значително ще се променят с течение на времето.

В тази връзка, вместо да се вземат предвид "правилни" и "неправилни" софтуерни системи, поради практическата липса на първото, се счита за "достатъчно добро качество" и "недостатъчно добро качество".

Ето защо, основните проблеми на развитието на сложни софтуерни системи, свързани с намирането на разумен компромис между разходите за развитие и качеството на своите резултати. Цената включва всички видове ресурси, използвани, от които прекарани най-важният път, бюджета на проекта и използването на персонала. Удовлетворението от работата с програмата (и съответно приходите от продажби и услуги с добавена стойност) и среща на разработчиците от създаването му определя от качеството на програмата, която включва аспекти като набор от възможности, предлагани, надеждността. използваемост. гъвкавост, лекота на извършване на промени и корекции на грешки. По-подробно концепцията за качество на софтуера ще бъдат обсъдени в по-късен лекция.

софтуер част (софтуер) не може да се разглежда отделно от хардуерни и софтуерни системи, където се включват като неразделна част. Проучването на въпроси, свързани с развитието и поддръжката на софтуерни и хардуерни системи, инженеринг на системи. В неговия обхват тя получава много проблеми, свързани с хардуерни системи и осигуряване на необходимата степен на интеграция на софтуерни и хардуерни компоненти. Ние само ще от време на време да повдигне въпроси, свързани с инженерни системи като цяло, се ограничава предимно до аспектите, свързани директно към софтуера.

Този курс ще се счита за различни подходи за решаване на проблемите, свързани с развитието, свързани с двата компонента на дилемата "ресурси-качество" за създаване на комплексни програми. За представянето на тези подходи въвежда система от понятия, свързани с компютърни системи и процесите на тяхното създаване и ефективно да развиват такива системи, за да се оцени и план за техните свойства. Те включват такива неща като жизнен цикъл на софтуера, качеството на софтуера, процесът по разработване на софтуер, за да софтуерните изисквания, софтуерната архитектура, дизайн модели, и така нататък.

Освен това, специално внимание се обръща в крак с един от подходите за развитието на сложен софтуер. компонент за развитие. предлага да се изгради такава система на отделни елементи последователно - компоненти, всеки от които на свой ред. Тя може да се разглежда като отделна софтуерна система. Курсът представлява въведение към съвременната развитие компонент технология на софтуерни системи, базирани на J2EE платформи. NET.

Проблемите, свързани с управлението на ресурсите за развитие, включително планирането на конкретни действия в перспектива, създаването на ефективни екипи от разработчици са свързани с управлението на проекти. която ще се фокусира върху последната лекция на курса.

Ние разработихме т.нар технологични процеси въз основа на опит за проектиране на големи системи. съдържа достатъчно подробно описание на различните аспекти на тяхното създаване и експлоатация. Тези описания дават отговори на въпроси за това как трябва да се направи, за да се развива, какъв човек трябва да участват в него, и при какви етапи, които дейности и в каква последователност трябва да се извършват, които документи са техните входове и какви документи, модели, други части на програмата системи трябва да бъдат подготвени в резултат на всяка операция. Елементи на тези техники ще бъдат посочени по време на курса. Също така трябва да се считат за индустриалните стандарти, описващи разработена въз основа на голям брой реални проекти подходи за изграждане на сложни софтуерни системи.

Протестът срещу общността като бюрократизация програмирането и механични опити за използване на теоретични препоръките на довело до популярния движение сега е оживен разработка на софтуер (Agile Разработка на софтуер). Един пример за "живот" на процеса на развитие е набор от техники, известни като Extreme Programming (Extreme Programming. XP). Някои аспекти на тези подходи ще бъдат обсъдени в този курс.