10.05.2011

Ці сапраўды праект мёртвы?

* Source text URL: http://www.martinfowler.com/articles/designDead.html





Для многіх, якія прыходзяць коратка ў кантакт з экстрэмальнага праграмавання, здаецца, што XP патрабуе смерці праграмнага забеспячэння. Не толькі значна дзейнасці дызайну высмейваюць як “Вялікі Up Front Design”, але такія метады дызайну, як UML, гнуткія структуры, і нават карціны дэ-падкрэсліваюцца або цалкам ігнаруюцца. На самой справе XP ўключае ў сябе шмат дызайну, але робіць гэта інакш, чым устаноўленыя працэсы праграмнага забеспячэння. XP амаладзіў паняцце эвалюцыйнага праектавання з практыкай, што дазволіць эвалюцыі стаць жыццяздольнай стратэгіяй дызайну. Ён таксама дае новыя выклікі і навыкі, якіх дызайнеры павінны даведацца, як зрабіць просты дызайн, як выкарыстоўваць рэфакторынг, захаваць дызайн чыстым, і як выкарыстоўваць шаблоны ў эвалюцыйным стылі.

Май 2004


Марцін Фаулер

(Гэты артыкул быў напісаны для майго выступу на XP 2000 канферэнцыі і яе першапачатковым выглядзе быў апублікаваны як частка вытворчасці.)

Змест

Планаваны і Эвалюцыйны дызайн

Уключэнне практыкі XP

Значэнне Прастата

Што на Зямлі з’яўляецца прастатой у любым выпадку

Рэфакторынг ці парушэнне YAGNI?

Шаблоны і XP

Якая расце Архітэктура

UML і XP

На метафары

Ці хочаш ты быць архітэктарам, калі вырасцеш?

Зварачальнасць

Воля да дызайну

Рэчы, якія цяжка раскласці

З’яўленне праектавання адбываецца?

Ці сапраўды праект мёртвы?

Падзякі

Экстрэмальнае праграмаванне (XP) кідае выклік шматлікім агульным здагадкам аб распрацоўцы праграмнага забеспячэння. Адной з найбольш спрэчных з’яўляецца яго адмова ад значных намаганняў дызайну пярэдняй часткі на карысць больш эвалюцыйнаму падыходу. Яго ганьбоўцам – гэта вяртанне, каб "кадаваць і фіксаваць" распрацоўку – звычайна высмейваецца, як зламанне. Для сваіх прыхільнікаў гэта часта разглядаецца як адмова ад метадаў праектавання (напрыклад, UML), прынцыпаў і мадэляў. Не турбуйцеся аб дызайне, калі вы слухаеце код, добры дызайн з’явіцца.

Я знаходжуся ў цэнтры гэтага аргументу. Большая частка маёй кар’еры прыцягнула графічны дызайн моў – Unified Modeling Language (UML) і яго папярэднікаў – і ў характары. На самай справе я напісаў кнігі па абодвум UML і шаблонам. Маё абдымкі XP азначаюць, што я выракаюся ад усяго з таго, што я запісаў аб гэтых прадметах, ці чысцяць мой розум ад ўсіх такіх контррэвалюцыйных паняццяў?

Ну, я не буду чакаць, што я магу пакінуць вас абадраных на крук драматычнага напружання. Кароткі адказ: не. Доўгі адказ на астатняй частцы гэтага артыкула.

Планаваны і Эвалюцыйны дызайн

У гэтым артыкуле я збіраюся апісаць двума стылямі, як дызайн робіцца ў распрацоўцы праграмнага забеспячэння. Магчыма, найбольш распаўсюджанай з’яўляецца эвалюцыйнае праектаванне. Па сутнасці эвалюцыйны дызайн азначае, што дызайн сістэмы расце як рэалізавана сістэма. Дызайн з’яўляецца часткай працэсаў праграмавання і як праграма развіваецца, якія змяненні ў праекце.

У сваім агульным карыстанні эвалюцыйны дызайн – гэта катастрофа. Дызайн заканчвае тым, што агрэгацыя кучы спецыяльных тактычных рашэнняў робіць код, які цяжэй змяніць. У многіх адносінах вы можаце сцвярджаць, што гэта не дызайн, вядома, гэта звычайна прыводзіць да дрэннага дызайну. Як гаворыць Кент, дызайн ёсць, калі вы можаце пастаянна змяняць праграмнае забеспячэнне лёгка ў доўгатэрміновай перспектыве. Калі дызайн пагаршаецца, то і ваша здольнасць эфектыўна ўносіць змены. У вас ёсць стан праграмнага забеспячэння энтрапіі, з цягам часу дызайн становіцца ўсё горш і горш. Гэта не толькі робіць праграмнае забеспячэнне, якое цяжэй змяніць, гэта таксама робіць памылкі, што і лягчэй разводзіць, і цяжэй знайсці, і бяспечна забіць. Гэта – "код і фіксаванне" – кашмар, у якім памылкі становяцца па экспаненце больш дарагімі, каб фіксаваць, у той час як праект працягваецца.

Планаваны дызайн супярэчыць гэтаму, і змяшчае паняцці, якія нарадзіліся з іншых галін тэхнікі. Калі вы хочаце пабудаваць будку, вы можаце проста збіць дрэва разам і атрымаць грубую форму. Аднак, калі вы хочаце пабудаваць хмарачос, вы не можаце працаваць такім чынам – гэта будзе проста крах, перш, чым вы нават атрымаеце палову шляху. Так вы пачынаеце і інжынерныя чарцяжы, выкананыя ў канструктарскім бюро, як адна мая жонка працуе ў цэнтры Бостана. Як яна робіць дызайн: яна высвятляе ўсе пытанні, часткова матэматычнага аналізу, але ў асноўным з дапамогай будаўнічых нормаў і правілаў. Будаўнічыя нормы і правілы аб тым, як вы структурыруеце дызайн, заснаваны на вопыце, што працуе (і некаторае асноўнае з матэматыцы). Як толькі праект зроблены, тады яе машынабудаўнічая кампанія можа перадаць праект да іншай кампаніі, якая стварае яго.

Планаваныя дызайн у праграмным забеспячэнні павінны працаваць так жа. Дызайнеры прыдумляюць вялікія пытанні загадзя. Ім не трэба пісаць код, таму што яны не будуюць праграмнае забеспячэнне, яны робяць яго планаванне. Такім чынам, яны могуць выкарыстоўваць дызайн тэхнікі, як UML, які атрымлівае ад некаторых падрабязнасцяў праграмавання і дазваляе дызайнерам працаваць на больш абстрактным узроўні. Як толькі канструкцыя зроблена, яны могуць перадаць яго да асобнай групы (ці нават асобную кампанію), каб пабудаваць. Паколькі дызайнеры думаюць у больш буйных маштабах, яны могуць пазбегнуць серыі тактычных рашэнняў, якія прыводзяць да энтрапіі праграмнага забеспячэння. Праграмісты могуць ісці за напрамкам праекта і, калі яны ідуць за праектам, то маюць добра створаную сістэму.

Зараз плануецца падыход да дызайну, якой існаваў прыкладна ў 70-х гадах, і многія людзі выкарыстоўваюць яго. Гэта лепш у многіх адносінах, чым “код і фіксаванне” эвалюцыйнага праектавання. Але яна маюць некаторыя недахопы. Першая памылка ў тым, што гэта немагчыма – прадумаць ўсе пытанні, з якімі вам прыйдзецца мець справу ў час праграмавання. Такім чынам, непазбежна пры праграмаванні палічыць рэчы тым пытаннем праектам. Аднак, калі распрацоўнікі зробяць і пераходзяць на іншы праект, што адбываецца? Праграмісты пачынаюць кадаваць вакол праекту, і энтрапія пачынаецца. Нават калі распрацоўнік не сышоў, гэта займае час, каб разабрацца ў пытаннях праектавання, змяніць малюнкі, і затым змяніць код. Звычайна ёсць больш хуткая фіксацыя і недахоп часу. Такім чынам энтрапія (зноў).

