2.19

View in English

2.19 Ailffactora a dyled dechnegol

Trosolwg a chymhelliant

Mae ailffactora yn newid strwythur mewnol cod heb newid yr hyn y mae’n ei wneud o’r tu allan. Rydych yn ailenwi newidyn, yn hollti ffwythiant hir, yn echdynnu dosbarth, yn cwympo cwlwm o amodolion yn rhywbeth y gall darllenydd ei ddilyn, ac mae’r rhaglen yn ymddwyn yn union fel o’r blaen. Y rhan olaf honno yw’r ddisgyblaeth gyfan. Mae ailffactora’n gwarchod ymddygiad wrth ddiffiniad, a’r foment y byddwch hefyd yn newid ymddygiad nid ydych bellach yn ailffactora, rydych yn gwneud dau beth peryglus ar unwaith ac yn cuddio pob un y tu ôl i’r llall. Mae’r bennod hon yn trin y rhain fel gweithredoedd ar wahân yn fwriadus, oherwydd y dryswch rhyngddynt yw lle mae’r rhan fwyaf o ailffactora’n mynd o chwith.

Ar dîm mawr mae hyn yn bwysicach nag ydyw i ddatblygwr unigol, oherwydd mae’r cod rydych yn ei lanhau yn god y mae cannoedd o bobl eraill yn ei ddarllen, yn dibynnu arno, ac yn ofni ei gyffwrdd. Ailffactora yw sut mae ystorfa god a rennir yn parhau i fod yn drigadwy dros flynyddoedd a throsiant staff. Mae’n cysylltu’n uniongyrchol â chodio meddalwedd (pennod 2.9), lle mae ansawdd codio dydd-i-ddydd yn cael ei osod, ac â strategaeth brofi (pennod 2.4), sef y rhwyd ddiogelwch sy’n gwneud ailffactora’n ddiogel o gwbl. Mae hefyd yn cysylltu â’r cwestiwn caletach o ddyled dechnegol: cost gronedig llwybrau byr, cynlluniau sy’n heneiddio, a glanhau a ohiriwyd sy’n gwneud pob newid yn y dyfodol yn arafach. Ailffactora yw’r prif ffordd rydych yn talu’r ddyled honno i lawr, felly mae’r ddau bwnc yn perthyn i un bennod.

Mewn lleoliadau mentrau a llywodraeth mae’r peryglon yn codi. Mae’r systemau hyn yn hirhoedlog, yn aml yn ddegawdau oed, ac yn aml o dan gyfundrefnau archwilio a rheoli newid sy’n trin unrhyw newid cod fel digwyddiad a lywodraethir. Ni allwch ailysgrifennu system budd-daliadau dinasyddion mewn penwythnos hir yn syml; rydych yn ei foderneiddio mewn camau bach, gwrthdroadwy, wedi’u cefnogi gan dystiolaeth, sef yn union yr hyn y mae ailffactora disgybledig yn ei roi i chi. Cydlynu’r gwaith hwnnw ar draws llawer o dimau a systemau hirhoedlog (pennod 10.4) yw un o’r heriau diffiniol o beirianneg ar raddfa fawr, ac mae ei gael yn anghywir yn sut mae sefydliadau’n dod i ben yn rhewedig, yn methu newid meddalwedd nad ydynt bellach yn ei deall.

Egwyddorion allweddol

  • Mae ailffactora’n gwarchod ymddygiad; os ydych yn newid yr hyn y mae’r cod yn ei wneud, mae hynny’n newid ar wahân, wedi’i wneud ar wahân.
  • Mae cyfres brofion ddibynadwy yn amod ymlaen llaw ar gyfer ailffactora diogel, nid dewis ychwanegol.
  • Gweithiwch mewn camau bach, wedi’u henwi, gwrthdroadwy, a chadwch y cod yn gweithio ar ôl pob un.
  • Gwnewch ddyled dechnegol yn weladwy ac wedi’i olrhain, yna ariannwch dalu i lawr fel capasiti cyson yn hytrach nag arwriaeth.
  • Ailffactorwch y cod rydych eisoes yn ei newid, lle mae’r glanhau’n ennill ei le.
  • Nid yw pob dyled yn werth ei thalu; gellir gadael cod sefydlog, anaml ei gyffwrdd, neu sydd ar fin ymddeol ar ei ben ei hun.
  • Mesurwch ansawdd mewnol i lywio barn, byth fel targed i’w chwarae.

Argymhellion

Cadwch ailffactora a newid ymddygiad ar wahân yn llym

Penderfynwch cyn i chi ddechrau pa un rydych yn ei wneud, a byth peidiwch â phylu’r ddau mewn un ymrwymiad. Pan fyddwch yn ailffactora, mae’n rhaid i’r profion a lwyddodd o’r blaen lwyddo wedyn, heb eu newid, oherwydd nid yw’r ymddygiad arsylladwy wedi symud. Pan fyddwch yn newid ymddygiad, gwnewch hynny fel ei ymrwymiad ei hun gyda’i brofion ei hun. Y rheswm yw ymarferol: os yw newid cymysg yn torri rhywbeth, ni allwch ddweud a wnaeth eich ailstrwythuro achosi’r nam neu a wnaeth eich newid ymddygiad, ac mewn adolygiad cod (pennod 2.5) ni all adolygydd resymu am y naill hanner na’r llall yn lân. Yr arfer sy’n gweithio yw’r rheol dau-het gan Martin Fowler: rydych bob amser yn gwisgo naill ai’r het ailffactora neu’r het nodwedd, rydych yn gwybod pa un, a rydych yn newid yn fwriadus. Mae ymrwymiadau ar wahân hefyd yn gwneud hanes rheolaeth fersiynau yn ddarllenadwy, fel y gall peiriannydd sy’n biseithio methiant hepgor yr ymrwymiadau ailffactora pur yn hyderus.

