Język czy notacja czyli co?

Od cza­su do cza­su jestem pyta­ny czy UML, BPMN, itp.. to nota­cje czy języ­ki, a pada­ją nawet pyta­nia czy to meto­dy. Otóż meto­dy na pew­no nie… (np. mamy dwie meto­dy mode­lo­wa­nia pro­ce­sów biz­ne­so­wych: z uży­ciem nota­cji BPMN i nota­cji eEPC). A pozo­sta­łe dwa?

Nie jest to pro­ste. Dzisiaj pój­dę może nie­co na skró­ty dla­te­go wni­kli­wym pole­cam lek­tu­rę przede wszyst­kim na temat semio­ty­ki, logi­ki i rachun­ku zdań.

Język i znaczenie

Na począ­tek kil­ka defi­ni­cji ogól­nych (wszyst­kie sł. j. pol­skie­go PWN):

język
5. ?utrwa­lo­ny spo­łecz­nie zespół zna­ków doty­czą­cych jakichś dzia­łań czło­wie­ka lub wyra­ża­ją­cych jego emo­cje oraz każ­dy układ ele­men­tów rze­czy­wi­sto­ści, któ­re­mu czło­wiek nadał jakąś treść?

Język jest więc okre­ślo­nym zespo­łem norm, są nimi jed­nak nie tyl­ko zna­ki ale tak­że to, co zna­czą i jaką treść nio­są. Wyrażanie emo­cji czy myśli w ogó­le, rzad­ko jest moż­li­we z uży­ciem tyl­ko jed­ne­go zna­ku. Dlatego w toku ich wyra­ża­nia ope­ru­je­my raczej zdaniami:

zda­nie
1. ?myśl wyra­żo­na słowami?
4. log. ?sen­sow­ne wyra­że­nie oznaj­mia­ją­ce pod­le­ga­ją­ce falsyfikacji?

Tu zaczy­na­my powo­li iść w porząd­ko­wa­nie tego o czym piszę. Każde zda­nie (w logi­ce) może być praw­dzi­we lub nie (tau­to­lo­gia jest zda­niem zawsze praw­dzi­wym, czy­li jest zna­ny fakt je fal­sy­fi­ku­ją­cy ale wie­my, że nigdy taki nie wystą­pi). Jeżeli więc, że treść naj­czę­ściej wyra­ża­my sło­wa­mi (a raczej rzad­ko nie jed­nym sło­wem) to zna­czy, że nale­ży umieć odczy­tać zna­cze­nie zło­że­nia wie­lu słów w jed­nym zda­niu. Jak wie­my o zro­zu­mia­ło­ści (zro­zu­mia­łość ozna­cza, że zda­nie ma dla czy­ta­ją­ce­go okre­ślo­ne zna­cze­nie) decy­du­je układ słów w zda­niu, zna­ki inter­punk­cyj­ne itp.

przecinek

Nawet prze­ci­nek ma zna­cze­nie (jest on ele­men­tem języ­ka) w zda­niu złożonym.

Jednoznaczność (zro­zu­mia­łość, zna­cze­nie) zdań jest tak­że efek­tem kontekstu:

kon­tekst
1. ?frag­ment tek­stu potrzeb­ny do dokład­ne­go rozu­mie­nia danych wyra­zów lub wyrażeń?
3. ?zespół jed­no­stek języ­ko­wych, któ­re sta­no­wią oto­cze­nie danej jednostki?
4. ?zespół odnie­sień nie­zbęd­nych do zro­zu­mie­nia utwo­ru lite­rac­kie­go, dzie­ła nauko­we­go itp.?

zakaz dobijania dziobem niejednoznacznoscJeżeli napi­szę Te dwie kro­wy są paskud­ne” to nadal nie ma pew­no­ści o czym mowa. Bez wie­dzy o tym, czy to roz­mo­wa dwóch rol­ni­ków o inwen­ta­rzu, czy też dwóch kole­ża­nek o dwóch innych, nie wie­my. Słowo palant” tak­że ma wię­cej niż jed­no zna­cze­nie i bez kon­tek­stu jego uży­cia nie wie­my o jakie zna­cze­nie cho­dzi (kole­ga czy mało już popu­lar­na gra) :). Bardzo czę­sto to wła­śnie kon­tekst nada­je znaczenie.