Акрамя таго, часта ёсць культурная праблема. Распрацоўнікі, зробленыя распрацоўшчыкамі з-за навыку і вопыту, але яны так занятыя, працуючы над праектамі, якія яны не прымушаюць шмат часу больш кадаваць. Аднак, інструменты і матэрыялы распрацоўкі праграмнага забеспячэння змяняюцца пры хуткім узроўні. Калі больш не кадзіруеце, толькі можа прапускаеце змены, якія адбываюцца з гэтым тэхналагічным патокам, таксама губляеце павагу тых, хто сапраўды кадуе.

Гэта супярэчнасць паміж будаўнікамі і праекціроўшчыкамі адбываецца ў будынку таксама, але гэта больш інтэнсіўна ў праграмным забеспячэнні. Гэта інтэнсіўна, таму што ёсць ключавое адрозненне. У будынку ёсць выразны падзел на навыкі паміж тымі, хто праектуе і тых, хто будуе, але і ў праграмным забеспячэнні не менш выпадку. Любы праграміст, які працуе ў асяроддзі высокага дызайну, павінен быць вельмі кваліфікаваны. Кваліфікаваны дастаткова, каб канструіраваць пытанне дызайнера, асабліва, калі дызайнер менш дасведчаны аб паўсядзённых рэаліях развіцця платформы.

Цяпер гэтыя пытанні могуць быць выпраўленыя. Можа быць, мы можам мець справу з чалавечай напружанасцю. Можа быць, мы можам атрымаць дызайнераў ўмелымі, каб вырашаць большасць пытанняў, і працэс будзе досыць дысцыплінаваны, каб унасіць змяненні малюнкаў. Там яшчэ іншая праблема: змяненне патрабаванняў. Змяненне патрабаванняў нумар адзін з вялікіх пытанняў, якое выклікае галаўны боль у праграмных праектах, з якімі я сутыкаюся.

Адзін спосаб мець справу са змяненнем патрабаванняў з’яўляецца стварэнне гнуткасці дызайну, так, каб вы маглі лёгка змяніць яго, калі будзе змяненне патрабаванняў. Аднак для гэтага неабходна разуменне аб зменах, якія Вы чакаеце. Праект можа быць запланаваны, каб мець справу з абласцямі энергазалежнасці, але ў той час, калі дапаможа прадугледзіць змены патрабаванняў, а можа гэта не дапаможа (і можа пашкодзіць) на непрадбачаныя змены. Такім чынам, вы павінны зразумець патрабаванні дастаткова добра аб асобных нестабільных раёнах, і мая заўвага, што гэта вельмі цяжка.

Цяпер некаторыя праблемы з гэтых патрабаванняў з-за не разумення патрабаванняў дастаткова ясна. Так шмат людзей засяродзіць увагу на патрабаванні тэхналагічных працэсаў, каб атрымаць лепшае патрабаванні ў надзеі, што гэта прадухіліць неабходнасць змены дызайну пазней. Але нават гэты напрамак не можа прывесці да лячэння. Многія непрадбачаныя змены патрабаванняў адбываюцца ў сувязі са зменамі ў бізнэсе. Тыя, хто не можа быць папярэджаны, аднак дасць асцярожнасць вашым патрабаванням тэхналагічнага працэсу.

Такім чынам, усё гэта робіць планаванне дызайну немагчымым. Вядома, гэта вялікія праблемы. Але я не схільны сцвярджаць, што плануецца распрацоўка горш, чым эвалюцыйны дызайн, як гэта звычайна практыкуецца ў “кодзе і”. Сапраўды, я аддаю перавагу планаванню дызайну “коду і фіксаванню”. Аднак я ведаю, праблемы планавання ў праектаванне і шукаю новае напрамак.

Уключэнне практыкі XP

XP з’яўляецца спрэчнай па многіх прычынах, але адна з ключавых чырвоных сцягаў у XP з’яўляецца тое, што яго прыхільнікі эвалюцыйнага праектавання, а не планавання дызайну. Як мы ведаем, эвалюцыйнае праектаванне не можа працаваць з-за спецыяльных праектных рашэнняў і энтрапіі праграмнага забеспячэння.

У аснове разумення гэтага аргумента крывая змен праграмнага забеспячэння. Змяненне крывой кажа, як праект запуску становіцца экспаненцыяльна больш дарагім пры занясенні змены. Змяненне крывой звычайна выяўляецца ў тэрмінах фаз “змены, унесеныя ў аналізе за $ 1, будуць каштаваць тысячы выпраў у вытворчасці”. Гэта іранічна, паколькі большасць праектаў усё яшчэ працуюць у спецыяльных працэсы, які не мае фазавага аналізу, але ўзвядзенне ў ступень па-ранейшаму існуе. Экспаненцыяльная крывая змены азначаюць, што эвалюцыйны дызайн не можа быць эфектыўным. Яна таксама перадае, чаму плануемае праектаванне павінна быць зроблена дбайна, таму што любыя памылкі ў запланаваных дызайнах сутыкаюцца з тым жа ўзвядзеннем у ступень.

Асноўная здагадка асноўных XP з’яўляецца тое, што гэта магчыма, каб згладзіць змены крывой, дастаткова зрабіць эвалюцыйна-канструктарскія працы. Гэта ўплашчэнне з’яўляецца і ўключана па XP і эксплуатацыі з боку XP. Гэта з’яўляецца часткай сувязі практыкі XP: канкрэтна вы не можаце зрабіць тыя часткі XP, якія выкарыстоўваюць уплашчоныя крывыя без дзеяння тых рэчаў, якія дазваляюць уплашчэнне. Гэта агульная крыніца спрэчкі XP. Многія людзі крытыкуюць эксплуатацыі без разумення спрыяльнасці. Часта крытыкі вынікаюць з крытыкаў уласнага досведу, дзе яны не рабілі спрыяльных практык, якія дазваляюць выкарыстанне практыкі на працу. У выніку яны былі спалены, і калі яны бачаць XP, яны памятаюць пажар.

Ёсць шмат частак на спрыяльных практыках. У аснове з’яўляюцца практыкі тэсціравання і бесперапыннай інтэграцыі. Без забеспячэння бяспекі пры ўмове праверкі астатніх XP будзе немагчыма. Бесперапынная інтэграцыя неабходна, каб захаваць каманду ў сінхранізацыі, так што вы можаце зрабіць змены і не турбавацца аб яе інтэграцыі з іншымі людзьмі. Разам гэтыя практыкі могуць мець вялікі ўплыў на змяненне крывой. Я ўспомніў пра гэта яшчэ раз тут, на ThoughtWorks. Уводзіны тэсціравання і бесперапыннай інтэграцыі аказалі прыкметнае паляпшэнне па развіцці намаганняў. Вядома, дастаткова, каб сур’ёзна зрабіць пытанне зацвярджэння XP, то вам трэба ўсе практыкі, каб атрымаць вялікі крок наперад.

Рэфакторынг мае аналагічны эфект. Людзі, якія рэарганізоўваюць свой код у дысцыплінавана прапанаваных XP, шукаюць істотнае адрозненне ў іх эфектыўнасці ў параўнанні з тым, што робіць слабей, больш спецыяльных рэструктурызацый. Гэта было, безумоўна, мой вопыт, раз Кент вучыў мяне, каб рэарганізаваць правільна. У рэшце рэшт, толькі такія моцныя змены заахвоціла мяне, напісаць цэлую кнігу аб гэтым.

Джым Хайсміт, у яго выдатным рэзюмэ XP, выкарыстоўвае аналогію мноства маштабаў. У адным з латкоў плануецца праектаванне, іншы рэфакторынг. У больш традыцыйных падыходах плануецца дызайн, які дамінуе, паколькі мяркуецца, што вы не можаце змяніць сваё рашэнне пазней. Як кошт унясення змяненняў зніжае то, што вы можаце зрабіць больш вашага дызайну пазней рэфакторынгу. Запланаваны праект не праходзіць цалкам, але ў цяперашні час ёсць баланс двух падыходаў да праектавання для працы. Для мяне такое пачуццё, што да рэфакторынгу я рабіў усе праектныя працы адной рукой.