Sefydlwch rwyd ddiogelwch ddibynadwy cyn ailstrwythuro

Mae ailffactora heb brofion yn ddim ond golygu a gobeithio. Cyn i chi ailstrwythuro unrhyw beth o bwys, mae angen cyfres arnoch rydych yn ymddiried ynddi i ddal newid ymddygiad os byddwch yn achosi un, sef dadl graidd strategaeth brofi (pennod 2.4). Ar gyfer cod sydd eisoes â sylw da, rhedwch y profion, ailffactorwch mewn camau bach, a rhedwch nhw eto ar ôl pob cam. Ar gyfer hen god heb brofion, y symudiad gonest yw ysgrifennu profion nodweddu yn gyntaf. Nid yw prawf nodweddu’n honni beth y dylai’r cod ei wneud; mae’n cofnodi beth mae’r cod yn ei wneud go iawn ar hyn o bryd, gan gynnwys ei nodweddion rhyfedd, fel bod unrhyw newid mewn ymddygiad yn ymddangos fel prawf sy’n methu. Poblogeiddiodd Michael Feathers y dull hwn ar gyfer yn union y sefyllfa y mae sefydliadau mawr yn byw ynddi: cod sy’n gweithio, sy’n bwysig, a heb brofion. Unwaith y bydd yr ymddygiad presennol wedi’i binio i lawr, gallwch ailffactora oddi tano’n ddiogel, a dim ond wedyn newid ymddygiad ar ei ben.

Dysgwch adnabod aroglau cod a chymhwyswch ailffactorau bach wedi’u henwi

Mae arogl cod yn arwydd arwynebol y gallai rhywbeth oddi tano fod angen sylw: ffwythiant sydd wedi tyfu’n rhy hir, dosbarth sy’n gwybod gormod, rhesymeg ddyblyg, rhestr baramedrau hir, enwau sy’n dweud celwydd am yr hyn maen nhw’n ei wneud. Mae arogl yn awgrym, nid dyfarniad, felly rydych yn ymchwilio yn hytrach na’i ufuddhau’n ddall. Yr ymateb yw ailffactora bach, wedi’i enwi o gatalog Fowler: Echdynnu Ffwythiant, Ailenwi Newidyn, Symud Dull, Amnewid Amodol â Pholymorffiaeth, a dwsinau mwy. Gwerth defnyddio symudiadau wedi’u henwi yw bod pob un yn fach, wedi’i ddeall, yn fecanyddol ddiogel, ac yn aml wedi’i gefnogi’n uniongyrchol gan eich IDE. Rydych yn cyfansoddi gwelliannau mawr o lawer o gamau bach dibynadwy, gan gadw’r cod yn wyrdd trwy gydol y broses, yn hytrach na gwneud un naid fawr na allwch ei gwirio.

Ffafriwch ailffactora cyfleus, a chadwch ymgyrchoedd ar gyfer angen strwythurol go iawn

Dylai’r rhan fwyaf o ailffactora fod yn gyfleus, wedi’i blygu i mewn i’r gwaith rydych eisoes yn ei wneud. Mae’r rheol sgowt-fachgen yn ei chrynhoi: gadewch y cod ychydig yn lanach nag y daethoch o hyd iddo. Pan fyddwch yn cyffwrdd ffeil i ychwanegu nodwedd neu drwsio nam, rydych eisoes yn deall y gornel honno, ac mae glanhau bach yno’n cyfansymio dros amser heb fod angen caniatâd unrhyw un na chyllideb ar wahân. Weithiau mae angen ymgyrchoedd ailffactora wedi’u cynllunio, lle mae tîm yn stopio gwaith nodweddion i ailstrwythuro ardal fawr, ond maen nhw’n ddrud, yn anodd eu hamserlennu yn erbyn pwysau cynnyrch, ac yn beryglus os yw’r ardal wedi’i phrofi’n wael. Cadwch ymgyrchoedd ar gyfer problemau strwythurol na all glanhau cyfleus eu cyrraedd, a gwnewch yr achos gyda thystiolaeth am gost-newid rydych yn ei dalu. Ffafriwch y diferu cyson o lanhau bach; mae’n fwy parhaol na’r ailysgrifennu arwrol achlysurol.

Defnyddiwch y patrwm ffigys llindagu ar gyfer newid strwythurol mawr