Jak widać zro­zu­mie­nie prze­ka­zu nie musi być pro­ste, a komu­ni­ka­cja pro­sta i łatwa (każ­dy kto się choć raz pokłó­cił z powo­du nie­po­ro­zu­mień o tym wie). Kontekstem zaj­mu­je się:

prag­ma­ty­ka
1. ?dział języ­ko­znaw­stwa, któ­re­go przed­mio­tem są spo­łecz­ne i sytu­acyj­ne warun­ki funk­cjo­no­wa­nia języ­ka oraz cele, jakie mówią­cy chce osią­gnąć przez uży­cie okre­ślo­nych wyra­zów i wyrażeń?

Należy pamię­tać, że zna­cze­nie mają nie tyl­ko poje­dyn­cze sło­wa (zna­ki) ale tak­że ich zło­że­nia („pro­ces biz­ne­so­wy” to jed­no poję­cie ale dwa sło­wa). Innymi sło­wy kon­kret­ne poję­cie może być zapi­sa­ne z uży­ciem jed­ne­go lub wię­cej znaków.

sło­wo
1. ?znak języ­ko­wy mają­cy jakieś znaczenie?

Dlatego zło­że­nie kil­ku zna­ków (słów) tak­że jest zna­kiem (defi­ni­cja sło­wa i słowo/pojęcie przez nią defi­nio­wa­ne, nio­są toż­sa­me zna­cze­nie). Słowo (rozu­mia­ne jako zapis: zło­że­nie liter) moż­na zastą­pić sym­bo­lem gra­ficz­nym (iko­na). O tym traktuje

semio­ty­ka
1. ?ogól­na teo­ria zna­ku w pro­ce­sie poro­zu­mie­wa­nia się ludzi?

w tym:

seman­ty­ka
1. ?dział języ­ko­znaw­stwa, któ­re­go przed­mio­tem jest ana­li­za zna­czeń wyrazów?
2. ?dział semio­ty­ki zaj­mu­ją­cy się bada­niem związ­ków, jakie zacho­dzą mię­dzy wyra­że­nia­mi języ­ka a przed­mio­ta­mi, do któ­rych się one odnoszą?

syn­tak­ty­ka
2. ?dział semio­ty­ki bada­ją­cy wza­jem­ne sto­sun­ki i wła­ści­wo­ści budo­wy wyra­żeń języ­ka w pro­ce­sie poro­zu­mie­wa­nia się ludzi?

Zapisując coś: treść, w celu prze­ka­za­nia jej dru­giej oso­bie komu­ni­ku­je­my się:

komu­ni­ka­cja
2. ?prze­pływ infor­ma­cji mię­dzy urzą­dze­nia­mi, np. tele­fo­na­mi lub komputerami?
3. ?prze­ka­zy­wa­nie i odbie­ra­nie infor­ma­cji w bez­po­śred­nim kon­tak­cie z dru­gą osobą?

treść
1. ?to, co jest zawar­te w czy­jejś wypo­wie­dzi; też: to, co prze­ka­zu­je odbior­cy dzie­ło sztu­ki, w prze­ciw­sta­wie­niu do formy?
2. ?to, co sta­no­wi isto­tę, sens czegoś?

Do komu­ni­ka­cji uży­wa­my znaków:

znak
1. ?kształt, któ­re­mu przy­pi­su­je się okre­ślo­ne znaczenie?
2. ?dźwięk, spoj­rze­nie, gest itp. słu­żą­cy do prze­ka­za­nia informacji?

Znak zna­czy, czy­li ma okre­ślo­ne znacz­nie (pamię­ta­my o kon­tek­ście). Znakiem może być wie­le rze­czy (tak­że gest). Znak ma (nie­sie) zna­cze­nie, znak lub ich zło­że­nie tak­że, prze­ka­zu­je okre­ślo­ną treść:

zna­cze­nie
1. ?myśl zawar­ta w czy­jejś wypo­wie­dzi, w czy­imś zacho­wa­niu itp.?
3. ?treść, któ­rej zna­kiem jest wyraz lub wyrażenie?

