kontrolya. Tem ne menee on vykazyvaet bol'shuyu pronicatel'nost'. On zamechaet, chto nezhelanie dokumentirovat' proekt proishodit ne tol'ko ot leni ili nedostatka vremeni. Ono proishodit ot nezhelaniya proektirovshchika svyazyvat' sebya otstaivaniem reshenij, kotorye, kak on znaet, predvaritel'nye. "Dokumentiruya proekt, proektirovshchik stanovitsya ob容ktom kritiki so vseh storon, i dolzhen zashchishchat' vse, chto napisal. Esli organizacionnaya struktura mozhet predstavlyat' ugrozu, ne budet dokumentirovat'sya nichego, krome togo, chto nel'zya osporit'." Sozdavat' organizacionnuyu strukturu s uchetom vneseniya v budushchem izmenenij znachitel'no trudnee, chem proektirovat' sistemu s uchetom budushchih izmenenij. Kazhdyj poluchaet zadanie, rasshiryayushchee krug ego obyazannostej, chtoby sdelat' tehnicheski bolee gibkim vse podrazdelenie. V bol'shih proektah menedzheru nuzhno imet' dvuh ili treh vysokoklassnyh programmistov v kachestve rezerva, kotoryj mozhno brosit' na samyj opasnyj uchastok boya. Strukturu upravleniya takzhe nuzhno izmenyat' po mere izmeneniya sistemy. |to oznachaet, chto rukovoditel' dolzhen udelit' bol'shoe vnimanie tomu, chtoby ego menedzhery i tehnicheskij personal byli nastol'ko vzaimozamenyaemy, naskol'ko pozvolyayut ih sposobnosti. Bar'ery yavlyayutsya sociologicheskimi, i s nimi nuzhno bditel'no i nastojchivo borot'sya. Vo-pervyh, menedzhery sami rassmatrivayut rukovoditelya kak "slishkom bol'shuyu cennost'", chtoby ispol'zovat' ih dlya real'nogo programmirovaniya. Vo- vtoryh, rabota menedzhera obladaet bolee vysokim prestizhem. CHtoby preodolet' eti slozhnosti, v nekotoryh laboratoriyah, naprimer, v Bell Labs, uprazdnyayut vse naimenovaniya dolzhnostej. Kazhdyj professional'nyj sluzhashchij yavlyaetsya "tehnicheskim sotrudnikom". V drugih, naprimer v IBM, vvodyat dvojnuyu lestnicu prodvizheniya (ris. 11.1). Sootvetstvuyushchie stupen'ki teoreticheski ravnoznachny. Ris. 11.1 Dvojnaya sluzhebnaya lestnica IBM Legko ustanovit' sootvetstvuyushchie stupen'kam razmery zhalovaniya. Znachitel'no trudnee dat' im sootvetstvuyushchij prestizh. Ofisy dolzhny imet' odinakovyj razmer i obstanovku. Sekretarskie i prochie sluzhby dolzhny byt' sootvetstvuyushchimi. Perevod s tehnicheskoj lestnicy v upravlencheskuyu ne dolzhen soprovozhdat'sya povysheniem, i o nem vsegda nuzhno soobshchat' kak o "perevode", a ne kak o "povyshenii". Obratnyj perevod vsegda dolzhen soprovozhdat'sya pribavkoj k zhalovan'yu. Menedzherov nuzhno posylat' na kursy tehnicheskoj perepodgotovki, a starshij tehnicheskij personal - na kursy obucheniya upravleniyu. Celi proekta, hod raboty i administrativnye problemy dolzhny dovodit'sya do vseh rukovodyashchih rabotnikov. Esli pozvolyaet podgotovka, rukovodyashchie rabotniki dolzhny byt' tehnicheski i moral'no gotovy vozglavit' gruppy ili nasladit'sya razrabotkoj programm sobstvennymi rukami. Konechno, osushchestvlenie vsego etogo trebuet mnogo truda, no rezul'tat togo stoit! Ideya organizacii grupp programmistov napodobie operacionnyh brigad predstavlyaet soboj korennoe reshenie etoj problemy. Ona zastavlyaet rukovodyashchego rabotnika pochuvstvovat', chto on ne unizhaet sebya, kogda pishet programmy, i pytaetsya ubrat' social'nye prepyatstviya, meshayushchie emu ispytat' radost' tvorchestva. Bolee togo, eta struktura prednaznachena dlya sokrashcheniya chisla interfejsov. Blagodarya ej sistemu mozhno izmenyat' s maksimal'noj legkost'yu, i stanovitsya otnositel'no prosto perenapravit' vsyu brigadu na drugoe zadanie v sluchae neobhodimosti organizacionnyh izmenenij. |to dejstvitel'no dolgosrochnoe reshenie problemy gibkoj organizacii. Dva shaga vpered, shag nazad Programma ne perestaet izmenyat'sya posle svoej postavki klientu. Izmeneniya posle postavki nazyvayutsya soprovozhdeniem programmy, no etot process v korne otlichaetsya ot soprovozhdeniya apparatnoj chasti. Soprovozhdenie apparatnoj chasti komp'yuternoj sistemy sostoit iz treh vidov deyatel'nosti: zameny isporchennyh detalej, chistki i smazki i osushchestvleniya tehnicheskih izmenenij dlya ispravleniya konstruktivnyh defektov. (Bol'shaya chast' tehnicheskih izmenenij, no ne vse, ustranyaet defekty razrabotki ili realizacii, a ne arhitektury, i potomu nezametna pol'zovatelyu.) Soprovozhdenie programm ne predpolagaet chistki, smazki ili zameny isportivshihsya komponentov. Ono sostoit glavnym obrazom iz izmenenij, ispravlyayushchih konstruktivnye defekty. Gorazdo chashche, chem dlya apparatnoj chasti, eti izmeneniya vklyuchayut v sebya dopolnitel'nye funkcii. Obychno oni vidny pol'zovatelyu. Obshchaya stoimost' soprovozhdeniya shiroko ispol'zuemoj programmy obychno sostavlyaet 40 i bolee procentov stoimosti ee razrabotki. Udivitel'no, chto na stoimost' soprovozhdeniya sil'no vliyaet chislo pol'zovatelej. CHem bol'she pol'zovatelej, tem bol'she oshibok oni nahodyat. Betti Kempbell iz Laboratorii yadernoj fiziki MTI otmechaet interesnyj cikl v zhizni otdel'noj versii programmy. On pokazan na risunke 11.2. V nachale sushchestvuet tendenciya povtornogo poyavleniya oshibok, najdennyh i ustranennyh v predydushchih versiyah. Obnaruzhivayutsya oshibki v funkciyah, vpervye poyavivshihsya v novoj versii. Vse oni ispravlyayutsya, i v techenie neskol'kih mesyacev vse idet horosho. Zatem kolichestvo obnaruzhennyh oshibok snova nachinaet rasti. Po mneniyu Kempbell, eto proishodit potomu, chto pol'zovateli vyhodyat na novyj uroven' slozhnosti, nachinaya polnost'yu primenyat' novye vozmozhnosti versii. |ta intensivnaya rabota vyyavlyaet bolee skrytye oshibki v novyh funkciyah.5 Ris. 11.2 CHastota obnaruzheniya oshibok kak funkciya vozrasta versii programmy Fundamental'naya problema pri soprovozhdenii programm sostoit v tom, chto ispravlenie odnoj oshibki s bol'shoj veroyatnost'yu (20-50 procentov) vlechet poyavlenie novoj. Poetomu ves' process idet po principu "dva shaga vpered, odin nazad". Pochemu ne udaetsya ustranit' oshibki bolee akkuratno? Vo-pervyh, dazhe skrytyj defekt proyavlyaet sebya kak otkaz v kakom-to odnom meste. V dejstvitel'nosti zhe on chasto imeet razvetvleniya po vsej sisteme, obychno neochevidnye. Vsyakaya popytka ispravit' ego minimal'nymi usiliyami privedet k ispravleniyu lokal'nogo i ochevidnogo, no esli tol'ko struktura ne yavlyaetsya ochen' yasnoj ili dokumentaciya ochen' horoshej, otdalennye posledstviya etogo ispravleniya ostanutsya nezamechennymi. Vo-vtoryh, ispravlyaet oshibki obychno ne avtor programmy, i chasto eto mladshij programmist ili stazher. Vsledstvie vneseniya novyh oshibok soprovozhdenie programmy trebuet znachitel'no bol'she sistemnoj otladki na kazhdyj operator, chem pri lyubom drugom vide programmirovaniya. Teoreticheski, posle kazhdogo ispravleniya nuzhno prognat' ves' nabor kontrol'nyh primerov, po kotorym sistema proveryalas' ran'she, chtoby ubedit'sya, chto ona kakim-nibud' neponyatnym obrazom ne povredilas'. Na praktike takoe vozvratnoe testirovanie dejstvitel'no dolzhno priblizhat'sya k etomu teoreticheskomu idealu, i ono ochen' dorogo stoit. Ochevidno, metody razrabotki programm, pozvolyayushchie isklyuchit' ili, po krajnej mere, vyyavit' pobochnye effekty, mogut rezko snizit' stoimost' soprovozhdeniya, kak i metody razrabotki proektov men'shim chislom lyudej i s men'shim chislom interfejsov - a znachit, i s men'shim chislom oshibok. SHag vpered, shag nazad Leman i Beladi izuchili istoriyu posledovatel'nyh vypuskov bol'shoj operacionnoj sistemy.6 Oni schitayut, chto obshchee kolichestvo modulej rastet linejno s nomerom versii, no chislo modulej, zatronutyh izmeneniyami, rastet eksponencial'no v zavisimosti ot nomera versii. Vse ispravleniya imeyut tendenciyu k razrusheniyu struktury, uvelicheniyu entropii i dezorganizacii sistemy. Vse men'she sil tratitsya na ispravlenie oshibok ishodnogo proekta i vse bol'she - na likvidaciyu posledstvij predydushchih ispravlenij. Po proshestvii vremeni sistema stanovitsya vse menee i menee organizovannoj. Rano ili pozdno ispravlenie oshibok teryaet smysl. Na kazhdyj shag vpered prihoditsya shag nazad. V principe godnaya dlya vechnogo ispol'zovaniya sistema perestaet byt' osnovoj razvitiya. Krome togo, menyayutsya mashiny, konfiguracii, trebovaniya pol'zovatelya, tak chto fakticheski sistema yavlyaetsya vechnoj. Neobhodim sovershenno novyj proekt, vypolnyaemyj s samogo nachala. Ot mehanicheskoj statisticheskoj modeli Beladi i Leman prihodyat k obshchemu zaklyucheniyu otnositel'no programmnyh sistem, kotoroe podkrepleno vsem opytom chelovechestva. "Luchshaya pora veshchej - kogda oni tol'ko chto poyavilis'", - skazal Paskal'. CH. S. L'yuis vyrazil eto bolee vesomo: Vot klyuch k ponimaniyu istorii. Vysvobozhdaetsya ogromnaya energiya, voznikayut civilizacii, sozdayutsya prekrasnye uchrezhdeniya, no vsyakij raz chto-to proishodit ne tak. Kakaya-to rokovaya oshibka voznosit na vershinu sebyalyubivyh i zhestokih lyudej, i vse skatyvaetsya nazad, v nishchetu i ruiny. Dejstvitel'no, mashina glohnet. Ona normal'no startuet i proezzhaet neskol'ko metrov, a zatem lomaetsya.7 Sistemnoe programmirovanie yavlyaetsya processom, umen'shayushchim entropiyu, a potomu emu vnutrenne prisushcha metastabil'nost'. Soprovozhdenie programm est' process, uvelichivayushchij entropiyu, i dazhe samoe umeloe ego vedenie lish' otdalyaet vpadenie sistemy v beznadezhnoe ustarevanie. Glava 12. Ostryj instrument Horoshego rabotnika uznayut po instrumentu. POSLOVICA Dazhe v nashe vremya mnogie programmnye proekty, s tochki zreniya ispol'zovaniya instrumentariya, rabotayut kak mehanicheskie masterskie. U kazhdogo mehanika est' svoj nabor instrumentov, sobiravshijsya v techenie vsej zhizni, kotoryj on tshchatel'no zapiraet i ohranyaet - naglyadnoe svidetel'stvo lichnogo masterstva. Tochno takzhe programmist sobiraet malen'kie redaktory, sortirovki, dvoichnye dampy, utility dlya raboty s diskami i pripryatyvaet ih v svoih fajlah. Odnako takoj podhod ne opravdan pri rabote nad programmnym proektom. Vo- pervyh, vazhnoj zadachej yavlyaetsya obmen informaciej, a lichnyj instrument emu meshaet, a ne sodejstvuet. Vo-vtoryh, pri perehode na novuyu mashinu ili novyj rabochij yazyk tehnologiya menyaetsya, poetomu srok zhizni instrumenta nedolog. I nakonec, ochevidno, znachitel'no effektivnee sovmestno razrabatyvat' i soprovozhdat' programmnye instrumenty obshchego naznacheniya. Odnako nedostatochno imet' instrumenty obshchego naznacheniya. Kak special'nye zadachi, tak i lichnye predpochteniya obuslovlivayut neobhodimost' imet' takzhe i specializirovannyj instrument. Poetomu pri obsuzhdenii sostava komandy programmistov ya predlagal imet' v brigade odnogo instrumental'shchika. |tot chelovek vladeet vsemi obshchedostupnymi instrumentami i mozhet obuchat' ih ispol'zovaniyu. On mozhet takzhe sozdavat' specializirovannye instrumenty, kotorye potrebuyutsya ego nachal'niku. Takim obrazom, menedzher proekta dolzhen ustanovit' principy i vydelit' resursy dlya razrabotki obshchih instrumentov. V to zhe vremya on dolzhen ponimat' neobhodimost' v specializirovannyh instrumentah i ne prepyatstvovat' razrabotke sobstvennyh instrumentov v podchinennyh rabochih gruppah. Est' opasnyj soblazn popytat'sya dostich' bol'shej effektivnosti, sobrav vmeste otdel'nyh razrabotchikov instrumenta i dorabotav obshchegruppovoj instrumentarij. No eto ne udaetsya. CHto eto za instrumenty, razrabotku kotoryh menedzher dolzhen obdumyvat', planirovat' i organizovyvat'? Prezhde vsego, vychislitel'nye sredstva. Dlya etogo trebuyutsya mashiny, i dolzhna byt' prinyata politika planirovaniya vremeni. Dlya etogo trebuetsya operacionnaya sistema, i dolzhna byt' ustanovlena politika obsluzhivaniya. Dlya etogo trebuetsya yazyk, i dolzhna byt' zalozhena politika v otnoshenii yazyka. Zatem idut utility, sredstva otladki, generatory kontrol'nyh primerov i tekstovyj processor dlya raboty s dokumentaciej. Rassmotrim ih poocheredno.1 Celevye mashiny Mashinnuyu podderzhku polezno razdelit' na celevye mashiny i rabochie mashiny. Celevaya mashina - eto ta, dlya kotoroj pishetsya programmnoe obespechenie i na kotoroj, v konce koncov, ego nuzhno budet testirovat'. Rabochie mashiny - eto te, kotorye predostavlyayut servisy, ispol'zuemye dlya sozdaniya sistemy. Esli sozdaetsya novaya operacionnaya sistema dlya staroj mashiny, poslednyaya mozhet sluzhit' odnovremenno i celevoj, i rabochej. Kakovy tipy celevyh sredstv? Esli brigada sozdaet novyj supervizor ili drugoe programmnoe sredstvo, sostavlyayushchee serdcevinu sistemy, to ej, konechno, nuzhna svoya mashina. Dlya takih sistem potrebuyutsya operatory i odin ili dva sistemnyh programmista, chtoby mashina byla v rabochem sostoyanii. Esli trebuetsya otdel'naya mashina, to ona dolzhna byt' dovol'no specificheskoj: ne trebuetsya, chtoby ona byla bystroj, no trebuetsya, po men'shej mere, 1 Mbajt operativnoj pamyati, 100 Mbajt v aktivnyh diskah i terminaly. Dostatochno simvol'nyh terminalov, no so znachitel'no bol'shej skorost'yu, chem 15 simvolov v sekundu, harakternyh dlya pishushchih mashinok. Nalichie bol'shoj pamyati znachitel'no sposobstvuet produktivnosti, pozvolyaya zanyat'sya razbieniem na overlei i minimizaciej razmera posle testirovaniya funkcij. Mashina ili programmnye sredstva dlya otladki dolzhny takzhe imet' sredstva dlya avtomaticheskogo podscheta i izmerenij lyubyh parametrov programmy vo vremya otladki. K primeru, karty ispol'zovaniya pamyati sluzhat moshchnym diagnosticheskim sredstvom pri vyyasnenii strannoj logiki povedeniya ili neozhidanno nizkoj proizvoditel'nosti. Planirovanie vremeni. Esli celevaya mashina novaya, - naprimer, dlya nee sozdaetsya pervaya operacionnaya sistema, - to mashinnogo vremeni malo, i planirovanie stanovitsya bol'shoj problemoj. Potrebnosti v rabochem vremeni celevoj mashiny imeet specificheskuyu krivuyu rosta. Pri razrabotke OS/360 u nas byli horoshie emulyatory System/360 i drugie mashiny. Po prezhnemu opytu my ocenili, skol'ko chasov rabochego vremeni S/360 nam ponadobitsya, i stali poluchat' pervye mashiny s proizvodstva. No mesyac za mesyacem oni ostavalis' bez nagruzki. Zatem srazu vse 16 sistem okazalis' zagruzhennymi, i raspredelenie vremeni stalo problemoj. Ispol'zovanie mashin vyglyadelo primerno kak na risunke 12.1. Vse odnovremenno nachali otlazhivat' pervye komponenty, i zatem vse komandy postoyanno chto-to otlazhivali. Ris. 12.1 Rost ispol'zovaniya celevyh mashin My centralizovali vse svoi mashiny i biblioteki magnitnyh lent i organizovali dlya ih raboty professional'nuyu i opytnuyu gruppu mashinnogo zala. Dlya maksimizacii byvshego v nedostatke mashinnogo vremeni S/360 vse otladochnye progony my osushchestvlyali v paketnom rezhime na podhodyashchih svobodnyh mashinah. My dobilis' chetyreh zapuskov v den' (oborachivaemost' sostavila dva s polovinoj chasa), a trebovalas' chetyrehchasovaya oborachivaemost'. Vspomogatel'naya mashina 1401 s terminalami ispol'zovalas' dlya planirovaniya progonov, otslezhivaniya tysyach zadanij i kontrolya vremeni oborachivaemosti. No so vsej etoj organizovannost'yu my perestaralis'. Posle neskol'kih mesyacev nizkoj oborachivaemosti, vzaimnyh obvinenij i prochih muk my pereshli k vydeleniyu mashinnogo vremeni krupnymi blokami. K primeru, vsya gruppa iz pyatnadcati chelovek, zanimavshayasya sortirovkoj, poluchala sistemu na srok ot chetyreh do shesti chasov. Planirovanie etogo vremeni bylo ih vnutrennim delom. Dazhe esli sistema byla na zanyata, postoronnie ne mogli eyu pol'zovat'sya. |to okazalos' bolee udachnym sposobom planirovaniya. Hotya koefficient ispol'zovaniya mashiny, vozmozhno, neskol'ko upal (a chasto i etogo ne bylo), proizvoditel'nost' podnyalas'. Dlya kazhdogo chlena komandy desyat' zapuskov v techenie shesti chasov znachitel'no produktivnee, chem desyat' zapuskov, osushchestvlennyh s pereryvami v tri chasa, poskol'ku postoyannaya koncentraciya sokrashchaet vremya obdumyvaniya. Posle takoj gonki komande obychno trebovalos' odin-dva dnya, chtoby podognat' rabotu s dokumentami, prezhde chem prosit' o vydelenii novogo bloka. Zachastuyu vsego tri programmista mogut s pol'zoj podelit' i raspredelit' mezhdu soboj vydelennyj im blok vremeni. Pohozhe, chto eto luchshij sposob ispol'zovaniya celevoj mashiny pri otladke novoj operacionnoj sistemy. Tak bylo na praktike, hotya eto ne sootvetstvovalo teorii. Sistemnaya otladka vsegda byla zanyatiem dlya nochnoj smeny, podobno astronomii. Dvadcat' let nazad, rabotaya nad 701-j mashinoj, ya vpervye poznal produktivnuyu svobodu ot formal'nostej, prisushchuyu predrassvetnym chasam, kogda vse nachal'niki iz mashinnogo zala krepko spyat po domam, a operatory ne raspolozheny borot'sya za soblyudenie pravil. Smenilos' tri pokoleniya mashin, polnost'yu izmenilis' tehnologii, poyavilis' operacionnye sistemy, no etot luchshij sposob raboty ostalsya prezhnim. On prodolzhaet zhit', poskol'ku naibolee effektiven. Prishla pora priznat' ego produktivnost' i shire primenyat'. Rabochie mashiny i sluzhby dannyh |mulyatory. Esli celevoj komp'yuter novyj, to dlya nego neobhodim logicheskij emulyator. |to daet apparat dlya otladki zadolgo do togo, kak celevaya mashina budet v nalichii. CHto stol' zhe vazhno, dazhe togda, kogda stanovitsya dostupnoj celevaya mashina, imeetsya dostup k nadezhnomu sredstvu dlya otladki. Nadezhnoe - ne to zhe samoe, chto tochnoe. |mulyator neizbezhno v kakom-libo otnoshenii budet otstupat' ot vernoj i tochnoj realizacii arhitektury novoj mashiny. No eto budet odna i ta zhe realizaciya i segodnya, i zavtra, chego ne skazhesh' o novoj apparatnoj chasti. V nashe vremya my privykli k tomu, chto apparatnaya chast' komp'yutera bol'shuyu chast' vremeni rabotaet bez sboev. Esli tol'ko razrabotchik prikladnoj programmy ne zamechaet, chto sistema neodinakovo vedet sebya pri raznyh identichnyh progonah programmy, emu pravil'nee vsego poiskat' oshibki v svoem kode, a ne v tehnike. |tot opyt, odnako, sosluzhil plohuyu sluzhbu pri programmirovanii novoj mashiny. Laboratornye razrabotki, predvaritel'nye ili rannie vypuski komp'yuterov ne rabotayut dolzhnym obrazom, ne rabotayut nadezhno i ne ostayutsya neizmennymi den' oto dnya. Po mere obnaruzheniya oshibok tehnicheskie izmeneniya proizvodyatsya vo vseh ekzemplyarah mashiny, vklyuchaya ispol'zuemyj gruppoj programmistov. Takaya neustojchivost' osnovaniya dostatochno nepriyatna. Otkazy apparatury, obychno skachkoobraznye, eshche huzhe. I huzhe vsego neopredelennost', lishayushchaya stimula staratel'no kopat'sya v svoem kode v poiskah oshibki - ee mozhet tam vovse ne byt'. Poetomu nadezhnyj emulyator na zreloj mashine ostaetsya poleznym znachitel'no dol'she, chem mozhno bylo predpolozhit'. Mashiny dlya kompilyatora i assemblera. Po tem zhe prichinam trebuyutsya kompilyatory i assemblery, rabotayushchie na nadezhnyh mashinah, no kompiliruyushchie ob容ktnyj kod dlya celevoj sistemy. Zatem mozhno nachat' ego otladku na emulyatore. Pri programmirovanii na yazykah vysokogo urovnya znachitel'nuyu chast' otladki mozhno proizvesti pri kompilyacii dlya vspomogatel'noj mashiny i testirovanii rezul'tiruyushchej programmy, prezhde chem otlazhivat' programmu dlya celevoj mashiny. |tim dostigaetsya proizvoditel'nost' neposredstvennogo ispolneniya, a ne emulyacii, v sochetanii s nadezhnost'yu stabil'noj mashiny. Biblioteki programm i uchet. Ochen' uspeshnym i vazhnym primeneniem vspomogatel'noj mashiny v programme razrabotki OS/360 byla podderzhka bibliotek programm. Sistema, razrabotannaya pod rukovodstvom U. R. Krouli (W. R. Crowley), sostoyala iz dvuh soedinennyh vmeste mashin 7010 i obshchej diskovoj bazoj dannyh. Na 7010 podderzhivalsya takzhe assembler dlya S/360. V etoj biblioteke hranilsya ves' protestirovannyj ili nahodyashchijsya v processe testirovaniya kod, kak ishodnyj, tak i assemblirovannye zagruzochnye moduli. Na praktike biblioteka byla razbita na podbiblioteki s razlichnymi pravami dostupa. Prezhde vsego, u kazhdoj gruppy ili programmista byla oblast' dlya hraneniya ekzemplyarov programm, kontrol'nyh primerov i okruzheniya, kotoroe trebovalos' dlya testirovaniya komponentov. Na etoj ploshchadke dlya igr ne bylo nikakih ogranichenij na dejstviya s sobstvennymi programmami. Kogda komponent programmista byl gotov k vklyucheniyu v bolee krupnuyu chast', ego ekzemplyar peredavalsya menedzheru etoj bolee krupnoj sistemy, kotoryj pomeshchal ego v podbiblioteku sistemnoj integracii. Teper' avtor ne mog ego izmenit' bez razresheniya menedzhera integracii. Kogda sistema sobiralas' voedino, etot menedzher provodil vse vidy sistemnogo testirovaniya, vyyavlyaya oshibki i poluchaya ispravleniya. CHerez nekotoroe vremya sistemnaya versiya byla gotova dlya bolee shirokogo ispol'zovaniya. Togda ona peremeshchalas' v podbiblioteku tekushchej versii. |tot ekzemplyar byl svyashchennym, i dostup k nemu razreshalsya tol'ko dlya ispravleniya razrushitel'nyh oshibok. Ego mozhno bylo ispol'zovat' dlya integrirovaniya i testirovaniya vseh novyh versij modulej. Programmnyj katalog na mashine 7010 otslezhival vse versii kazhdogo modulya, ego sostoyanie, mestonahozhdenie i izmeneniya. Zdes' vazhny dva obstoyatel'stva. Pervoe - eto kontrol', oznachayushchij, chto ekzemplyary programm prinadlezhat menedzheram, i tol'ko oni mogut sankcionirovat' ih izmenenie. Vtoroe - formal'noe razdelenie i peremeshchenie s ploshchadki dlya igr k integracii i vypusku novoj versii. Po moemu mneniyu, eto bylo odnim iz luchshih reshenij v programme OS/360. |ta chast' tehnologii upravleniya byla nezavisimo razrabotana dlya neskol'kih krupnyh programmnyh proektov, v tom chisle v Bell Labs, ICL i Kembridzhskom universitete.2 Ona primenima kak k programmam, tak i k dokumentacii. |to - neocenimaya tehnologiya. Programmnye instrumenty. Po mere poyavleniya novyh tehnologij otladki starye teryayut znachenie, no ne ischezayut. Po-prezhnemu neobhodimy dampy pamyati, redaktory ishodnogo teksta, dampy mgnovennogo sostoyaniya, dazhe trassirovki. Analogichnym obrazom, trebuetsya polnyj nabor utilit dlya zagruzki kolod perfokart na diski, kopirovaniya magnitnyh lent, pechati fajlov, izmeneniya katalogov. Esli instrumental'shchika proekta naznachit' na dostatochno rannej stadii, to vse eto mozhet byt' sdelano srazu i nahodit'sya v gotovnosti k momentu nadobnosti. Sistema dokumentacii. Iz vseh instrumentov bol'she vsego truda mozhet sberech' komp'yuterizirovannaya sistema redaktirovaniya teksta, dejstvuyushchaya na nadezhnoj mashine. Nasha sistema, razrabotannaya Dzh. U. Franklinom (J. W. Franklin), byla ochen' udobna. YA dumayu, bez nee rukovodstva po OS/360 poyavilis' by znachitel'no pozdnee i okazalis' by bolee zaputannymi. Est' lyudi, kotorye stanut utverzhdat', chto dvuhmetrovaya polka rukovodstv po OS/360 yavlyaetsya sledstviem nederzhaniya rechi, i sama ee ob容mistost' yavlyaet soboj novyj tip nepostizhimosti. I dolya pravdy v etom est'. No u menya est' dva vozrazheniya. Vo-pervyh, hotya dokumentaciya po OS/360 i oshelomlyaet razmerami, plan ee izucheniya tshchatel'no izlozhen. Esli ispol'zovat' ego izbiratel'no, to chashche vsego mozhno ne obrashchat' vnimaniya na bol'shuyu chast' vsej massy. Dokumentaciyu po OS/360 nuzhno rassmatrivat' kak biblioteku ili enciklopediyu, a ne material dlya obyazatel'nogo chteniya. Vo-vtoryh, eto gorazdo luchshe, chem krajnyaya nedostatochnost' dokumentacii, harakternaya dlya bol'shinstva sistem programmirovaniya. YA ohotno soglashus', tem ne menee, chto v nekotoryh mestah tekst mozhno bylo znachitel'no uluchshit', i rezul'tatom luchshego opisaniya stal by men'shij ob容m. Nekotorye chasti (naprimer, "Koncepcii i sredstva") sejchas ochen' horosho napisany. |mulyator proizvoditel'nosti. Luchshe ego imet'. Razrabotajte ego "snaruzhi vnutr'", kak opisano v sleduyushchej glave. Ispol'zujte odinakovoe proektirovanie sverhu vniz dlya emulyatora proizvoditel'nosti, emulyatora logiki i samogo produkta. Nachnite rabotu s nim kak mozhno ran'she. Prislushajtes' k tomu, chto on vam skazhet. YAzyki vysokogo urovnya i interaktivnoe programmirovanie Segodnya dva vazhnejshih instrumenta sistemnogo programmirovaniya - eto te, kotorye ne ispol'zovalis' pri razrabotke OS/360 pochti desyatiletie nazad. Oni do sih por ne ochen' shiroko ispol'zuyutsya, no vse ukazyvaet na ih moshch' i primenimost'. |to: a) yazyki vysokogo urovnya i b) interaktivnoe programmirovanie. YA ubezhden, chto tol'ko inertnost' i len' prepyatstvuet povsemestnomu prinyatiyu etih instrumentov, tehnicheskie trudnosti bolee ne yavlyayutsya izvineniyami. YAzyki vysokogo urovnya. Glavnye osnovaniya dlya ispol'zovaniya yazykov vysokogo urovnya - eto proizvoditel'nost' i skorost' otladki. Proizvoditel'nost' my obsuzhdali ran'she (glava 8). Imeyushchiesya dannye, hotya i nemnogochislennye, ukazyvayut na mnogokratnyj rost, a ne na uvelichenie na neskol'ko procentov. Uluchshenie otladki proishodit blagodarya tomu, chto oshibok stanovitsya men'she, a nahodit' ih legche. Ih men'she, poskol'ku ustranyaetsya celyj uroven' obrazovaniya oshibok, uroven', na kotorom delayutsya ne tol'ko sintaksicheskie, no i semanticheskie oshibki, takie kak nepravil'noe ispol'zovanie registrov. Ih legche nahodit', poskol'ku v etom pomogaet diagnostika kompilyatora i, chto eshche vazhnee, ochen' legko vstavlyat' poluchenie otladochnyh momental'nyh snimkov. Menya eti vozmozhnosti proizvoditel'nosti i otladki oshelomlyayut. Mne trudno predstavit' sebe sistemu programmirovaniya, kotoruyu ya stal by sozdavat' na yazyke assemblera. Nu, a kak s klassicheskimi vozrazheniyami protiv etogo instrumenta? Ih tri: ya ne mogu sdelat' to, chto hochu; rezul'tiruyushchaya programma slishkom velika; rezul'tiruyushchaya programma slishkom medlenna. CHto kasaetsya vozmozhnostej, vozrazhenie, ya dumayu, bol'she ne sostoyatel'no. Vse svidetel'stvuet v pol'zu togo, chto mozhno delat' to, chto hochetsya, potrudivshis' najti sposob, no inogda dlya etogo prihoditsya izlovchit'sya.3, 4 CHto kasaetsya pamyati, to novye optimiziruyushchie kompilyatory nachinayut pokazyvat' ves'ma udovletvoritel'nye rezul'taty, i ih usovershenstvovanie prodolzhaetsya. CHto kasaetsya skorosti, to optimiziruyushchie kompilyatory inogda porozhdayut kod, kotoryj zachastuyu vypolnyaetsya bystree, chem napisannyj vruchnuyu. Bolee togo, problemy skorosti mozhno obychno reshit', zameniv ot 1 do 5 procentov skompilirovannoj programmy kodom, napisannym vruchnuyu, posle ee polnoj otladki.5 Kakoj yazyk vysokogo urovnya sleduet ispol'zovat' dlya sistemnogo programmirovaniya? Segodnya edinstvennyj dostojnyj kandidat - PL/I.6 U nego ochen' polnyj nabor operatorov; on sootvetstvuet okruzheniyu operacionnoj sredy; imeetsya celyj ryad kompilyatorov s raznymi osobennostyami - interaktivnyh, bystryh, s uluchshennoj diagnostikoj, s vysokoj stepen'yu optimizacii. Lichno ya bystree razrabatyvayu algoritmy s pomoshch'yu APL; zatem ya perevozhu ih v PL/I dlya sootvetstviya sistemnomu okruzheniyu. Interaktivnoe programmirovanie. Odnim iz opravdanij proekta MTI MULTICS byla ego pol'za dlya sozdaniya sistem programmirovaniya. MULTICS (i vsled za tem TSS IBM) konceptual'no otlichaetsya ot drugih interaktivnyh komp'yuternyh sistem imenno v teh otnosheniyah, kotorye neobhodimy dlya sistemnogo programmirovaniya: mnogourovnevaya sistema razdeleniya dostupa i zashchity dannyh i programm, intensivnoe upravlenie bibliotekami i sredstva dlya sovmestnoj raboty pol'zovatelej terminalov. YA ubezhden, chto vo mnogih prilozheniyah interaktivnye sistemy nikogda ne zamenyat sistemy s obrabotkoj paketnyh zadanij. No ya dumayu, chto sozdateli MULTICS priveli samye ubeditel'nye dovody v ee pol'zu imenno v primenenii k sistemnomu programmirovaniyu. Poka est' ne mnogo svidetel'stv dejstvitel'noj plodotvornosti etih ochevidno moshchnyh instrumentov. Sushchestvuet shiroko rasprostranennoe priznanie togo, chto otladka yavlyaetsya trudnoj i medlennoj chast'yu sistemnogo programmirovaniya, i medlennaya oborachivaemost' - proklyatie otladki. Poetomu logika interaktivnogo programmirovaniya kazhetsya neumolimoj.7 Ris. 12.2 Sravnitel'naya proizvoditel'nost' pri paketnom i dialogovom Programmirovanii Pomimo togo, est' horoshie otzyvy teh, kto razrabotal takim sposobom nebol'shie sistemy ili chasti sistem. Edinstvennye dostupnye mne dannye otnositel'no vliyaniya na programmirovanie bol'shih sistem ishodyat ot Dzhona Harra iz Bell Labs. Oni predstavleny na risunke 12.2. |ti cifry ohvatyvayut napisanie, assemblirovanie i otladku programm. Pervaya programma yavlyaetsya, v osnovnom, upravlyayushchej. Ostal'nye tri - yazykovye translyatory, redaktory i t.p. Dannye Harra pozvolyayut predpolozhit', chto sredstva interaktivnoj raboty, po krajnej mere, udvaivayut proizvoditel'nosti sistemnogo programmirovaniya.8 |ffektivnoe ispol'zovanie bol'shinstva interaktivnyh sredstv trebuet, chtoby rabota proizvodilas' na yazyke vysokogo urovnya, poskol'ku teletajp i pishushchuyu mashinku nel'zya ispol'zovat' dlya polucheniya dampa pamyati. S ispol'zovaniem yazyka vysokogo urovnya legko redaktirovat' ishodnyj tekst i delat' otdel'nye raspechatki. Vmeste oni dejstvitel'no sostavlyayut paru ottochennyh instrumentov. Glava 13. Celoe i chasti YA duhov vyzyvat' mogu iz bezdny. I ya mogu, i kazhdyj mozhet, Vopros lish', yavyatsya l' na zov oni? SHEKSPIR, KOROLX GENRIH IV Sredi sovremennyh kudesnikov, kak i vstar', vstrechayutsya hvastuny: "YA mogu pisat' programmy, kotorye upravlyayut vozdushnym dvizheniem, perehvatyvayut ballisticheskie rakety, delayut perevody po bankovskim schetam, upravlyayut proizvodstvennymi liniyami". Na chto est' otvet: "I ya mogu, i kazhdyj mozhet, no budet li rabotat' to, chto ty napishesh'?" Kak napisat' programmu, kotoraya budet rabotat'? Kak protestirovat' programmu? I kak ob容dinit' nabor protestirovannyh programm-komponentov v protestirovannuyu i nadezhnuyu sistemu? Neskol'ko raz my uzhe kasalis' sootvetstvuyushchih priemov, davajte teper' rassmotrim ih bolee sistematicheski. Proektirovanie bez oshibok Zashchita opredelenij ot oshibok. Samye pagubnye i neulovimye sistemnye oshibki voznikayut iz-za nesootvetstviya dopushchenij, sdelannyh avtorami razlichnyh komponentov. Podhod k konceptual'noj celostnosti, izlozhennyh vyshe v glavah 4, 5 i 6, neposredstvenno obrashchaetsya k etim problemam. Kratko govorya, konceptual'naya celostnost' produkta ne tol'ko uproshchaet ego ispol'zovanie, no takzhe oblegchaet razrabotku i delaet menee podverzhennym oshibkam. Takuyu zhe rol' vypolnyaet detalizirovannaya trudoemkaya rabota po razrabotke arhitektury, podrazumevaemaya etim podhodom. V. A. Vysockij iz proekta Safeguard, vypolnyavshegosya v Bell Telephone Laboratories, govorit tak: "Reshayushchaya zadacha - dat' opredelenie dlya produkta. Ochen' mnogie neudachi svyazany imenno s temi aspektami, kotorye ne byli vpolne specificirovany".1 Tshchatel'noe opredelenie funkcij, tshchatel'naya specifikaciya i staratel'noe izbeganie vseh ukrashatel'stv funkcij i poletov tehnicheskoj mysli - vse eto snizhaet kolichestvo sistemnyh oshibok, kotorye budut obnaruzheny. Proverka specifikacii. Zadolgo do napisaniya vsyakogo koda specifikaciya dolzhna byt' peredana storonnej gruppe testirovaniya dlya tshchatel'nogo rassmotreniya polnoty i yasnosti. Kak schitaet Vysockij, sami razrabotchiki sdelat' eto ne mogut: "Oni ne mogut priznat'sya, chto ne ponimayut ee, oni budut schastlivo prokladyvat' svoj put' cherez propushchennye i temnye mesta". Nishodyashchee proektirovanie. V ochen' chetkoj stat'e 1971 goda Niklaus Virt formalizoval proceduru razrabotki, godami ispol'zovavshuyusya luchshimi programmistami.2 Bolee togo, ego zamechaniya, sdelannye v otnoshenii razrabotki programm, polnost'yu primenimy k razrabotke slozhnyh programmnyh sistem. Voploshcheniem etih zamechanij yavlyaetsya razdelenie sozdaniya sistem na proektirovanie arhitektury, razrabotku i realizaciyu. Bolee togo, kazhdaya iz zadach proektirovaniya arhitektury, razrabotki i realizacii luchshe vsego mozhet byt' reshena nishodyashchimi metodami. Vkratce, metod Virta opredelyaet razrabotku kak posledovatel'nost' utochnyayushchih shagov. Nabrasyvaetsya primernoe opisanie zadachi i grubyj metod resheniya, pozvolyayushchij poluchit' osnovnoj rezul'tat. Zatem opredelenie izuchaetsya bolee pristal'no, chtoby uvidet', v chem otlichie poluchennogo rezul'tata ot trebuemogo, i krupnye etapy resheniya razbivayutsya na bolee melkie. Kazhdoe utochnenie v opredelenii zadachi stanovitsya utochneniem algoritma resheniya i mozhet soprovozhdat'sya utochneniem predstavleniya dannyh. V etom processe vyyavlyayutsya moduli resheniya ili dannyh, dal'nejshee utochnenie kotoryh mozhet byt' prodolzheno nezavisimo ot osnovnoj raboty. Stepen' takoj modul'nosti opredelyaet gibkost' i izmenyaemost' programmy. Virt schitaet neobhodimym ispol'zovanie na kazhdom shage notacii kak mozhno bolee vysokogo urovnya, chtoby vydelit' ponyatiya i skryt' detali, poka ne stanet neobhodimym dal'nejshee utochnenie. Pravil'no osushchestvlyaemoe nishodyashchee proektirovanie pozvolyaet izbegat' oshibok po neskol'kim prichinam. Vo-pervyh, prozrachnost' struktury i predstavleniya oblegchaet tochnuyu formulirovku trebovanij k modulyam i ih funkcij. Vo-vtoryh, raschlenenie i nezavisimost' modulej pomogayut izbezhat' sistemnyh oshibok. V- tret'ih, proekt mozhno testirovat' na kazhdom utochnyayushchem shage, poetomu testirovanie mono nachat' ran'she i na kazhdom shage sosredotochit'sya na podhodyashchem urovne detalizacii. Process poshagovogo utochneniya ne oznachaet, chto v sluchae stolknoveniya s kakoj- nibud' neozhidanno zatrudnitel'noj detal'yu ne prihoditsya vozvrashchat'sya nazad, otbrasyvat' samyj verhnij uroven' i nachinat' vse snachala. Na praktike eto chasto sluchaetsya. No stanovitsya znachitel'no legche tochno uvidet', kogda i pochemu nuzhno otbrosit' ves' proekt i nachat' snachala. Mnogie slabye sistemy poyavlyayutsya v rezul'tate popytok sohranit' skvernyj pervonachal'nyj proekt putem raznogo roda kosmeticheskih zaplatok. Nishodyashchee proektirovanie umen'shaet takoj soblazn. YA ubezhden, chto nishodyashchee proektirovanie yavlyaetsya vazhnejshej novoj formalizaciej programmirovaniya za desyatiletie. Strukturnoe programmirovanie. Drugoj vazhnyj krug idej dlya razrabotki, sokrashchayushchih chislo oshibok v programme, ishodit to Dejkstry (Dijkstra)3 i postroen na teoreticheskoj strukture Bema (Boehm) i Dzhakopini (Jacopini).4 V svoej osnove podhod zaklyuchaetsya v razrabotke programm, upravlyayushchie struktury kotoryh sostoyat tol'ko iz ciklov, opredelyaemyh takimi operatorami, kak DO WHILE i gruppami uslovno vypolnyaemyh operatorov, ogranichennyh skobkami s ispol'zovaniem operatorov usloviya IF...THEN...ELSE. Bem i Dzhakopini pokazyvayut teoreticheskuyu dostatochnost' takih struktur. Dejkstra dokazyvaet, chto al'ternativnoe neogranichennoe primenenie vetvlenie s pomoshch'yu GO TO obrazuet struktury, raspolagayushchie k poyavleniyu logicheskih oshibok. V osnove, nesomnenno, lezhat zdravye mysli. Pri obsuzhdenii sdelano mnogo kriticheskih zamechanij - v chastnosti, bol'shoe udobstvo predstavlyayut dopolnitel'nye upravlyayushchie struktury, takie kak n-variantnyj perehod (tak nazyvaemyj operator CASE) dlya razlicheniya sredi neskol'kih sluchaev i avarijnyj vyhod (GO TO ABNORMAL END). Krome togo, nekotorye dogmaticheski izbegayut vseh GO TO , chto predstavlyaetsya chrezmernym. Vazhnoj i sushchestvennoj dlya sozdaniya programm, ne soderzhashchih oshibok, yavlyaetsya neobhodimost' rassmatrivat' upravlyayushchie struktury sistemy kak upravlyayushchie struktury, a ne kak otdel'nye operatory perehoda. Takoj obraz mysli yavlyaetsya bol'shim shagom vpered. Otladka komponentov Za poslednie dvadcat' let procedury otladki programm proshli bol'shoj krug i v nekotoryh otnosheniyah vernulis' k nachal'noj tochke. Cikl proshel chetyre etapa i lyubopytno prosledit' ih, otmetiv motivaciyu perehoda. Otladka v aktivnom rezhime. U pervyh mashin bylo sravnitel'no slaboe oborudovanie vvoda-vyvoda, obuslovlivavshee bol'shie zaderzhki. Obychno mashina ispol'zovala dlya chteniya i zapisi bumazhnye i magnitnye lenty, a dlya podgotovki lent i pechati ispol'zovalis' avtonomnye sredstva. Iz-za etogo vvod-vyvod na lentu byl nevynosimo neudoben dlya otladki, i dlya nee ispol'zovalas' konsol'. Poetomu otladka organizovyvalas' takim obrazom, chtoby obespechit' za seans raboty s mashinoj vozmozhno bol'shee chislo proverok. Programmist tshchatel'no razrabatyval svoi procedury otladki, planiruya mesta ostanovki, adresa pamyati dlya prosmotra, ih vozmozhnoe soderzhimoe i dal'nejshie dejstviya v zavisimosti ot soderzhimogo. |to dotoshnoe programmirovanie samogo sebya v kachestve otladchika vpolne moglo zanyat' polovinu vremeni napisaniya otlazhivaemoj programmy. Glavnym grehom bylo smelo nazhat' knopku START, ne razbiv predvaritel'no programmu na otlazhivaemye sekcii s zaplanirovannymi ostanovkami. Dampy pamyati. Otladka v aktivnom rezhime byla ochen' effektivnoj. Za dvuhchasovuyu otladku mozhno bylo zapustit' programmu raz desyat'. No komp'yutery byli malochislenny i ochen' dorogi, i mysl' o takoj naprasnoj trate mashinnogo vremeni uzhasala. Poetomu, kogda poyavilis' skorostnye printery, podklyuchaemye v aktivnom rezhime, tehnologiya izmenilas'. Programma zapuskalas' i rabotala do vozniknoveniya oshibki, posle chego raspechatyvalsya damp pamyati. Togda nachinalsya kropotlivyj trud za stolom po izucheniyu soderzhimogo kazhdogo adresa. Vremeni uhodilo primerno stol'ko zhe, skol'ko i pri otladke na mashine, no eto bylo uzhe posle kontrol'nogo progona, i rabota sostoyala v rasshifrovke dannyh, a ne v planirovanii, kak prezhde. Dlya kazhdogo otdel'nogo pol'zovatelya otladka zanimala znachitel'no bol'shij srok, poskol'ku testovye zapuski zaviseli ot oborachivaemosti paketnoj obrabotki. Odnako procedura v celom byla prednaznachena dlya sokrashcheniya vremeni ispol'zovaniya komp'yutera i obsluzhivaniya vozmozhno bol'shego chisla programmistov. Snimki momental'nogo sostoyaniya. Mashiny, dlya kotoryh byli razrabotany dampy pamyati, imeli pamyat' razmerom 2000-4000 slov, ili 8-16 Kbajt. Odnako razmer pamyati ros ogromnymi tempami, i delat' damp pamyati stalo nereal'nym. Poetomu razrabotali metody vyborochnogo dampa, vyborochnoj trassirovki i vstavki v programmy komand dlya momental'nyh snimkov. Vershinoj razvitiya etogo napravleniya stal TESTRAN v OS/360, pozvolyavshij vstavlyat' v programmu momental'nye snimki bez povtornoj sborki i kompilyacii. Interaktivnaya otladka. V 1959 godu Kodd (Codd) s kollegami5 i Strejchi (Strachey)6 soobshchili o rabote, cel'yu kotoroj byla otladka v rezhime razdeleniya vremeni, pozvolyayushchaya odnovremenno dostich' mgnovennoj oborachivaemosti otladki v aktivnom rezhime i effektivno ispol'zovat' mashinnoe vremya, kak pri paketnoj obrabotke zadanij. Komp'yuter dolzhen byl imet' v pamyati neskol'ko programm, gotovyh k zapusku. Terminal, upravlyaemyj tol'ko programmoj, dolzhen byl byt' svyazan s kazhdoj iz otlazhivaemyh programm. Otladka dolzhna byla prohodit' pod upravleniem programmy-supervizora. Kogda programmist za terminalom ostanavlival svoyu programmu, chtoby izuchit' ee vypolnenie ili vnesti izmeneniya, supervizor zapuskal druguyu programmu, zanimaya takim obrazom mashinu. Mul'tiprogrammnaya sistema Kodda byla razrabotana, no akcent byl sdelan na uvelichenie proizvoditel'nosti blagodarya effektivnomu ispol'zovaniyu vvoda- vyvoda, i interaktivnaya otladka ne byla osushchestvlena. Idei Strejchi byli uluchsheny i v 1963 godu voploshcheny Korbato s kollegami v MTI v eksperimental'noj sisteme 7090. |to razrabotke privela k MULTICS, TSS i drugim segodnyashnim sistemam razdeleniya vremeni. Glavnymi oshchushchaemymi pol'zovatelem razlichiyami mezhdu otladkoj v aktivnom rezhime, kak ona osushchestvlyalas' ranee, i segodnyashnej interaktivnoj otladkoj yavlyayutsya vozmozhnosti, poluchennye v rezul'tate prisutstviya programmy- supervizora i svyazannyh s nej interpretatorov yazykov programmirovaniya. Mozhno programmirovat' i proizvodit' otladku na yazykah vysokogo urovnya. |ffektivnye sredstva redaktirovaniya pozvolyayut legko delat' izmeneniya i momental'nye snimki. Vozvrat k mgnovennoj oborachivaemosti otladki v aktivnom rezhime poka ne privel k vozvrashcheniyu predvaritel'nogo planirovaniya otladochnyh seansov. V sushchnosti, takoe predvaritel'noe planirovanie ne stol' neobhodimo, kak ran'she