Pan fydd is-system gyfan angen ei disodli, peidiwch â cheisio ailysgrifennu byg-bang sy’n rhedeg am flwyddyn ac yn cyfuno ar y diwedd; dyna sut mae prosiectau moderneiddio’n marw. Defnyddiwch y patrwm ffigys llindagu, a enwyd gan Martin Fowler ar ôl y winwydden sy’n tyfu o amgylch coeden ac yn raddol yn ei disodli. Rydych yn rhoi ffasâd o flaen yr hen system, yn llwybro un sleisen o swyddogaeth ar y tro i god newydd y tu ôl i’r ffasâd hwnnw, yn ei wirio mewn cynhyrchu, ac yn ailadrodd nes bod yr hen system wedi’i hamgylchynu’n llawn ac y gellir ei dileu. Mae pob sleisen yn fach, yn hygludadwy, ac yn wrthdroadwy, felly mae’r risg yn aros wedi’i ffinio ac mae gwerth yn cyrraedd yn barhaus. Mae cyfnither agos, cangen drwy haniaeth, yn gwneud yr un peth y tu mewn i un ystorfa god: rydych yn cyflwyno haen haniaeth dros y peth rydych am ei ddisodli, yn adeiladu’r gweithrediad newydd y tu ôl iddi tra bod y ddau’n cydfodoli, yn newid defnyddwyr drosodd yn raddol, ac yn dileu’r hen weithrediad unwaith nad oes dim yn dibynnu arno. Mae’r ddau’n gadael i system etifeddol esblygu tra’n aros yn fyw, sef yr unig fath o foderneiddio y gall y rhan fwyaf o sefydliadau mawr ei fforddio go iawn.

Triniwch ddyled dechnegol fel portffolio, a gwnewch hi’n weladwy

Mae’r drosiad dyled, a fathwyd gan Ward Cunningham, yn gwahanu dau beth: y prifswm (y cod anniben neu’r llwybr byr ei hun) a’r llog (yr ymdrech ychwanegol y mae pob newid yn y dyfodol yn ei dalu oherwydd hynny). Nid yw pob dyled yn gyfartal. Mae cwadrant Fowler yn ei didoli ar hyd dwy echel: bwriadol yn erbyn anfwriadol, a doeth yn erbyn diofal. Mae dyled ddoeth-fwriadol (“rydym yn cyflenwi nawr ac yn glanhau’r sbrint nesaf, ac rydym yn gwybod y gost”) yn benderfyniad busnes dilys. Mae dyled ddiofal-anfwriadol (“beth yw patrwm cynllunio?”) yn ddim byd ond difrod. Y gwaith rheoli, sy’n cysylltu â phenderfynu a llywodraethu (pennod 1.5) a’i driniaeth o ddyled fel portffolio, yw gwneud y ddyled yn weladwy fel y gellir rhesymu amdani: olrhain eitemau arwyddocaol lle mae’r gwaith yn byw, tagio’r cod, a chofnodi’r llog rydych yn ei dalu fel bod talu i lawr yn cystadlu am gapasiti ar sail tystiolaeth yn hytrach nag ar sail pwy bynnag sy’n cwyno uchaf. Dyled na allwch ei gweld, ni allwch ei rheoli.

Ariannwch dalu i lawr fel capasiti cyson, nid arwriaeth

Y modd methiant yw trin glanhau fel rhywbeth y byddwch yn ei wneud “pan fydd pethau’n tawelu,” sef byth. Y patrwm parhaol yw capasiti sefydlog, wedi’i ddiogelu ar gyfer talu i lawr: sleisen eglur o bob cylch, neu gytundeb sefydlog fod glanhau’n mynd law yn llaw â gwaith nodweddion yn yr un ardal. Yr hyn nad yw’n gweithio yw’r sbrint arwrol cyfnodol lle mae rhywun yn llosgi penwythnos i drwsio popeth, oherwydd mae’n anghynaliadwy, heb ei adolygu, ac fel arfer yn dad-wneud ei hun. Mae capasiti cyson yn cadw taliadau llog i lawr ac yn osgoi’r cylch ffyniant-cwymp lle mae dyled yn cronni nes bod argyfwng yn gorfodi ailysgrifennu drud. Mae hwn yn ymrwymiad rheolaeth cymaint ag arfer peirianneg, ac mae’n perthyn i sut rydych yn cynllunio cynnal a chadw meddalwedd (pennod 3.7) dros oes system.

Mesurwch ansawdd mewnol, ond peidiwch â gadael i’r mesur ddod yn darged

Gallwch fesur ansawdd mewnol gyda signalau fel cymhlethdod cyclomatig (cyfrif o lwybrau annibynnol trwy ffwythiant), dyblygu, sylw profion, cyfradd methiant newid, a pha mor hir mae newidiadau’n eu cymryd yn yr ardaloedd rydych yn eu hamau. Mae’r rhifau hyn yn ddefnyddiol ar gyfer sylwi ble mae dyled yn crynhoi ac ar gyfer gwylio tuedd dros amser. Y perygl yw deddf Goodhart: pan fydd mesur yn dod yn darged, mae’n peidio â mesur unrhyw beth go iawn. Gorchmynnwch rif sylw a chewch brofion nad ydynt yn honni dim; gwobrwywch sgorau cymhlethdod isel a chewch resymeg wedi’i smwddio ar draws mwy o ffwythiannau i osgoi’r fetrig. Defnyddiwch fetrigau i ddechrau sgyrsiau a lleoli mannau poeth, a byth peidiwch â gwifro metrig ansawdd i giât y mae pobl wedi’u cymell i’w chwarae.

Gwybyddwch pryd i beidio ag ailffactora

Mae ailffactora’n fuddsoddiad, ac ni fydd rhai cod byth yn ei dalu’n ôl. Os yw modiwl yn sefydlog, anaml ei gyffwrdd, ac wedi’i ddeall yn ddigon da i’w newid ar yr achlysuron prin sy’n rhaid i chi wneud hynny, mae ei lanhau’n ymdrech a wariwyd ar log nad oeddech yn ei dalu. Os yw cod ar fin ymddeol, mae ei ailffactora’n caboli rhywbeth rydych ar fin ei daflu i ffwrdd. Y ddisgyblaeth yw gwario eich cyllideb glanhau lle mae newid yn aml ac yn boenus, sef lle mae lleihau’r llog yn cyfansymio go iawn, a gadael y corneli tawel ar eu pen eu hunain.