zna­czyć
1. ?być zna­kiem czegoś?
3. ?umiesz­czać na czymś lub na kimś znak?
4. ?zosta­wiać na czymś znak, ślad?

Na koniec zosta­wi­łem, spor­ne słowo:

nota­cja ?ozna­cze­nie cze­goś umow­ny­mi zna­ka­mi; też: zbiór takich znaków?

Notacja to zbiór zna­ków. Przypomnę też, że język to mie­dzy inny­mi okre­ślo­ny zbiór zna­ków wraz z opi­sem ich zna­czeń (seman­ty­ka) oraz tym, jakie mają zna­cze­nia ich okre­ślo­ne zło­że­nia (syn­tak­ty­ka). Wiemy już, że zna­cze­nie (treść) mają nie tyl­ko poje­dyn­cze sło­wa (to rzad­ko) ale ich kon­kret­ne zło­że­nia (zda­nia). Przekazanie kon­kret­nych, jed­no­znacz­nych tre­ści, poza rzad­ki­mi wyjąt­ka­mi, wyma­ga więc zbu­do­wa­nia kon­kret­nych zdań czy­li zło­żeń słów (zna­ków)”. Innymi sło­wy, nikt chy­ba nie powie, że książ­ka jaką jest słow­nik języ­ka pol­skie­go, wraz z zasa­da­mi gra­ma­ty­ki, to jest język pol­ski”. Język to jed­nak coś wię­cej”. Słowo język jest dość nie­pre­cy­zyj­ne i ozna­cza wręcz pewien zespół norm i spo­so­bów poro­zu­mie­wa­nia się (w tym idio­my, zespo­ły słów mają­ca inne zna­cze­nie niż każ­de z nich z osob­na). Poprawne (sku­tecz­ne) posłu­gi­wa­nie się danym języ­kiem ozna­cza, że adre­sat zro­zu­miał” treść nadaw­cy (mówią­ce­go).

Porządkujemy to wszystko

Zrobiło się cięż­ko :). Poniżej model poję­cio­wy: dia­gram w nota­cji SBVR poka­zu­ją­cy poję­cia i związ­ki mię­dzy nimi. Jednym z klu­czo­wych narzę­dzi w ana­li­zie jest wła­snie ana­li­za poję­cio­wa i budo­wa­nie słow­ni­ka pojęć dla okre­ślo­nej dzie­dzi­ny (tu wię­cej o tym czy jest dia­gram fak­tów opi­sa­ny w nota­cji SBVR).

jezyk-i-notacja-model-pojeciowy

Powyższy model obra­zu­je związ­ki pomię­dzy opi­sa­ny­mi wyżej poję­cia­mi, pre­cy­zu­je tak­że ich zna­cze­nia. Model poję­cio­wy dla danej dzie­dzi­ny (tu mowa o języ­kach i nota­cjach) powi­nien się cecho­wać mię­dzy inny­mi tym, że zna­cze­nia poszcze­gól­nych pojęć powin­ny być roz­łącz­ne, czy­li speł­niać ary­sto­te­le­sow­ską zasa­dę wyłą­czo­ne­go środ­ka” w logi­ce, brzmią­cą: jeże­li coś jest czymś, to nie jest niczym innym”. Dla zacho­wa­nia jed­no­znacz­no­ści zdań, defi­ni­cje pojęć muszą się więc wza­jem­nie wyklu­czać, tak zbu­do­wa­ny słow­nik nazy­wa­my prze­strze­nią nazw” (ang. namespace).

UML i BPMN to język czy notacja?

Skrót UML zawie­ra w sobie sło­wo lan­gu­age” (ang. język). Historycznie tłu­ma­czyć to moż­na tym, że obec­ne 14 typów dia­gra­mów to kon­kret­ne kon­tek­sty oraz narzu­co­ne kon­struk­cje, któ­re moż­na nazwać zda­nia­mi” (widać to szcze­gól­nie w przy­pad­ku dia­gra­mów Przypadków uży­cia czy Rozlokowania). Jednak obec­na spe­cy­fi­ka­cja UML 2.5 porząd­ku­je i to, sło­wo lan­gu­age” w zasa­dzie nie jest w niej sto­so­wa­ne wobec tego co nazwa­no tam mia­nem UML (W zasa­dzie dzi­siaj mogła by nosić nazwę Object-orien­ted Modeling and Notation 🙂 ).

