Mga klasikal na modelo ng proseso ng pagbuo ng software. Pangkalahatang-ideya ng proseso ng pagbuo ng software


Proseso ng software development (eng. software development process, software process) - ang istruktura ayon sa kung saan binuo ang software development.
Mayroong ilang mga modelo ng naturang proseso (mga pamamaraan ng pag-unlad ng software), ang bawat isa ay naglalarawan ng sarili nitong diskarte, sa anyo ng mga gawain at / o mga aktibidad na nagaganap sa panahon ng proseso.

Mayroong mga sumusunod na pangunahing modelo ng proseso o mga pamamaraan ng pagbuo ng software:

  • Pag-unlad ng Cascading o waterfall model - isang modelo ng proseso ng pag-develop ng software, kung saan ang proseso ng pagbuo ay mukhang isang daloy, na sunud-sunod na dumadaan sa mga yugto ng pagsusuri ng mga kinakailangan, disenyo, pagpapatupad, pagsubok, pagsasama at suporta. Ang isang artikulo na inilathala ni W. W. Royce noong 1970 ay kadalasang binabanggit bilang pinagmulan ng pangalang "talon"; Nakakatuwa na si Royce mismo ay gumamit ng umuulit na modelo ng pag-unlad at hindi man lang gumamit ng katagang "talon".
  • Paulit-ulit na pag-unlad(eng. pag-ulit - pag-uulit) - ang pagsasagawa ng trabaho na kahanay sa patuloy na pagsusuri ng mga resultang nakuha at ang pagsasaayos ng mga nakaraang yugto ng trabaho. Ang proyektong may ganitong diskarte sa bawat yugto ng pag-unlad ay dumadaan sa paulit-ulit na ikot: Pagpaplano - Pagpapatupad - Pagsusuri - Pagsusuri (eng. plan-do-check-act cycle).
    Sa panahon ng pag-unlad, ang mga karagdagang kinakailangan ay palaging nakikilala o dating natukoy na mga pagbabago. Gayundin, may mga bagong paghihigpit na nauugnay sa mga pinagtibay na teknikal na solusyon. Ito ay sa umuulit na pag-unlad na sila ay maaaring isaalang-alang nang lubusan, dahil sa ganitong pamamaraan na ang pamamahala ng proyekto ay ganap na handa para sa mga pagbabago. Ang umuulit na diskarte ay ang pinakakaraniwan na ngayon dahil sa mga halatang pakinabang nito, at iba't ibang variation nito ang ginagamit sa DPGroup.

    Mga umuulit na pamamaraan ng pagbuo ng software na ginagamit ng DPGroup:

    • Rational Pinag-isang Proseso(RUP) ay isang software development methodology na nilikha ng Rational Software.

      Ang RUP ay batay sa mga sumusunod na pangunahing prinsipyo:

      • Maagang pagkilala at tuluy-tuloy (hanggang sa katapusan ng proyekto) pag-aalis ng mga pangunahing panganib.
      • Konsentrasyon sa pagtugon sa mga kinakailangan ng mga customer para sa executable na programa (pagsusuri at pagbuo ng isang modelo ng mga nauna).
      • Asahan ang mga pagbabago sa mga kinakailangan, mga desisyon sa disenyo, at pagpapatupad sa panahon ng pagbuo.
      • Isang bahagi na arkitektura na ipinatupad at nasubok sa mga unang yugto ng isang proyekto.
      • Patuloy na katiyakan sa kalidad sa lahat ng yugto ng pag-unlad ng proyekto (produkto).
      • Magtrabaho sa proyekto sa isang malapit na koponan, kung saan ang mga arkitekto ay gumaganap ng isang mahalagang papel.
    • Maliksi na pamamaraan ng pag-unlad(Eng. Agile software development).

      Karamihan sa mga maliksi na pamamaraan ay naglalayong bawasan ang panganib sa pamamagitan ng pagbabawas ng pag-unlad sa isang serye ng mga maikling siklo na tinatawag mga pag-ulit na karaniwang tumatagal ng isa hanggang dalawang linggo. Ang bawat pag-ulit mismo ay mukhang isang miniature na proyekto ng software, at kasama ang lahat ng mga gawaing kinakailangan upang makagawa ng isang mini-growth sa functionality: pagpaplano, pagsusuri ng mga kinakailangan, disenyo, coding, pagsubok, at dokumentasyon. Habang ang isang solong pag-ulit ay karaniwang hindi sapat upang maglabas ng isang bagong bersyon ng isang produkto, ipinapalagay na ang isang maliksi na proyekto ng software ay handa nang ilabas sa dulo ng bawat pag-ulit. Sa pagtatapos ng bawat pag-ulit, muling sinusuri ng koponan ang mga priyoridad sa pag-unlad.

      Binibigyang-diin ng mga maliksi na pamamaraan ang pakikipag-usap nang harapan. Karamihan sa mga maliksi na koponan ay matatagpuan sa parehong opisina, kung minsan ay tinatawag na bullpen. Sa pinakamababa, kasama rin dito ang "mga customer" (mga customer na tumutukoy sa produkto, gaya ng mga tagapamahala ng produkto, analyst ng negosyo, o mga customer). Ang opisina ay maaari ding magsama ng mga tagasubok, mga taga-disenyo ng interface, mga teknikal na manunulat, at mga tagapamahala. Ang isa sa mga pinakakilala at advanced na maliksi na pamamaraan ay ang pamamaraan.

Higit sa 50 taon ng pag-unlad ng software engineering, isang malaking bilang ng mga modelo ng pagbuo ng software. Ito ay kagiliw-giliw na gumuhit ng isang pagkakatulad sa pagitan ng kasaysayan ng pagbuo ng mga pamamaraan na ginagamit sa mga awtomatikong sistema ng kontrol para sa sasakyang panghimpapawid at ang ebolusyon ng mga diskarte sa pamamahala ng mga proyekto ng software.

"Tingnan natin kung paano ito mangyayari". Buksan ang sistema ng kontrol ng loop. Buong tiwala sa mga teknikal na pinuno. Ang mga kinatawan ng negosyo ay halos hindi nakikilahok sa proyekto. Ang pagpaplano, kung mayroon man, ay impormal at berbal. Ang oras at badyet ay karaniwang hindi kinokontrol. Analogy: ballistic flight na walang feedback. Posible, ngunit malapit at hindi tumpak.

"Talon" o modelo ng talon. Mahigpit na kontrol ng feedback. Pagkalkula ng reference trajectory (project plan), pagsukat ng deviations, pagwawasto at pagbabalik sa reference trajectory. Mas mahusay, ngunit hindi mahusay.

"Flexible na pamamahala". Pagkalkula ng reference trajectory, pagsukat ng deviations, pagkalkula ng isang bagong papasok na trajectory at pagwawasto upang maabot ito. "Ang mga plano ay wala, ang pagpaplano ay ang lahat" (Eisenhower, Dwight David)

"Paraan ng madalas na paghahatid". Pag-uwi. Pagkalkula ng reference na tilapon, pagsukat ng mga paglihis, pagtutukoy ng target, pagkalkula ng isang bagong papasok na tilapon at pagwawasto upang maabot ito.

Ang mga klasikal na paraan ng kontrol ay huminto sa paggana sa mga kaso kung saan ang istraktura at mga katangian ng pinamamahalaang bagay ay hindi alam sa amin at / o nagbabago sa paglipas ng panahon. Ang mga pamamaraang ito ay hindi rin makakatulong kung ang mga kasalukuyang katangian ng bagay ay hindi pinapayagan itong lumipat sa mga kinakailangang katangian. Halimbawa, ang isang sasakyang panghimpapawid ay hindi maaaring bumuo ng kinakailangang acceleration o nawasak ng isang hindi katanggap-tanggap na labis na karga. Katulad nito, kung ang pangkat ng proyekto ay hindi makapagbibigay ng kinakailangang kahusayan at samakatuwid ay patuloy na gumagana sa emergency mode, kung gayon hindi ito humahantong sa pagtaas ng produktibo, ngunit sa pag-alis ng mga propesyonal mula sa proyekto.

Kapag ang istraktura at mga katangian ng pinamamahalaang bagay ay hindi alam sa amin, kailangan naming gamitin adaptive control, na, bilang karagdagan sa mga direktang aksyon na kontrol, ay naglalayong pag-aralan at baguhin ang mga katangian ng kinokontrol na bagay. Ang pagpapatuloy ng pagkakatulad sa kontrol ng sasakyang panghimpapawid, ito ay ang pagkalkula ng reference na tilapon, ang pagsukat ng mga deviations, ang pagpipino ng target, ang pagpipino ng control object, ang adaptasyon (kinakailangang pagbabago) ng control object, ang pagkalkula ng isang bagong bumabagsak na trajectory at ang pagwawasto upang maabot ito.

Upang maunawaan ang istraktura at mga katangian ng isang bagay at maimpluwensyahan ito upang dalhin sila sa nais na estado, ang proyekto ay dapat magkaroon ng karagdagang feedback loop - ang adaptation loop.

Ito ay kilala na ang pagganap ng iba't ibang mga programmer ay maaaring mag-iba ng dose-dosenang beses. Pinatutunayan ko na ang pagganap ng parehong programmer ay maaari ding mag-iba ng dose-dosenang beses. Ilagay ang pinakamahusay na mananakbo sa mundo sa isang sako at siya ay magiging 10 beses na mas masahol pa. Pilitin ang pinakamahusay na programmer na gawin ang "Sisyphean labor": upang makabuo ng dokumentasyon (na, bilang isang patakaran, walang nagbabasa) para sa kapakanan ng "Methodology" (lalo na may kapital na M), at ang kanyang pagiging produktibo ay bababa ng 10 beses.

Samakatuwid, bilang karagdagan sa mga purong gawain sa pangangasiwa, ang pinuno, kung hinahangad niyang makuha ang pinakamataas na produktibidad ng pangkat na nagtatrabaho, ay dapat magdirekta ng patuloy na pagsisikap na pag-aralan at baguhin ang layunin ng pamamahala: ang mga tao at ang kanilang mga pakikipag-ugnayan.

Mga modelo(o, gaya ng gusto nilang sabihin, metodolohiya) ang mga proseso ng pagbuo ng software ay karaniwang inuri ayon sa "timbang" - ang bilang ng mga pormal na proseso (karamihan sa mga proseso o ang mga pangunahing lamang) at ang detalye ng kanilang regulasyon. Ang mas maraming mga proseso ay dokumentado, mas detalyado ang mga ito ay inilarawan, mas malaki ang "bigat" ng modelo.

Ang pinakakaraniwang modernong mga modelo ng proseso ng pagbuo ng software ay ipinapakita sa fig. 2.3.

kanin. 2.3. Iba't ibang Modelo ng Proseso ng Pag-develop ng Software

Mga GOST

GOST 19 "Pinag-isang sistema ng dokumentasyon ng software" at GOST 34 "Mga Pamantayan para sa pagbuo at pagpapanatili ng mga automated system" ay nakatuon sa isang pare-parehong diskarte sa pagbuo ng software. Ang pag-unlad alinsunod sa mga pamantayang ito ay isinasagawa sa mga yugto, ang bawat isa ay nagsasangkot ng pagganap ng mahigpit na tinukoy na trabaho, at nagtatapos sa pagpapalabas ng isang medyo malaking bilang ng napaka-pormal at malawak na mga dokumento. Kaya, ang mahigpit na pagsunod sa mga bisitang ito ay hindi lamang humahantong sa isang diskarte sa talon, ngunit nangangailangan din ng napakataas na antas ng pormalisasyon ng pag-unlad. Batay sa mga pamantayang ito, ang mga sistema ng software ay binuo para sa mga order ng gobyerno sa Russia.

Noong kalagitnaan ng dekada 1980, pinag-isipang mabuti ng Kagawaran ng Depensa ng US kung paano pumili ng mga developer ng software para sa malalaking proyekto ng software. Inatasan ng militar, binuo ng Software Engineering Institute, bahagi ng Carnegie Mellon University, ang SW-CMM, Capability Maturity Model for Software, bilang sanggunian na modelo para sa mga organisasyon ng software development.