Cyfaddawdau: manteision ac anfanteision

DullManteisionAnfanteision
Ailffactora cyfleus (rheol sgowt-fachgen)Rhad, parhaus, dim cyllideb ar wahân, yn cyfansymio dros amserSylw anwastad; ffeiliau poeth yn gwella tra bod rhai oer yn pydru
Ymgyrch ailffactora wedi’i chynllunioYn trwsio problemau strwythurol na all glanhau eu cyrraeddDrud; yn cystadlu â nodweddion; peryglus heb brofion da
Ffigys llindagu / cangen drwy haniaethCynyddrannol, gwrthdroadwy, yn cadw system yn fyw, yn ffinio risgArafach nag ailysgrifennu ar bapur; angen disgyblaeth i orffen
Ailysgrifennu byg-bangLlechen lân; dim cyfyngiadau etifeddolCyfradd fethiant uchel; amser hir i werth; bylchau ymddygiad
Dyled ddoeth fwriadolYn cyflenwi gwerth nawr; taliad eglur, wedi’i gynllunioYn troi’n ddiofal os na chaiff y taliad ei amserlennu byth
Ansawdd wedi’i giatio gan fetrigGwrthrychol, gweladwy, yn dal llithriad yn gynnarYn gwahodd chwarae; yn cosbi cynildeb; gall ddiraddio ansawdd go iawn

Y tyndra canolog yw cyflymder nawr yn erbyn newidioldeb wedyn, ac mae’n real. Gall cyflenwi llwybr byr fod yn benderfyniad cywir pan fo’r terfyn amser yn wirioneddol a’r ddyled yn ddoeth ac wedi’i holrhain. Y camgymeriad yw esgus bod y ddyled yn rhad ac am ddim, neu ei gadael i gronni’n anweledig nes bod y system yn rhy ddrud i’w newid. Datryswch hyn drwy wneud y fasnach yn eglur bob tro: enwch y ddyled, amcangyfrifwch y llog, penderfynwch yn fwriadus, a chofnodwch y penderfyniad fel y gellir amserlennu talu i lawr yn hytrach na’i anghofio. Mae tîm sy’n benthyca’n wybodus ac yn talu’n gyson yn aros yn gyflym am flynyddoedd; mae tîm sy’n benthyca’n ddall yn arafu i stop.