Tak więc język czy nota­cja? To zale­ży od tego czy dana spe­cy­fi­ka­cja” opi­su­je wyłącz­nie sym­bo­le czy też ich okre­ślo­ne, i zale­ca­ne w okre­ślo­nych sytu­acjach, kon­struk­cje oraz ich zna­cze­nie. OMG (chy­ba) sta­ra się to ostat­nio jasno sygna­li­zo­wać: UML to jesz­cze lan­gu­age” ale BPMN to już nota­tion”. Specyfikacja UML zawie­ra okre­ślo­ne, seman­tycz­ne (nazwa­ne) kon­struk­cje, mają­ce okre­ślo­ne zna­cze­nia, zwią­za­ne z kon­kret­ny­mi dia­gra­ma­mi (nazwa dia­gra­mu nada­je kon­tekst uży­tym na nich sym­bo­lom, jest to potrzeb­ne bo pamię­taj­my, że w UML wszyst­ko jest kla­są”). W BPMN nie ma cze­goś takie­go (nawet poję­cie pro­ces biz­ne­so­wy” nie jest czę­ścią BPMN, jest ono zde­fi­nio­wa­ne dopie­ro w Dodatku A jako obja­śnie­nie i dodat­ko­wy kon­tekst, w nota­cji zaś BPMN nie ma sym­bo­lu pro­ces biz­ne­so­wy” 🙂 ). To czy dana spe­cy­fi­ka­cja to tyko opis nota­cji czy tak­że języ­ka, zale­ży więc od kon­kret­ne­go przypadku.

usuwanie dwuznaczosci i niejasnosciNiewątpliwie UML, BPMN, CMMN, SBVR, BMM itp., to wszyst­ko są nota­cje, bo są to spe­cy­fi­ka­cje sym­bo­li, ich zna­czeń oraz okre­ślo­na syn­tak­ty­ka. Natomiast o tym co i jak wyra­ża­ją (i czy w ogó­le ;)) two­rzo­ne z ich pomo­cą dia­gra­my, to już inna kwe­stia… To leży w gestii twór­cy dia­gra­mów. A testem jest mie­dzy inny­mi sku­tecz­ność komu­ni­ka­cji: porów­na­nie tego jaką kon­kret­ną treść chciał prze­ka­zać twór­ca dane­go dia­gra­mu i jaką treść ode­brał czy­ta­ją­cy… Analityk zaczy­na od ana­li­zy poję­cio­wej by unik­nąć nie­jed­no­znacz­no­ści w samym prze­ka­zie. Potem dopie­ro doku­men­tu­je, z uży­ciem mode­li two­rzo­nych z pomo­cą nota­cji, to co zastał oraz pro­jek­tu­je to, co chciał­by by, by powsta­ło spo­sób roz­wią­za­nie pro­ble­mu (tu pole­cam lek­tu­rę arty­ku­łu gdzie pisa­łem o tym, że wyma­ga­nia to pro­jekt).

Niewątpliwie więc wszyst­kie języ­ki pro­gra­mo­wa­nia” są języ­ka­mi: mają skład­nię i każ­de zda­nie coś wyra­ża (rozu­mie to i kole­ga pro­gra­mi­sta i kom­pi­la­tor). Wiele nota­cji jed­nak języ­kiem nie jest. O języ­ku moż­na mówić tyl­ko wte­dy, gdy jest samo­wy­star­czal­ny do wyra­ża­nia okre­ślo­nych myśli i tre­ści, do komu­ni­ko­wa­nia ich. Nie może­my tego raczej powie­dzieć o nota­cjach. Diagramy i mode­le wyko­na­ne z pomo­cą w. nota­cji wyma­ga­ją sto­so­wa­nia np. języ­ka” pol­skie­go, do nada­wa­nia nazw sym­bo­lom i dia­gra­mom, bez cze­go dia­gra­my te były by nie­zro­zu­mia­łe. Uważam więc, że uży­wa­nie wobec nota­cji obli­ga­to­ryj­nie nazwy język, jest poważ­nym nad­uży­ciem… Niektóre nota­cje mają swo­ją wer­sję wyko­ny­wal­ną (tu nawią­zu­je do tego że języ­ki pro­gra­mo­wa­nia są” języ­ka­mi”) o czym nie­daw­no pisa­łem (Analityczne i wyko­ny­wal­ne mode­le) jed­nak pamię­tać, nale­ży nota­cja jako taka nie jest języ­kiem pro­gra­mo­wa­nia”, jest tu raczej for­mą budo­wa­nia mecha­ni­zmu (mode­lo­wa­nie), któ­ry dopie­ro po doda­niu wie­lu para­me­trów (czy­li wpro­wa­dze­niu wie­lu słów” z poza nota­cji) pozwa­la taki model uru­cho­mić”.

