Кіріспе

1975 жылы Фред Брукс жазған бағдарламалық жасақтама инженерлігі кітабы "The Mythical Man-Month: Essays on Software Engineering" – Фред Брукс авторлығындағы бағдарламалық жасақтама инженерлігі және жобаны басқару туралы кітап. Алғаш рет 1975 жылы жарық көрген, кейін 1982 және 1995 жылдары қайта басылған. Кітаптың негізгі ойы – мерзімінен қалып қойған бағдарламалық жасақтама жобасына адам күшін қосу оны одан да кешіктіреді. Бұл идея Брукс заңы деп белгілі, және екінші жүйе әсерімен және прототиптеуді қолдаумен бірге талқыланады. Брукс кітабындағы тұжырымдары OS/360 жүйесін жасау кезінде IBM-дегі тәжірибесіне негізделген. Ол жоспардан қалып қойған жобаға бағдарламашыларды қосып, кейіннен бұл шешімнің жобаны одан әрі кешіктіргенін түсінді. Сондай-ақ, ол ALGOL компиляторын жасау жобасына, қанша адам жұмыс істесе де, алты ай жеткілікті дейтін қателік жіберді (бірақ жоба көбірек уақыт алды). Менеджерлердің жобаларды дамыту кезінде осындай қателіктерді қайталау бейімділігіне байланысты Брукс кітабын "Бағдарламалық жасақтама инженерлігінің Киелі кітабы" деп атап, "барлығы одан цитата келтіреді, бірақ оны оқитындар аз, ал оның кеңестерін сақтайтындар одан да аз" дейді.

Басылымдар

Бұл еңбек алғаш рет 1975 жылы жарық көрген, 1982 жылы түзетулер енгізіліп қайта басылған, ал 1995 жылы төрт қосымша тараумен мерейтойлық басылымда қайта жарық көрген, соның ішінде автордың түсіндірмелерімен бірге "Күміс оқ жоқ" эссесі де қайта басылған.

Мифтік адам-ай

Брукс жоспарлаудағы сәтсіздіктердің бірнеше себебін талқылайды. Оның ең маңызды тұжырымы – Брукс заңы: Кешігіп жатқан бағдарламалық жобаға адам күшін қосу оны одан да кешіктіреді. «Адам-ай» – бір адамның бір айда атқаратын жұмыстың гипотетикалық бірлігі. Брукс заңы бойынша, «адам-айлар» арқылы пайдалы жұмысты өлшеу мүмкіндігі – миф, сондықтан бұл кітаптың негізгі идеясы болып табылады. Күрделі бағдарламалау жобаларын жұмысшылар арасында байланыссыз және тапсырмалар мен оларды орындайтындар арасындағы күрделі өзара қатынастарды құрмастан, жеке-жеке тапсырмаларға толық бөлу мүмкін емес. Сондықтан, жоспардан қалып қойған жобаға көбірек бағдарламашыларды қосу оны одан да кешіктіруі мүмкін. Бұл себебі, жаңа бағдарламашылардың жобамен танысуына және байланыс көлемінің артуына кеткен уақыт, жобаға қолжетімді уақытты үнемі жеміп қояды. Егер n адам бір-бірімен байланыс жасаса, n саны артқан сайын олардың өнімділігі төмендейді, ал ол теріс мәнге жеткенде, әр қосылған адаммен жоба одан да кешігеді. Топтық байланыс формуласы: n(n − 1)/2. Мысал: 50 бағдарламашы 50 × (50 – 1)/2 = 1225 байланыс арнасын құрайды.

Күміс оқ жоқ

Брукс "No Silver Bullet – Бағдарламалық инженериядағы мәні мен жағдайлар" деген тарауды және "No Silver Bullet' қайта қарастырылды" деген тарауда одан әрі ойларды "The Mythical Man Month" кітабының мерейтойлық басылымына қосты. Брукс бір ғана "күміс оқ" жоқ екенін қатыстыра айтады: "Технологияда да, басқару әдістемелерінде де өнімділікті, сенімділікті, қарапайымдылықты он жыл ішінде тіпті бір рет [он есе] арттыруға өздігінен уәде беретін бірде-бір жаңалық жоқ". Бұл пікір кездейсоқ күрделілік пен қажетті күрделілік арасындағы айырмашылыққа негізделген, бұл Амдал заңының "параллельдеуге болатын" және "қатаң тізбекті" арасындағы айырмашылыққа ұқсас.

Екінші жүйелік әсер

Екінші жүйелік эффекті бойынша, архитектор екінші жүйені жобалағанда, ол олардың ең қауіпті жүйесі болуы мүмкін, себебі олар бастапқы жүйеге уақыт шектеулеріне байланысты қоспаған барлық мүмкіндіктерді енгізуге тырысады. Сондықтан, екінші жүйеге кіріскен инженер оны артық күрделендіруге бейім екенін есте ұстауы керек.

Қателердің азайтылмайтын санына қарай үрдіс

Автор тиісті күрделі жүйеде белгілі бір төмендетілмейтін қателер саны бар екенін атап өтеді. Көрініс берген қателерді түзетуге жасалған кез келген тыраныс басқа қателердің пайда болуына себеп болады.

Прогрессті бақылау

Брукс былай деп жазды: "Сұрақ: Ірі бағдарламалық жоба бір жылға қалай кешігеді? Жауап: Күн сайын, бірте-бірте!" Көптеген салалардағы шағын кешігулер жиналып, үлкен кешіктіруге әкеледі. Басқарудың барлық деңгейінде шағын, жеке мақсаттарға үнемі назар аудару қажет.

Тұжырымдамалық тұтастығы

Пайдаланушыға қолайлы жүйе жасау үшін, жүйе тұжырымдық тұтастыққа ие болуы керек, және мұндай тұтастыққа тек архитектураны іске асырудан бөліп қарау арқылы қол жеткізіледі. Пайдаланушының мүддесін қорғайтын бас архитектор (немесе архитекторлардың шағын тобы) жүйеге қандай элементтер енгізілетінін және қандайлары алынып тасталатынын анықтайды. Архитектор немесе архитекторлар тобы жүйенің қандай функцияларды орындауы керектігін анықтап, осы көзқарасты команданың барлық мүшесіне түсіндіруі қажет. Жаңа идея, егер ол жүйенің жалпы дизайнымен үйлеспесе, жүйеге енгізілмеуі мүмкін. Шындығында, пайдаланушыға қолайлы жүйені қамтамасыз ету үшін жүйе өз мүмкіндіктеріне қарамастан, қасақана түрде азырақ мүмкіндіктермен жабдылуы мүмкін. Егер жүйе тым күрделі болса, көптеген мүмкіндіктер пайдаланылмай қалады, себебі оларды үйренуге ешкімнің уақыты жетпейді.

Қолданба

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

Пилоттық жүйе

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

Ресми құжаттар

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

Жобаның бағасы

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

Байланыс

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

Хирургиялық топ

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

Кодты тоқтату және жүйелік нұсқаны басқару

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

Арнайы құралдар

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