Cwestiynau i’w trafod gyda’ch tîm

  1. Sut ydym yn atal ailffactora a newid ymddygiad rhag gwaedu i mewn i’r un ymrwymiad, ac a yw ein hadolygiad mewn gwirionedd yn ei orfodi? Dyma ddisgyblaeth sylfaenol y bennod gyfan, a hi yw’r un a dorrir amlaf o dan bwysau terfyn amser, oherwydd mae’n teimlo’n effeithlon i “lanhau hyn tra fy mod i yma” a’i gyflenwi i gyd gyda’i gilydd. Mae’r gost yn glanio wedyn: pan fydd ymrwymiad cymysg yn torri cynhyrchu, ni all neb ddweud a wnaeth yr ailstrwythuro neu’r nodwedd ei achosi, ac mae biseithio drwy eich hanes yn peidio â bod yn ddibynadwy. Dewch â llond llaw o geisiadau tynnu diweddar a gwiriwch yn onest sawl un a gymysgodd y ddau het. Yr ystyriaeth gystadleuol yw ffrithiant, gan fod hollti gwaith yn ymrwymiadau ar wahân ychydig mwy o ymdrech ymlaen llaw. Dylai’r ateb siapio eich confensiynau ymrwymo a’ch rhestr wirio adolygu.

  2. Ble mae ein dyled dechnegol, faint o log rydym yn ei dalu arni, a phwy sy’n penderfynu beth sy’n cael ei dalu i lawr? Ni all y rhan fwyaf o dimau ateb hyn, sef y broblem wirioneddol, oherwydd caiff dyled na allwch ei gweld ei rheoli gan bwy bynnag sy’n cwyno uchaf yn hytrach na lle mae’r gost go iawn. Mae ei gwneud yn weladwy’n golygu olrhain eitemau arwyddocaol, tagio’r cod, a chasglu tystiolaeth am ba ardaloedd sy’n gwneud newidiadau’n araf ac yn dueddol o fethu. Y tyniad cystadleuol yw bod pob awr a dreulir ar dalu i lawr yn awr na chaiff ei threulio ar nodweddion, felly mae’n rhaid i’r penderfyniad fod yn benderfyniad portffolio a wneir gydag arweinyddiaeth, gan gysylltu â sut rydych yn llywodraethu gwaith peirianneg (pennod 1.5). Dewch â’ch data cyfradd methiant newid a’ch rhestr o’r ffeiliau y mae pawb yn ofni eu cyffwrdd. Dylai’r ateb droi’n gapasiti talu i lawr wedi’i ddiogelu, cyson, nid bwriad amwys i lanhau pan fydd pethau’n tawelu.

  3. Pa rannau o’n hystorfa god y dylem yn fwriadus beidio â’u hailffactora, a sut y byddem yn gwybod? Mae ailffactora popeth yr un mor fethiant ag ailffactora dim byd, oherwydd mae ymdrech a dreulir yn glanhau cod sefydlog, anaml ei gyffwrdd, neu sydd ar fin ymddeol yn log a delir ar fenthyciad nad oedd arnoch ei angen. Mae’r penderfyniad barn yn real: gall modiwl edrych yn hyll ac eto fod y lle anghywir i fuddsoddi ynddo os nad oes neb byth yn ei newid. Dewch â’ch data amledd newid ochr yn ochr â’ch signalau cymhlethdod, oherwydd croestoriad chwyrndroad uchel a chymhlethdod uchel yw lle mae glanhau’n cyfansymio, tra bod cod chwyrndroad isel fel arfer orau ei adael ar ei ben ei hun. Y risg gystadleuol yw bod “fe’i gadawn” yn dod yn esgus i byth gyffwrdd unrhyw beth anodd. Dylai’r ateb roi rhestr fer eglur i chi o fannau poeth sy’n werth buddsoddi ynddynt a chaniatâd i anwybyddu’r corneli tawel.

  4. A ydym mewn gwirionedd yn ymddiried yn ddigon yn ein cyfres brofion i ailffactora’r cod y mae angen inni ei newid fwyaf, a lle byddai’n rhaid inni ysgrifennu profion nodweddu yn gyntaf? Mae rhwyd ddiogelwch na allwch ymddiried ynddi’n troi ailffactora’n olygu a gobeithio, ac ar dîm mawr y cod mwyaf brawychus fel arfer yw’r cod lleiaf wedi’i brofi, sef yn union lle byddai glanhau’n talu ffordd fwyaf. Dewch â’r data sylw a chyfradd methiant newid ar gyfer eich mannau poeth, a byddwch yn onest ynghylch pa fodiwlau critigol na fyddai’n rhoi unrhyw rybudd i chi pe bai ailstrwythuro’n newid ymddygiad. Yr ystyriaeth gystadleuol yw bod ysgrifennu profion nodweddu ar gyfer hen god yn waith araf, di-ogoniant nad yw’n cyflenwi unrhyw nodwedd, felly mae’n hawdd ei ohirio am byth. Mewn systemau mentrau a llywodraeth o dan archwiliad a rheoli newid, mae’r profion pinedig hynny hefyd yn dystiolaeth fod newid wedi gwarchod ymddygiad, felly mae eu hariannu’n fesur diogelwch ac yn un cydymffurfiaeth ar unwaith; dylai’r ateb enwi pa ardaloedd sy’n cael harnais profi cyn i unrhyw un eu cyffwrdd.

  5. Pan fydd is-system yn wirioneddol angen ei disodli, sut ydym yn penderfynu rhwng dull ffigys llindagu cynyddrannol ac ailysgrifennu, a phwy sydd ag awdurdod i wrthod yr ailysgrifennu? Yr ailysgrifennu byg-bang yw’r dewis mwyaf hudolus a mwyaf tueddol o fethu ar y bwrdd, oherwydd mae llechen lân bob amser yn edrych yn rhatach ar bapur na byw gyda’r hen gyfyngiadau. I sefydliad mawr mae’r llwybr cynyddrannol (ffasâd, un sleisen ar y tro, wedi’i wirio mewn cynhyrchu) yn cadw’r system yn fyw ac yn ffinio risg, ond mae’n arafach, yn mynnu disgyblaeth i orffen, ac yn cystadlu â’r awydd am ddechrau newydd. Dewch â map amledd newid yr is-system, amcangyfrif gonest o ba mor hir y byddai ailysgrifennu’n rhedeg cyn iddo gyflenwi gwerth, a’r bylchau ymddygiad y byddai’n rhaid i ailysgrifennu cyfochrog eu cau. Mewn lleoliadau llywodraeth a reoleiddir, anaml y gall ailysgrifennu aml-flwyddyn sy’n cyfuno ar y diwedd oroesi archwiliad, felly dylai’r ateb ddiffygio i ffigys llindagu neu gangen drwy haniaeth a thrin unrhyw ailysgrifennu fel eithriad y mae’n rhaid dadlau drosto gyda thystiolaeth.

  6. Sut ydym yn defnyddio metrigau ansawdd mewnol i ddod o hyd i ble mae dyled yn crynhoi heb adael i rif ddod yn darged y mae pobl yn ei chwarae? Metrigau fel cymhlethdod, dyblygu, sylw, a chyfradd methiant newid yw’r unig ffordd y gall sefydliad mawr weld ar draws cod nad yw’r un person yn ei ddarllen, ac eto’r foment y caiff un ei wifro i giât neu adolygiad perfformiad, mae deddf Goodhart yn cymryd drosodd ac mae’r rhif yn peidio â mesur unrhyw beth go iawn. Dewch ag enghreifftiau o ble mae metrig eisoes yn gyrru ymddygiad, a gofynnwch a yw’n dechrau sgyrsiau neu’n dawel wobrwyo profion nad ydynt yn honni dim a rhesymeg wedi’i smwddio ar draws ffwythiannau i osgoi trothwy. Y tyniad cystadleuol yw bod arweinyddiaeth eisiau rhif dangosfwrdd syml, ac mae “defnyddiwch farn” yn werth anos ei werthu na bar gwyrdd. Mewn cyd-destunau mentrau a llywodraeth lle mae metrigau’n bwydo adroddiadau llywodraethu, byddwch yn eglur fod signalau ansawdd yn llywio buddsoddiad ac yn lleoli mannau poeth ond byth yn giatio unigolion; dylai’r ateb dynnu llinell gadarn rhwng mesur i ddysgu a mesur i farnu.

Lens sector