Cykl tworzenia oprogramowania metodą zorientowaną na modele (Model Driven Development)

Hej, Biznesie, to ma być dla biznesu czyli dla Ciebie!

Obawiam się, że temat jako­ści pro­ce­su two­rze­nia opro­gra­mo­wa­nia to never ending sto­ry” :). Ścierają się z sobą poglą­dy o tym czy to co spon­sor pro­jek­tu chce jest dobre czy złe, kom­plet­ne czy nie­kom­plet­ne itp.. a tak na praw­dę moim zda­niem pro­blem tkwi w tym, czy się to (two­rzyć opro­gra­mo­wa­nie) potra­fi robić czy nie. Podobnie jest każ­dej innej dziedzinie.

Dzisiaj co nie­co o for­ma­li­zmach i o tym, że od daw­na wia­do­mo jak wytwa­rzać dobrej jako­ści opro­gra­mo­wa­nie” tyl­ko to wyma­ga pew­nej wie­dzy i umie­jęt­no­ści. Nie nale­ży się bać, będę pisał do cze­go te for­ma­li­zmy słu­żą bez wni­ka­nia w nie, więc nie tyl­ko zawo­dow­cy z bran­ży” sa adre­sa­ta­mi tego tek­stu :). Na począ­tek jed­nak mała uwa­ga może raczej przy­po­mnie­nie dla upo­rząd­ko­wa­nia wie­dzy. Każdy pro­jekt biz­ne­so­wy, a wdro­że­nie opro­gra­mo­wa­nia wspo­ma­ga­ją­ce­go zarzą­dza­nie do takich nale­ży, to:

  1. posta­wie­nie problemu.
  2. zro­zu­mie­nie przy­czy­ny problemu,
  3. opi­sa­nie spo­so­bu roz­wią­za­nia problemu,
  4. zapro­jek­to­wa­nie narzę­dzia wspo­ma­ga­ją­ce­go roz­wią­za­nie problemu.

I dalej. Dobre opro­gra­mo­wa­nie to takie, któ­re poma­ga w roz­wią­za­niu pro­ble­mu lub, cza­sa­mi, nawet go roz­wią­zu­je. Problem pole­ga na tym, że umie­jęt­ność two­rze­nia roz­wią­zań tech­nicz­nych nie ozna­cza umie­jęt­no­ści roz­wią­zy­wa­nia pro­ble­mów biz­ne­so­wych. Dlatego dobry pro­gra­mi­sta nie ozna­cza powsta­nia dobre­go opro­gra­mo­wa­nia. Ktoś wcze­śniej musi ziden­ty­fi­ko­wać pro­blem (cel) i opra­co­wać roz­wią­za­nie. Powyższe czte­ry punk­ty to eta­py pro­jek­tu. Jeżeli to pro­jekt pro­gra­mi­stycz­ny to mamy odpowiednio:

  1. iden­ty­fi­ka­cja celu projektu,
  2. ana­li­za biznesowa,
  3. spe­cy­fi­ko­wa­nie wymagań,
  4. wyko­na­nie i implementacja.

Ścierają się zwo­len­ni­cy tezy, że wszyst­ko jest pro­stym rze­mio­słem, któ­re każ­dy może wyko­nać (w koń­cu podob­no nie świę­ci garn­ki lepią) z tezą, że ludzie dzie­lą się jed­nak na rze­mieśl­ni­ków i arty­stów. Zwolenników dru­giej tezy pozdra­wiam, tych pierw­szych zaś pytam: dla­cze­go ludzie tak wybrzy­dza­ją szu­ka­jąc np. foto­gra­fa na swój ślub zamiast dać apa­rat szwa­gro­wi, niech pstryka?