Tinutukoy ng modelong ito ang limang antas ng maturity ng proseso ng pagbuo ng software.

1) Initial - ang proseso ng pagbuo ay magulo. Ilan sa mga proseso ang tinukoy, at ang tagumpay ng mga proyekto ay nakasalalay sa mga indibidwal na aktor.

2) Nauulit - ang mga pangunahing proseso ng pamamahala ng proyekto ay itinatag: mga gastos sa pagsubaybay, mga deadline at pagpapaandar. Ang ilan sa mga prosesong kailangan upang gayahin ang mga nakaraang tagumpay sa mga katulad na proyekto ay na-streamline.

3) Tinukoy - ang mga proseso ng pagbuo ng software at pamamahala ng proyekto ay inilarawan at ipinatupad sa isang solong sistema ng mga proseso ng kumpanya. Ginagamit ng lahat ng mga proyekto ang karaniwang proseso ng pagbuo ng software at suporta ng organisasyon, na iniayon sa partikular na proyekto.

4) Pinamamahalaan - ang detalyadong dami ng data ay nakolekta sa paggana ng mga proseso ng pag-unlad at ang kalidad ng panghuling produkto. Sinusuri ang kahalagahan at dinamika ng mga datos na ito.

5) Na-optimize - ang patuloy na pagpapabuti ng mga proseso ay batay sa dami ng data sa mga proseso at sa pagsubok na pagpapatupad ng mga bagong ideya at teknolohiya.

Ang kumpletong dokumentasyon ng SW-CMM ay humigit-kumulang 500 mga pahina ang haba at tumutukoy sa isang hanay ng 312 mga kinakailangan na dapat matugunan ng isang organisasyon kung plano nitong maging kwalipikado para sa pamantayang ito sa antas ng maturity 5.

Ang Rational Unified Process (RUP) ay binuo ni Philippe Kruchten, Ivar Jacobson, at iba pa sa Rational Software bilang pandagdag sa UML modelling language. Ang modelo ng RUP ay naglalarawan ng abstract na pangkalahatang proseso kung saan ang isang organisasyon o pangkat ng proyekto ay dapat lumikha ng isang partikular, espesyal na proseso na nakatuon sa mga pangangailangan nito. Ang tampok na ito ng RUP ang nagiging sanhi ng pangunahing kritisismo - dahil maaari itong maging anuman, hindi ito maaaring ituring na anumang tiyak. Bilang resulta ng pangkalahatang disenyong ito, maaaring gamitin ang RUP bilang isang pundasyon para sa pinaka-tradisyunal na istilo ng pag-unlad ng talon, at bilang isang maliksi na proseso.

Ang Microsoft Solutions Framework (MSF) ay isang flexible at medyo magaan na modelo na binuo sa paligid ng umuulit na pag-unlad. Ang isang kaakit-akit na tampok ng MSF ay ang matinding pagtuon sa pagbuo ng isang mahusay at hindi burukratikong pangkat ng proyekto. Upang makamit ang layuning ito, nag-aalok ang MSF ng hindi karaniwang mga diskarte sa istruktura ng organisasyon, pamamahagi ng responsibilidad at mga prinsipyo ng pakikipag-ugnayan sa loob ng koponan.

Isa sa mga pinakabagong development ng Institute of Software Engineering Personal Software Process / Team Software Process. Tinutukoy ng Proseso ng Personal na Software ang mga kinakailangan sa kakayahan ng developer. Ayon sa modelong ito, ang bawat programmer ay dapat na:

isaalang-alang ang oras na ginugol sa proyekto;

isaalang-alang ang nahanap na mga depekto;

uriin ang mga uri ng mga depekto;

tantiyahin ang laki ng gawain;

· upang magsagawa ng isang sistematikong diskarte sa paglalarawan ng mga resulta ng pagsubok;

magplano ng mga gawain sa programa;

Ipamahagi ang mga ito ayon sa oras at gumuhit ng iskedyul ng trabaho.

magsagawa ng mga indibidwal na pagsusuri sa disenyo at arkitektura;

magsagawa ng mga indibidwal na pagsusuri sa code;

Magsagawa ng regression testing.

Ang Proseso ng Software ng Team ay umaasa sa mga self-managed na team ng 3-20 developer. Ang mga koponan ay dapat:

itakda ang iyong sariling mga layunin;

· gumawa ng sarili mong proseso at mga plano;

trabaho sa pagsubaybay;

Panatilihin ang motibasyon at pinakamataas na pagganap.

Ang pare-parehong aplikasyon ng modelo ng PSP / TSP ay nagpapahintulot sa iyo na gawing pamantayan sa organisasyon ang ikalimang antas ng CMM.

Ang pangunahing ideya sa likod ng lahat ng maliksi na modelo ay ang proseso ng pagbuo ng software ay dapat na adaptive. Ipinapahayag nila na ang kanilang pinakamataas na halaga ay nakatuon sa mga tao at sa kanilang pakikipag-ugnayan, at hindi sa mga proseso at paraan. Sa katunayan, ang tinatawag na mga agile methodologies ay hindi mga methodologies, ngunit isang set ng mga kasanayan na maaaring (o maaaring hindi) payagan ang epektibong software development batay sa pag-ulit, incrementality, pamamahala sa sarili ng koponan, at kakayahang umangkop sa proseso.

Proseso ng Pagpili ng Modelo

Ang mabigat at magaan na mga modelo ng proseso ng produksyon ay may kanilang mga pakinabang at disadvantages, na ipinakita sa Talahanayan. 2.1.

Ang mga sumusubok na sundin ang mga modelong inilarawan sa mga aklat, nang hindi sinusuri ang kanilang pagiging angkop sa isang partikular na sitwasyon, mga indikasyon at kontraindikasyon, ay inihalintulad sa mga tagasunod ng kulto ng Cargo - ang relihiyon ng mga sumasamba sa sasakyang panghimpapawid. Sa Melanesia, naniniwala sila na ang mga kalakal sa Kanluran (cargo, English cargo) ay nilikha ng mga espiritu ng mga ninuno at nilayon para sa mga taong Melanesian.

Talahanayan 2.1

Mga kalamangan at kahinaan ng mabibigat at magaan na mga modelo ng mga proseso ng pagbuo ng software

Timbang ng modelo pros Mga minus
Mabigat Ang mga proseso ay idinisenyo para sa average na kwalipikasyon ng mga gumaganap. Mahusay na espesyalisasyon ng mga performer. Nasa ibaba ang mga kinakailangan sa katatagan ng koponan. Walang mga paghihigpit sa dami at pagiging kumplikado ng mga kasalukuyang proyekto. Nangangailangan ng makabuluhang overhead ng pamamahala. Mas mahabang yugto ng pagsusuri at disenyo. Mas pormal na komunikasyon.
Mga baga Mas kaunting overhead na nauugnay sa pamamahala ng proyekto, mga panganib, pagbabago, mga pagsasaayos. Pinasimple na mga yugto ng pagsusuri at disenyo, ang pangunahing pokus sa pagbuo ng pag-andar, ang kumbinasyon ng mga tungkulin. impormal na komunikasyon. Ang kahusayan ay lubos na nakadepende sa mga indibidwal na kakayahan, na nangangailangan ng isang mas kwalipikado, maraming nalalaman at matatag na koponan. Limitado ang saklaw at pagiging kumplikado ng mga kasalukuyang proyekto.

Ito ay pinaniniwalaan na ang mga puting tao ay hindi tapat na nakakuha ng kontrol sa mga bagay na ito. Ang pinakasikat na mga kulto ng kargamento ay gumagawa ng mga replika ng mga runway, paliparan, at mga radio tower mula sa mga niyog at dayami. Binubuo sila ng mga miyembro ng kulto sa paniniwalang ang mga istrukturang ito ay makakaakit ng mga sasakyang pang-transportasyon (tinuturing na mga mensahero ng mga espiritu) na puno ng mga kargamento (kargamento). Ang mga mananampalataya ay regular na nagsasagawa ng mga pagsasanay sa militar ("drill") at ilang uri ng mga martsa ng militar, gamit ang mga sanga sa halip na mga riple at pagguhit sa katawan ng order at ang inskripsyon na "USA". Ang lahat ng ito upang ang mga eroplano ay bumaba muli mula sa langit at magkakaroon ng higit pa sa mga item na ito.

Si Alistair Cowburn, isa sa mga may-akda ng Agile Manifesto, ay sinuri ang iba't ibang mga proyekto ng software na ipinatupad sa iba't ibang mga modelo mula sa ganap na magaan at "maliksi" hanggang sa mabigat (CMM-5) sa nakalipas na 20 taon. Wala siyang nakitang ugnayan sa pagitan ng tagumpay o pagkabigo ng mga proyekto at ang mga modelo ng proseso ng pag-unlad na ginamit sa mga proyekto. Mula dito, napagpasyahan niya na ang pagiging epektibo ng pagbuo ng software ay hindi nakasalalay sa modelo ng proseso, at din na:

Ang bawat proyekto ay dapat magkaroon ng sarili nitong modelo ng proseso ng pag-unlad.

Ang bawat modelo ay may sariling oras.

Nangangahulugan ito na walang iisang tamang proseso ng pagbuo ng software, sa bawat bagong proyekto ang proseso ay dapat tukuyin muli sa bawat oras, depende sa proyekto, produkto at tauhan, alinsunod sa "Batas ng 4 Ps" (Fig. 2.4). Ang ganap na magkakaibang proseso ay dapat ilapat sa mga proyektong may 5 tao at mga proyektong may 500 tao. Kung ang produkto ng proyekto ay kritikal na software, halimbawa, isang nuclear power plant control system, kung gayon ang proseso ng pag-unlad ay dapat na ibang-iba mula sa pagbuo ng, halimbawa, ang site na "otdokhni.ru". At, sa wakas, ang proseso ng pag-unlad ay dapat na organisado nang iba sa isang pangkat ng mga mag-aaral kahapon at sa isang pangkat ng mga mahusay na propesyonal.

Ang pangkat na nagsimula sa proyekto ay hindi nananatiling hindi nagbabago, dumadaan ito sa ilang mga yugto ng pagbuo at, bilang panuntunan, lumalaki nang malaki habang umuunlad ang proyekto. Samakatuwid, ang proseso ay dapat na patuloy na umangkop sa mga pagbabagong ito. Ang pangunahing prinsipyo: hindi mga tao ang dapat itayo sa ilalim ng napiling modelo ng proseso, ngunit ang modelo ng proseso ay dapat iakma sa isang partikular na pangkat upang matiyak ang pinakamataas na kahusayan nito.

kanin. 2.4. "Batas ng 4 Ps". Ang proseso sa proyekto ay dapat tukuyin depende sa proyekto, produkto at tauhan

Bago mag-alok ng pangkalahatang-ideya ng proseso ng pag-unlad na nabuo bilang resulta ng akumulasyon ng karanasan sa mga nakaraang taon, nais kong gumawa ng ilang pangkalahatang paliwanag na tila mahalaga sa akin.

Nagtatrabaho ako sa IT sa huling 15 taon, kahit na mas maaga akong nagsimula sa programming. Ang pangunahing pokus ko bilang isang arkitekto ng system ay ang pag-aayos ng software development, pagbuo ng mga konsepto at mataas na antas na arkitektura, at pangangasiwa sa pagpapatupad ng konsepto sa buong proyekto. Bilang karagdagan sa pamamahala ng software development at paglikha ng arkitektura, paminsan-minsan ay nakikitungo ako sa paglutas ng mga kumplikadong teknikal na problema at pagsulat ng ilang kritikal na seksyon ng code kung saan ang kaalaman sa wika at kapaligiran ng pag-unlad mismo ay kinakailangan, ngunit pati na rin ang kanilang panloob na organisasyon, kung minsan ay nagdudulot ng hindi kasiya-siyang mga sorpresa. .