Cwmni newydd. Gyda llond llaw o beirianwyr a dim rhedfa i’w harbed, ailffactorwch yn gyfleus yn unig: gwisgwch un het fesul ymrwymiad fel bod hanes yn aros yn biseithiadwy, a chadwch restr fer, onest o’r llwybrau byr y gwnaethoch eu cymryd yn fwriadus. Peidiwch â lansio ymgyrchoedd glanhau na chaboli modiwlau sefydlog; treuliwch eich sylw prin ar yr un ffeil y mae pawb yn ei hofni, ac ysgrifennwch brofion nodweddu dim ond lle mae newid go iawn yn eich dychryn. Mae dyled fwriadol, weladwy’n iawn ar y cam hwn; dyled ddiofal, anweledig yw’r hyn sy’n eich lladd.

Busnes bach. Heb arbenigwr platfform neu offer penodedig a chyllideb dynn, pwyswch ar yr hyn y mae eich IDE a’ch ecosystem iaith yn eu rhoi i chi am ddim: symudiadau ailenwi ac echdynnu awtomataidd, llinter, a signal sylw sylfaenol. Triniwch y rhan fwyaf o ddyled fel rhywbeth rydych yn ei rheoli yn ystod gwaith normal yn hytrach na rhywbeth rydych yn cyflogi ymgynghorydd i’w drwsio, a ffafriwch brynu llyfrgelloedd wedi’u cynnal yn dda dros adeiladu a gorfod ailffactora’ch un eich hun wedyn. Cadwch yr ymdrech dalu prin ar gyfer yr un system y mae ei harafwch yn costio cwsmeriaid i chi’n uniongyrchol.

Menter. Ar draws llawer o dimau y broblem yw llywodraethu portffolio: cofrestr ddyled a rennir, tagio cyson o fannau poeth yn ôl amledd newid a chymhlethdod, a sleisen ddiogel o gapasiti pob tîm ar gyfer talu i lawr fel bod glanhau’n stopio colli i nodweddion yn ddiofyn. Safonwch y ddisgyblaeth dau-het ac arfer profion nodweddu fel bod unrhyw beiriannydd sy’n symud rhwng timau’n dod o hyd i’r un rheolau, a defnyddiwch ffigys llindagu a changen drwy haniaeth ar gyfer newid strwythurol wedi’i gydlynu ar draws grwpiau. Cadwch fetrigau ansawdd yn wybodaethol fel eu bod yn lleoli dyled heb gael eu chwarae mewn adolygiadau perfformiad.

Llywodraeth. Mae systemau hirhoedlog o dan archwiliad a rheoli newid llym yn gwneud ailffactora disgybledig yn ased cydymffurfiaeth, nid un peirianneg yn unig: mae cadw ailstrwythuro ar wahân yn llym i newid ymddygiad yn gadael i archwilwyr weld yn union pa ymrwymiadau a newidiodd ymddygiad a pha rai a dwtiodd yn unig. Mae rheolau caffael a thryloywder yn ffafrio camau bach, gwrthdroadwy, wedi’u cefnogi gan dystiolaeth dros ailysgrifennu byg-bang, felly diffygiwch i ffigys llindagu gyda phrofion nodweddu’n dogfennu bod ymddygiad wedi’i warchod. Gwnewch y gofrestr ddyled a’i chynllun talu i lawr yn rhan o gofnod cynnal a chadw’r system fel bod cyrff goruchwylio’n cael y traceadwyedd y maent yn ei ofyn.

Enghreifftiau

Cwmni newydd. Mae cwmni newydd chwe pherson yn cyflenwi’n gyflym ac yn gwybod ei fod yn cymryd dyled ymlaen, felly mae’n gwneud dau beth rhad yn dda. Mae pob cais tynnu’n gwisgo un het: mae ymrwymiadau ailffactora ar wahân i ymrwymiadau nodweddion, sy’n cadw eu hanes yn biseithiadwy hyd yn oed ar gyflymder uchel. Ac maen nhw’n cadw rhestr fer, onest o’r llwybrau byr y gwnaethant eu cymryd yn fwriadus, gyda nodyn un-llinell ar y llog y mae pob un yn ei gostio. Pan ddaw modiwl talu’n ffeil y mae pawb yn ei hofni, mae’r rhestr honno ynghyd â’u hanes cyfradd methiant newid yn gwneud yr achos i dreulio dau ddiwrnod yn echdynnu ffin lanach. Maen nhw’n ysgrifennu profion nodweddu i binio’r ymddygiad presennol, yn ailffactora oddi tano gyda symudiadau ailenwi ac echdynnu’r IDE, ac byth yn cyffwrdd y modiwlau sefydlog nad yw neb yn eu newid. Mae’r ddyled maen nhw’n ei chario’n fwriadus ac yn weladwy, felly nid yw byth yn troi’n fath diofal.

Menter. Mae cwmni logisteg byd-eang yn rhedeg system archebion bymtheg oed y mae llawer o dimau’n ei newid bob wythnos. Yn hytrach nag ailysgrifennu, maen nhw’n mabwysiadu’r patrwm ffigys llindagu: mae ffasâd yn eistedd o flaen y monolith, ac ailgyfeirir un gallu wedi’i ffinio ar y tro i wasanaethau newydd y tu ôl iddo, wedi’i wirio mewn cynhyrchu cyn i’r sleisen nesaf ddechrau. Cydlynu hyn ar draws timau a system hirhoedlog (pennod 10.4) yw’r rhan anodd, felly maen nhw’n cynnal cofrestr ddyled a rennir, yn tagio mannau poeth yn ôl amledd newid a chymhlethdod, ac yn cadw sleisen sefydlog o gapasiti pob tîm ar gyfer talu i lawr. Mae metrigau ansawdd mewnol yn llywio ble i edrych ond byth yn giatio adolygiad perfformiad neb, sy’n cadw’r rhifau’n onest. Dros ddwy flynedd mae’r monolith yn crebachu’n gyson ac nid oes unrhyw newid unigol byth yn peryglu’r system gyfan.