Jakiej wie­dzy i jakiej umie­jęt­no­ści tu potrze­ba i bra­ku­je jed­no­cze­śnie? Zacytuję jeden z poprzed­nich arty­ku­łów (to wynik ankiet):

Przyznajemy jed­nak, że dia­gra­my naj­le­piej wyja­śnia­ją­ce (uzu­peł­nia­ją­ce) wąt­pli­wo­ści zwią­za­ne z wyma­ga­nia­mi to mode­le pro­ce­sów i pro­to­ty­py, jed­nak nie sto­su­je­my ich. (Raport: Zarządzanie wyma­ga­nia­mi 2011)

Powyższe czte­ry eta­py omó­wię dalej, w kon­tek­ście pro­jek­tów wytwa­rza­nia oprogramowania.

Proces tworzenia oprogramowania czyli gdzie to modelowanie

opis techniczny ok(BIZNES ten roz­dział moż­na pominąć)

W 1989 roku (tak!) powsta­ło OMG (Object Management Group). Jest to kon­sor­cjum (obec­nie ok. 700 człon­ków), któ­re­go celem jest pro­mo­wa­nie i stan­da­ry­za­cja obiek­to­wych metod w inży­nie­rii opro­gra­mo­wa­nia (nie tyl­ko w kodowaniu/programowaniu o czym wie­lu zapo­mi­na!). Między inny­mi wzię­ło pod swo­je skrzy­dła nota­cję BPMN (mode­lo­wa­nie pro­ce­sów biz­ne­so­wych) i UML (mode­lo­wa­nie sys­te­mów w para­dyg­ma­cie obiek­to­wym). Ale nie tyl­ko nota­cja­mi się OMG zaj­mu­je. Jednym ze stan­dar­dów (i dobrych prak­tyk) pro­mo­wa­nych przez OMG jest pro­ces MDA (Model Driven Architecture), jest to pro­ces two­rze­nia opro­gra­mo­wa­nia dla biz­ne­su, opar­ty na mode­lo­wa­niu. Nie nale­ży tu mylić pro­ce­su two­rze­nia opro­gra­mo­wa­nia z pro­jek­tem two­rze­nia opro­gra­mo­wa­nia (to róż­ne rzeczy).

Jak wygląda MDA?

MDA Development sequence

Cały pro­ces two­rze­nia opro­gra­mo­wa­nia ma tu czte­ry fazy:

  1. opi­sa­nie tego cze­mu będzie to słu­ży­ło (model CIM, model orga­ni­za­cji, dla któ­rej powsta­nie opro­gra­mo­wa­nie, na tym mode­lu wska­zy­wa­ny jest zakres pro­jek­tu i nie ma na tym mode­lu żad­nej technologii!),
  2. opi­sa­nie co i jak to opro­gra­mo­wa­nie będzie robi­ło (model PIM, model logi­ki biz­ne­so­wej, któ­ra zosta­nie – to jest cel pro­jek­tu – odtwo­rzo­na w tym oprogramowaniu),
  3. opi­sa­nie tego jak wyko­nać to opro­gra­mo­wa­nie (model PSM, model kodu, któ­ry powsta­nie, tu wzo­rzec MVC: zakła­da­my, że war­stwy View i Controller już ist­nie­ją tu model PIM to Model),
  4. wytwo­rze­nie kodu pro­gra­mu (tu mie­ści się tak­że pla­no­wa­nie uży­cia goto­wych, dostęp­nych na ryn­ku kom­po­nen­tów, tak zwa­nych [[COTS ang. com­mer­cial off the shelf]], uży­cie frameworka/szkieletu MVC to tak­że COTS))

(MDA suge­ru­je auto­ma­ty­za­cje tego pro­ce­su ale to jest raczej jesz­cze przed nami)

