Ами то се подразбира!?

„Ами то се подразбира“!? Ако работите в софтуерният бранш вероятно сте чували този израз поне веднъж. Много пъти съм се заканвал да пиша нещо по този въпрос, но все отлагах. Сега известно време след последният ми спор по този въпрос реших да го сторя.

Обичайният разговор по въпроса е следният:

– Ами то се подразбира, че като има рекуаъйрмънт (демек изискване – б. пр.) да се изтриват блаблабла то трябва и да могат да се създават (или май беше обратното – б. пр.) – каза клиента/PM-a/PO-то, или някой друг с който водите тези дискусии във вашата организация
– От къде на къде – отговори програмиста

От тук нататък дискусията е предвидима. Ако имате късмета да разполагате с някакъв официален документ описващ изискванията към системата, може и да успеете да удържите фронта за известно време (примерно 2 дена), но в края на краищата решението винаги е едно и също. Това, което се е „подразбирало“ трябва да се направи. Разбира се отговорите на въпроса – защо – варират широко, но това надали има значение за вас, особено ако се налага целият ви дизайн, по който сте работили в предишните седмици и месеци трябва да се промени.

Това които искам да кажа на всички онези употребяващи израза „това и онова се подразбира“ е НЯМА ПОДРАЗБИРАЩ СЕ НЕЩА!. Това е единственото нещо, което се подразбира (за да уважим принципа, че всяко правило си има изключение :)). Запомнете го. Запишете си го на лист и си го залепете над леглото за да го гледате всяка сутрин като се събуждате. Медитирайте и размишлявайте върху този проблем. Помолете висшата сила, на която обикновено се молите да ви донесе просветление, защо това е така. Всяка вечер преди да заспите се запитайте – „Има ли подразбиращи се неща?“ и си отговорете „Няма подразбиращи се неща!“. Не го ли разберете обричате хората, които зависят от вас и вашите изисквания (а много вероятно и себе си) на провал.

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

Аксиомата, която ви дадох по-горе: „Няма подразбиращи се неща!“. Можем да докажем (т.е. превърнем в теорема). Използвайки следната аксиома: „Вие дефинирате изискванията на системата“ и изложението от предходният параграф можем да докажем, че „Няма аксиоми освен дефинираните от вас“. И тъй като по дефиниция – „подразбиращ се“ == „аксиоматичен“ можем да дефинираме „Няма подразбиращи се неща освен дефинираните от вас“. Следствието от това е, че ако „Нещо не е дефинирано, то не се подразбира“. Следователно можем рекурсивно да докажем, че „Няма подразбиращи се неща!“.

Ако горното не ви стига можете да продължите с медитацията върху проблема. И докато медитирате помнете, че не всички мислят като вас, не всички са умни като вас, не всички познават системата като вас и не всички ще направят същите изводи като вас. Разработката на софтуер не е точна наука, но дори работещите в точните науки понякога грешат. За това се запитайте – „Ако дори в точните науки може да се допусне грешка, човешка, какво остава за не-точните науки?“. А след като си отговорите на този въпрос се запитайте – „Трябва ли да дефинирам всичко? Дори подразбиращите се неща?“.

Ако отговорът на последният въпрос е да, то вие сте с една стъпка по-близо до съвършенството. Ако ли пък не, е „Никой не е съвършен“ …

This entry was posted in Софтуерно инженерство and tagged , . Bookmark the permalink.

Comments are closed.