Llywodraeth. Mae’n rhaid i asiantaeth dreth genedlaethol foderneiddio platfform asesu degawdau oed o dan reolau archwilio a rheoli newid llym, lle mae pob newid cod yn ddigwyddiad a lywodraethir, wedi’i gefnogi gan dystiolaeth. Mae ailysgrifennu byg-bang yn amhosibl, felly maen nhw’n defnyddio cangen drwy haniaeth: cyflwynir haen haniaeth dros yr hen beiriant cyfrifo, adeiladir gweithrediad newydd y tu ôl iddo, a symudir defnyddwyr un rheol dreth ar y tro, gyda phob mudo wedi’i ddogfennu fel newid bach, gwrthdroadwy gyda phrofion nodweddu’n profi nad yw ymddygiad wedi newid. Am fod ailffactora’n cael ei gadw ar wahân yn llym i unrhyw newid ymddygiad deddfwriaethol, gall archwilwyr weld yn union pa ymrwymiadau a newidiodd ymddygiad a pha rai a ailstrwythurodd yn unig. Mae’r gofrestr ddyled a’i chynllun talu i lawr yn dod yn rhan o gofnod cynnal a chadw’r system (pennod 3.7), gan roi’r traceadwyedd y mae cyrff goruchwylio’n ei ofyn iddynt.

Achos busnes: cymhellion, ROI, a TCO

Yr enillion ar ailffactora a thalu dyled i lawr yw’r gallu parhaus i newid meddalwedd yn rhad, ac ar gyfer y rhan fwyaf o systemau cynnal a chadw yw mwyafrif y gost oes, felly dyma lle mae cyfanswm cost perchnogaeth yn cael ei benderfynu i raddau helaeth. Telir llog ar ddyled dechnegol yn yr arian cyfred y mae arweinyddiaeth eisoes yn ei olrhain: cyflenwi arafach, cyfradd methiant newid uwch, amser hirach i adfer o ddigwyddiadau, a pheirianwyr sy’n osgoi’r cod mwyaf brawychus. Pan fyddwch yn gwneud dyled yn weladwy ac yn ariannu talu i lawr yn gyson, rydych yn gostwng cost pob newid yn y dyfodol yn yr ardaloedd sy’n bwysicaf, ac yn osgoi’r patrwm ffyniant-cwymp lle mae dyled a esgeuluswyd yn gorfodi ailysgrifennu argyfwng drud.

Mae’r gost i’w fabwysiadu’n gymedrol ac yn ddiwylliannol yn bennaf: sefydlwch y ddisgyblaeth dau-het, adeiladwch y rhwyd ddiogelwch lle mae angen i chi ailffactora, cadwch gofrestr ddyled, a diogelwch sleisen gyson o gapasiti ar gyfer talu i lawr. Mae cost esgeuluso’n cyfansymio’n dawel. Mae llog yn cronni ar bob newid nes bod cyflymder yn cwympo a bod y sefydliad yn ei ganfod ei hun wedi rhewi, yn methu addasu system nad yw bellach yn ei deall yn ddiogel, sef y canlyniad mwyaf costus oll. I wneud yr achos i arweinyddiaeth, cysylltwch ddyled yn uniongyrchol â metrigau cyflenwi y maent eisoes yn poeni amdanynt, a fframiwch dalu i lawr fel penderfyniad portffolio gydag enillion mesuradwy, nid fel peirianwyr yn gofyn am amser i dwtio.

Gwrth-batrymau a pheryglon

  • Cymysgu ailffactora â newid ymddygiad: mae un ymrwymiad yn gwneud y ddau, felly ni ellir priodoli toriad a daw hanes yn annibynadwy.
  • Ailffactora heb rwyd ddiogelwch: ailstrwythuro cod heb ei brofi a gobeithio, sef golygu drwy ffydd.
  • Yr ailysgrifennu byg-bang: disodli system sy’n gweithio i gyd ar unwaith, patrwm â chyfradd fethiant uchel ac amser hir i werth.
  • Ailffactora fel penwythnos arwrol: glanhau heb ei adolygu, anghynaliadwy sy’n dad-wneud ei hun yn hytrach na chapasiti cyson.
  • Dyled anweledig: llwybrau byr nad oes neb yn eu holrhain, felly caiff talu i lawr ei yrru gan gyfaint cwyno yn hytrach na chost go iawn.
  • Chwarae metrigau ansawdd: taro targed sylw neu gymhlethdod tra bod ansawdd go iawn yn gostwng, oherwydd daeth y mesur yn darged.
  • Ailffactora’r cod anghywir: caboli modiwlau sefydlog neu sydd ar fin ymddeol tra bod y mannau poeth gwirioneddol yn parhau i gostio i chi.
  • Ailffactora tragwyddol: ailstrwythuro diddiwedd nad yw byth yn cyflenwi gwerth, delwedd ddrych o byth lanhau.