Praktyka poka­zu­je, że naj­więk­szym ryzy­kiem jest przej­ście z CIM do PIM bo nie ist­nie­je jed­no­znacz­ne mapo­wa­nie CIM-PIM (zamia­na wie­dzy biz­ne­so­wej na pro­gra­mi­stycz­ną). I tu z pomo­cą przy­cho­dzi prak­ty­ka (zbiór zale­ceń, wzor­ce itp.) DDD, któ­ra mówi: sko­ro jest pro­blem z mapo­wa­niem to mode­luj­my tak, by mapo­wa­nie nie było potrzeb­ne! Modelujmy (ana­li­zuj­my) tak, by rola pro­jek­tan­ta opro­gra­mo­wa­nia (Analityk Systemowy) sta­ła się zbęd­na. To się da zro­bić pod warun­kiem, że Analityk Biznesowy poza pro­ce­sa­mi, zacznie mode­lo­wać tak­że opro­gra­mo­wa­nie” (w zasa­dzie przej­mu­je tu, peł­ni tak­że, rolę Analityka Systemowego). Jak? Po swo­je­mu! Swoim języ­kiem! Ale jak to potem prze­ka­zać pro­gra­mi­stom? Należy model biz­ne­su wyko­nać meto­da­mi obiek­to­wy­mi (DDD i ubi­qu­ito­us lan­gu­age)! Wykonać ten model tak, by był nie­ja­ko symu­la­cją bzi­ne­su (tak, pra­wie jak gra kom­pu­te­ro­wa). W koń­cu po to tak na praw­dę powsta­ły obiek­to­we języ­ki pro­gra­mo­wa­nia (a nie po to by kla­sa­mi opa­ko­wać kod;)).