Гэтыя спрыяльныя практыкі бесперапыннай інтэграцыі, тэсціравання і рэфакторынгу забяспечаць новую сераду, што робіць эвалюцыйны дызайн праўдападобным. Аднак адна рэч, якую мы яшчэ не высветлілі, дзе кропка балансу. Я ўпэўнены, што, нягледзячы на знешняе ўражанне, XP гэта не проста тэст, код і рэфакторынг. Існуе магчымасць для праектавання да кадавання. Частка гэтага – то, што перш, чым будзе любое кадаванне, вялікая частка з яго адбываецца ў ітэрацыі перш, чым кадаваць для пэўнай задачы. Але ёсць і новы баланс паміж дызайну пярэдняй часткі і рэфакторынгу.

Значэнне Прастата

Два з найвялікшых згуртаваных крыкаў у XP з’яўляюцца лозунгі “рабіць тое, што робіць простай” і “Вы не будзеце мець патрэбу ў гэтым” (вядомы як YAGNI). Абодва з’яўляюцца праявай практыкі XP з простым дызайнам.

Спосаб YAGNI звычайна апісваецца так, што ён кажа, што вы не павінны дадаваць код, які сёння будзе выкарыстоўвацца толькі на функцыі, якая неабходна заўтра. На першы погляд гэта здаецца простым. Гэтае пытанне набывае з такімі рэчамі, як рамкі, паўторна выкарыстоўваныя кампаненты і гнуткасць. Такія рэчы складана пабудаваць. Вы плаціце дадатковыя авансавыя выдаткі, каб будаваць іх, у надзеі, што вы атрымаеце назад, што мела кошт пазней. Гэтая ідэя будынка ў авансавай гнуткасці разглядаецца як ключавы элемент эфектыўнай распрацоўкі праграмнага забеспячэння.



Аднак рада XP з’яўляецца тое, што вы не стварыце гнуткія кампаненты і сістэмы для першага выпадку такімі, як патрабуе функцыянальнасць. Няхай гэтыя структуры растуць па меры неабходнасці. Калі я патрабую Грашовы клас сёння, які апрацоўвае дадатак, але не множанне, тады я ствараю толькі дапаўненне ў Грашовым класе. Нават, калі я ўпэўнены, што мне трэба множанне ў наступнай ітэрацыі, і зразумею, як зрабіць гэта лёгка, і думаю, гэта будзе вельмі хутка зрабіць, я ўсё роўна пакіну яго да наступнай ітэрацыі.

Адной з прычын гэтага з’яўляецца эканамічнасць. Калі я павінен зрабіць любую працу, якая выкарыстоўваецца толькі для функцыі, што будзе трэба заўтра, гэта азначае, што я губляю высілкі ад функцый, якія неабходна зрабіць для гэтай ітэрацыі. План выпуску кажа, што трэба працаваць цяпер, а працуючы на іншыя рэчы ў будучыні супярэчыць распрацоўшчыкаў ўзгаднення з заказчыкам. Існуе рызыка таго, што гісторыя гэтай ітэрацыі не будзе зроблена. Нават, калі гісторыя гэтай ітэрацыі не рызыкуе, то кліент вырашыць, якія дадатковыя работы павінны быць зроблены – і што можа яшчэ не звязаны з множаннем.

Гэтай эканамічнай перашкодай пагаршаецца верагоднасць таго, што мы не можам атрымаць гэтае права. Аднак упэўненасць аб тым, як працуе гэтая функцыя, мы ўсё яшчэ можам атрымаць яго не так – тым больш, што ў нас няма падрабязных патрабаванняў яшчэ. Праца на няправільнае рашэнне рана яшчэ больш марнатраўна, чым праца на правільнае рашэнне рана. І XPerts наогул лічыць, што мы значна больш верагодна будзем рабіць няправільна, чым правільна (і я згодны з гэтым сцвярджэннем.)

Другая прычына простай канструкцыі з’яўляецца тое, што складаная канструкцыя з’яўляецца больш цяжкім для разумення, чым просты дызайн. Таму любая змена сістэмы вырабляецца цяжэй з дадатковымі складанасцямі. Гэта дадае кошт у перыяд паміж тым, калі больш складаную канструкцыю дадалі, і калі гэта было неабходна.

Зараз гэтая рада ўдарыць шмат людзей, як глупства, і яны маюць рацыю, так думаючы. Права пры ўмове, што вы ўявіце сабе звычайны свет, дзе развіццё спрыяльнай практыкі XP не на месцы. Аднак, калі баланс паміж запланаванай і эвалюцыйнай змены дызайну, то YAGNI становіцца добрай практыкай (і толькі тады).

Такім чынам, каб падвесці вынік. Вы не хочаце марнаваць намаганні дадання новых магчымасцяў, якія не будуць неабходныя да будучай ітэрацыі. І нават, калі кошт роўны нулю, вы ўсё яшчэ не жадаеце дадаць яго, бо гэта павялічвае кошт мадыфікацыі, нават калі ён нічога не варты. Аднак Вы можаце толькі разумна паводзіць сябе такім чынам, калі вы выкарыстоўваеце XP ці аналагічную тэхніку, якая зніжае кошт ўнясення змяненняў.

Што на Зямлі з’яўляецца прастатой у любым выпадку

Такім чынам, мы хочам, каб наш код быў як мага больш простым. Гэта здаецца, што ў карысць гэтага занадта цяжка прывесці довады, у рэшце рэшт, хто патрабуе быць складаным? Але вядома, гэта ухіляецца ад прадмета спрэчкі: "што проста?"

У XP Кент дае чатыры крытэрыі для простай сістэмы. У мэтах (найбольш важным першым):

Выконвае ўсе тэсты

Паказвае ўсе намеры

Няма дубліравання

Найменшая колькасць класаў і метадаў

Запуск усіх выпрабаванняў з’яўляецца даволі простым крытэрыем. Няма дубліравання -таксама даволі проста, хоць шматлікія распрацоўнікі маюць патрэбу ў кіраўніцтве аб тым, як дасягнуць гэтага. Складана, што трэба зрабіць з выяўленнем намеру. Што менавіта гэта значыць?

Асноўная каштоўнасць тут яснасць кода. XP надае вялікае значэнне коду, які лёгка чытаецца. У XP “разумны код” з’яўляецца лаянкавым. Але намеры некаторых людзей выяўлення кодаў чужога розуму.

У сваім XP 2000 paper, Джош Kerievsky паказвае добры прыклад для гэтага. Ён глядзіць на магчымую большасць усіх дзяржаўных XP код – JUnit. JUnit выкарыстоўвае дэкаратары для дадання дадатковых функцый для праверкі выпадкаў такіх рэчаў, як сінхранізацыя паралелізму і партыі стварэння коду. Падзяляючы гэты код у дэкаратарах, дазваляе агульны код, які будзе ясней, чым гэта было б у адваротным выпадку.

Але вы павінны спытаць сябе, калі атрымліваецца код сапраўды проста. Для мяне гэта так, але тады я быў знаёмы з шаблонам "дэкаратар". Але для многіх, якія не з’яўляюцца, гэта цалкам складана. Гэтак жа JUnit выкарыстоўвае зменныя метады, якія я заўважыў, што большасць людзей першапачаткова знаходзіць што-небудзь, але выразна. Такім чынам, мы маглі б прыйсці да высновы, што праект JUNIT больш просты для вопытных распрацоўшчыкаў, але больш складаны для менш вопытных людзей?