Model aeddfedrwydd

  • Lefel 1, Cychwyn: Mae ailffactora’n achlysurol ac yn ymatebol, yn aml wedi’i gymysgu â newid ymddygiad yn yr un ymrwymiad. Nid oes rhwyd ddiogelwch ddibynadwy, mae dyled dechnegol yn anweledig ac heb ei holrhain, a dim ond mewn ffrwydradau arwrol achlysurol neu ddim o gwbl y mae glanhau’n digwydd.
  • Lefel 2, Datblygu: Mae rhai timau’n gwahanu ailffactora oddi wrth newid ymddygiad ac yn pwyso ar brofion lle maent yn bodoli, ac mae ailffactorau wedi’u henwi a phrofion nodweddu’n ymddangos mewn pocedi. Mae arfer yn anghyson ar draws timau, trafodir dyled ac weithiau caiff ei chofnodi, ac mae talu i lawr yn cystadlu’n achlysurol yn erbyn nodweddion ac fel arfer yn colli.
  • Lefel 3, Safoni: Mae’r ddisgyblaeth dau-het, profion nodweddu ar gyfer hen god, ac ailffactorau bach wedi’u henwi wedi’u dogfennu a’u disgwyl ar draws y sefydliad. Caiff dyled ei holrhain mewn cofrestr a rennir sy’n gwahanu prifswm oddi wrth log, a chynllunnir capasiti diogel ar gyfer talu i lawr bob cylch a’i orfodi mewn adolygiad.
  • Lefel 4, Rheoli: Caiff dyled a glanhau eu mesur a’u rheoli gyda data yn erbyn llinellau sylfaen. Rydych yn olrhain amledd newid a chymhlethdod i leoli mannau poeth, yn gwylio cyfradd methiant newid ac amser blaenllaw newid mewn ardaloedd wedi’u hailffactora, ac yn cofnodi’r llog y mae pob eitem arwyddocaol yn ei gostio, fel bod penderfyniadau talu i lawr yn gorffwys ar dystiolaeth a bod galwadau lladd-neu-fuddsoddi’n cael eu gwneud ar dueddiadau yn hytrach na chyfaint cwyno. Mae signalau ansawdd yn llywio buddsoddiad heb gael eu gwifro i giatiau y gall pobl eu chwarae.
  • Lefel 5, Cyfluniadu: Caiff dyled ei rheoli fel portffolio a ailgydbwysir yn barhaus wedi’i integreiddio â chynllunio cynnyrch a chynnal a chadw ar draws y sefydliad cyfan. Mae newid strwythurol yn defnyddio ffigys llindagu a changen drwy haniaeth yn rheolaidd wedi’u cydlynu ar draws timau, mae talu i lawr yn barhaus ac wedi’i baru â lle mae newid yn aml ac yn boenus, ac mae’r arfer yn addasu wrth i’r system a’i ddarlun risg symud, fel bod cod hirhoedlog yn aros yn newidiadwy dros ddegawdau.

Syniadau i’w trafod

  1. Beth yw rheol eich tîm mewn gwirionedd, wedi’i gorfodi, ar gyfer cadw ailffactora ar wahân i newid ymddygiad, a ble mae’n torri i lawr o dan bwysau terfyn amser?
  2. Sut ydych chi’n penderfynu, gyda thystiolaeth, pa god sy’n haeddu glanhau a pha un sydd orau ei adael ar ei ben ei hun?
  3. Ble byddai profion nodweddu’n gadael i chi ailffactora’n ddiogel ardal etifeddol rydych yn ei hosgoi ar hyn o bryd?
  4. Ar gyfer eich moderneiddio mawr nesaf, sut olwg fyddai ar ddull ffigys llindagu, a pha ffasâd neu haniaeth y byddech yn ei gyflwyno gyntaf?
  5. Pwy sy’n berchen ar y gofrestr dyled dechnegol, a sut mae talu i lawr yn mewn gwirionedd yn ennill capasiti yn erbyn gwaith nodweddion?

Prif gasgliadau

  • Mae ailffactora’n gwarchod ymddygiad; cadwch ef ar wahân yn llym i newid ymddygiad, mewn ymrwymiadau ar wahân.
  • Mae cyfres brofion ddibynadwy’n amod ymlaen llaw ar gyfer ailffactora diogel, ac mae profion nodweddu’n rhoi un i hen god.
  • Gweithiwch mewn camau bach, wedi’u henwi, gwrthdroadwy, ffafriwch lanhau cyfleus, a defnyddiwch ffigys llindagu neu gangen drwy haniaeth ar gyfer newid strwythurol mawr.
  • Gwnewch ddyled dechnegol yn weladwy, gwahanwch brifswm oddi wrth log, ac ariannwch dalu i lawr fel capasiti cyson yn hytrach nag arwriaeth.
  • Mesurwch ansawdd mewnol i lywio barn, byth fel targed i’w chwarae, a pheidiwch ag ailffactora cod sy’n sefydlog neu ar fin ymddeol.

Cyfeiriadau a darllen pellach

  • Martin Fowler, Refactoring: Improving the Design of Existing Code, second edition
  • Michael Feathers, Working Effectively with Legacy Code
  • Ward Cunningham, The WyCash Portfolio Management System (OOPSLA 1992 experience report, origin of the debt metaphor)
  • Martin Fowler, “TechnicalDebtQuadrant” and “StranglerFigApplication” (martinfowler.com)
  • Kent Beck, Tidy First? A Personal Exercise in Empirical Software Design
  • Steve McConnell, Code Complete: A Practical Handbook of Software Construction
  • Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship