|  |  |
| --- | --- |
|    | **Šiam straipsniui ar jo daliai trūksta išnašų į šaltinius.**Jūs galite padėti Vikipedijai pridėdami tinkamas išnašas su šaltiniais. |

**Ribinis programavimas**, dar vadinamas **ekstremaliu programavimu** (angl. *Extreme Programming*, sutrumpintai *XP*) – populiariausias lanksčiojo programavimo metodas, suformuluotas *Kent Beck*, *Ward Cunningham* ir *Ron Jeffries*.

Bazinės praktikos
-----------------

Bazinės praktikos skirstomos į keturias **grupes**:

* Pastovus grįžtamasis ryšys (*feedback*)
	+ Testais paremtas programavimas
	+ Planavimo žaidimas
	+ Vientisa komanda (įtraukiant užsakovą)
	+ Programavimas poromis
* Nenutrūkstamas procesas
	+ Nuolatinis integravimas
	+ Pertvarkymas (*refactoring*)
	+ Smulkios laidos (*releases*)
* Bendras supratimas
	+ Paprastas projektas
	+ Sistemos metafora
	+ Bendra kodo nuosavybė
	+ Kodavimo standartai
* Programuotojo gerovė
	+ Pastovus tempas (jokių viršvalandžių)

Visos šios praktikos išvestos iš pripažįstamų geriausių praktikų, naudojant jas ribiniu atveju:

* **Bendravimas** tarp programuotojo ir kliento yra gerai. Todėl į ribinio programavimo komandą įtraukiamas užsakovas, detalizuojantis ir prioritizuojantis darbus, taip pat galintis iškart atsakyti į iškilusius klausimus.
* **Mokymasis gerai**. Todėl programavimo laikas (ciklas) sutrumpinamas iki mažiausio galimo, o testuojama programavimo metu.
* **Kuo paprastesnis kodas**, tuo didesnė tikimybė, kad jis gerai veiks. Taigi, programuojama tik tai, ko reikia, prireikus, eliminuojamas kompleksiškumas ir kodo dubliavimas. Per sudėtingas kodas perrašomas.
* Kodo **peržiūros** yra naudingos. Todėl XP programuotojai dirba poromis, prie vieno monitoriaus ir klaviatūros, todėl visas kodas peržiūrimas rašymo metu.
* **Kodo testavimas** yra gerai. Todėl automatiniai testai rašomi prieš pradedant rašyti kodą. Užduotis laikoma baigta tik tada, kai visi testai baigiami sėkmingai. Periodiškai paleidžiami visi anksčiau rašyti automatiniai testai, užtikrinant kad nesugadintas ankstesnis kodas. Radus klaidą, jai taip pat sukuriamas automatinis testas.

Dažniausiai teigiama, kad ribinis programavimas gali veikti tik mažose komandose iki 12 žmonių, tačiau kartais jis sėkminga veikia ir komandose su daugiau nei 100 programuotojų.

Ribinio programavimo metodikas naudojantys programuotojai dažnai renkasi dinamiškas, greičiau įgalinančias pasiekti reikiamų rezultatų programavimo kalbas.

Kritika
-------

Ribinio programavimo disciplinos esminė kritika -- kad šis procesas sukurtas iš programuotojo perspektyvos, jo tikslas yra suteikti programuotojui komfortiškas darbo sąlygas, tuo aukojant vadovybės ir užsakovų komfortą. Vadovybė negauna aiškaus projekto plano, negali įvertinti projekto trukmės. Užsakovas taip pat neturi fiksuoto projekto biudžeto ir kontraktinių garantijų, kad jo norima programa bus sukurta, bei turi paaukoti projektui vieno savo vertingiausių ir daugiausiai išmanančių darbuotojų ženklią laiko dalį. Užtat programuotojai turi privilegiją dirbti prie kodo, kuris yra norimai aukštos kokybės, kurti programą, kuri atitinka vartotojų poreikius, ir ne tik tuos, kurie buvo aiškūs projekto pradžioje, visada tilpti į terminus ir turėti laisvo laiko po darbo.

Visgi, dažniausiai ribinis programavimas kritikuojamas dėl paviršutiniškų aspektų:

* Programos kūrimo metu nesukuriama detali dokumentacija.
* Programuotojai dirba poromis.
* Prieš pradedant darbą nėra atliekami rimti planavimai.

Privalumai
----------

•Sukuria ir pristato programinę įranga klientui 2 savaičių iteracijomis.

•Pašalina klaidas ar keičia programinės įrangos funkcijas anksti, sutaupant kliento kaštus.

•Vietoj rašymo labai daug dokumentacijos, ko klientas nori, ši disciplina labiau fokusuojasi į grįžtamajį ryšį klientui.

•Rašomas kodas yra aiškus ir suprantamas

Trūkumai
--------

•Kodo kokybė nėra užtikrinama, kadangi ribinis programavimas fokusuojasi į paprastumą ir kodo aiškumą.

•Prasta dokumentacija. Labiau yra propaguojamas bendravimas su klientu ir teikiami pasiūlymai jam, arba koduojama negu dokumentuojamas kodas. Dėl prastos dokumentacijos būsimi pakeitimai gali sukelt bėdų produkto atnaujinime.

•Užsakovas turi dalyvauti produkto kūrime.