Я думаю, што асноўная ўвага на ліквідацыі дубліравання, як з XP, “толькі адзін раз” і прагматычны праграміст DRY (Don’t не паўтарацца) з’яўляецца адным з тых відавочных і дзіўна магутных частак добрай рады. Проста пасля гэтага толькі можа прыняць вас доўгі шлях. Але гэта яшчэ не ўсё, і прастата па-ранейшаму складаная рэч для пошуку.

Нядаўна я прымаў удзел у тым, што можа быць больш распрацавана. Праект атрымаў рэструктурызацыю і некаторую гнуткасць, якая была выдалена. Але, як адзін з распрацоўшчыкаў сказаў: “лягчэй раскласці па дызайну, чым гэта, каб рэарганізаваць не дызайн.” Лепш за ўсё, каб быць крыху прасцей, чым вы павінны быць, але гэта не катастрофа, каб быць крыху больш складаным.

Лепшая рада, якую я пачуў на ўсё гэта, прыйшло ад дзядзькі Боба (Роберт Марцін). Яго савет не складаўся ў тым, каб занадта завіснуць аб тым, які самы просты праект. Бо можна і павінна будзе рэарганізаваць яго пазней. У канцы гатоўнасць рэфакторынгу значна важней, чым ведаць, што прасцей за ўсё адразу.

Рэфакторынг ці парушэнне YAGNI?

Гэтая тэма нядаўна падышла ў спісе рассылання XP, і гэта варта зрабіць, паколькі мы глядзім на ролю праекта ў XP.

Асноўнае пытанне пачынаецца з таго, што рэфакторынг патрабуе часу, але не дадае функцыю. З пункту YAGNI з’яўляецца тое, што вы павінны разлічваць на цяперашні час, а не на будучыню, гэта парушэнне?

Кропкай YAGNI з’яўляецца тое, што вы не дадаеце складанасцяў, якія не патрэбныя для бягучай гісторыі. Гэта з’яўляецца часткай практыкі простага дызайну. Рэфакторынг з’яўляецца неабходным для падтрымання дызайну настолькі простага, як вы можаце, так што варта рэарганізаваць, калі вы разумееце, што вы можаце зрабіць рэчы прасцей.

Простая канструкцыя і эксплуатацыя XP практыкі таксама спрыяюць практыцы. Толькі, калі ў вас ёсць тэставанне, бесперапынная інтэграцыя і рэфакторынг, вы можаце практыкаваць простую канструкцыю эфектыўна. Але ў той жа час захоўваючы простую канструкцыю, мае важнае значэнне для падтрымання змены крывой на плоскасці. Любая непатрэбная складанасць робіць сістэму, якую цяжэй змяніць ва ўсіх напрамках, акрамя таго, якое чакаеце са складанай гнуткасцю, якую ўстаўляеце. Аднак, людзі не добрыя ў папярэджанні, таму лепш змагацца за прастату. Аднак, людзі не будуць атрымліваць самую простую рэч у першы раз, такім чынам, вы павінны будзеце ажыццявіць рэфакторынг у парадку, які становіць бліжэй да мэты.

Шаблоны і XP

Напрыклад, JUnit прыводзіць мяне непазбежна ў выхаванні мадэляў. Адносіны паміж вобразамі і XP цікавы, і гэта агульнае пытанне. Джошуа Kerievsky сцвярджае, што мадэлі недастаткова падкрэсліваюцца ў XP, і ён робіць аргумент красамоўна, так што я не хачу паўтараць гэтае. Але гэта варта мець на ўвазе, што многія мадэлі, людзям здаецца, у канфлікце XP.

Сутнасцю гэтага аргументу з’яўляецца тое, што карціны часта больш выкарыстоўваюць. Свет поўны легендарных праграмістаў, свежае з іх першых чытанняў GOF, які ўключае ў сябе шаснаццаць мадэляў у 32 радках кода. Я памятаю адзін вечар, у які пілі вельмі добры віскі і прачытвалі з Кентам дакумент пад назвай “Не Шаблоны праектавання: 23 танныя трукі”. Мы думалі пра такія рэчы, як выкарыстоўваць заявы, а не стратэгіі. Жартам была кропка, шаблоны часта злоўжываюць, але гэта не робіць іх дрэннай ідэяй. Пытанне ў тым, як вы іх выкарыстоўваеце.

Па адной з версій гэтага з’яўляецца тое, што сілы простай канструкцыі прывядзе вас у шаблоны. Многія рэфакторынгі гэтага відавочны, але нават без іх наступных правіл у простую канструкцыю вы прыйдзеце з шаблонамі, нават калі вы не ведаеце іх ужо. Гэта можа быць праўдай, але гэта сапраўды лепшы спосаб зрабіць гэта? Вядома, лепш, калі вы ведаеце, прыкладна, дзе вы збіраецеся, і кнігі, якія могуць дапамагчы вам у гэтым пытанні, замест таго, каб вынаходзіць усё самастойна. Я, вядома, па-ранейшаму цягну да GOF кожны раз, калі я адчуваю, што карціна на падыходзе. Для мяне эфектыўная распрацоўка сцвярджае, што мы павінны ведаць цану карціны, якую варта звярнуць – гэта яго ўласнае майстэрства. Сапраўды гэтак жа, як Ісус прапануе, мы павінны быць больш знаёмым пра тое, якая паступовая лёгкасць у шаблону. У гэтай сувязі XP ставіцца, як мы выкарыстоўваем розныя шаблоны, як некаторыя людзі выкарыстоўваюць іх, але, вядома, не выдаляе іх кошту.

Але чытаючы некаторыя спісы рассылання, я атрымліваю выразнае адчуванне, што многія людзі бачаць, як XP перашкаджаюць мадэлям, нягледзячы на іронію, што большасць прыхільнікаў XP былі лідэрамі руху мадэляў таксама. Гэта таму, што яны бачылі за межамі карціны, ці таму, што карціны настолькі стабільны ў іх думках, што яны не разумеюць іх? Я не ведаю адказаў на іншыя пытанні, але для мяне мадэлі па-ранейшаму маюць жыццёва важнае значэнне. XP можа быць у працэсы развіцця, але карціны – аснова дызайну ведаў, што з’яўляецца каштоўным незалежна ад вашага працэсу. Розныя працэсы могуць выкарыстоўваць шаблоны па-рознаму. XP падкрэслівае, як не выкарыстоўваць шаблон, пакуль гэта неабходна, і развівае ваш шлях у шаблон з дапамогай простай рэалізацыі. Але карціны па-ранейшаму ключавая частка набыцця ведаў.

Мая парада XPers будзе – выкарыстанне шаблонаў.

Інвеставаць час у вывучэнне мадэляў

Канцэнтрат аб тым, калі ўжываць шаблон (не занадта рана)

Канцэнтрат аб тым, як рэалізаваць шаблон у сваёй найпростай форме, а затым дадаць складанасці пазней.

Калі вы змясціце ў шаблон, а потым зразумеце, што гэта не цягне яго вагу – не бойцеся ўзяць яго зноў.



Я думаю, XP варта падкрэсліць, вывучэнне мадэляў больш. Я не ўпэўнены, што падыходзіць у практыку XP, але я ўпэўнены, што Кент можа прыдумаць спосаб.

Якая расце Архітэктура

Што мы разумеем пад архітэктурай праграмнага забеспячэння? Для мяне тэрмін “архітэктура” перадае паняцце асноўных элементаў сістэмы, часткі, якія цяжка змяніць. Падмурак, на якім астатнія павінны быць пабудаваныя.

Якую ролю адыгрывае архітэктура, калі вы выкарыстоўваеце эвалюцыйны дызайн? Зноў XPs крытыкі сцвярджаюць, што XP ігнаруе архітэктуры, што маршрут XP у тым, каб пайсці на код хутка, і спадзяюцца, што рэфакторынг будзе вырашаць усе пытанні праектавання. Цікава, але яны маюць рацыю, што можа быць слабасцю. Вядома, найбольш агрэсіўныя XPers – Кент Бек, Рон Джеффріс і Боб Марцін – ставяць усё больш і больш энергіі ў пазбягаючы фронт архітэктурнага дызайну. Не змяшчайце ў базе дадзеных, пакуль вы сапраўды ня ведаеце, што вы будзеце мець патрэбу ў гэтым. Праца з файламі першае і рэфакторынг базы даных на працягу ітэрацыі пазней.