Ang mga proyektong pinagtatrabahuhan ko ay kadalasang nauugnay sa pagbuo ng custom o investment software. Kinailangan ko ring magtrabaho kasama ang naka-embed na software at mga programang nakatuon sa pagpapalabas ng "mga hit" (na, sa pamamagitan ng magaan na kamay ni Joel Spolsky, tinawag ko ang software sa paglalaro, bagama't sa katunayan ang ilang mga proyekto sa paglalaro ay mas malapit sa mga proyekto sa pamumuhunan).

Maaaring para sa panloob o panlabas na customer ang custom na software. Ang customer ay tumatanggap ng mga eksklusibong karapatan sa binuong sistema, at ang trabaho sa pagbuo ng system ay maaaring ilipat sa ibang kontratista sa hinaharap.

Hindi tulad ng pasadyang software, ang paggawa sa software ng pamumuhunan ay isinasagawa mismo ng kontratista gamit ang pera ng isang panloob o panlabas na mamumuhunan. Bilang isang patakaran, ang mga karapatan sa system code ay nananatili sa developer, na nagpapasigla sa patuloy na trabaho upang mapabuti ang kanilang produkto at ang pare-parehong paglabas ng mga bersyon na may mas advanced na pag-andar.

Ang firmware ay kasama ng hardware at, sa halos pagsasalita, hindi mapapanatili, dahil ang pag-recall ng isang batch ng mga device ng isang manufacturer ay napakamahal at samakatuwid ay katangi-tangi.

Ang pagbuo ng mga hit ng laro ay halos hindi naglalaman ng kasamang yugto. Bilang karagdagan, ang mga gumagamit ng mga programa sa paglalaro, kahit na nahaharap sa isang error sa laro, napakabihirang mag-download ng na-update na bersyon. Samakatuwid, ang pagbuo ng laro, bilang panuntunan, ay may sariling ekonomiya at sariling proseso ng pag-unlad.

Ang aming mga customer ay mga awtoridad, malalaking estado at komersyal na organisasyon at, siyempre, ang aming sarili. Samakatuwid, sa mga tuntunin ng custom na software, kadalasan ay may ilang pagkakaiba sa aming proseso sa pagitan ng pagbuo ng mga produkto para sa panloob at panlabas na mga customer. Ituturo ko ang ilan sa mga nuances sa artikulong ito. Ang antas ng pormalisasyon ng mga relasyon sa customer ay nag-iiba nang malaki sa bawat proyekto. Sa pangkalahatan, mas malaki ang badyet ng proyekto, mas mataas ang pormalidad. Ang customer ng estado o malalaking komersyal na negosyo (lalo na sa partisipasyon ng estado) ay karaniwang may mga paghihigpit sa pambatasan sa pagbuo, paglalagay ng isang order at pagtanggap ng mga resulta ng trabaho. Ang isa pang limitasyon ng malalaking organisasyon ay ang katotohanan na ang kanilang mga tauhan, na pinagmumulan ng mga kinakailangan at pangunahing gumagamit ng aming mga system, ay may napakalimitadong kakayahang magamit para sa mga gumaganap, kung dahil lamang sa kanilang abala. Gayunpaman, para sa maliliit na organisasyon, bumababa ang antas ng pormalisasyon at kung minsan ay napupunta sa kabaligtaran na sukdulan, kung saan walang sapat na antas ng responsibilidad ng customer sa loob ng proyekto.

Ang kabilang panig ng aming mga custom na proyekto ay ang mataas na hinihingi sa functionality. Ito ay isang mataas na load sa lahat ng mga system, at isang malaking heograpikal na pamamahagi, at mataas na mga kinakailangan para sa katumpakan ng mga kalkulasyon na may napakalimitadong time frame. Kadalasan sa aming mga proyekto ay may mga elemento ng gawaing pananaliksik at malikhaing paghahanap na naglalayong lutasin ang mga di-maliit na problema sa disenyo. Minsan kailangan nating pagsamahin ang iba't ibang mga pamamaraan sa loob ng parehong proseso ng pag-unlad, halimbawa, sa pamamagitan ng pagpasok ng isa o higit pang mga yugto ng halos purong scrum sa kabuuang proseso, malapit sa RUP, na lumilikha ng isang bagay tulad ng isang proyekto sa loob ng isang proyekto. Nagbibigay-daan ito sa amin na panatilihing mababa ang pakikipag-ugnayan ng user dahil sa likas na katangian ng proyekto, na may kakayahang umangkop sa pag-unlad sa harap ng mataas na kawalan ng katiyakan. Sa pagsasaalang-alang na ito, ito ay ang yugto ng paghahanda na mahalaga para sa akin, kung saan maaari mong piliin ang kinakailangang pamamaraan at bumuo ng isang pinakamainam na proseso ng pag-unlad. Inilarawan ko ang isa sa mga halimbawa ng paggamit ng isang agile methodology sa artikulong "Application of agile when develop a project para sa isang customer ng gobyerno" .

Bilang isang halimbawa ng pagtatrabaho sa isang proyekto sa pamumuhunan, maaari kong banggitin ang pagbuo ng isang pinagsama-samang sistema ng seguridad na ginawa namin bilang isang "naka-kahon" na produkto. Sa ilalim ng aking pamumuno, apat na bersyon ng sistemang ito ang sunud-sunod na inilabas, ang mga gumagamit nito ay iba't ibang mga komersyal at organisasyon ng gobyerno, kabilang ang Moscow City Hall, AFK Sistema, mga bangko, mga sentro ng negosyo at, siyempre, ang aming sariling opisina. Ang unang bersyon ay hindi masyadong matagumpay, ngunit mayroon kaming diskarte sa pag-unlad na nagbigay-daan sa aming matagumpay na makuha ang merkado at makaligtas sa mahihirap na panahon ng krisis. Ang karanasan sa paggawa nito at ilang iba pang mga proyekto sa pamumuhunan ay isinasaalang-alang din kapag humuhubog sa proseso ng pag-unlad na aking ginagamit.

Ang aming proseso ay isang pagkakasunud-sunod ng ilang mga yugto. Ang pag-uuri ng software na ibinigay ko ay ginawa lamang upang ipakita ang posibleng pagkakaiba sa organisasyon ng pagbuo ng iba't ibang software tool. Sa paggawa ng isang pangkalahatang-ideya ng proseso ng pag-unlad, ako ay tumutuon lamang sa mga pagkakaiba sa proseso mismo patungkol sa iba't ibang uri ng software. Gayunpaman, dapat nating tandaan na ang mga pagkakaiba sa pagitan ng mga proseso ng pag-unlad ng iba't ibang uri ng software ay mas malalim, kaya kapag pinaplano ang bawat yugto, ang mga nuances na ito ay dapat isaalang-alang.

Mahalagang maunawaan na ang paglipat ng proseso mula sa isang yugto patungo sa isa pa ay walang malinaw na hangganan. Bilang isang tuntunin, ang gawain ng susunod na yugto ay nagsisimula habang ang 80-90% ng gawain sa nakaraang yugto ay nakumpleto. Ito ay totoo lalo na para sa pagbuo ng mga kinakailangan, kapag sa ilang mga kaso ang pag-alis ng kawalan ng katiyakan ay nangyayari lamang sa pagtatapos ng proyekto. Siyempre, ang pagkakaroon ng naturang kawalan ng katiyakan sa proyekto ay isang malaking panganib at dapat na nasa ilalim ng patuloy na kontrol.

Pasadyang proseso ng pagbuo ng software

Simulan natin ang pagsusuri ng proseso ng pag-develop gamit ang pinakakaraniwang kaso - ang pagbuo ng custom na software. Ang diagram ng proseso ay ipinapakita sa Figure 1.

Larawan 1. Pasadyang proseso ng pagbuo ng software.

Ang trabaho sa proyekto ay nagsisimula sa yugto ng paghahanda. Ang layunin ng yugto ay lumikha ng isang konsepto ng hinaharap na sistema batay sa mga panukala ng customer at, batay sa konseptong ito, upang masuri ang kaugnayan at pagiging posible ng proyekto. Kung ang desisyon na akitin ang kontratista ay ginawa ng customer sa isang mapagkumpitensyang batayan, kung gayon ang paunang yugto ay talagang yugto ng paghahanda ng isang potensyal na kontratista para sa tender, kabilang ang pagbuo ng kinakailangang dokumentasyon.

Hindi na kailangang mag-aksaya ng oras at mga mapagkukunan sa isang proyekto na ang konsepto ay kinikilala bilang hindi na-claim o hindi maisasakatuparan. Dapat makumpleto ang proyektong ito. Sa ilang mga kaso, ang ilang umuulit na trabaho sa customer ay kinakailangan upang iwasto ang konsepto ng proyekto, hanggang sa maabot ang alinman sa isang katanggap-tanggap na balanse ng mga kinakailangan ng customer at mga gastos ng kontratista, o ang isang desisyon ay ginawa upang bawasan ang trabaho.

Ang isang proyekto na ang konsepto ay mukhang katanggap-tanggap para sa pagpapatupad ay pumapasok sa yugto ng pagbuo ng mga kinakailangan. Sa yugtong ito, dapat bumuo ang kontratista ng isang listahan ng lahat ng tahasan at nakatagong pangangailangan ng customer. Madalas lumalabas na ang customer ay hindi nagpasya sa kanyang mga pangangailangan, o ang kanyang mga pangangailangan ay salungat sa isa't isa, sa mga kakayahan ng customer o sa mga kakayahan ng kontratista. Ang mga layunin ng yugto ay upang matukoy ang lahat ng mga nakatagong pangangailangan, malutas ang mga salungatan ng mga kinakailangan, bumuo ng isang holistic na teknikal na solusyon at pag-aralan ang pagiging posible ng inihandang solusyon.

Minsan ang paglilinaw ng mga kinakailangan ay humahantong sa isang rebisyon ng konsepto ng proyekto. Kung, pagkatapos linawin ang lahat ng mga kinakailangan, hindi posible na makahanap ng isang katanggap-tanggap na teknikal na solusyon, ang proyekto ay kailangang pigilan o ipagpaliban ng ilang panahon sa pag-asam ng mas katanggap-tanggap na mga pangyayari.

Kung ang isang teknikal na solusyon ay natagpuan, ang tagapalabas ay nagpapatuloy sa pagbuo ng arkitektura ng hinaharap na sistema. Ang layunin ng yugto ay upang tukuyin ang pinakamataas na antas na lohikal at pisikal na arkitektura na ganap na sumasaklaw sa lahat ng mga kinakailangan ng customer. Sa pagbuo ng arkitektura, ang konsepto, mga kinakailangan at paunang teknikal na solusyon ay sinusuri at pino, na ginagawang posible upang maiwasan ang mga pinaka-mapanganib na panganib.

Matapos makumpleto ang disenyo ng arkitektura, kinakailangan na muling baguhin ang mga pangunahing parameter ng proyekto at magpasya kung magagawa ng kontratista ang proyekto. Ito ay kapaki-pakinabang sa yugto ng pag-unlad ng arkitektura upang iwanan ang hindi kailangan at masyadong masalimuot na mga pag-andar. Ang pag-optimize ng solusyon sa arkitektura ay kadalasang nakakatulong upang magkasya sa mga katanggap-tanggap na parameter ng proyekto. Sa ibang mga kaso, ang isang mas radikal na pagbawas sa pag-andar ng system na binuo ay kinakailangan. Gayunpaman, kahit na ang pagpapahinto sa proyekto sa yugtong ito, kung ito ay nangyari para sa mabubuting dahilan, ay dapat na isipin bilang isang tagumpay: ang pagpapatuloy ng trabaho sa kasong ito ay maaari lamang humantong sa mas malaking pagkalugi.

Kung may nakitang balanse, at nakagawa ng katanggap-tanggap na arkitektura ng system, maaaring magpatuloy ang kontratista sa pagpapatupad at paghahatid ng system. Ang pagpapatupad ay maaaring maganap sa isa o higit pang mga yugto. Para sa maliliit na proyekto, ang isang yugto ng paghahatid ng lahat ng paggana ng system ay maaaring maging katanggap-tanggap. Gayunpaman, mas malaki ang proyekto, mas mataas ang dependencies ng mga subsystem sa loob ng system na nilikha. Sa ilalim ng mga kundisyong ito, ang pagpapatupad ay dapat na hatiin sa ilang mga yugto upang sa dulo ng bawat yugto ang development team ay may isang produkto na handa para sa paghahatid. Kasabay nito, ang pinakamahalaga, pangunahing functionality ay dapat na mabuo sa isang maagang yugto, at ang mga add-on na gumagana sa itaas ng mga pangunahing bahagi na ito ay dapat ipatupad sa ibang pagkakataon. Sa kasong ito, ang mga pinaka-mapanganib na error para sa system ay itatama sa mga unang yugto, at ang panganib na ang pag-andar ng application ng system ay ibabatay sa isang hindi matatag na batayan ay makabuluhang mababawasan.
Pagkatapos ng paghahatid ng isang ganap na nakumpletong sistema, ang isang pasadyang proyekto ng software ay karaniwang nagpapatuloy sa beta phase. Ang layunin ng yugtong ito ay suriin ang kalidad ng binuong sistema sa totoong mga kondisyon ng operating. Bilang isang tuntunin, sa yugtong ito, ang tagapalabas, kasama ang customer, ay sumusukat sa dami ng mga sukatan na ginagawang posible upang matukoy ang kalidad ng nilikhang sistema. Una sa lahat, ang mga functional na katangian ng kalidad ay nasuri, pagkatapos ay ang mga hindi gumagana. Kung may mga pagkakaiba, itatama ng tagapalabas ang code ng system.

Ang isang ganap na na-debug at nakatutok na sistema ay inilalagay sa komersyal na operasyon. Bilang isang tuntunin, dapat na samahan ng kontratista ang sistema, kahit man lang sa panahon ng warranty. Ang mga natukoy na hindi pagkakapare-pareho ay dapat itama. Ang mga gumagamit at tauhan ng serbisyo sa customer ay dapat makatanggap ng agarang suporta sa pagpapayo.

Sa wakas, darating ang sandali kapag ang system ay hindi na umangkop sa customer sa anumang kadahilanan. Ang sistema ay nasa proseso na ng pag-decommission. Gayunpaman, para sa pasadyang software, ang yugtong ito ay hindi palaging may kaugnayan, dahil magagamit ng customer ang kanyang mga eksklusibong karapatan sa system at alisin ang kontratista mula sa karagdagang pagpapanatili at pagpapaunlad ng system bago pa man ito maging walang katuturan.

Anumang proyekto sa kalaunan ay matatapos. Ang yugto ng pagtatapos ng proyekto ay naglalayong suriin ang mga resulta, gumawa ng mga pagbabago sa proseso ng pag-develop batay sa karanasang natamo, at palitan ang kaalaman ng developer ng mga bagong epektibong solusyon at caveat, pati na rin ang mga bagong off-the-shelf na bahagi na magagamit sa mga proyekto sa hinaharap.

Nananatiling tandaan ang dalawa pang yugto ng proseso ng pag-unlad. Nangyayari na hindi pinapayagan ng mga pangyayari na ipagpatuloy ang pagpapatupad ng proyekto, ngunit ang mga resulta ng gawaing ginawa ay nagpapakita na ang proyekto ay maaaring magkaroon ng hinaharap. Napaaga ang pagsasara ng naturang proyekto. Samakatuwid, sa halip na ganap na huminto sa trabaho, maaaring pansamantalang suspindihin ng kontratista ang mga aktibidad ng proyekto, ayusin ang mga resultang nakamit. Sa sandaling pinahihintulutan ng mga pangyayari, maaaring ipagpatuloy ang proyekto sa pamamagitan ng muling pag-mothball sa imprastraktura, pagbabalik ng mga developer sa proyekto, at pagpapanumbalik ng estado ng proyekto. Mahalaga, gayunpaman, na ipagpatuloy ang trabaho mula sa punto kung saan naantala ang proyekto sa pamamagitan ng muling pag-audit sa mga resultang nakamit.

Proseso ng pagbuo ng software sa pamumuhunan

Ang proseso ng pagbuo ng software sa pamumuhunan ay iba dahil ang trabaho ay maaaring magpatuloy nang sabay-sabay sa ilang bersyon ng produkto nang sabay-sabay: habang ang unang bersyon ay pinapanatili, ang pangalawa ay ipinapatupad na, at ang mga kinakailangan ay binubuo para sa pangatlo. Ang proseso ay ipinapakita sa Figure 2.


Figure 2. Proseso ng pagbuo ng software sa pamumuhunan.

Dahil madaling makita, sa pagbuo ng software sa pamumuhunan, ang parehong mga yugto ay nagaganap na tinalakay sa itaas para sa proseso ng pagbuo ng custom na software. Ngunit ang pagkakaiba ay ang mga yugto ay hindi nalalapat sa buong produkto, ngunit sa isang hiwalay na bersyon ng produkto. Ang pagbubukod ay ang yugto ng pagwawakas ng proyekto: ang proyekto ay hindi makukumpleto habang hindi bababa sa isang bersyon ng produkto ang ginagawa.

Bigyang-pansin ang pagsisimula ng trabaho sa susunod na bersyon ng produkto. Ang sandaling ito ay darating sa sandaling makumpleto ang yugto ng paglikha ng arkitektura ng kasalukuyang bersyon ng pag-unlad. Bago ito, karaniwang tinatalakay ng mga kinakailangan at yugto ng arkitektura kung aling mga tampok ang dapat ipatupad sa kasalukuyang bersyon at kung alin ang dapat ilipat sa hinaharap. At kapag ang mga kinakailangan para sa kasalukuyang bersyon ay nabuo, nasuri at nakumpirma ng arkitektura ng system, makatuwirang isipin ang tungkol sa susunod na bersyon.

Bilang karagdagan, pagkatapos ng pag-unlad ng arkitektura, bilang panuntunan, ang mga analyst at arkitekto ng proyekto ay may ilang kalayaan sa pagkilos, dahil ang pangunahing pasanin ay nahuhulog sa mga programmer sa mga yugto ng paghahatid. Maaaring gamitin ang kalayaang ito upang maisagawa ang konsepto at mga kinakailangan para sa susunod na bersyon.

Sa prinsipyo, maaari mong ipagpaliban ang pagsisimula ng trabaho sa susunod na bersyon sa ibang araw. Halimbawa, medyo katanggap-tanggap na ipasok muna ang kasalukuyang bersyon sa eksperimental o kahit na komersyal na operasyon, at pagkatapos lamang na magsimulang magtrabaho sa susunod na bersyon. Ngunit kailangan mong tandaan na ang gayong solusyon ay hindi naaangkop sa kaso ng mataas na kumpetisyon: mauuna lang sila sa iyo at iipit ka sa merkado. Ang desisyon ay dapat gawin batay sa buong hanay ng mga pangyayari na nakakaapekto sa iyong negosyo.

Sa pagsasalita tungkol sa proseso ng pagbuo ng software sa pamumuhunan, kailangan mong maunawaan na ang paggawa sa ilang bersyon ay may ilang tahasan at nakatagong pagkakaugnay sa pagitan ng magkatulad na sangay ng proseso.

Una, ang mga pag-aayos para sa mga hindi pagkakatugma na natukoy sa isang naunang bersyon ay dapat gawin sa bersyon kung saan sila natuklasan, at sa lahat ng mga susunod na bersyon, kabilang ang mga nasa ilalim ng pag-unlad. Nalalapat ito hindi lamang sa code ng programa, kundi pati na rin sa lahat ng iba pang artifact ng proyekto: teknikal at dokumentasyon ng gumagamit, sistema ng tulong, mga pagtatantya at mga plano sa trabaho, atbp. Bukod dito, ang mga pagwawasto ay dapat gawin kaagad, dahil hindi mo mababawasan ang halaga ng mga pagwawasto, ngunit kung ang mga pagwawasto ay hindi gagawin kaagad, ang kanilang gastos sa mga susunod na yugto ay maaaring tumaas ng sampu at kahit na daan-daang beses.

Pangalawa, para sa magkatulad na trabaho sa ilang mga bersyon, kinakailangan ang isang espesyal na imprastraktura ng proyekto, kabilang ang samahan ng code at kontrol sa bersyon ng dokumentasyon, kontrol sa trabaho at hindi pagkakapare-pareho, awtomatikong pagbuo at mga kagamitan sa pagsubok, atbp. Ang paggawa sa isang bersyon ng isang produkto ay hindi dapat pahintulutan na harangan ang pagpapatupad ng mga gawain sa iba pang mga bersyon dahil lang hindi pinapayagan ng imprastraktura ng proyekto ang pagpapatakbo ng dalawang proseso ng build nang sabay para sa iba't ibang bersyon ng produkto.

Ang partikular na atensyon ay dapat bayaran sa mga test bench: dapat nilang i-deploy ang lahat ng bersyon ng produkto na inilabas nang mas maaga (kahit ang mga bersyon na sinusuportahan), at lahat ng mga bersyon na kasalukuyang binuo.

Pangatlo, ang parehong mga kalahok ay maaaring kasangkot sa gawain sa ilang mga bersyon sa parehong oras. May mataas na panganib na ang isang pangunahing tao ay maaaring mabalaho sa pagtatrabaho sa isang bersyon ng programa at payagan ang makabuluhang pag-overrun ng oras sa mga gawaing nauugnay sa isa pang bersyon.

Ikaapat, may baligtad na sitwasyon, kapag ang mga tauhan na nagtatrabaho sa isang bersyon ay walang alam tungkol sa kung anong mga desisyon ang ginawa bilang bahagi ng gawain sa kabilang bersyon. Ang bahagi ng problema ay aalisin kung ang mga pagwawasto sa lahat ng dokumentasyon at code ay agad na ipapamahagi sa lahat ng mga susunod na bersyon, tulad ng nabanggit ko sa itaas. Ngunit ang usapin ay hindi dapat limitado sa mga pagwawasto lamang. Kinakailangan na maunawaan ng pangkat na nagtatrabaho sa isang bersyon kung bakit ginawa ang ilang partikular na pagpapasya kapag gumagawa sa ibang bersyon. Nangangailangan ito ng isang base ng kaalaman para sa mga developer - isang espesyal na sistema ng impormasyon na dapat ilarawan ang lahat ng mga problema na nakatagpo ng mga developer kapag nagtatrabaho sa isang partikular na bersyon ng produkto, at kung paano lutasin ang mga problemang ito. Ang base ng kaalaman ay dapat magpadala ng mga abiso sa lahat ng mga kalahok ng proyekto kapag dumating ang mga bagong tala. Imposibleng hayaan ang pakikipag-ugnayan ng dalawang koponan na nagtatrabaho sa iba't ibang bersyon ng parehong produkto.

Naka-embed na proseso ng pagbuo ng software

Tulad ng nabanggit sa itaas, ang naka-embed na software ay naiiba sa custom na software dahil ito ay napakahirap na mapanatili.

Sabihin nating naglalabas ka ng software para sa mga refrigerator. Kapag naihatid na ang software sa manufacturer, sampu-sampung libong device ang magsisimulang kumalat sa buong mundo, at wala kang ideya kung saan sila mapupunta. At kung nabigo ang isa sa mga refrigerator dahil sa kasalanan ng iyong software, mas madaling magbayad ng multa kaysa ibalik ang refrigerator sa pabrika at magsagawa ng mga diagnostic. Siyempre, posibleng magsanay ng mga inhinyero para sa mga dealership na maaaring magsagawa ng on-site na diagnostic at palitan ang firmware ng iyong system, ngunit napakamahal pa rin nito.

Kaya, kapag bumubuo ng naka-embed na software, maraming mahahalagang limitasyon ang lumitaw nang sabay-sabay.

Una, ang paghahatid ay isinasagawa sa loob ng balangkas ng isang yugto lamang: walang gagawa ng isang kalahating gumaganang programa sa mga aparato.

Pangalawa, sa paghahatid, dapat kang magbayad ng espesyal na pansin sa kalidad ng programa, dahil mula sa sandaling ito ay ipinakilala sa kahon ng bakal, napakahirap na baguhin ito. Ang partikular na atensyon ay dapat bayaran sa yugto ng pagpapatakbo ng pilot, kapag ang programa ay ipinatupad sa isang limitadong batch ng mga device, at ang mga device na ito ay sumasailalim sa mga komprehensibong pagsubok sa iba't ibang mga operating mode. Dapat kang mangolekta ng maraming impormasyon hangga't maaari tungkol sa pag-uugali ng iyong system, pag-aralan ang impormasyong ito at pinuhin ang software.

Pangatlo, kapag ang isang device na may iyong software ay napunta sa serye, mayroon kang napakaliit na pagkakataon upang itama ang mga error. Sa katunayan, ang mga naturang pag-aayos ay posible lamang sa kaganapan ng may sira na software na humahantong sa kawalan ng kakayahang magamit ng buong batch ng mga aparato, dahil kung saan ang tagagawa ay mapipilitang alalahanin ang batch na ito, at makakakuha ka ng isang malaking itim na lugar sa iyong reputasyon .

Panghuli, pang-apat, walang yugto ng pag-decommissioning para sa naka-embed na software. Ang programa ay itinapon lamang kasama ang aparato. Samakatuwid, sa sandaling mag-expire ang panahon ng warranty para sa isang batch ng mga device kung saan tumatakbo ang iyong software, maaari kang magpatuloy upang isara ang proyekto.

Ang proseso ng pagbuo ng firmware ay ipinapakita sa Figure 3.


Figure 3 Naka-embed na proseso ng pagbuo ng software.

Proseso ng pagbuo ng laro

Ang gaming software ay pinili ko dahil sa mga detalye ng kanilang produksyon at operasyon. Ang negosyo ng gaming software ay nakabatay sa paglabas ng mga hit. Ang isang matagumpay na hit ay nagbabayad para sa gastos ng paglikha ng ilang mga laro na hindi napapansin ng mga gumagamit. Samakatuwid, ang proseso ng pagbuo ng isang laro ay magkakaugnay sa mga proseso ng pagbuo ng iba pang mga laro.

Ang isa pang salik na nagpapatingkad sa produksyon ng laro ay ang katotohanan na ang laro ay kawili-wili sa user hanggang sa makapasa siya sa huling antas, o hanggang sa magkaroon siya ng nakamamatay na error. Nangangahulugan ito na hindi siya bibili ng pangalawang bersyon ng laro o kahit na i-download ito nang libre para lamang ayusin ang ilang mga bug.

Ang mga salik na ito ay nakakaapekto sa proseso ng pagbuo ng software sa paglalaro. Ang proseso ay ipinapakita sa Figure 4.


Figure 4. Proseso ng pagbuo ng software ng laro.

Dapat tandaan ang mga sumusunod na tampok ng proseso ng pagbuo ng software sa paglalaro.

Una sa lahat, sa paggawa ng mga laro, ang kalidad ng konsepto ay lubhang mahalaga. Kung ang konsepto ng laro ay hindi nagpapahintulot sa iyo na lumikha ng isang hit, kung gayon ang karagdagang trabaho ay walang kabuluhan. Ang sitwasyon kung kailan nagtatapos ang karamihan sa mga proyekto sa yugto ng paghahanda ay karaniwan para sa pagbuo ng software ng laro.

Ang mga kinakailangan at pagbuo ng arkitektura para sa software ng paglalaro ay madalas na muling ginagamit ang mga aral na natutunan mula sa mga nakaraang proyekto. Kaugnay nito, ang yugto ng pagwawakas ng proyekto ay tumatanggap din ng karagdagang timbang, kapag ang lahat ng kapaki-pakinabang na pag-unlad ay dapat na maitala sa base ng kaalaman ng mga developer.

Ang paghahatid ng software sa paglalaro ay nagaganap sa loob ng isang yugto. Kahit na ang isang tiyak na core, ang "engine" ng sistema ng laro, ay unang nilikha, ang operasyon nito ay hindi mapapatunayan nang walang pagpapatupad ng buong pag-andar ng system.

Walang beta o decommissioning phase para sa gaming software. Ang mga laro ay agad na ibinebenta, at pagkatapos gamitin, ang mga ito ay tatanggalin lamang ng gumagamit habang sila ay nawawalan ng interes sa kanila.

Konklusyon

Bilang bahagi ng artikulo, sinubukan kong magbigay ng pangkalahatang-ideya ng "nangungunang antas" ng proseso ng pagbuo ng software ng application. Ang bawat yugto ng proseso, siyempre, ay nangangailangan ng isang hiwalay na talakayan na may obligadong pagsasaalang-alang sa mga tampok ng binuo na software.

Pansinin ko na ang process diagram na isinasaalang-alang dito ay resulta ng isang generalization ng aking personal na karanasan sa pagbuo ng iba't ibang software tool. Tulad ng anumang generalization, ang aking schema ay isang abstraction. At, tulad ng anumang abstraction, mayroon itong mga limitasyon sa pagiging angkop. Hindi mo maaaring ilapat nang walang pag-iisip ang scheme na ito sa isang partikular na proyekto. Mahalagang maunawaan na ang bawat proyekto ay may sariling mga nuances na nakakaapekto sa organisasyon ng proseso ng pag-unlad. At samakatuwid, para sa bawat proyekto, ang pamamaraan na ipinakita dito ay dapat na iakma, at sa ilang mga kaso kinakailangan na bumuo ng isang panimula na naiibang diskarte.

pamamahala ng software

Ang proseso ng pag-develop ng software ay ang maraming iba't ibang aktibidad, pamamaraan, diskarte at hakbang na ginamit upang bumuo at mag-evolve ng software at mga kaugnay na produkto (mga plano ng proyekto, dokumentasyon, code, mga pagsubok, dokumentasyon ng user).

Gayunpaman, ngayon ay walang unibersal na proseso ng pagbuo ng software - isang hanay ng mga pamamaraan, panuntunan at regulasyon na angkop para sa software ng anumang uri, para sa anumang kumpanya, para sa mga koponan ng anumang nasyonalidad. Ang bawat kasalukuyang proseso ng pag-unlad na isinasagawa ng isang partikular na pangkat sa loob ng isang partikular na proyekto ay may malaking bilang ng mga tampok at indibidwalidad. Gayunpaman, ipinapayong planuhin ang proseso ng trabaho bago simulan ang proyekto, pagtukoy sa mga tungkulin at responsibilidad sa pangkat, mga produkto ng trabaho (intermediate at final), ang pagkakasunud-sunod ng pakikilahok sa kanilang pagbuo ng mga miyembro ng koponan, at iba pa.

Ang proseso ng pagbuo ng software ay hindi homogenous. Ang isa o ibang paraan ng pag-unlad ng software, bilang panuntunan, ay tumutukoy sa ilang mga dinamika ng pag-deploy ng ilang mga uri ng mga aktibidad, iyon ay, tinutukoy nito ang modelo ng proseso.

Ang modelo ay isang mahusay na abstraction ng iba't ibang mga pamamaraan ng pagbuo ng software, na nagpapahintulot sa kanila na maipakita nang maigsi, maigsi at nagbibigay-kaalaman. Gayunpaman, ang mismong ideya ng isang modelo ng proseso ay isa sa pinakamaagang sa software engineering, kapag pinaniniwalaan na ang isang matagumpay na modelo ay ang pinakamahalagang bagay na nag-aambag sa tagumpay ng pag-unlad. Nang maglaon ay napagtanto na maraming iba pang mga aspeto (hal. mga prinsipyo ng pamamahala at pag-unlad, istraktura ng pangkat) na dapat tukuyin alinsunod sa bawat isa. At ang pinagsamang mga pamamaraan ng pag-unlad ay nagsimulang bumuo. Gayunpaman, mayroong ilang mga klasikal na modelo ng proseso ng pagbuo ng software.

Ang unang modelo na naging malawak na kilala at talagang bumubuo sa proseso ng pagbuo ay ang kaskad o talon. Ito ay nilikha pagkatapos ng 1968 NATO conference sa agham at teknolohiya, na humarap sa mga naturang isyu, at hinati ang proseso ng paglikha ng isang produkto ng software sa sunud-sunod na mga yugto (dapat tandaan na ito ay ginamit na ng iba't ibang mga developer, ngunit hindi ang bilang o pinag-isa ang nilalaman ng mga yugto).

Figure 1 - Binagong Waterfall Software Development Model

Ang binagong modelo ng cascade ay nagbigay para sa posibilidad na bumalik sa mga nakaraang yugto.

Di-nagtagal pagkatapos ng paglitaw nito, ang modelo ng talon ay tinapos ni Winst Royce, na isinasaalang-alang ang pagkakaugnay ng mga yugto at ang pangangailangan na bumalik sa mga nakaraang yugto, na maaaring sanhi, halimbawa, ng hindi kumpletong mga kinakailangan o mga pagkakamali sa pagbuo ng gawain. Sa ganitong "mababalik" na anyo, ang modelo ng talon ay umiral nang mahabang panahon at naging batayan para sa maraming mga proyekto (Larawan 1).

Gayunpaman, ang praktikal na paggamit ng modelong ito ay nagsiwalat ng marami sa mga pagkukulang nito, ang pangunahing kung saan ay na ito ay mas angkop para sa mga tradisyunal na uri ng mga aktibidad sa engineering kaysa sa pagbuo ng software. Sa partikular, ang isa sa mga pinakamalaking problema ay ang "predisposisyon" nito sa mga posibleng hindi pagkakapare-pareho sa pagitan ng nagresultang produkto at ng mga kinakailangan na inilagay dito. Ang pangunahing dahilan para dito ay ang isang ganap na nabuo na produkto ay lilitaw lamang sa mga huling yugto ng pag-unlad, ngunit dahil ang gawain sa iba't ibang yugto ay karaniwang isinasagawa ng iba't ibang mga espesyalista at ang proyekto ay inilipat mula sa isang pangkat patungo sa isa pa, kung gayon, ayon sa prinsipyo ng isang nasirang telepono, ito ay naka-out na ang output ay hindi masyadong kung ano ang orihinal na inilaan.

Upang maalis ang mga pagkukulang ng modelo ng talon, isang hugis-V, o hinged na modelo ng pagbuo ng software ang iminungkahi (Larawan 2).

Figure 2 - V-shaped na modelo ng software development

Ang modelong hugis-V ay nagbibigay-daan sa higit na kontrol sa resulta sa mga tuntunin ng pagsunod nito sa mga inaasahan, dahil ito ay nakatuon sa pagsubok.

Ang modelong hugis-V ay naging posible upang makabuluhang mapabuti ang kalidad ng software dahil sa pagtuon nito sa pagsubok, at higit na nalutas ang problema ng pagsunod sa nilikha na produkto sa mga kinakailangan na iniharap dahil sa mga pamamaraan ng pag-verify at sertipikasyon sa mga unang yugto. ng pag-unlad (mga putol-putol na linya sa figure ay nagpapahiwatig ng pagtitiwala sa mga gawain sa pagpaplano / pagtatakda ng mga yugto at pagsubok / pagtanggap).

Gayunpaman, sa pangkalahatan, ang modelong hugis-V ay isang pagbabago lamang ng modelo ng cascade at marami sa mga pagkukulang nito. Sa partikular, ang dalawa ay hindi mahusay na inangkop sa mga posibleng pagbabago sa mga kinakailangan ng customer. Kung ang proseso ng pag-unlad ay tumatagal ng mahabang panahon (minsan hanggang ilang taon), kung gayon ang resultang produkto ay maaaring talagang hindi kailangan para sa customer, dahil ang kanyang mga pangangailangan ay nagbago nang malaki.

Ang software, hindi katulad, halimbawa, isang microchip, ay maaaring gamitin sa mga bahagi, na nangangahulugang maaari din itong mabuo at maihatid sa customer nang paunti-unti. Ito ang batayan ng incremental na modelo, na nagbibigay para sa fragmentation ng produkto sa medyo independiyenteng mga bahagi na binuo at inilagay sa operasyon nang hiwalay.

Ang modelong ito ay kapaki-pakinabang para sa parehong customer at ang lumikha ng system, dahil pinapayagan ka nitong sumulong, na iginagalang ang mga interes ng parehong partido.

Gayunpaman, mayroon siyang mga pagkukulang. Ang paghahati sa mga functional block sa kabuuan ay nagpapabagal sa proseso, dahil ito ay nagiging kinakailangan upang matiyak ang kanilang pakikipag-ugnayan. Para sa maraming mga solusyon, ang pamamaraang ito ay hindi naaangkop, dahil imposibleng ihiwalay ang mga indibidwal na sangkap mula sa kanila, na maaaring maihatid at gumana nang nakapag-iisa. Ang workload sa mga tauhan ng pamamahala ay tumataas din nang malaki dahil sa komplikasyon ng mga gawain ng pag-coordinate ng trabaho sa mga indibidwal na bahagi ng system, ang gastos ng paggawa ng mga pagbabago sa mga handa na bahagi na naka-install na at nagtatrabaho sa pagtaas ng customer.

Iminungkahi ni Barry Boehm noong 1988, ang spiral model ay isang makabuluhang tagumpay sa pag-unawa sa likas na katangian ng software development, bagama't pinagsasama nito ang isang waterfall approach at isang umuulit na proseso ng disenyo batay sa prototyping (Figure 3).


kanin. 3.

Ang spiral model ng Boehm ay nakatuon sa disenyo, ang pagbuo ng software ay ang huling pagliko lamang ng spiral ng karaniwang modelo ng talon, ngunit ito ay nauuna sa ilang mga pag-ulit ng disenyo batay sa prototyping - sa bawat pag-ulit kabilang ang yugto ng pagtukoy at pagsusuri ng mga panganib at ang pinakamahirap na gawain.

Dahil ang spiral model ay pangunahing sumasaklaw sa disenyo, sa orihinal nitong anyo ay hindi ito malawakang ginagamit bilang isang paraan ng pamamahala sa buong ikot ng buhay ng software development. Gayunpaman, ang kanyang pangunahing ideya, na ang proseso ng pagtatrabaho sa isang proyekto ay maaaring binubuo ng mga cycle na dumaan sa parehong mga yugto, nagsilbing panimulang punto para sa karagdagang pananaliksik at naging batayan ng karamihan sa mga modernong modelo ng proseso ng pagbuo ng software.

Unang iminungkahi ni Philip Krachten noong 1995, pinagsasama ng umuulit na modelo ang mga pangunahing bentahe ng spiral, incremental, waterfall na mga modelo, pati na rin ang mga pamamaraan ng pag-unlad batay sa prototyping at object-oriented na diskarte (Figure 4). Ito ay nakakuha ng mahusay na katanyagan at ginagamit sa isang anyo o iba pa sa maraming modernong mga proyekto.


Figure 4 - Paulit-ulit na modelo ng pagbuo ng software

Ayon sa umuulit na modelo, mayroong apat na pangunahing yugto ng ikot ng buhay ng pagbuo ng software (pagsisimula, pagsasaliksik, pagbuo, at pag-deploy). Sa bawat yugto, ang proyekto ay dumaan sa maraming mga pag-ulit, na humahantong sa paglikha ng mga magagamit na bersyon: sa mga unang yugto, ang mga prototype ay nilikha, ang mga kinakailangan ay tinukoy, at ang pinaka-kumplikadong mga problema ay naisasagawa; ang pangwakas ay humahantong sa paglikha ng isang produkto, pagpapabuti nito at pagpapalawak ng functionality.

Ang umuulit na modelo, bilang karagdagan sa mga pangunahing yugto, ay nakikilala ang dalawa pang grupo ng mga proseso: pagtatrabaho (pamamahala ng mga kinakailangan, pagsusuri at disenyo, pagpapatupad, pagsubok, pag-deploy) at pantulong (pagsasaayos at pamamahala ng pagbabago, proyekto at proseso). Ang bilang at likas na katangian ng mga proseso ay nag-iiba depende sa mga pangangailangan ng nag-develop, maaari rin silang magkaroon ng kanilang sariling mga cycle, na kahit na hindi kinakailangang tumutugma sa mga pangunahing yugto. Gayunpaman, ang mga daloy ng trabaho ay palaging nagreresulta sa paglikha ng mga bersyon ng produkto.

Ang isang umuulit na modelo, tulad ng isang spiral model, ay ginagawang posible na matagumpay na pamahalaan ang mga panganib. Kung sa panahon ng trabaho sa susunod na bersyon ay natukoy na ang mga gastos sa paggawa para sa pagpapatupad ng kinakailangang pag-andar ay masyadong mataas, kung gayon ang mga overrun sa badyet at mga deadline ay maiiwasan sa pamamagitan ng pag-uugnay ng mga priyoridad sa pag-unlad at mga gastos sa paggawa sa simula ng bawat pag-ulit. Kaya, ang modelong ito ay angkop para sa karamihan ng mga uri ng mga proyekto ng software, ngunit ang mga pakinabang nito ay lalong kapansin-pansin kapag nagtatrabaho sa mga produktong inilaan para sa pagpasok sa libreng merkado, dahil sa paunang pagtutok sa pagpapalabas ng mga sunud-sunod na bersyon.

Ang pinakasikat at makapangyarihang pamantayan ng kalidad ay dapat ituring na Capability Maturity Model (CMM) - isang modelo para sa pagtatasa ng antas ng kapanahunan ng mga proseso ng pag-unlad kasama ng mga derivatives nito. Ito ay nilikha ng SEI (Software Engineering Institute), na pinondohan ng US Department of Defense at isang istrukturang yunit ng Carnegie Mellon University. Ang unang opisyal na bersyon ng pamantayan ay inilabas noong 1993, kahit na nagsimula ang trabaho dito nang mas maaga - ang mga pangunahing probisyon nito ay nai-publish nang maaga noong 1986. Ang tagumpay ng CMM ay paunang natukoy ng ilang mga kadahilanan. Ang pamantayang ito ay isa sa mga unang isinasaalang-alang ang mga detalye ng pagbuo ng software mula pa sa simula. Ito ay naging medyo simple at transparent kapwa para sa pag-unawa at para sa paggamit, at kinokontrol ang "ano", at hindi "paano" gawin, at samakatuwid ay angkop para sa iba't ibang mga modelo ng siklo ng buhay, mga pamamaraan ng pag-unlad at hindi nagpapataw ng anumang mga paghihigpit sa dokumentasyon mga pamantayan, kasangkapan, kapaligiran at mga wikang ginagamit sa mga proyekto. At, marahil, ang pangunahing kadahilanan na paunang natukoy ang katanyagan ng CMM ay ang pakikipagtulungan ng SEI sa US Department of Defense, na de facto ay nangangahulugan ng paggamit ng pamantayan sa pagpapatupad ng mga proyekto na kinomisyon ng departamentong ito.

Ang modelo ng CMM (talahanayan 1) ay nagbibigay ng limang antas ng kapanahunan, na ang bawat isa ay tumutugma sa ilang mga pangunahing bahagi ng proseso (Mga Pangunahing Lugar sa Proseso, KPA).

Talahanayan 1 - HMM model

Pangalan ng antas

Mga Pangunahing Lugar ng Proseso

1 - Inisyal

Kung ang organisasyon ay nasa antas na ito, walang mga pangunahing lugar ng proseso para dito

2 - Paulit-ulit

Pamamahala ng pagsasaayos ng software. Tinitiyak ang kalidad ng mga produkto ng software. Pamamahala ng kontrata ng mga kontratista. Kontrol sa pag-unlad ng proyekto. Pagpaplano ng mga proyekto ng software. Pangangasiwa sa Pamamahala

3 - Tinukoy

Mga pagtatasa ng eksperto. Koordinasyon ng mga pakikipag-ugnayan sa pagitan ng mga pangkat ng proyekto. Software engineering ng produkto. Pinagsamang pamamahala ng software. Programa sa pagsasanay ng mga tauhan. Kahulugan ng proseso ng organisasyon. Saklaw ng Proseso ng Organisasyon

4 - Pinamamahalaan

Pamamahala ng kalidad ng software. Kontrol sa proseso batay sa dami ng mga pamamaraan

5 - Na-optimize

Pamamahala ng pagbabago sa proseso. Pamamahala ng mga pagbabago sa teknolohiya. Pag-iwas sa Depekto

Ang paghahati sa mga antas at ang kahulugan ng KPA para sa bawat isa sa kanila ay nagbibigay-daan sa pare-parehong pagpapatupad ng CMM, gamit ang pamantayan bilang gabay, na maaaring matiyak ang patuloy na pagpapabuti sa proseso ng pag-unlad.

Ang pamantayan ng CMM ay naging napaka-matagumpay, at kasunod na isang buong serye ng mga pamantayan ay nilikha sa batayan nito, at nakatanggap ito ng isang bagong pangalan - SW-CMM (Capability Maturity Model for Software), na mas tumpak na sumasalamin sa posisyon nito sa isang medyo malaki. pamilya ng mga pamantayan.

Gayunpaman, ipinakita ng praktikal na aplikasyon ng mga pamantayan ng serye ng CMM na hindi sila nagbibigay ng walang kundisyong tagumpay sa pagbuo ng software. Ang mga pamantayang ito ay hindi maayos na pinag-ugnay sa isa't isa - ang sabay-sabay na pagpapatupad ng iba't ibang mga pagbabago ng CMM ay maaaring maging isang hamon, at humantong sa pagkalito ng mga espesyalista ng mga organisasyong nakaharap dito.

Gayundin, ang isang makabuluhang problema ng CMM ay ang pangangailangan na "i-align" ang lahat ng mga proseso. Kung sinusubukan ng isang organisasyon na mag-certify sa isang partikular na antas, dapat nitong tiyakin na ang naaangkop na antas ay inilalapat sa lahat ng proseso nito. Kahit na ang mga detalye, pamamaraan, o mga tampok sa pag-unlad ay walang ilang partikular na proseso na isasagawa, kinakailangan ito ng sertipikasyon.

Ang isa pang problema ay sanhi ng posisyon na kinuha ng mga pamantayan ng CMM sa modernong industriya ng software. Dahil ang isang organisasyong may mataas na antas alinsunod sa CMM ay dapat magbigay ng mas mataas na pagganap ng produkto ng software kaysa sa mga na-certify sa mas mababang antas, ang pamantayan ay ginamit bilang isang pamantayan sa pagpili para sa pakikilahok sa mga tender sa pagbuo ng software o mga proyekto sa outsourcing.

Ang sitwasyong ito ay naging posible dahil sa mga pagkukulang ng proseso ng sertipikasyon. Hindi ang buong organisasyon sa kabuuan ay napapailalim sa sertipikasyon, ngunit isang partikular na proyekto lamang. Walang makakapigil sa isang organisasyon na lumikha ng isang "demonstrative" na proyekto na nakakatugon sa lahat ng mga kinakailangan ng matataas na antas ng pamantayan ng CMM, makakuha ng naaangkop na antas ng sertipikasyon, at magdeklara na ang lahat ng mga produkto ay nakakatugon sa ganoon at ganoong antas ng pamantayan.

Ang bagong pamantayang SEI - Capability Maturity Model Integrated (CMMI) - ay isang pinagsamang modelo para sa pagtatasa ng antas ng maturity ng mga proseso ng pag-unlad. Ang pamantayan ng CMMI ay orihinal na nilikha sa paraang pagsamahin ang mga umiiral na opsyon sa CMM at alisin ang anumang mga kontradiksyon sa praktikal na aplikasyon nito sa iba't ibang larangan ng aktibidad ng mga high-tech na kumpanya.

Upang maalis ang pangangailangan na "i-align" ang mga proseso ng organisasyon at maging mas angkop sa mga pangangailangan nito sa negosyo, at hindi kabaligtaran, ang pamantayan ng CMMI ay may dalawang anyo ng pagtatanghal - ang klasiko, multi-level, na naaayon sa CMM, at ang bago, tuloy-tuloy. Ang tuluy-tuloy na anyo ng pagtatanghal ay hindi isinasaalang-alang ang mga antas ng kapanahunan (Mga Antas ng Pagkahinog), ngunit Mga Antas ng Kapabilidad, na sinusuri para sa mga indibidwal na lugar ng proseso (Mga Lugar ng Proseso, PA).

Ang talahanayan 2 ay nagbibigay ng pagmamapa ng mga antas ng maturity ng pamantayan ng CMM, pati na rin ang mga antas ng maturity ng layered na pagtatanghal ng CMMI at ang mga antas ng kakayahan ng tuluy-tuloy na pagtatanghal ng CMMI.

Talahanayan 2 - Pagsunod sa mga antas ng kapanahunan ng mga pamantayan ng CMM, CMMI

Ang SEI ay lumalayo sa CMM at aktibong isinusulong ang CMMI bilang kapalit, na nangangako na higpitan ang kontrol sa proseso ng sertipikasyon, bawasan ang mga gastos at gagawin itong mas kaakit-akit sa maliliit na organisasyon; pagtiyak ng pagiging tugma sa mga pamantayan ng ISO.

Sa modernong mga kondisyon, ang pagkakaroon ng isang sertipiko ng isang tiyak na antas ng CMM / CMMI ay hindi isang mahalagang kadahilanan tulad ng ilang taon na ang nakalilipas, at tinatanggap nang walang karagdagang mga katanungan, maliban marahil sa mga proyekto na isinasagawa ng utos ng gobyerno.

Ang pamantayang ISO/IEC 15504 ay inilaan upang suriin ang proseso ng pagbuo ng mga sistema ng impormasyon, sa partikular na software. Ito ay orihinal na idinisenyo upang higit na naaayon sa mga pamantayan ng industriya para sa pagsusuri sa proseso ng pagbuo ng software. Ang kinakailangang ito ang nagpasiya sa pagkakapareho ng pamantayan sa mga pangunahing prinsipyo ng CMM / CMMI.

Ang software development process maturity model (CMM) na binuo ng Software Engineering Institute sa Carnegie Mellon University ay nagmumungkahi ng limang antas ng maturity (Talahanayan 3). Tinutulungan nito ang mga organisasyon na pataasin ang maturity ng kanilang mga proseso sa pagbuo ng software at maaaring masuri at ma-accredit ang mga organisasyon laban sa mga antas na ito.

Talahanayan 3 - Mga Antas ng Maturity ng Software Development

Level 1 - entry level

Ang proseso ng pag-develop ng software ay kusang-loob, at ilang mga proseso lamang ang kinokontrol. Ang tagumpay ng pag-unlad ay maaaring nakasalalay sa mga indibidwal na empleyado.

Level 2 - antas ng repeatability

Nilikha ang mga pangunahing proseso ng pamamahala ng proyekto upang subaybayan ang mga gastos, iskedyul, at paggana.

Level 3 - ang antas ng regulasyon

Ang proseso ng pagbuo ng software ay nakadokumento, naka-standardize, at isinama sa karaniwang proseso ng pagbuo ng software ng organisasyon para sa parehong mga pagpapatakbo ng pamamahala at pagpapaunlad. Ang lahat ng mga proyekto ay gumagamit ng isang standardized na proseso.

Antas 4 - antas ng kakayahang pamahalaan

Ang mga detalyadong sukatan ng proseso ng pagbuo ng software at kalidad ng produkto ay kinokolekta upang makatulong na maunawaan at pamahalaan ang proseso at mga produkto.

Level 5 - antas ng pag-optimize

Ang patuloy na pag-optimize ng proseso ay sinisiguro sa pamamagitan ng dami ng feedback mula sa proseso at mula sa pilot ng mga makabagong ideya at teknolohiya.

Kaya, ang mga modernong modelo at pamamaraan na ginagamit sa mga tunay na proyekto ng pagbuo ng software ay napaka-magkakaibang. Ang bawat isa sa kanila ay may sariling mga pakinabang, na ipinakita sa naaangkop na mga kondisyon. Kahit na ang lumang modelo ng talon ay ganap na sapat para sa ilang mga proyekto. Ang bawat proseso ay mayroon ding ilang mga katangian na naglilimita sa lugar ng epektibong paggamit nito. Ang sitwasyong ito ay medyo pangkaraniwan para sa pagbuo ng software, kung saan maraming mga teknolohiya at diskarte ang naipon na, ngunit walang unibersal na paraan na pinakamainam para sa anumang gawain.

S. Archipenkov

Ang mga modelo (o, tulad ng gusto nilang sabihin, mga pamamaraan) ng mga proseso ng pagbuo ng software ay karaniwang inuri ayon sa "timbang" - ang bilang ng mga pormal na proseso (karamihan sa mga proseso o ang mga pangunahing lamang) at ang detalye ng kanilang regulasyon. Kung mas maraming proseso ang naidokumento, mas detalyado ang mga ito, mas malaki ang "bigat" ng modelo.

Ang pinakakaraniwang modernong mga modelo ng proseso ng pagbuo ng software ay ipinapakita sa Figure 3.

Figure 3 Iba't ibang mga modelo ng proseso ng pagbuo ng software at ang kanilang pamamahagi ayon sa "timbang"

Mga GOST

GOST 19 "Pinag-isang sistema ng dokumentasyon ng software" at GOST 34 "Mga Pamantayan para sa pagbuo at pagpapanatili ng mga automated system" ay nakatuon sa isang pare-parehong diskarte sa pagbuo ng software. Ang pag-unlad alinsunod sa mga pamantayang ito ay isinasagawa sa mga yugto, ang bawat isa ay nagsasangkot ng pagganap ng mahigpit na tinukoy na trabaho, at nagtatapos sa pagpapalabas ng isang medyo malaking bilang ng napaka-pormal at malawak na mga dokumento. Kaya, ang mahigpit na pagsunod sa mga bisitang ito ay hindi lamang humahantong sa isang diskarte sa talon, ngunit nangangailangan din ng napakataas na antas ng pormalisasyon ng pag-unlad. Batay sa mga pamantayang ito, ang mga sistema ng software ay binuo para sa mga order ng gobyerno sa Russia.

SW-CMM

Noong kalagitnaan ng dekada 1980, pinag-isipang mabuti ng Kagawaran ng Depensa ng US kung paano pumili ng mga developer ng software para sa malalaking proyekto ng software. Inatasan ng militar, binuo ng Software Engineering Institute, bahagi ng Carnegie Mellon University, ang SW-CMM, Capability Maturity Model for Software, bilang sanggunian na modelo para sa mga organisasyon ng software development.

Tinutukoy ng modelong ito ang limang antas ng maturity ng proseso ng pagbuo ng software.

  1. Inisyal - ang proseso ng pagbuo ay magulo. Ilan sa mga proseso ang tinukoy, at ang tagumpay ng mga proyekto ay nakasalalay sa mga indibidwal na aktor.
  2. Nauulit - Itinatag ang mga pangunahing proseso ng pamamahala ng proyekto: mga gastos sa pagsubaybay, mga deadline at pagpapagana. Ang ilan sa mga prosesong kailangan upang gayahin ang mga nakaraang tagumpay sa mga katulad na proyekto ay na-streamline.
  3. Tinukoy - ang mga proseso ng pagbuo ng software at pamamahala ng proyekto ay inilarawan at ipinatupad sa isang solong sistema ng mga proseso ng kumpanya. Ginagamit ng lahat ng mga proyekto ang karaniwang proseso ng pagbuo ng software at suporta ng organisasyon, na iniayon sa partikular na proyekto.
  4. Pinamamahalaan - nangongolekta ng detalyadong dami ng data sa paggana ng mga proseso ng pag-unlad at ang kalidad ng panghuling produkto. Sinusuri ang kahalagahan at dinamika ng mga datos na ito.
  5. Naa-optimize - ang patuloy na pagpapabuti ng proseso ay batay sa dami ng data sa mga proseso at sa pagsubok na pagpapatupad ng mga bagong ideya at teknolohiya.

Ang kumpletong dokumentasyon ng SW-CMM ay humigit-kumulang 500 mga pahina ang haba at tumutukoy sa isang hanay ng 312 mga kinakailangan na dapat matugunan ng isang organisasyon kung plano nitong maging kwalipikado para sa pamantayang ito sa antas ng maturity 5.

RUP

Ang Rational Unified Process (RUP) ay binuo ni Philippe Kruchten, Ivar Jacobson, at iba pa sa Rational Software bilang pandagdag sa UML modelling language. Ang modelo ng RUP ay naglalarawan ng abstract na pangkalahatang proseso kung saan ang isang organisasyon o pangkat ng proyekto ay dapat lumikha ng isang partikular, espesyal na proseso na nakatuon sa mga pangangailangan nito. Ang tampok na ito ng RUP ang nagiging sanhi ng pangunahing kritisismo - dahil maaari itong maging anuman, hindi ito maaaring ituring na anumang tiyak. Bilang resulta ng pangkalahatang disenyong ito, maaaring gamitin ang RUP bilang isang pundasyon para sa pinaka-tradisyunal na istilo ng pag-unlad ng talon, at bilang isang maliksi na proseso.

MSF

Ang Microsoft Solutions Framework (MSF) ay isang flexible at medyo magaan na modelo na binuo sa paligid ng umuulit na pag-unlad. Ang isang kaakit-akit na tampok ng MSF ay ang matinding pagtuon sa pagbuo ng isang mahusay at hindi burukratikong pangkat ng proyekto. Upang makamit ang layuning ito, nag-aalok ang MSF ng hindi karaniwang mga diskarte sa istruktura ng organisasyon, pamamahagi ng responsibilidad at mga prinsipyo ng pakikipag-ugnayan sa loob ng koponan.

PSP/TSP

Isa sa mga pinakabagong development ng Institute of Software Engineering Personal Software Process / Team Software Process [ , ]. Tinutukoy ng Proseso ng Personal na Software ang mga kinakailangan sa kakayahan ng developer. Ayon sa modelong ito, ang bawat programmer ay dapat na:

  • isaalang-alang ang oras na ginugol sa proyekto;
  • isaalang-alang ang nahanap na mga depekto;
  • uriin ang mga uri ng mga depekto;
  • tantiyahin ang laki ng gawain;
  • magpatupad ng isang sistematikong diskarte sa paglalarawan ng mga resulta ng pagsubok;
  • magplano ng mga gawain sa programa;
  • ipamahagi ang mga ito sa paglipas ng panahon at gumuhit ng iskedyul ng trabaho.
  • magsagawa ng mga indibidwal na pagsusuri sa disenyo at arkitektura;
  • magsagawa ng indibidwal na pag-verify ng code;
  • magsagawa ng regression testing.

Ang Proseso ng Software ng Team ay umaasa sa mga self-managed na team ng 3-20 developer. Ang mga koponan ay dapat:

  • itakda ang iyong sariling mga layunin;
  • bumuo ng iyong proseso at mga plano;
  • trabaho sa pagsubaybay;
  • mapanatili ang motibasyon at pinakamataas na pagganap.

Ang pare-parehong aplikasyon ng modelo ng PSP / TSP ay nagpapahintulot sa iyo na gawing pamantayan sa organisasyon ang ikalimang antas ng CMM.

Maliksi

Ang pangunahing ideya sa likod ng lahat ng maliksi na modelo ay ang proseso ng pagbuo ng software ay dapat na adaptive. Ipinapahayag nila na ang kanilang pinakamataas na halaga ay nakatuon sa mga tao at sa kanilang pakikipag-ugnayan, at hindi sa mga proseso at paraan. Sa katunayan, ang tinatawag na mga agile methodologies ay hindi mga methodologies, ngunit isang set ng mga kasanayan na maaaring (o maaaring hindi) payagan ang epektibong software development batay sa pag-ulit, incrementality, pamamahala sa sarili ng koponan, at kakayahang umangkop sa proseso.

Proseso ng Pagpili ng Modelo

Ang mga mabibigat at magaan na modelo ng proseso ng produksyon ay may mga pakinabang at disadvantages (Talahanayan 1).

Talahanayan 1. Mga kalamangan at kahinaan ng mabibigat at magaan na mga modelo ng mga proseso ng pagbuo ng software

Timbang ng modelo pros Mga minus
Mabigat Ang mga proseso ay idinisenyo para sa average na kwalipikasyon ng mga gumaganap. Mahusay na espesyalisasyon ng mga performer. Nasa ibaba ang mga kinakailangan sa katatagan ng koponan.

Walang mga paghihigpit sa dami at pagiging kumplikado ng mga kasalukuyang proyekto.

Nangangailangan ng makabuluhang overhead ng pamamahala.

Mas mahabang yugto ng pagsusuri at disenyo.

Mas pormal na komunikasyon.

Mga baga Mas kaunting overhead na nauugnay sa pamamahala ng proyekto, mga panganib, pagbabago, mga pagsasaayos.

Pinasimple na mga yugto ng pagsusuri at disenyo, ang pangunahing pokus sa pagbuo ng pag-andar, ang kumbinasyon ng mga tungkulin. impormal na komunikasyon.

Ang kahusayan ay lubos na nakadepende sa mga indibidwal na kakayahan, na nangangailangan ng isang mas kwalipikado, maraming nalalaman at matatag na koponan.

Limitado ang saklaw at pagiging kumplikado ng mga kasalukuyang proyekto.

Ang mga sumusubok na sundin ang mga modelong inilarawan sa mga aklat, nang hindi sinusuri ang kanilang pagiging angkop sa isang partikular na sitwasyon, mga indikasyon at kontraindikasyon, ay inihalintulad sa mga tagasunod ng kulto ng Cargo - ang relihiyon ng mga sumasamba sa sasakyang panghimpapawid. Sa Melanesia, naniniwala sila na ang mga kalakal sa Kanluran (cargo, English cargo) ay nilikha ng mga espiritu ng mga ninuno at nilayon para sa mga taong Melanesian. Ito ay pinaniniwalaan na ang mga puting tao ay hindi tapat na nakakuha ng kontrol sa mga bagay na ito. Ang pinakasikat na mga kulto ng kargamento ay gumagawa ng mga replika ng mga runway, paliparan, at mga radio tower mula sa mga niyog at dayami. Binubuo sila ng mga miyembro ng kulto sa paniniwalang ang mga istrukturang ito ay makakaakit ng mga sasakyang pang-transportasyon (tinuturing na mga mensahero ng mga espiritu) na puno ng mga kargamento (kargamento). Ang mga mananampalataya ay regular na nagsasagawa ng mga pagsasanay sa militar ("drill") at ilang uri ng mga martsa ng militar, gamit ang mga sanga sa halip na mga riple at pagguhit sa katawan ng order at ang inskripsyon na "USA". Ang lahat ng ito upang ang mga eroplano ay bumaba muli mula sa langit at magkakaroon ng higit pa sa mga item na ito.

Si Alistair Cowburn, isa sa mga may-akda ng "Agile Software Development Manifesto" ay nagsuri ng iba't ibang mga proyekto ng software na isinagawa ayon sa iba't ibang mga modelo mula sa ganap na magaan at "maliksi" hanggang sa mabigat (CMM-5) sa nakalipas na 20 taon [ , ]. Wala siyang nakitang ugnayan sa pagitan ng tagumpay o pagkabigo ng mga proyekto at ang mga modelo ng proseso ng pag-unlad na ginamit sa mga proyekto. Mula dito, napagpasyahan niya na ang pagiging epektibo ng pagbuo ng software ay hindi nakasalalay sa modelo ng proseso, at din na:

  • Ang bawat proyekto ay dapat magkaroon ng sarili nitong modelo ng proseso ng pag-unlad.
  • Ang bawat modelo ay may sariling oras.

Nangangahulugan ito na walang iisang tamang proseso ng pagbuo ng software, sa bawat bagong proyekto ang proseso ay dapat tukuyin muli sa bawat oras, depende sa proyekto, produkto at tauhan, alinsunod sa "Batas ng 4 Ps" (Figure 4). Ang ganap na magkakaibang proseso ay dapat ilapat sa mga proyektong may 5 tao at mga proyektong may 500 tao. Kung ang produkto ng proyekto ay kritikal na software, halimbawa, isang control system para sa isang nuclear power plant, kung gayon ang proseso ng pag-unlad ay dapat na ibang-iba mula sa pagbuo ng, halimbawa, ang site na "otdokhni.ru". At, sa wakas, ang proseso ng pag-unlad ay dapat na organisado nang iba sa isang pangkat ng mga mag-aaral kahapon at sa isang pangkat ng mga mahusay na propesyonal.


Figure 4. "Batas ng 4 Ps". Ang proseso sa proyekto ay dapat tukuyin depende sa proyekto, produkto at tauhan

Ang pangkat na nagsimula sa proyekto ay hindi nananatiling hindi nagbabago, dumadaan ito sa ilang mga yugto ng pagbuo at, bilang panuntunan, lumalaki nang malaki habang umuunlad ang proyekto. Samakatuwid, ang proseso ay dapat na patuloy na umangkop sa mga pagbabagong ito. Ang pangunahing prinsipyo: hindi mga tao ang dapat itayo sa ilalim ng napiling modelo ng proseso, ngunit ang modelo ng proseso ay dapat iakma sa isang partikular na pangkat upang matiyak ang pinakamataas na kahusayan nito.

Ano ang kailangang gawin para sa tagumpay ng isang software project

Si Steve McConnell sa kanyang aklat ay nagbibigay ng pagsubok ng isang software project para sa kaligtasan. Ito ay isang 33-puntos na checklist, na sa tingin ko ay kailangang banggitin na may maliliit na pagsasaayos. Ang software project manager ay dapat na pana-panahong gamitin ito para sa panloob na pag-audit ng kanilang mga proseso.

Para maging matagumpay ang isang software project, kailangan mong:

  1. Malinaw na magtakda ng mga layunin.
  2. Tukuyin kung paano makamit ang mga layunin.
  3. Kontrolin at pamahalaan ang pagpapatupad.
  4. Suriin ang mga pagbabanta at kontrahin ang mga ito.
  5. Lumikha ng isang koponan.
  1. Nagtakda kami ng mga layunin

    1.1. Tinutukoy ng konsepto ang malinaw, hindi malabo na mga layunin.
    1.2. Itinuturing ng lahat ng miyembro ng pangkat na makatotohanan ang konsepto.
    1.3. Ang proyekto ay may katwiran para sa kahusayan sa ekonomiya.
    1.4. Isang prototype na user interface ang binuo.
    1.5. Ang pagtutukoy ng mga target na function ng produkto ng software ay binuo.
    1.6. Ang two-way na komunikasyon ay naitatag sa mga end user ng produkto

  2. Tukuyin kung paano makamit ang mga layunin

    2.1. Mayroong isang detalyadong nakasulat na plano para sa pagbuo ng produkto.
    2.2. Kasama sa listahan ng mga gawain sa proyekto ang mga "minor" na gawain (pamamahala ng configuration, conversion ng data, pagsasama sa iba pang mga system).
    2.3. Pagkatapos ng bawat yugto ng proyekto, ina-update ang iskedyul at badyet.
    2.4. Nakadokumento ang mga desisyon sa arkitektura at disenyo.
    2.5. Mayroong isang plano sa pagtiyak ng kalidad na tumutukoy sa pagsubok at pagsusuri.
    2.6. Ang isang plano para sa multi-stage na paghahatid ng produkto ay tinukoy.
    2.7. Isinasaalang-alang ng plano ang pagsasanay, katapusan ng linggo, bakasyon, mga araw ng pagkakasakit.
    2.8. Ang plano at iskedyul ng proyekto ay inaprubahan ng lahat ng miyembro ng koponan.

  3. Kinokontrol at pinamamahalaan namin ang pagpapatupad

    3.1. Ang proyekto ay may tagapangasiwa. Ito ay isang nangungunang tagapamahala ng gumaganap na kumpanya na personal na interesado sa tagumpay ng proyektong ito.
    3.2. Ang proyekto ay may isang tagapamahala, at isa lamang!
    3.3. Ang plano ng proyekto ay tumutukoy sa "binary" na mga milestone.
    3.4. Ang lahat ng mga interesadong partido ay maaaring makatanggap ng kinakailangang impormasyon tungkol sa pag-unlad ng proyekto.
    3.5. Ang isang mapagkakatiwalaang relasyon ay naitatag sa pagitan ng pamamahala at mga developer.
    3.6. Nagtatag ng isang pamamaraan sa pamamahala ng pagbabago para sa proyekto.
    3.7. Natukoy na ang mga taong responsable sa desisyong tanggapin ang mga pagbabago sa proyekto.
    3.8. Ang impormasyon ng plano, iskedyul at katayuan sa proyekto ay magagamit sa bawat kalahok.
    3.9. Awtomatikong sinusuri ang system code.
    3.10. Ang isang sistema ng pamamahala ng depekto ay inilapat.

  4. Sinusuri namin ang mga pagbabanta

    4.1. Mayroong isang listahan ng mga panganib sa proyekto. Ito ay regular na sinusuri at na-update.
    4.2. Sinusubaybayan ng tagapamahala ng proyekto ang paglitaw ng mga bagong panganib.
    4.3. Para sa bawat kontratista, tinutukoy ang isang taong responsable sa pagtatrabaho sa kanya.

  5. Nagtatrabaho sa pagbuo ng isang pangkat

    5.1. Ang karanasan ng pangkat ay sapat upang makumpleto ang proyekto.
    5.2. Ang koponan ay may sapat na kakayahan sa lugar ng aplikasyon.
    5.3. Ang proyekto ay may pinunong teknikal.
    5.4. Ang bilang ng mga tauhan ay sapat.
    5.5. Ang koponan ay may sapat na pagkakaisa.
    5.6. Lahat ng kalahok ay nakatuon sa proyekto.

Pagtatasa at interpretasyon ng pagsusulit

Iskor: kabuuan ng mga puntos, ang bawat item ay na-rate mula 0 hanggang 3:

  • 0 - hindi man lang narinig ito;
  • 1 - narinig, ngunit hindi pa inilalapat;
  • 2 - inilapat bahagyang;
  • 3 - ganap na inilapat.

Mga salik sa pagwawasto:

  • para sa maliliit na proyekto (hanggang 5 tao) - 1.5;
  • para sa daluyan (mula 5 hanggang 20 tao) - 1.25.

Resulta:

  • <40 - завершение проекта сомнительно.
  • 40-59 - average na resulta. Ang mga malubhang problema ay inaasahan sa panahon ng proyekto.
  • 60-79 ay isang magandang resulta. Ang proyekto ay malamang na maging matagumpay.
  • 80-89 ay isang mahusay na resulta. Mataas ang pagkakataon ng tagumpay.
  • Ang >90 ay isang magandang resulta. 100% pagkakataon ng tagumpay.

Inililista ng checklist na ito kung ano ang kailangang gawin para sa tagumpay ng isang software project, ngunit hindi sinasagot ang tanong kung paano ito gagawin. Ito ay kung ano ang iba pang mga lektura ay tungkol sa.