kritikuya produkty, ne udovletvoryayushchie etomu interfejsu. |to otlichitel'nyj primer tehnologii, rekomendovannoj v glave 6 dlya dostizheniya edinoobraziya putem pooshchreniya drugih storon neposredstvenno vklyuchat' v svoi produkty imeyushchijsya kod vmesto razrabotki novyh programm soglasno imeyushchimsya specifikaciyam. Sud'ba WIMP: ustarevanie. Nesmotrya na vse dostoinstva, po moemu mneniyu, interfejs WIMP cherez pokolenie stanet dostoyaniem istorii. Ukazanie kursorom ostanetsya sposobom zadaniya sushchestvitel'nyh pri upravlenii nashimi komp'yuterami. Dlya vyrazheniya glagolov stanet ispol'zovat'sya rech'. Takie instrumenty, kak Voice Navigator dlya Makov i Dragon dlya PC, uzhe predostavlyayut takuyu vozmozhnost'. Ne razrabatyvajte programm na vybros, kaskadnaya model' neverna! V glave 11 daetsya radikal'nyj sovet: "planirujte vybrosit' pervuyu programmu, vam vse ravno pridetsya eto sdelat'". Sejchas ya schitayu eto oshibochnym - ne v silu chrezmernogo radikalizma, no v silu chrezmernoj uproshchennosti. Samoj bol'shoj oshibkoj etoj koncepcii yavlyaetsya kosvennoe prinyatie klassicheskoj posledovatel'nosti - v vide kaskada - modeli sozdaniya programmy. |ta model' proishodit ot struktury diagrammy Granta dlya poetapnogo processa, kotoruyu chasto izobrazhayut, kak na risunke 19.1. V klassicheskoj stat'e 1970 goda Vinton Rojs (Winton Royce) usovershenstvoval posledovatel'nuyu model' putem: - dobavleniya nekotoroj obratnoj svyazi s predshestvuyushchimi etapami; - ogranicheniya obratnoj svyazi tol'ko neposredstvennymi predshestvennikami, chtoby isklyuchit' vyzyvaemye imi izderzhki i zaderzhki v vypolnenii grafika. On predvoshitil "MCH-M", rekomendovav razrabotchikam "delat' rabotu dvazhdy"8. Glava 11 - ne edinstvennaya, na kotoruyu povliyala kaskadnaya model'. Ona prohodit cherez vsyu knigu, nachinaya s pravila planirovaniya v glave 2. |to prakticheskoe pravilo otvodit 1/3 vremeni na planirovanie, 1/6 - na napisanie programm, 1/4 - na testirovanie komponentov i 1/4 - na sistemnoe testirovanie. Ris. 19.1 Kaskadnaya model' sozdaniya programmy Osnovnoe zabluzhdenie kaskadnoj modeli sostoit v predpolozheniyah, chto proekt prohodit cherez ves' process odin raz, arhitektura horosha i prosta v ispol'zovanii, proekt osushchestvleniya razumen, a oshibki v realizacii ustranyayutsya po mere testirovaniya. Inymi slovami, kaskadnaya model' ishodit iz togo, chto vse oshibki budut sosredotocheny v realizacii, a potomu ih ustranenie proishodit ravnomerno vo vremya testirovaniya komponentov i sistemy. "Planirujte na vybros" dejstvitel'no rezko napadaet na eto zabluzhdenie. Oshibka ne v diagnoze, a v lekarstve. Sejchas ya predpolozhil, chto pervuyu sistemu mozhno otbrosit' ili pereproektirovat' ne vsyu celikom, a po chastyam. Horosho, esli eto tak, no pri etom ne zatragivaetsya koren' problemy. V kaskadnoj modeli sistemnoe testirovanie, a sledovatel'no i testirovanie pol'zovatelem, otodvigaetsya v konec processa sozdaniya programmy. Poetomu est' shans obnaruzhit' krajnie neudobstva dlya pol'zovatelya, ili nepriemlemye tehnicheskie harakteristiki, ili opasnuyu uyazvimost' k oshibkam ili zlonamerennym dejstviyam pol'zovatelya lish' v samom konce razrabotki. Izuchenie specifikacij pri al'fa-testirovanii naceleno na rannee obnaruzhenie takih oshibok, no nichto ne mozhet zamenit' neposredstvennyh pol'zovatelej. Vtorym nedostatkom kaskadnoj modeli yavlyaetsya predpolozhenie, chto sistema stroitsya srazu vsya celikom dlya testirovaniya s nachala do konca posle togo, kak zaversheny vse proektnye razrabotki, bol'shaya chast' napisaniya programm i znachitel'naya chast' testirovaniya komponentov. K neschast'yu, kaskadnaya model', eto preobladavshee v 1975 godu predstavlenie o programmnyh proektah, byla vklyuchena v DOD-STD-2167 - specifikaciyu Ministerstva oborony dlya lyubogo voennogo programmnogo obespecheniya. Po etoj prichine ona prosushchestvovala dolgoe vremya posle togo, kak bol'shaya chast' dumayushchih praktikov osoznala ee neadekvatnost' i otkazalas' ot nee. K schast'yu, v MO pozdnee ponyali istinu.9 Neobhodimo dvigat'sya protiv techeniya. Opyt i idei iz kazhdoj raspolozhennoj nizhe po techeniyu chasti processa sozdaniya programmy, kak energichnyj losos', dolzhny prygat' vverh po techeniyu, inogda srazu cherez neskol'ko etapov, i vozdejstvovat' na deyatel'nost' naverhu. Proektnye razrabotki pokazhut, chto nekotorye predusmotrennye arhitekturoj vozmozhnosti uhudshayut tehnicheskie harakteristiki, i potomu arhitektura dolzhna byt' pererabotana. Programmirovanie pri realizacii vyyavit, chto nekotorye funkcii nepomerno uvelichivayut trebovaniya k pamyati, poetomu nuzhno vnesti izmeneniya v arhitekturu i razrabotku. Poetomu vpolne mozhet potrebovat'sya osushchestvit' neskol'ko iteracij cikla arhitektura-razrabotka, prezhde chem nachat' kakuyu-libo programmnuyu realizaciyu. Model' poshagovogo sozdaniya luchshe: posledovatel'noe utochnenie Postroenie karkasa s nachala do konca. Garlan Millz (Harlan Mills), rabotayushchij v sisteme s razdeleniem vremeni, davno uzhe rekomenduet stroit' osnovnoj cikl oprosa sistemy real'nogo vremeni s vyzovami podprogramm (zaglushkami) dlya vseh funkcij (ris. 19.2), no pustymi podprogrammami. Otkompilirujte ego, protestirujte, i on budet idti cikl za ciklom, bukval'no nichego ne delaya, no delaya eto bez oshibok.10 Ris. 19.2 Na sleduyushchem shage my naveshivaem modul' vvoda (vozmozhno, primitivnyj) i modul' vyvoda. Voila! Rabotayushchaya sistema, delayushchaya nechto, vozmozhno, neinteresnoe. Teper', funkciya za funkciej, my stroim i dobavlyaem moduli. Na kazhdom shage my imeem rabotayushchuyu sistemu. Pri dostatochnom trudolyubii na kazhdom shage my imeem otlazhennuyu, protestirovannuyu sistemu. (Po mere rosta sistemy rastet i tyazhest' povtornogo testirovaniya vseh novyh modulej po vsem prezhnim kontrol'nym primeram.) Posle togo kak na primitivnom urovne kazhdaya funkciya rabotaet, my uluchshaem ili perepisyvaem odin modul' za drugim, poshagovo narashchivaya sistemu. Inogda dlya nadezhnosti my perepisyvaem ishodnyj dvizhushchij cikl, a vozmozhno, i ego interfejsy s modulyami. Poskol'ku v lyuboj moment vremeni u nas est' rabotayushchaya sistema: - mozhno ochen' rano nachat' testirovanie pol'zovatelyami; - mozhno prinyat' strategiyu razrabotki v sootvetstvii s byudzhetom, polnost'yu zashchishchayushchuyu ot pererashoda vremeni ili sredstv (vozmozhno, za schet sokrashcheniya funkcional'nosti). V techenie 22 let ya prepodaval v laboratorii programmnoj inzhenerii Universiteta shtata Severnaya Karolina, inogda vmeste s Devidom Parnasom. Na etih zanyatiyah brigady, obychno sostoyavshie iz chetyreh chelovek, v techenie odnogo semestra dolzhny byli postroit' nekotoruyu real'nuyu prikladnuyu programmnuyu sistemu. Primerno poseredine etogo sroka ya stal prepodavat' inkrementnuyu razrabotku. YA byl porazhen, kakoj vozbuzhdayushchij effekt na moral'nyj duh gruppy okazyvaet pervaya kartinka na ekrane, pervaya rabotayushchaya sistema. Semejstva Parnasa. Devid Parnas byl glavnym vlastitelem dum v programmotehnike v techenie vsego etogo 20-letnego perioda. Vsem izvestna ego ideya skrytiya informacii. Menee izvestna ochen' vazhnaya ideya Parnasa o proektirovanii programmnogo produkta kak semejstva vzaimosvyazannyh produktov.11 On trebuet, chtoby proektirovshchik imel v vidu kak dal'nejshee razvitie, tak i novye versii produkta i opredelyal ih funkcional'nye ili mezhplatformennye razlichiya tak, chtoby stroit' derevo rodstvennyh produktov (ris. 19.3). Ris. 19.3 Fokus pri proektirovanii takogo dereva sostoit v tom, chtoby blizhe k kornyu pomestit' te resheniya, izmenenie kotoryh naimenee veroyatno. Takaya strategiya proektirovaniya povyshaet povtornuyu ispol'zuemost' modulej. Eshche vazhnee, chto ee mozhno rasshirit', vklyuchaya ne tol'ko postavlyaemye produkty, no i posledovatel'nye promezhutochnye versii, sozdannye po strategii inkrementiruemyh sborok. V etom sluchae produkt razvivaetsya cherez promezhutochnye stadii s minimumom vozvrata nazad. Podhod Microsoft: "ezhevechernyaya sborka". Dzhejms Makkarti (James McCarthy) opisal mne process, ispol'zovavshijsya im i drugimi v Microsoft. |to poshagovoe narashchivanie, dovedennoe do logicheskogo konca. On pishet: Sdelav pervuyu postavku, novye versii my postavlyaem s dopolnitel'nymi funkciyami, po sravneniyu s sushchestvuyushchim rabotayushchim produktom. Pochemu dolzhen byt' inym process pervonachal'noj sborki? S momenta dostizheniya nami pervoj vehi (u pervoj postavki tri promezhutochnyh vehi) my kazhdyj vecher zanovo sobiraem razrabatyvaemuyu sistemu (i progonyaem kontrol'nye primery). Cikl sborki stanovitsya ritmom zhizni proekta. Kazhdyj vecher odna ili bolee brigad programmistov, provodyashchih testirovanie, registriruyut moduli s novymi funkciyami. Posle kazhdoj sborki u nas est' rabotayushchaya sistema. Esli sborka okazyvaetsya neudachnoj, my ostanavlivaem ves' process, poka oshibka ne budet najdena i ispravlena. V lyuboj moment vse v gruppe znayut polozhenie del. |to dejstvitel'no tyazhelo. Trebuetsya vydelenie bol'shih resursov, no eto upravlyaemyj process, proslezhivaemyj i ponyatnyj. On vyzyvaet u komandy doverie k sebe. A doverie opredelyaet moral', emocional'noe sostoyanie. Takoj process udivlyaet i dazhe shokiruet razrabotchikov v drugih organizaciyah. Odin iz nih govorit: "YA vzyal sebe za pravilo delat' sborku kazhduyu nedelyu, no ezhednevnaya sborka, ya dumayu, potrebuet slishkom mnogo truda." I eto, vozmozhno, verno. Naprimer, v Bell Northern Research sobirayut sistemu, sostoyashchuyu iz 12 millionov strok, raz v nedelyu. Inkrementnaya sborka i bystroe maketirovanie. Poskol'ku inkrementnaya razrabotka pozvolyaet rano nachat' testirovanie real'nymi pol'zovatelyami, v chem ee otlichie ot bystrogo maketirovaniya? Mne kazhetsya, chto oni svyazany, no razlichayutsya. Odnim mozhno pol'zovat'sya bez drugogo. Harel daet poleznoe opredelenie maketa: (versiya programmy, kotoraya) otrazhaet tol'ko proektnye resheniya, prinyatye v processe podgotovki konceptual'noj modeli, a ne resheniya, vyzvannye soobrazheniyami realizacii.12 Mozhno postroit' maket, kotoryj vovse ne yavlyaetsya chast'yu produkta, razvivayushchegosya v napravlenii postavki. Naprimer, mozhno sozdat' maket interfejsa, za kotorym stoit ne real'no rabotayushchaya programma, a lish' konechnyj avtomat, zastavlyayushchij ego imitirovat' prohozhdenie sostoyanij. Mozhno dazhe maketirovat' i testirovat' interfejsy metodom volshebnika izumrudnogo goroda, kogda spryatannyj chelovek imitiruet otklik sistemy. Takoe maketirovanie mozhet byt' ves'ma poleznym dlya bystrogo polucheniya obratnoj svyazi ot pol'zovatelya, no ono nahoditsya sovershenno v storone ot testirovaniya produkta, kotoryj gotovitsya k postavke. Analogichno, razrabotchiki mogut poprobovat' postroit' vertikal'nyj srez produkta, v kotorom polnost'yu realizovan ves'ma ogranichennyj nabor funkcij, chtoby zaranee prolit' svet na te mesta, gde mogut tait'sya opasnosti dlya proizvoditel'nosti produkta. V chem sostoit razlichie mezhdu sborkoj na pervoj vehe v procedure Microsoft i bystrym maketom? V funkciyah. Produkt s pervoj vehi mozhet imet' takuyu ogranichennuyu funkcional'nost', chto ni dlya kogo ne budet predstavlyat' interesa. Gotovnost' produkta k postavke opredelyaetsya zavershennost'yu v predostavlenii poleznogo nabora funkcij i svoim kachestvom, uverennost'yu v nadezhnoj rabote. Parnas byl prav, a ya - net v otnoshenii sokrytiya informacii V glave 7 ya protivopostavlyayu dve tochki zreniya na to, v kakoj mere kazhdyj uchastnik komandy mozhet imet' pravo ili pooshchryat'sya k znaniyu proektov i tekstov programm, sozdannyh kollegami. Vo vremya proekta Operating System/360 my reshili, chto vse programmisty dolzhny videt' ves' material, t.e. u kazhdogo programmista byla rabochaya tetrad' proekta, kotoraya k koncu naschityvala svyshe 10000 stranic. Harlan Millz ubeditel'no dokazyval, chto "programmirovanie dolzhno byt' otkrytym processom", chto predostavlenie vsej raboty na obshchee obozrenie sposobstvuet kontrolyu kachestva kak blagodarya davleniyu so storony kolleg, zastavlyayushchemu rabotat' horosho, tak i blagodarya tomu, chto kollegi dejstvitel'no nahodyat promahi i oshibki. |tot vzglyad rezko protivorechit mneniyu Devida Parnasa o tom, chto programmnye moduli dolzhny byt' inkapsulirovany, s horosho opredelennymi interfejsami, a vnutrennost' takih modulej dolzhna byt' chastnoj sobstvennost'yu programmista, nevidimoj snaruzhi. Programmisty effektivnee vsego rabotayut, buduchi ograzhdeny ot vnutrennostej chuzhih modulej.13 V glave 7 ya zaklejmil ideyu Parnasa kak "recept katastrofy". Parnas byl prav, a ya oshibalsya. Segodnya ya ubezhden, chto ogranichenie informacii, chasto osushchestvlyaemoe teper' metodami ob容ktnogo programmirovaniya, yavlyaetsya edinstvennym sposobom podnyat' uroven' programmnyh razrabotok. Ispol'zuya drugie metody, mozhno dejstvitel'no popast' v bedu. Soglasno metodike Millza programmisty mogut poluchit' podrobnosti semantiki interfejsov, s kotorymi oni rabotayut, uznav, chto nahoditsya "po tu storonu". Ukryvanie etoj semantiki mozhet byt' prichinoj sistemnyh oshibok. S drugoj storony, metodika Parnasa sposobstvuet ustojchivosti pri vnesenii izmenenij i bol'she podhodit k strategii proektirovaniya, predpolagayushchej izmeneniya v budushchem. V glave 16 utverzhdaetsya sleduyushchee: - bol'shaya chast' rosta proizvoditel'nosti razrabotki programmnogo obespecheniya obespechena ustraneniem vtorostepennyh trudnostej, takih kak neudobnye yazyki programmirovaniya i medlennaya oborachivaemost' paketnoj obrabotki; - legkih reshenij v etom napravlenii prakticheski ne ostalos'; - radikal'nogo progressa mozhno dobit'sya, razreshiv sushchestvennye slozhnosti modelirovaniya slozhnyh konceptual'nyh konstrukcij. Samoe ochevidnoe na etom puti - priznat', chto programmy sostavlyayutsya iz konceptual'nyh blokov, znachitel'no bolee krupnyh, chem otdel'nye operatory yazykov vysokogo urovnya: podprogramm, ili modulej, ili klassov. Esli my sumeem ogranichit' proektirovanie i postroenie programm zadachej soedineniya vmeste i parametrizacii takih blokov iz ranee sozdannyh naborov, to radikal'no povysim konceptual'nyj uroven' i izbavimsya ot ogromnogo ob容ma rabot i shirokih vozmozhnostej dlya oshibok, sushchestvuyushchih na urovne otdel'nyh operatorov. Dannoe Parnasom opredelenie modulej s sokrytiem informacii bylo pervym otkrytym shagom v etoj kriticheski vazhnoj programme issledovanij i idejnym provozvestnikom ob容ktno-orientirovannogo programmirovaniya. On opredelil modul' kak programmnyj ob容kt s sobstvennoj model'yu dannyh i sobstvennym naborom operacij. Dostup k ego dannym mozhet byt' osushchestvlen tol'ko cherez imeyushchiesya v nem operacii. Sleduyushchij shag yavilsya vkladom neskol'kih issledovatelej: razvitie modulej Parnasa v abstraktnyj tip dannyh, iz kotorogo mozhno proizvodit' mnogo ob容ktov. Abstraktnyj tip dannyh obespechivaet edinoobraznyj sposob predstavleniya i zadaniya interfejsov modulej, a takzhe disciplinu dostupa, kotoruyu legko osushchestvlyat'. Tretij shag, ob容ktno-orientirovannoe programmirovanie, vvodit vazhnoe ponyatie nasledovaniya, pri kotorom klassy (tipy dannyh) po umolchaniyu imeyut atributy svoih predkov v ierarhii klassov.14 To, chto my rasschityvaem poluchit' ot ob容ktno- orientirovannogo programmirovaniya, proishodit, v sushchnosti, ot pervogo shaga, inkapsulyacii modulej, plyus ideya zaranee podgotovlennyh bibliotek modulej ili klassov, sproektirovannyh i protestirovannyh s cel'yu povtornogo ispol'zovaniya. Mnogie predpochli proignorirovat' tot fakt, chto takie moduli ne prosto programmy, a programmnye produkty v tom smysle, kotoryj raz座asnen v glave 1. Naprasno rasschityvat' na uspeshnoe povtornoe ispol'zovanie modulej, ne oplachivaya nachal'nye izderzhki na razrabotku kachestvennyh programmnyh modulej: obobshchennyh, nadezhnyh, protestirovannyh i dokumentirovannyh. Ob容ktno- orientirovannoe programmirovanie i povtornoe ispol'zovanie obsuzhdalis' v glavah 16 i 17. Naskol'ko mifichen cheloveko-mesyac? Model' i dannye Bema V techenie ryada let byli vypolneny mnogochislennye kolichestvennye issledovaniya proizvoditel'nosti truda programmistov i vliyayushchih na nee faktorov, osobenno sootnoshenij mezhdu obespechennost'yu personalom i grafikom rabot. Naibolee obstoyatel'noe issledovanie sdelano Barri Bemom (Barry Boehm) na osnovanii primerno 63 proektov, v osnovnom v aerokosmicheskoj oblasti, iz nih okolo 25 - v TRW. Ego rabota "|konomika razrabotki programmnogo obespecheniya" soderzhit ne tol'ko rezul'taty, no i ryad poleznyh modelej zatrat s narastayushchej slozhnost'yu. Hotya nesomnenno, chto primenyaemye v modelyah koefficienty razlichny dlya obychnyh kosmicheskih programm i dlya programm, sozdavaemyh v aerokosmicheskoj oblasti po pravitel'stvennym standartam, vse zhe ego modeli podkreplyayutsya ogromnym kolichestvom dannyh. YA dumayu, chto kniga budet poleznym klassicheskim trudom i cherez pokolenie. Poluchennye im rezul'taty uverenno podkreplyayut soderzhashcheesya v MCH-M utverzhdenie o tom, chto sootnoshenie mezhdu chislennost'yu zanyatyh i vremenem vypolneniya proekta daleko ne linejnoe, chto cheloveko-mesyac dejstvitel'no yavlyaetsya mificheskoj meroj proizvoditel'nosti. V chastnosti, on schitaet:15 - Sushchestvuet optimal'noe, s tochki zreniya zatrat, vremya vypolneniya grafika dlya pervoj postavki: T = 2,5 (CHM)1/3. To est' optimal'noe vremya v mesyacah izmenyaetsya kak kubicheskij koren' predpolagaemogo ob容ma rabot v cheloveko- mesyacah - formula, poluchennaya iz ocenki razmera i drugih faktorov v ego modeli. Sledstviem yavlyaetsya krivaya, dayushchaya optimal'nuyu chislennost' zanyatyh. - Krivaya stoimosti medlenno rastet, esli zaplanirovannyj grafik dlinnee optimal'nogo. Rabota zanimaet vse otvedennoe dlya nee vremya. - Krivaya stoimosti rezko rastet, esli zaplanirovannyj grafik koroche optimal'nogo. - Prakticheski ni odin proekt nevozmozhno zavershit' bystree, chem za . raschetnogo optimal'nogo grafika vne zavisimosti ot kolichestva zanyatyh v nem! |tot primechatel'nyj rezul'tat daet menedzheru programmnogo proekta solidnoe podkreplenie, kogda vysshee rukovodstvo trebuet prinyatiya nevozmozhnogo grafika. Naskol'ko veren zakon Bruksa? Byli dazhe provedeny tshchatel'nye issledovaniya zakona Bruksa (namerenno uproshchennogo), soglasno kotoromu vydelenie dopolnitel'nyh lyudej dlya otstayushchego grafika proekta lish' zaderzhivaet ego vypolnenie. Luchshe vsego eto sdelano Abdel'-Hamidom (Abdel-Hamid) i Madnikom (Madnick) v chestolyubivoj i cennoj knige "Dinamika programmnogo proekta: integrirovannyj podhod".16 V knige razrabotana kolichestvennaya model' dinamiki proekta. Glava o zakone Bruksa bolee podrobno vnikaet v to, chto proishodit pri razlichnyh dopushcheniyah otnositel'no togo, kogo dobavlyayut, i kogda. CHtoby issledovat' eto, avtory razvivayut sobstvennuyu tshchatel'nuyu model' programmnogo proekta srednego razmera, predpolagaya, chto u vnov' dobavlyaemyh lyudej est' krivaya obucheniya, i uchityvaya dopolnitel'nye izderzhki na obshchenie i obuchenie. Oni prihodyat k vyvodu, chto "dobavlenie novyh lyudej k zapazdyvayushchemu proektu vsegda privodit k ego udorozhaniyu, no ne vsegda k bolee pozdnemu zaversheniyu" (kursiv avtorov). V chastnosti, uvelichenie chislennosti rabotnikov v nachale proekta gorazdo bezopasnee, chem v konce, poskol'ku dobavlenie novyh lyudej vsegda vyzyvaet otricatel'nyj effekt, dlya kompensacii kotorogo trebuyutsya nedeli. SHtucke (Stutzke) predlagaet bolee prostuyu model' dlya provedeniya analogichnyh issledovanij, i s tem zhe rezul'tatom.17 On provodit podrobnyj analiz processa i izderzhek, svyazannyh s privlecheniem novyh rabotnikov, yavnym obrazom uchityvaya otvlechenie nastavnikov ot neposredstvennoj raboty nad proektom. On proveryal svoyu model' na real'nom proekte, v kotorom chislennost' rabotnikom byla udvoena, blagodarya chemu udalos' ulozhit'sya v pervonachal'nyj grafik, nesmotrya na otstavanie v seredine. On rassmatrivaet al'ternativy dobavleniyu novyh rabotnikov, osobenno sverhurochnuyu rabotu. Naibol'shuyu cennost' predstavlyayut ego mnogochislennye prakticheskie sovety o tom, kak privlekat' novyh rabotnikov, obuchat' ih, obespechivat' instrumentariem i t.d., chtoby minimizirovat' otricatel'nyj effekt uvelicheniya personala. Osobenno dostojno vnimaniya ego zamechanie, chto dopolnitel'no privlekaemye na pozdnih stadiyah proekta rabotniki dolzhny byt' igrokami komandy, stremyashchimisya vojti v igru i vpisat'sya v process, a ne pytat'sya izmenit' ili usovershenstvovat' sam process! SHtucke schitaet, chto dopolnitel'naya tyazhest' obmena informaciej v krupnom proekte imeet vtoroj poryadok malosti, i ne vklyuchaet ee v svoyu model'. Ne vpolne yasno, uchityvayut li ee Abdel'-Hamid i Madnik, i esli da, to kak. Ni v odnoj iz modelej ne uchityvaetsya to obstoyatel'stvo, chto rabota dolzhna byt' pereraspredelena - process, kotoryj dlya menya chasto okazyvalsya netrivial'nym. "Krajne uproshchennaya" formulirovka zakona Bruksa stanovitsya bolee poleznoj, buduchi dopolnena etimi tshchatel'no sdelannymi nadlezhashchimi ogovorkami. Podytozhivaya, ya prodolzhayu priderzhivat'sya ishodnogo utverzhdeniya kak priblizheniya k istine nulevogo poryadka, prakticheskogo pravila, preduprezhdayushchego menedzherov o nerazumnosti instinktivnoj popytki vytyanut' zapazdyvayushchij proekt. Kadry reshayut vse (ili pochti vse) Nekotorye chitateli udivlyayutsya, chto bol'shaya chast' rassuzhdenij MCH-M posvyashchena administrativnym storonam programmnoj inzhenerii, a ne mnogochislennym tehnicheskim problemam. Takoj perekos chastichno vyzvan toj rol'yu, kotoruyu ya igral v IBM Operating System/360 (teper' MVS/370). Esli smotret' glubzhe, eto proishodit ot ubezhdeniya, chto kachestvo lyudej, zanyatyh v proekte, ih organizaciya i administrirovanie imeyut gorazdo bol'shee znachenie dlya uspeha, chem instrumenty, kotorymi oni pol'zuyutsya, ili primenyaemye imi tehnicheskie resheniya. Posleduyushchie issledovaniya podkrepili moyu uverennost'. Model' COCOMO Bema priznaet, chto kachestvo komandy yavlyaetsya vazhnejshim faktorom ee uspeha, prakticheski vchetvero bolee vazhnym, chem sleduyushchij za nim po znachimosti. Bol'shinstvo nauchnyh issledovanij po programmnoj inzhenerii sosredotochilos' na instrumentah. YA lyublyu horoshij instrument i zhazhdu ego. Tem ne menee otradno videt' prodolzhenie issledovatel'skih programm v otnoshenii zaboty o lyudyah, ih rosta i podderzhki, a takzhe razvitiya upravleniya razrabotkoj programmnogo obespecheniya. CHelovecheskij faktor. Krupnym dostizheniem poslednih let stala kniga Demarko (DeMarco) i Listera (Lister) "CHelovecheskij faktor: produktivnye proekty i programmy", izdannaya v 1987 godu. V osnove ee lezhit polozhenie o tom, chto "glavnye problemy v nashej rabote po prirode svoej ne stol'ko tehnologicheskie, skol'ko sociologicheskie". Ona izobiluet takimi zhemchuzhinami, kak "zadacha menedzhera ne zastavit' lyudej rabotat', a sdelat' tak, chtoby oni mogli rabotat'". V nej govoritsya o takih prozaicheskih veshchah, kak pomeshchenie, mebel', sovmestnoe pitanie komandy. Demarko i Lister privodyat real'nye dannye iz svoego "Programmirovaniya voennyh igr", kotorye pokazyvayut porazitel'nuyu korrelyaciyu mezhdu proizvoditel'nost'yu programmistov iz odnoj i toj zhe organizacii, a takzhe mezhdu harakteristikami rabochih mest i urovnem produktivnosti i nalichiya oshibok. V pomeshcheniyah naibolee produktivnyh programmistov tishe, oni bolee lichnye, luchshe zashchishcheny protiv neproshenogo vtorzheniya, i oni prosto bol'she... Ponimaete li vy, chto pokoj, prostranstvo i uedinennost' sposobstvuyut luchshej rabote vashih tepereshnih rabotnikov ili (s drugoj storony) sposobstvuet privlecheniyu i sohraneniyu luchshih rabotnikov?18 YA iskrenne rekomenduyu etu knigu vsem moim chitatelyam. Peredacha proektov. Demarko i Lister udelyayut bol'shoe vnimanie spayannosti komandy, neulovimomu, no vazhnomu kachestvu. YA dumayu, chto neponimanie administraciej spayannosti sluzhit prichinoj toj gotovnosti, s kotoroj, kak ya nablyudal, v kompaniyah, raspolozhennyh na neskol'kih ploshchadkah, proekty peredayutsya iz odnoj laboratorii v druguyu. V svoej praktike ya nablyudal, vozmozhno, s poldyuzhiny peredach proekta, i ni odna iz nih ne byla uspeshnoj. Mozhno s uspehom peredavat' zadaniya. No vo vseh sluchayah popytki peredat' proekt novaya komanda fakticheski nachinala snachala, nesmotrya na nalichie horoshej dokumentacii, nekotorogo prodvizheniya v proekte i nekotoryh lyudej iz peredayushchej komandy. YA dumayu, chto razrushenie spayannosti prezhnej komandy privodit k vykidyshu proekta, nahodyashchegosya v embrional'nom sostoyanii, i osushchestvleniyu ego s nachal'noj tochki. Sila otkazat'sya ot vlasti Esli soglasit'sya, chto, kak ya neodnokratno dokazyval na protyazhenii etoj knigi, tvorchestvo ishodit ot lichnostej, a ne organizacionnyh struktur i processov, togda glavnaya zadacha menedzhera programmnogo proekta - sozdat' organizacionnuyu strukturu i rabochij process, sposobstvuyushchij tvorchestvu i iniciative, a ne podavlyayushchie ih. K schast'yu, eta problema prisushcha ne tol'ko programmnym organizaciyam, i nad nej rabotali mnogie bol'shie umy. E. F. SHumaher (E. F. Schumacher) v klassicheskoj rabote "Maloe prekrasno: ekonomika radi lyudej" predlagaet teoriyu organizacii predpriyatij, maksimiziruyushchuyu tvorcheskuyu aktivnost' i radost' rabotnikov. V kachestve pervogo principa on vydvigaet "princip vspomogatel'noj funkcii" iz encikliki Quadragesimo Anno papy Piya XI: Peredacha bol'shemu i vyshestoyashchemu soobshchestvu togo, chto mogut delat' men'shie i nizhestoyashchie organizacii yavlyaetsya nespravedlivost'yu i v to zhe vremya ser'eznym zlom i narusheniem pravil'nogo poryadka. Ibo vsyakaya obshchestvennaya deyatel'nost' po suti svoej dolzhna predostavlyat' pomoshch' chlenam social'noj gruppy, a ne razrushat' i pogloshchat' ih... Tem, kto upravlyaet, sleduet byt' uverennymi, chto chem luchshe sredi razlichnyh soobshchestv sohranyaetsya differencirovannyj poryadok v soblyudenii principa vtorostepennoj funkcii, tem krepche budet vlast' i effektivnost' v obshchestve, tem bolee schastlivym i procvetayushchim gosudarstvo.19 SHumaher privodit raz座asnenie: Princip vtorostepennoj funkcii uchit nas, chto vlast' i effektivnost' centra uvelichatsya, esli budut tshchatel'no ohranyat'sya svoboda i otvetstvennost' bolee nizkih formirovanij, a v itoge organizaciya v celom budet "bolee schastlivoj i procvetayushchej". Kak mozhno dobit'sya takoj organizacii? ... Bol'shaya organizaciya dolzhna sostoyat' iz mnozhestva poluavtonomnyh edinic, kotorye mozhno nazvat' kvazi-firmami. Kazhdaya iz nih dolzhna obladat' znachitel'noj svobodoj, chtoby predostavit' nailuchshie vozmozhnosti dlya tvorchestva i predpriimchivosti... Kazhdaya iz kvazi- firm dolzhna imet' svoj uchet pribylej i poter', a takzhe balansovyj otchet.20 K chislu naibolee zamechatel'nyh dostizhenij programmnoj inzhenerii prinadlezhat pervye etapy prakticheskogo osushchestvleniya takih organizacionnyh idej. Prezhde vsego, mikrokomp'yuternaya revolyuciya sozdala novuyu programmnuyu industriyu s sotnyami vnov' voznikshih firm, kotorye iznachal'no maly i otmecheny entuziazmom, svobodoj i tvorchestvom. Sejchas industriya menyaetsya po mere pogloshcheniya melkih firm krupnymi. Posmotrim, pojmut li krupnye firmy vazhnost' sohraneniya tvorcheskoj aktivnosti melkih, pogloshchaemyh imi. Eshche bolee primechatel'no, chto vysshee rukovodstvo ryada krupnyh firm predprinyalo mery po peredache vlasti vniz otdel'nym komandam, rabotayushchim nad programmnymi proektami, chto sblizhaet ih s kvazi-firmami SHumahera po strukture i otvetstvennosti. Rezul'taty vyzvali udivlenie i udovletvorenie. Dzhim Makkarti iz Microsoft opisyval mne svoj opyt emansipacii komand: U kazhdoj brigady (30-40 chelovek) est' svoj nabor razrabatyvaemyh ob容ktov, svoj grafik i dazhe svoi pravila razrabotki, realizacii i postavki. V brigade est' specialisty v chetyreh ili pyati oblastyah, v tom chisle realizacii, testirovanii i dokumentirovanii. Brigada sama ulazhivaet raznoglasiya po pustyakam, nachal'nik ne vmeshivaetsya. Ne boyus' pereocenit' vazhnost' peremeshcheniya vlasti, kogda brigada samostoyatel'no neset otvetstvennost' za svoi dostizheniya. |rl Uiler (Earl Wheeler), byvshij rukovoditel' programmnyh razrabotok IBM, podelilsya so mnoj svoim opytom delegirovaniya vniz polnomochij, byvshih v techenie dolgogo vremeni sosredotochennymi u administracii upravleniya IBM. Klyuchevym poryvom poslednih let stalo delegirovanie polnomochij vniz. |to bylo chudom! Uluchshilis' kachestvo, produktivnost', moral'nyj duh. U nas nebol'shie brigady bez centralizovannogo upravleniya. Brigady sami opredelyayut pravila proizvodstvennogo processa, no oni ispytyvayut davlenie so storony rynka. I eto davlenie zastavlyaet ih samih iskat' sposoby resheniya problem. Obshchenie s otdel'nymi chlenami brigad pokazyvaet, konechno, i udovletvorenie ot peredachi polnomochij i svobody, a takzhe bolee sderzhannuyu ocenku togo, v kakoj mere kontrol' dejstvitel'no oslablen. Tem ne menee, dostignutaya stepen' peredachi polnomochij yavlyaet shag v pravil'nom napravlenii. Poluchaemye vygoda tochno te, kotorye predskazyvalis' Piem XI: v rezul'tate delegirovaniya polnomochij centr usilivaet svoyu real'nuyu vlast', a organizaciya v celom stanovitsya bolee schastlivoj i procvetayushchej. Kakoj samyj bol'shoj syurpriz? Milliony komp'yuterov Vse komp'yuternye guru, s kotorymi ya razgovarival, priznayut, chto dlya nih byli neozhidannost'yu mikrokomp'yuternaya revolyuciya i ee porozhdenie - proizvodstvo korobochnyh programmnyh produktov. Vne somneniya, eto samoe znachitel'noe sobytie za dva desyatiletiya posle vyhoda MCH-M. Ono imeet mnogochislennye posledstviya dlya programmnoj inzhenerii. Mikrokomp'yuternaya revolyuciya izmenila harakter ispol'zovaniya komp'yuterov. SHumaher sformuliroval problemu bolee 20 let nazad: CHego my dejstvitel'no hotim ot uchenyh i tehnologov? YA otvechu tak: nam nuzhny metody i oborudovanie, kotorye: - dostatochno deshevy, chtoby byt' dostupnymi prakticheski kazhdomu; - prigodny dlya nebol'shih prilozhenij; - sootvetstvuyut potrebnosti cheloveka v tvorcheskoj deyatel'nosti.21 |to kak raz te zamechatel'nye svojstva, kotorye mikrokomp'yuternaya revolyuciya dala komp'yuternoj promyshlennosti i ee potrebitelyam, kotorymi teper' stala shirokaya publika. Srednij amerikanec mozhet segodnya pozvolit' sebe ne tol'ko sobstvennyj komp'yuter, no i nabor programmnyh sredstv, dlya pokupki kotorogo 20 let nazad potrebovalos' by korolevskoe zhalovan'e. Kazhduyu iz celej, postavlennyh SHumaherom, stoit rassmotret' otdel'no. Predstavlyaet takzhe interes, v kakoj mere oni dostignuty - osobenno poslednyaya. V odnoj oblasti za drugoj obychnym lyudyam i professionalam stanovyatsya dostupny vse novye sredstva samovyrazheniya. Otchasti, razvitie v drugih oblastyah proishodit tak zhe, kak v sozdanii programm - blagodarya ustraneniyu pobochnyh trudnostej. Pobochnye ogranicheniya na rukopisi nakladyvalis' dlitel'nost'yu i stoimost'yu perepechatyvaniya dlya vneseniya ispravlenij. Rabotu ob容mom v 300 stranic inogda prihodilos' perepechatyvat' kazhdye tri ili shest' mesyacev, a v pereryve chirkat' v rukopisi. Trudno bylo ocenit' vliyanie vnesennyh izmenenij na obshchij hod mysli i ritm slov. Sejchas chudesnym obrazom rukopisi stali postoyanno menyayushchimisya.22 Analogichnuyu izmenchivost' komp'yuter pridal mnogim drugim materialam: kartinam hudozhnikov, planam postroek, chertezham mehanizmov, muzykal'nym sochineniyam, fotografiyam, kinofil'mam, slajdovym prezentaciyam, mul'timedijnym rabotam i dazhe elektronnym tablicam. V kazhdom sluchae pri ruchnom sposobe izgotovleniya dlya togo, chtoby uvidet' izmeneniya v kontekste, trebovalos' kopirovanie bol'shih neizmennyh chastej. Teper', nezavisimo ot materiala, my mozhem pol'zovat'sya takimi zhe vygodami, kakie rabota v rezhime razdeleniya vremeni prinesla v programmirovanie: vozmozhnost' redaktirovaniya i mgnovennoj ocenki rezul'tata bez poteri hoda mysli. Tvorcheskie vozmozhnosti usililis' takzhe blagodarya novym gibkim vspomogatel'nym instrumentam. Odin primer - sochinenie prozy, pri kotorom my pol'zuemsya proverkoj orfografii, grammatiki, stilisticheskimi podskazkami, sistemami bibliografii i zamechatel'noj vozmozhnost'yu odnovremenno videt' stranicy v okonchatel'no otformatirovannom vide. My eshche ne ocenili znacheniya mgnovennogo dostupa k enciklopediyam i bezgranichnym resursam vsemirnoj pautiny dlya ispol'zovaniya pisatelem improvizirovannogo poiska. Samoe glavnoe, obretennaya izmenchivost' materiala uproshchaet izuchenie mnogih v korne razlichnyh vozmozhnostej, kogda tvorcheskaya rabota tol'ko obretaet formu. Vot drugoj primer, kogda poryadok velichiny v kolichestvennom parametre - v dannom sluchae, vremeni, neobhodimom dlya vneseniya izmenenij, - proizvodit kachestvennyj skachok v podhode k zadache. Instrumenty dlya chercheniya pozvolyayut proektirovshchikam zdanij za chas tvorcheskoj raboty issledovat' gorazdo bol'she variantov. Podklyuchenie komp'yuterov k sintezatoram i programmy, pozvolyayushchie avtomaticheski zapisyvat' ili proigryvat' noty, znachitel'no oblegchayut fiksaciyu brenchaniya po klavisham. Cifrovaya obrabotka fotografij, kak v Adobe Photoshop, pozvolyaet v techenie schitannyh minut provesti eksperimenty, dlya kotoryh potrebovalis' chasy raboty v fotolaboratorii. |lektronnye tablicy pozvolyayut legko issledovat' desyatki al'ternativnyh scenariev tipa "chto, esli". Nakonec, blagodarya vezdesushchesti personal'nyh komp'yuterov sozdaetsya sovershenno novyj material. Giperteksty, predlozhennye Vannevarom Bushem v 1945 godu, osushchestvimy tol'ko s pomoshch'yu komp'yuterov.23 Mul'timedijnye prezentacii i opyty byli slozhnejshimi zadachami - slishkom mnogo hlopot - do togo, kak stalo vozmozhnym provodit' ih s pomoshch'yu komp'yuterov i sootvetstvuyushchego bogatogo programmnogo obespecheniya. Sistemy virtual'noj real'nosti, poka eshche dorogie i ne shiroko rasprostranennye, v budushchem stanut takimi i sozdadut novyj material dlya tvorchestva. Mikrokomp'yuternaya revolyuciya izmenila harakter razrabotki programmnogo obespecheniya. Tehnologii razrabotki programmnogo obespecheniya 1970-h sami izmenilis' v rezul'tate mikrokomp'yuternoj revolyucii i vyzvavshih ee tehnicheskih dostizhenij. Ustranena znachitel'naya chast' vtorostepennyh slozhnostej tehnologij razrabotki programmnogo obespecheniya. Bystrye personal'nye komp'yutery stali obychnym instrumentom razrabotchika, i vremya oborachivaemosti stalo pochti ustarevshim ponyatiem. Segodnyashnij personal'nyj komp'yuter bystree ne tol'ko superkomp'yutera 60-go goda, no i Unix-stancii 1985-go. |to znachit, chto kompilyaciya bystro osushchestvlyaetsya dazhe na skromnyh po moshchnosti mashinah, a blagodarya bol'shomu ob容mu pamyati otpali zaderzhki pri komponovke s ispol'zovaniem diskov. Bol'shaya pamyat' pozvolyaet takzhe hranit' v pamyati tablicy simvolicheskih imen vmeste s ob容ktnym kodom, v rezul'tate chego stanovitsya obychnoj vysokourovnevaya otladka bez perekompilyacii. Za poslednie 20 let my pochti pokonchili s ispol'zovaniem razdeleniya vremeni kak metodologiej razrabotki programmnogo obespecheniya. V 1975 godu razdelenie vremeni tol'ko-tol'ko vytesnilo paketnuyu obrabotku v kachestve naibolee rasprostranennoj tehnologii. Set' ispol'zovalas' dlya togo, chtoby dat' razrabotchiku programmnogo obespecheniya dostup kak k obshchim fajlam, tak i k bol'shim vychislitel'nym moshchnostyam dlya kompilyacii, komponovki i testirovaniya. Segodnya vychislitel'nuyu moshchnost' obespechivaet personal'naya rabochaya stanciya, a set' ispol'zuetsya v osnovnom dlya obespecheniya sovmestnogo dostupa k fajlam brigady, razrabatyvayushchej produkt. Klient-servernye sistemy menyayut i uproshchayut tehnologiyu obshchego dostupa dlya zagruzki, sborki i vypolneniya kontrol'nyh primerov. Shodnyj progress proizoshel s pol'zovatel'skimi interfejsami. Interfejs WIMP obespechivaet gorazdo bol'shie udobstva pri redaktirovanii tekstov programm i tekstov na estestvennom yazyke. |kran razmerom 24 stroki na 72 kolonki smenilsya polnostranichnym ili dazhe dvuhstranichnym ekranom, poetomu programmisty mogut videt' izmeneniya, kotorye oni delayut, v znachitel'no bolee shirokom kontekste. Celaya novaya programmnaya otrasl' - korobochnye pakety Ryadom s klassicheskoj industriej programmnyh produktov shiroko razvilas' eshche odna. Prodazhi programmnyh produktov chislyatsya sotnyami tysyach i dazhe millionami. Celye moshchnye pakety mozhno priobresti po cene men'shej, chem stoimost' oplaty odnogo rabochego dnya programmista. |ti dve otrasli vo mnogom razlichny i sushchestvuyut parallel'no. Klassicheskaya programmnaya industriya. V 1975 godu programmnaya industriya imela neskol'ko otdel'nyh i do nekotoroj stepeni razlichnyh sostavnyh chastej, sushchestvuyushchih po sej den': - Proizvoditeli komp'yuterov, postavlyayushchie takzhe operacionnye sistemy, kompilyatory i utility dlya svoih produktov. - Pol'zovateli prilozhenij, naprimer, v informacionno-upravlyayushchih sistemah, bankah, strahovyh kompaniyah, pravitel'stvennyh uchrezhdeniyah, sozdayushchie pakety programm dlya sobstvennogo upotrebleniya. - Razrabotchiki zakaznyh programm, rabotayushchie po kontraktu s pol'zovatelem. Mnogie iz etih podryadchikov specializiruyutsya na prilozheniyah dlya voennoj sfery, gde trebovaniya, standarty i marketingovye procedury nosyat specificheskij harakter. - Razrabotchiki kommercheskih paketov, v to vremya razrabatyvavshie, v osnovnom, bol'shie prilozheniya dlya specificheskih rynkov, takie kak pakety statisticheskogo analiza i avtomaticheskogo proektirovaniya. Tom Demarko otmechaet fragmentaciyu klassicheskoj industrii razrabotki programmnogo obespecheniya, osobenno v chasti pol'zovatelej prilozhenij: YA ne ozhidal, chto eta oblast' raspadetsya na otdel'nye nishi. Priemy raboty v bol'shej stepeni opredelyayutsya nishej, chem ispol'zovaniem obshchih metodov analiza sistem, yazykov programmirovaniya i tehnologij testirovaniya. Ada byl poslednim iz yazykov obshchego naznacheniya, i on stal yazykov nishi. V nishe obychnyh kommercheskih prilozhenij znachitel'nyj vklad sdelan yazykami chetvertogo pokoleniya (4GL). Bem pishet, chto "naibolee udachnye iz 4GL yavilis' rezul'tatom napisaniya kakoj-libo chasti oblasti prilozhenij na yazyke opcij i parametrov". Naibolee shiroko rasprostranennymi iz etih 4GL yavlyayutsya generatory prilozhenij i kombinirovannye pakety baz dannyh i svyazi s yazykami zaprosov. Miry operacionnyh sistem ob容dinilis'. V 1975 godu bylo izobili operacionnyh sistem - u kazhdogo proizvoditelya komp'yuterov byla, po krajnej mere, odna patentovannaya operacionnaya sistema dlya kazhdoj proizvodstvennoj serii, a chasto i dve. Naskol'ko izmenilos' polozhenie segodnya! Lozungom dnya stali otkrytye sistemy, i ostalos' lish' pyat' glavnyh operacionnyh sred, dlya kotoryh sozdayutsya pakety prilozhenij (v hronologicheskom poryadke): - IBM MVS i VM - DEC VMS - Unix v tom ili inom variante - IBM PC, bud' to DOS, OS/2 ili Windows - Apple Macintosh. Industriya korobochnyh produktov. |konomicheskie zakony dlya razrabotchikov v etoj otrasli sovershenno otlichny ot teh, kotorye dejstvuyut v klassicheskoj industrii: stoimost' razrabotki nuzhno delit' na bol'shoe kolichestvo ekzemplyarov, rashody na upakovku i marketing vysoki. V klassicheskoj industrii pri vnutrifirmennoj razrabotke grafik rabot i nabor funkcij mogli byt' izmeneny, v otlichie ot stoimosti razrabotki. Na otkrytom rynke zhestkoj konkurencii sroki i funkcional'nost' polnost'yu dominiruyut nad zatratami na razrabotku. Kak i sledovalo ozhidat', stol' razlichnye ekonomicheskie trebovaniya porodili ves'ma razlichayushchiesya kul'tury programmirovaniya. V klassicheskoj industrii lidiruyushchee polozhenie zanyali krupnye firmy s ustanovivshimisya stilyami upravleniya i kul'turoj raboty. V korobochnoj industrii, naprotiv, voznikli sotni nachinayushchih firm, nichem ne svyazannyh i sosredotochennyh na konechnoj celi, a ne na processe. V takoj atmosfere talant otdel'nogo programmista vsegda cenitsya znachitel'no vyshe, i sushchestvuet podspud