Я вядомы, як баязлівы Xper, і ў гэтай якасці я не згодны. Я думаю, што ёсць роля для шырокай адпраўной кропкі архітэктуры. У такіх рэчах, як зацвярджэнне спачатку, як узровень дадатку, як будзеце ўзаемадзейнічаць з базай дадзеных (калі будзеце патрабаваць аднаго), падыход павінен выкарыстоўвацца, каб апрацаваць вэб-сервер.

Па сутнасці я думаю, што шматлікія з гэтых абласцей з’яўляюцца мадэлі, якія мы даведаліся на працягу многіх гадоў. Як ваша веданне мадэляў расце, так і вы павінны мець разум спачатку прыняць тое, як іх выкарыстаць. Аднак, ключавым адрозненнем з’яўляецца тое, што гэтыя раннія архітэктурныя рашэнні не чакаюцца і будзе высечана на камені, ці, дакладней, каманда ведае, што яны могуць памыляцца ў сваіх ранніх рашэннях і павінны мець мужнасць, каб выправіць іх. Іншыя расказалі гісторыю аднаго праекта, які быў блізкі да разгортвання і было вырашына, што не трэба больш EJB, і выдалілі яго з сваёй сістэмы. Гэта быў значны рэфакторынг, гэта было зроблена са спазненнем, але дазваляе практыцы зрабіць гэта не толькі магчымым, але і вартым.

Як бы гэта працавала наадварот. Калі вы вырашылі не выкарыстоўваць EJB, было б цяжэй, каб дадаць яго пазней? Калі вы такім чынам ніколі не пачынаеце з EJB, пакуль вы не паспрабавалі рэчы, якія не знайшлі яго, што не хапае? Вось пытанне, якое ўключае ў сябе шмат фактараў. Вядома, праца без комплексу прастаты кампанентаў павялічваецца і робіць штосьці, што ідзе хутчэй. Аднак часам прасцей сарваць штосьці, чым пакласці яго цэліком.

Так што мая парада, пачаць з ацэнкі таго, што верагодна ў архітэктуры. Калі вы бачыце вялікую колькасць дадзеных з некалькімі карыстальнікамі, то ісці наперад і выкарыстоўваць базу дадзеных ад першага дня. Калі вы бачыце складаную бізнес-логіку, то пакласці ў мадэлі прадметную вобласць. Аднак з павагі да багоў YAGNI, у выпадку сумневаў памыляцца ў бок спрашчэння. Таксама будзьце гатовыя спрасціць архітэктуру, як толькі вы бачыце, што частка архітэктуры не дадае нічога.

UML і XP

З усіх пытанняў, якія я атрымаў ад майго ўдзелу ў XP, найбуйнейшае, як круціцца вакол маёй сувязі з UML. Не дзве несумяшчальныя?

Ёсць шэраг момантаў пра несумяшчальнасці. Вядома XP падкрэслівае дыяграмы ў значнай ступені. Хоць афіцыйная пазіцыя па лініі “выкарыстоўваць іх, калі яны карысныя”, ёсць моцны падтэкст “рэальныя XPers не робяць дыяграмы”. Гэта пацвярджаецца тым, што такім людзям, як Кент, зусім не камфортна з дыяграмамі, сапраўды я ніколі не бачыў Кента, які добраахвотна намаляваў дыяграму праграмнага забеспячэння ў любым фіксаванам абазначэнні.

Я думаю, што праблема адбываецца ад двух асобных прычын. Адна з іх з’яўляецца ў тым факце, што некаторыя людзі знаходзяць праграмнае забеспячэнне дыяграм карысным, а некаторыя людзі гэтага не робяць. Небяспека заключаецца ў тым, што тыя, хто думаюць, што тыя, хто павінен рабіць, не зробят, і наадварот. Замест гэтага мы павінны проста прыняць, што некаторыя людзі будуць выкарыстоўваць дыяграмы, а некаторыя не будуць.

Іншым пытаннем з’яўляецца тое, што праграмнае забеспячэнне дыяграм, як правіла, атрымліваюць, звязаным з суперцяжкім працэсам. Такія працэсы марнуюць шмат часу для пабудовы дыяграм, якія не дапамагаюць і фактычна могуць прычыніць шкоду. Такім чынам, я думаю, што людзям трэба раіць, як выкарыстоўваць схемы добра і пазбегнуць перапыненняў, а не "толькі калі павінны" паведамляць, што звычайна выходзіць з Xperts.

Такім чынам, вось мая парада для выкарыстання дыяграм добра.

Першае, мець на ўвазе, што вы малюеце дыяграму. Асноўнай каштоўнасцю з’яўляецца камунікацыя. Эфектыўныя сродкі сувязі выбіраюць важныя рэчы, і грэбуючы менш важнымі. Гэтая выбіральнасць з’яўляецца ключом да выкарыстання UML добра. Не маляваць кожны клас – толькі важныя з іх. Для кожнага класа, не паказваць кожны атрыбут і аперацыю – толькі важныя з іх. Не маляваць дыяграмы паслядоўнасці для ўсіх варыянтаў выкарыстання і сцэнараў – толькі…, і Вы атрымаеце карціну. Агульнай праблемай сумеснага выкарыстання дыяграм з’яўляецца тое, што людзі спрабуюць зрабіць іх ўсеабдымнымі. Код – лепшая крыніца ўсеабдымнай інфармацыі, а код прасцей за ўсё атрымаць у сінхранізацыі з кодам. Паўната дыяграм – вораг зразумеласці.

Сумеснае выкарыстанне дыяграм для вывучэння дызайну перад пачаткам кадавання. Часта ствараецца ўражанне, што такая дзейнасць з’яўляецца незаконнай у XP, але гэта не так. Многія людзі кажуць, што калі ў вас ёсць ліпкая задача, якая стаіць у тым, каб збіраюцца разам, каб мець хуткую сесіі дызайну ў першую чаргу. Аднак, калі вы робіце такія сесіі:

Трымаеце іх кароткімі

Не спрабуеце вырашыць усе дэталі (толькі важныя)

Лячэнне ў выніку дызайну, як эскіз, а не як канчатковы дызайн

Апошні пункт варта пашырыць. Калі вы робіце некаторыя пярэдняй часткі, вы непазбежна выявіце, што некаторыя аспекты дызайну няправільныя, і вы толькі выявіце гэта пры кадаванні. Гэта не праблема пры ўмове, што вы зменіце дызайн. Бяда прыходзіць, калі людзі думаюць, што дызайн зроблены, і не бяруць веды, якія яны атрымалі праз кадаванне, каб запусціць яго назад у дызайн.

Змяненне дызайну не абавязкова азначае змяненне дыяграм. Гэта цалкам разумна, каб маляваць дыяграмы, якія дапамогуць вам зразумець дызайн, а затым кінуць дыяграмы прэч. Маляванне іх дапамагае, і гэтага дастаткова, каб зрабіць іх варта. Яны не павінны стаць пастаяннымі артэфактамі. UML дыяграмы лепшыя, але не з’яўляюцца артэфактамі.

Шмат XPers выкарыстоўваюць CRC карты. Гэта не ў канфлікце з UML. Я выкарыстоўваю сумесь CRC і UML увесь час, гэты метад паказаў сябе найбольш карысным для працы пад рукой.

Іншае прымяненне дыяграм UML з’яўляецца бягучай дакументацыяй. У сваім звычайным выглядзе гэтая мадэль, якую прыжываюць на выпадак інструмента. Ідэя, што захаванне гэтай дакументацыі дапамагае людзям працаваць у сістэме. На практыцы гэта часта не дапамагае наогул.

яно займае занадта шмат часу, каб трымаць дыяграмы ў актуальным стане, таму яны выпадаюць з сінхранізацыі з кодам

яны схаваны ў інструментальнай скрыні або таўшчыні злучнага, так што ніхто не глядзіць на іх

Так парады для бягучай дакументацыі для тых, хто працуе з гэтым назіраюцца праблемы:

Толькі выкарыстанне дыяграм, якія вы можаце захаваць да даты без прыкметнага болю

Пакладзіце дыяграмы, дзе кожны можа лёгка іх бачыць. Я хацеў бы размясціць іх на сцяне. Заахвочвайце людзей змяніць на сцяне копію з ручкай для простых змяненняў.

Звярніце ўвагу на тое ці выкарыстоўваюць людзі іх, калі не, выкідвайце іх.

Апошні аспект выкарыстання UML для дакументацыі ў перадачы сітуацыі, напрыклад, калі адна група перадае ў іншую. Тут кропка XP з’яўляецца той, што вырабляе дакументацыі гісторыі, як і любая іншая, і адпаведна яго, кошт бізнесу вызначаецца заказчыкам. Зноў UML карысна тут, забяспечвайце дыяграмы, якія з’яўляюцца сэлектыўнымі, каб дапамагчы сувязі. Памятайце, што код рэпазітарыя ў падрабязнай інфармацыі, дыяграмы дзейнічаюць, каб абагульніць і вылучыць важныя пытанні.

На метафары

Добра, я мог бы таксама сказаць гэта публічна – я да гэтага часу не атрымаў павесіць гэтую метафару. Я бачыў яго працу, і добра працаваў на C3 праект, але гэта не значыць, што ў мяне ёсць ідэя, як зрабіць гэта, не кажучы ўжо, як растлумачыць, як гэта зрабіць.

Практыка XP метафары пабудавана на падыходзе Уорд Каннінгемса аб сістэме імёнаў. Справа ў тым, што вы прыдумалі вядомы набор імёнаў, які дзейнічае як слоўнікавы запас, каб гаварыць аб дамене. Гэтая сістэма імёнаў праслухоўвання ў шляху вы называеце класамі і метадамі ў сістэме.

Я пабудаваў сістэму імёнаў шляхам стварэння канцэптуальнай мадэлі прадметнай вобласці. Я зрабіў гэта з вобласцю экспертаў з выкарыстаннем UML або яго папярэднікаў. Я знайшоў, што вы павінны быць асцярожныя, робячы гэта. Вы павінны трымаць у мінімальным простым наборы пазначэнняў, і вы павінны сцерагчыся, даючы якіх-небудзь тэхнічныя пытанні, паўзучы ў мадэлі. Але калі вы робіце гэта, я выявіў, што вы можаце выкарыстаць гэта для стварэння слоўніка вобласці, які спецыялісты могуць разумець і выкарыстоўваць для сувязі з распрацоўнікамі. Мадэль не адпавядае класу канструкцыі выдатна, але гэтага дастаткова, каб даць агульны слоўнік на ўсю вобласць.

Цяпер я не бачу ніякай прычыны, чаму гэты слоўнік не можа быць метафарычны, такі, як C3 метафара, якая ператварыла заработныя платы ў зборачнай лініі завода. Але я таксама не бачу, чаму аснова сістэмы імёнаў на слоўнік дамену такая дрэнная ідэя. І я не схільны адмовіцца ад тэхнікі, якая працуе добра для мяне ў атрыманні сістэмы імёнаў.

Часта людзі крытыкуюць XP на той падставе, што вам трэба, па крайняй меры, некаторыя накіды дызайну сістэмы. XPers часта адказваюць з адказам “гэта метафара”. Але я ўсё роўна не думаю, што я бачыў метафару, якая тлумачыць у пераканаўчай манеры. Гэта рэальны разрыў у XP, і той, у якім XPers неабходна разабрацца.

Ці хочаш ты быць архітэктарам, калі вырасцеш?

На працягу большай частцы апошняга дзесяцігоддзя тэрмін “архітэктар праграмнага забеспячэння” стаў папулярны. Гэта тэрмін, які цяжка асабіста для мяне выкарыстоўваць. Мая жонка інжынер-будаўнік. Адносіны паміж інжынерамі і архітэктарамі… цікавыя. Мой любімы быў “архітэктары добрыя для трох Б: цыбуліны, кусты, птушкі”. Паняцце з’яўляецца тое, што архітэктары прыдумалі ўсе гэтыя мілыя малюнкі, але гэта інжынеры, якія павінны гарантаваць, што яны на самой справе могуць устаць. У выніку я пазбег тэрміна архітэктар праграмнага забеспячэння, у рэшце рэшт, калі мая ўласная жонка не можа апрацаваць мяне з прафесійным павагай, якую магчымасць я атрымліваю з кім-небудзь яшчэ?

У праграмным забеспячэнні тэрмін “архітэктар” азначае многія рэчы. (У праграмным забеспячэнні любы тэрмін, азначае многія рэчы.) У цэлым, аднак яно нясе пэўныя аўтарытэт, як у “Я не проста просты праграміст – Я архітэктар”. Гэта можа перавесці на “Я архітэктар цяпер – я занадта важны, каб зрабіць любое праграмаванне”. Пытанне тады становіцца, адно – ці, падзяляючы сябе ад прызямлёнай работы па праграмаванні з’яўляцца чымсьці, якую павінны зрабіць, калі патрабуеце ажыццявіць тэхнічнае лідэрства.

Гэтае пытанне спараджае вялізную колькасць эмоцый. Я бачыў, як людзі атрымліваюць вельмі злыя думкі, што яны не маюць ролю больш як архітэктары. “Няма месца ў XP для вопытных архітэктараў”, – часта я чую крык.

Вялікая роля самога праекту, я не думаю, што мае месца тое, што XP не ацэньвае вопыт або добрыя навыкі праектавання. Сапраўды, многія прыхільнікі XP – Кент Бек, Боб Марцін, і, вядома, Ward Cunningham – гэта тыя, ад каго я даведаўся шмат пра тое, што такое канструкцыя. Аднак гэта азначае, што іх роля змянілася ад таго, што многія людзі бачаць гэта, як ролю тэхнічнага лідэрства.

У якасці прыкладу, я прывяду аднаго з нашых тэхнічных кіраўнікоў у ThoughtWorks: Дэйва Райса. Дэйв быў праз некалькі жыццёвых цыклаў і ўзяў на сябе неафіцыйную мантыю тэхнічнага кіраўніка па пяцьдзесят чалавек праекта. Яго роля як лідэра азначае марнаваць шмат часу з усімі праграмістамі. Ён будзе працаваць з праграмістамі, калі яны маюць патрэбу ў дапамозе, ён глядзіць вакол, каб бачыць, хто мае патрэбу ў дапамозе. Значны знак, дзе ён сядзіць. У якасці доўгатэрміновай ThoughtWorker ён можа вельмі добра мець якуюсьці пасаду, дзе ён спадабаўся. Ён падзяліўся на некаторы час з Кара, менеджэрам выпуску. Аднак, за апошнія некалькі месяцаў ён з’ехаў у адкрытыя адсекі, дзе праграмісты працуюць (выкарыстанне адкрыцця "Вайна нумары" распрацоўваюць на XP карысць.) Гэта важна для яго, таму што такім чынам ён бачыць, што адбываецца, і, даступна для крэдытавання боку, дзе гэта неабходна.

Тыя, хто ведае XP, зразумеюць, што я апісваю выразна пэўную ролю XP трэнера. Сапраўды адна з некалькіх гульняў са словамі, што робіць XP, з’яўляецца тое, што яна называе вядучы тэхнічны малюнак “Трэнер”. Сэнс ясны: у XP тэхнічнае кіраўніцтва паказвае навучанне праграмістаў і дапамагае ім прымаць рашэнні. Гэта тое, што патрабуе добрых навыкаў людзей, а таксама добрыя тэхнічныя навыкі. Джэк Боллс на XP 2000 адзначыў, што мала месцы зараз для самотнага гаспадара. Супрацоўніцтва і навучанне з’яўляюцца ключом да поспеху.