Gdyby to się uda­ło to:

  1. Analityk Biznesowy sta­je się zara­zem pro­jek­tan­tem czę­ści opro­gra­mo­wa­nia opi­su­ją­cej logi­kę jaką ma ono realizować.
  2. Zbędne sta­je mapo­wa­nie PIM-PSM bo model PIM sta­je się czę­ścią PSM (two­rze­nie mode­lu PSM to tyl­ko opa­ko­wa­nie” logi­ki biz­ne­so­wej PIM ele­men­ta­mi ste­ro­wa­nia, bez­pie­czeń­stwa, inter­fej­sa­mi itp., przy­po­mi­nam, że to ponad 90% kodu!.
  3. Architektowi sys­te­mu w zasa­dzie pozo­sta­je opra­co­wać kom­plet­ny model PSM (owe bra­ku­ją­ce ponad 90% kodu!), zapla­no­wać jego imple­men­ta­cję i wyko­nać ją.

Tak więc DDD to spo­sób na wyeli­mi­no­wa­nie z pro­ce­su wytwa­rza­nia opro­gra­mo­wa­nia naj­bar­dziej ryzy­kow­ne­go eta­pu: prze­ło­że­nia wie­dzy biz­ne­so­wej (pro­ce­so­wej) na sys­te­mo­wą (obiek­to­wa). Niestety DDD jest czę­sto trak­to­wa­ne jako kolej­ny spo­sób pro­gra­mo­wa­nia” co postrze­gam jako poważ­ny błąd, i nie tyl­ko ja:

Domain Driven Design is an appro­ach that descri­bes the appro­ach to desi­gning the busi­ness lay­er. It doesn?t say much abo­ut the other lay­ers of an appli­ca­tion. The main advi­ce is to base the doma­in model on the lan­gu­age your custo­mer uses: the ubi­qu­ito­us lan­gu­age. This means that you sho­uld not have a method ?setAddress? on a Customer instan­ce if your custo­mer talks abo­ut ?regi­ster a relo­ca­tion?. In fact, the last appli­ca­tion I deve­lo­ped har­dly con­ta­ined any set­ter on any doma­in instan­ce at all. (źr. The misun­der­stan­ding of Domain Driven Design ? Dutchworks Blog / Dutchworks: Enterprise Java, Open Source, softwa­re solu­tions, Amsterdam.)

Tak więc jest meto­da. Praktyka poka­zu­je, że spraw­dza się. Praktyka poka­zu­je tak­że, że nie­ste­ty nie jest to łatwe (mode­lo­wa­nie biz­ne­su meto­da­mi obiek­to­wy­mi, tu nie­ste­ty nie da się powie­dzieć, że nie świę­ci garn­ki lepią”) dla­te­go powsta­ły pew­ne zale­ce­nia i wzor­ce pro­jek­to­we. Należy je zro­zu­mieć, nauczyć się sto­so­wać i sto­so­wać, co i tak nie zastą­pi pro­jek­to­wa­nia” czy­li twór­cze­go pier­wiast­ka w tym pro­ce­sie. Dokładnie tak samo jak nie da się auto­ma­tycz­nie two­rzyć kodu pro­gra­mu, do tego potrzeb­ni są (dobrzy) programiści.

Z prze­ko­rą powiem też, że nie wiem jak zwin­ność metod pro­gra­mi­stycz­nych ([[Agile Manifesto]]) mia­ła by ten pro­ces uzdro­wić i uczy­nić lep­szym (nadal uwa­żam, że brak doku­men­ta­cji, w tym opi­sa­nych mode­li, raczej psu­je pro­jek­ty co potwier­dza prak­ty­ka: ponad 70% pro­jek­tów to wpad­ki i jed­nym z głów­nych powo­dów był brak doku­men­tów opi­su­ją­cych biz­nes i pro­to­ty­py opro­gra­mo­wa­nia).

Polecana lite­ra­tu­ra (nie­ste­ty w j.ang.):

Na zakończenie

Podsumowując moż­na by powie­dzieć, że eta­py two­rze­nia opro­gra­mo­wa­nia to:

  1. Analiza biz­ne­so­wa, któ­rej pro­duk­tem są: model orga­ni­za­cji (model biz­ne­so­wy) oraz opis tego co ma powstać (opis, wyma­ga­nia na opro­gra­mo­wa­nie). Całość (sfor­ma­li­zo­wa­ne mode­le) pozwa­la na prze­te­sto­wa­nie czy tak okre­ślo­ne wyma­ga­nia speł­nia­ją potrze­by biznesu.
  2. Wytworzenie opro­gra­mo­wa­nia pole­ga­ją­ce na: opra­co­wa­niu szcze­gó­łów archi­tek­tu­ry, roz­wią­za­niu pro­ble­mów tech­nicz­nych (wyma­ga­nia nie­funk­cjo­nal­ne), kodo­wa­niu oraz dostar­cze­niu i wdrożeniu.

Powyższe, tak udo­ku­men­to­wa­ny pro­jekt, pozwa­la tak­że osią­gnąć dodat­ko­wą korzyść: wie­dza orga­ni­za­cji” tkwi w wyko­na­nym dokład­nie opi­sie roz­wią­za­nia (mode­lu PIM) i deve­lo­per (wyko­naw­ca, dostaw­ca opro­gra­mo­wa­nia) nie może prze­jąć tej wie­dzy (pro­jek­tu) bez zgo­dy auto­ra, Analityka Biznesowego i spon­so­ra pro­jek­tu (pra­wo autor­skie, na wszel­ki wypa­dek nie zle­caj jed­nak deve­lo­pe­ro­wi pro­jek­to­wa­nia). Jest to sytu­acja ana­lo­gicz­na do budo­wy domu i jego pro­jek­tu: murarz nie może prze­jac pro­jek­tu bo nie jest jego auto­rem co nie prze­szka­dza mu do zrealizować.

Dodam po raz kolej­ny: nie ma tu żad­ne­go zna­cze­nia to czy jest to pro­jekt dedy­ko­wa­ny w cało­ści czy dostar­cze­nie goto­we­go opro­gra­mo­wa­nia z ele­men­ta­mi dopa­so­wa­nia (kasto­mi­za­cja). Gotowe opro­gra­mo­wa­nie (w wie­lu pro­jek­tach biz­ne­so­wych i tak dopa­so­wy­wa­ne) to po pro­stu goto­we kom­po­nen­ty oraz nowe, dedy­ko­wa­ne modu­ły. Dlatego piszę: nie kasto­sto­mi­zuj”, opisz to co potrze­bu­jesz, sprawdź czy coś goto­we­go na ryn­ku tu pasu­je a jeśli tak to kup to, wyko­naj bra­ku­ją­cą resztę.