На абедзе канферэнцыі Дэйв і я гаварылі з вакальным праціўнікам XP. Калі мы ўжо абмяркоўвалі, што мы зрабілі, падабенства ў нашым падыходзе было даволі прыкметным. Мы ўсе любілі адаптыўную, ітэратыўную распрацоўку. Тэставанне было важна. Такім чынам, мы былі збянтэжаны на гарачнасць яго апазіцыі. Потым, яго заява па аналогіі з “Апошняе, што я хачу, каб мае праграмісты рэфакторынгу і манкінга былі вакол мяне з дызайнам”. Зараз усё было ясна. Канцэптуальная заліва яшчэ больш экспліцыруецца, і Дэйв казаў мне потым: “Калі ён не давярае сваім праграмістам, чаму ён наняў іх? “. У XP самае галоўнае, што вопытны распрацоўшчык можа зрабіць, гэта перадаць, як болей шмат навыкаў, якія толькі ён можа, на больш маладых распрацоўнікаў. Замест таго, архітэктар, які робіць усе важныя рашэнні, ёсць трэнер, які вучыць распрацоўнікаў для прыняцця важных рашэнняў. Як Ward Cunningham адзначыў, што ён ўзмацняе свае навыкі і дадае ў праект больш, чым можа любы герой-адзіночка.

Зварачальнасць

На XP 2002 Энрыка Zaninotto распавёў нам выдатную гісторыю, што абмяркоўваюцца ўрэзкі паміж гнуткіх метадаў і беражлівай вытворчасці. На яго думку адным з ключавых аспектаў і падыходаў у тым, што яны вырашаюцца за кошт скарачэння складанасці незваротнасці працэсу.

З гэтага пункту гледжання адной з асноўных крыніц складанасці – гэта незваротнасць рашэння. Калі вы можаце лёгка мяняць свае рашэнні, гэта азначае, што гэта менш важна, каб прымусіць іх права – што робіць ваша жыццё найшмат прасцей. Наступствам для эвалюцыйнага праектавання з’яўляецца тое, што дызайнеры павінны думаць пра тое, як яны могуць пазбегнуць незваротнасці ў сваіх рашэннях. Замест таго, каб атрымаць правільнае рашэнне цяпер, звярніце ўвагу на спосаб альбо адкласці рашэнне да больш позняй версіі (калі вы будзеце мець больш інфармацыі), альбо прымаць рашэнні такім чынам, што вы будзеце ў стане цалкам змяніць яго пазней без асаблівых цяжкасцяў.

Гэтае рашэнне для падтрымкі зварачальнасці з’яўляецца адной з прычын таго, што гнуткія метады кладут шмат акцэнтаў на сістэмы-крыніцы кодаў кіравання, і кладут усё ў такой сістэме. Хоць гэта не гарантуе зварачальнасць, асабліва для жаданых рашэнняў, але яно дае ўпэўненасць у тым, каб была выкарыстоўвана каманда нават, калі яна выкарыстоўваецца рэдка.

Праектаванне для зварачальнасці таксама мае на ўвазе працэс, які робіць памылкі, а яны з’яўляюцца хутка. Адно са значэнняў ітэратыўнай распрацоўкі з’яўляецца тое, што хуткая ітэрацыя дазваляе кліентам бачыць сістэмы, якія ён расціць, і калі дапушчана памылка ў патрабаванні, яна можа быць выстаўлена і фіксавана, перад коштам выпраўлення становяцца надмерна высокімі. Гэтае ж хуткае выяўленне таксама важна для дызайну. Гэта азначае, што вы павінны наладзіць сістэму так, што патэнцыйныя праблемы хутка правераць, на якія пытанні прыходзяць. Гэта таксама азначае, што варта рабіць эксперыменты, каб убачыць, якія цяжкія будучыя змены могуць быць, нават калі вы на самой справе не робіце рэальныя змены ў цяперашні час – эфектыўна рабіць выкідванне прататыпу на галіны сістэмы. Некалькі каманд справаздачнасці апрабаваць будучыя змены ў пачатку прататыпа, каб убачыць, як цяжка гэта будзе.

Воля да дызайну

Пакуль я засяроджаны шмат тэхнічнай практыкай у гэтым артыкуле, то адна рэч, якую занадта лёгка апусціць, з’яўляецца чалавечым аспектам.

Для таго, каб працаваць у эвалюцыйным дызайне павінна быць сіла, якая гоніць чалавека да сыходжання. Гэтая сіла можа зыходзіць толькі ад людзей – хто ў камандзе павінен мець рашучасць забяспечыць, каб якасць дызайну заставалася высокім.

Гэта не павінна зыходзіць ад усіх (хоць гэта і нядрэнна было б), як правіла, толькі адзін ці два чалавека ў камандзе бяруць на сябе адказнасць па падтрыманню дызайна ў цэлым. Гэта адна з задач, якія звычайна падпадаюць пад тэрмін “архітэктара”.

Гэтая адказнасць азначае падтрыманне пастаянных вачэй на базе кода, гледзячы ці ёсць якія-небудзь вобласць, яна становіцца бруднай, а затым прымаць аператыўныя меры для ліквідацыі праблемы, перш, чым яна выйдзе з-пад кантролю. Захавальнік дызайну не павінен быць тым, хто фіксуе гэта – але ён павінны гарантаваць, што гэта атрымліваецца фіксаваць кімсьці.

Адсутнасць волі да бачання дызайну асноўная прычына, чаму эвалюцыйны дызайн можа пацярпець няўдачу. Нават калі людзі знаёмыя з рэчамі, пра якія я казаў у гэтым артыкуле, гэта не гарантуе, што праект адбудзецца.

Рэчы, якія цяжка раскласці.

Ці можам мы выкарыстоўваць рэфакторынг для разгляду ўсіх праектных рашэнняў або ёсць некаторыя пытанні, якія такія шырокія, што іх цяжка дадаць у далейшым? На дадзены момант артадаксальнасцю XP з’яўляецца тое, што ўсе рэчы лёгка дадаць, калі гэта неабходна, бо YAGNI заўсёды ўжываецца. Цікава, калі ёсць выключэнні. Добры прыклад таго, што з’яўляецца спрэчным, каб дадаць пазней, з’яўляецца інтэрнацыяналізацыя. Ці з’яўляецца гэта тым, што так балюча дадаваць пазней, што вы павінны пачаць з гэтага прама цяпер?

Я магу лёгка ўявіць, што ёсць некаторыя рэчы, якія трапляюць у гэтую катэгорыю. Аднак рэальнасць такава, што мы да гэтага часу маем вельмі мала дадзеных. Калі ў вас ёсць штосьці дадаць, як інтэрнацыяналізацыю у больш познім часе, вы вельмі ўсведамляеце намаганні для таго, каб зрабіць гэта. Менш адчуваеце высілак, але яно фактычна ўзяло б тыдзень пасля тыдня, выяўляйце і падтрымлівайце яго перш, чым яно было фактычна неабходна. Таксама, менш адчуваўся бы той факт, які маглі мець няправільна, і такім чынам павінны былі зрабіць некаторы рэфакторынг, так ці інакш.

Часткай абгрунтавання YAGNI з’яўляецца тое, што шматлікія з гэтых патэнцыйных запатрабаванняў у канчатковым выніку не патрэбен, або па крайняй меры не так, як вы чакалі. Не робячы іх, вы захаваеце шмат намаганняў. Хоць будуць намаганні, неабходныя для рэфакторынгу простага рашэння, што вам сапраўды трэба, гэта рэфакторынг, верагодна, будзе менш працы, чым будаўніцтва ўсіх сумніўных асаблівасцяў.

Яшчэ адно пытанне трэба мець на ўвазе, ці вы не ведаеце як гэта зрабіць. Калі вы зрабілі інтэрнацыяналізацыю некалькі разоў, то вы будзеце ведаць шаблоны, якія неабходна выкарыстаць. Як такое зрабіць, хутчэй за ўсё, каб гэта правільна. Даданне папераджальнай структуры, верагодна, лепш, калі вы знаходзіцеся ў такім становішчы, чым калі вы навічок ў праблеме. Так што мая парада будзе, што калі вы ведаеце, як гэта зрабіць, вы знаходзіцеся ў стане, каб судзіць выдаткі зрабіць гэта зараз, каб зрабіць гэта пазней. Аднак, калі вы не зрабілі гэтага раней, а не толькі вы не ў стане ацаніць затраты досыць добра, вы таксама менш верагодна зможаце зрабіць гэта добра. У гэтым выпадку вы павінны дадаць яго пазней. Калі дадаць тое, што знайсці яго хваравітым, вы, верагодна, лепш, чым вы дадалі бы яго ў пачатку. Ваша каманда з’яўляецца больш дасведчанай, вы ведаеце вобласці лепш, і вы разумееце патрабаванні лепш. Часта ў гэтай пазіцыі вы паглядзіце на тое, як лёгка было б з 20/20 заднім лікам. Магчыма, гэта было б значна цяжэй, каб дадаць яго раней, чым вы думаеце.

Гэта таксама сувязь у пытанні аб замове гісторый. У планаванні XP Кент і я адкрыта паказаў сваю няўзгоду. Кент на карысць таго, каб дазволіць кошту бізнесу быць адзіным фактарам у прасоўванні ўпарадкавання гісторыі. Пасля першапачатковага рознагалосся Рон Джеффріс цяпер згодны з гэтым. Я ўсё яшчэ не ўпэўнены. Я лічу, што баланс паміж коштам бізнесу і тэхнічнай рызыкай. Гэта будзе дыск, які мяне прадставіць, па крайняй меры, некаторыя інтэрнацыяналізацыі рана знізяць гэтую рызыку. Аднак гэта дакладна толькі, калі інтэрнацыяналізацыя было неабходна для першага выпуску. Дабрацца да рэлізу, як мага хутчэй, мае жыццёва важнае значэнне. Любыя дадатковыя складанасці варта рабіць пасля таго, калі будзе першы рэліз, калі ён не з’яўляецца неабходным для першага выпуску. Сіла пастаўленага, працоўнага кода велізарна. У цэнтры ўвагі для кліентаў давер і масіўная крыніца ведаў. Зрабіце ўсё магчымае, каб давесці гэтую дату бліжэй. Нават, калі для гэтага трэба больш намаганняў, каб нешта дадаць пасля першага рэлізу, то лепш выпусціць раней.

З любой новай тэхнікай натуральна, што яго прыхільнікі не ўпэўненыя ў сваіх межавых умовах. Большасцю XPers было сказана, што ў эвалюцыйным праектаванні немагчымы пэўныя праблемы, толькі каб выявіць, што гэта сапраўды магчыма. Гэта “немагчымая” сітуацыя прыводзіць да ўпэўненасці, што ўсе такія сітуацыі могуць быць пераадолены. Вядома, вы не можаце зрабіць такія абагульнення, але пакуль супольнасць XP межаў не атрымалася, мы ніколі не можам быць упэўненыя, дзе гэтыя межы ляжаць, і гэта правільна, каб паспрабаваць і націснуць за патэнцыйнымі межамі, за якімі іншыя могуць убачыць.

(Апошнія артыкулы Jim Shore абмяркоўваюць некаторыя сітуацыі, у тым ліку інтэрнацыяналізацыю, дзе патэнцыйныя межы апынуліся не быць перашкодай у рэшце рэшт.)

З’яўленне праектавання адбываецца?

Адна з цяжкасцяў эвалюцыйнага дызайну з’яўляецца тое, што гэта вельмі цяжка сказаць, калі канструкцыя на самай справе адбываецца. Небяспека змешвання з дызайнам праграмавання з’яўляецца ў тым, што праграмаванне можа адбыцца без дызайну – гэта сітуацыя, калі эвалюцыйны дызайн не разыходзіцца.

Калі вы знаходзіцеся ў камандзе распрацоўшчыкаў, то вы адчуваеце, калі дызайн адбываецца на якасць кода. Калі код базы становіцца ўсё больш складаным і цяжкім для працы, не хапае дызайну, тады трэба зрабіць. Але, нажаль, гэта суб’ектыўны пункт гледжання. У нас няма надзейных паказчыкаў, якія могуць даць нам аб’ектыўны погляд на якасць дызайну.

Калі гэта абмежаванне бачнасці цяжка для тэхнічнага персаналу, гэта значна больш трывожна для нетэхнічных членаў каманды. Калі вы менеджэр або кліент, як вы можаце сказаць, калі праграмнае забеспячэнне добра распрацавана? Гэта важна для вас, таму што дрэнна распрацаванае праграмнае забеспячэнне будзе даражэй змяніць у будучыні. Таму няма простага адказу на гэта, але вось некалькі парад.

Слухайце тэхнічных людзей. Калі яны скардзяцца на цяжкасці ўнясення змяненняў, то прыняць такія скаргі сур’езна і даць ім час, каб выправіць становішча.



Трымайце вочы ад таго, наколькі код выкідваецца. Праект, што робіць здаровы рэфакторынг, будзе няўхільна выдаляць дрэнны код. Калі нічога не атрымлівае выдаляць, то гэта амаль напэўна з’яўляецца знакам таго, што не хапае рэфакторынгу – што прывядзе да дэградацыі дызайну. Аднак, як і любая метрыка, гэта можна злоўжываць, на думку добрых тэхнічных людзей пераўзыходзіць любыя метрыкі, нягледзячы на сваю суб’ектыўнасць.

Ці сапраўды праект мёртвы?

Не з дапамогай любых сродкаў, а характару, змяняецца дызайн. XP дызайн шукае наступныя навыкі

Пастаяннае жаданне трымаць код ясна і проста, як магчыма

Рэфакторынг навыкаў, каб вы маглі ўпэўнена ўнасіць удасканалення, калі вы бачыце неабходнасць.

Добрае веданне шаблонаў: не толькі рашэнняў, але і ацэньвання. Калі іх выкарыстоўваць і як развіваць у іх.

Праектаванне з прыцэлам на будучыя змены, ведаючы, што рашэнні, прынятыя ў цяперашні час, павінны быць зменены ў будучыні.

Ведаць, як камунікаваць дызайн для людзей, якія павінны разумець яго, выкарыстоўваючы код, дыяграмы і, перш за ўсё, размовы.

Гэта страшны выбар навыкаў, але штобы быць добрым дызайнерам заўсёды трэба быць жорсткім. XP не рэальна зрабіць крыху лягчэй, па меншай меры, не для мяне. Але я думаю, XP дае нам новы спосаб думаць аб эфектыўнай канструкцыі, паколькі яна зрабіла эвалюцыйнае праектаванне праўдападобнай стратэгіяй зноў. І я вялікі прыхільнік эвалюцыі – інакш хто ведае, кім я мог бы быць?

Падзякі

За апошнія пару гадоў я ўзяў і скраў шмат добрых ідэй у шмат добрых людзей. Большасць з іх страціліся ў паўзмроку маёй памяці. Але я памятаю, як шчыпаў добрыя ідэі ад Джошуа Kerievsky. Я памятаю шмат карысных артыкулаў, дасланых Фредам Джорджам і Ронам Джеффрісам. Я таксама не магу забыцца, як шмат добрых ідэй, працягваюць паступаць з палаты Кента.

Я заўсёды ўдзячны за тыя пытанні, якія задаюць аб месцы памылкі друку. Я быў слабы для захавання спіса, трэба гэта прызнаць, але ён уключае Крэйг Джонс, Найджэл Торн, Свен Горцы, Хілары Нэльсан, Тэры Камерленго.

ok ok