Legrövidebb hátralévő végrehajtási idő. Ütemezés (számítás) Valaminek az időben hátralévő mennyiségének kiszámításának folyamata


Minden, amit az előző részben leírtunk, inkább a folyamat saját idejével kapcsolatos további kutatásokra irányult, és sokkal kisebb mértékben a gyakorlati alkalmazásokra. Ezt a hiányt pótolva bemutatjuk a folyamat megfelelő idejének kiszámításának egyik módját a folyamat alakulására vonatkozó statisztikai adatok alapján.

Tekintsünk egy egydimenziós folyamatot, amelynek állapotát egy valós x változó jellemzi. Tegyük fel, hogy a folyamat dinamikájának megfigyelése t csillagászati ​​időben történik, így t = t k és x = x k, k =1, ..., n fix megfigyelési pillanatok és a megfelelő értékek a folyamat kimondja. Számos különböző matematikai módszer létezik, amelyek lehetővé teszik olyan görbék készítését, amelyek vagy áthaladnak a pontokon (t k, Xk), vagy „legjobb megközelítés” ezekhez. Az így kapott x = x(t) függvények azt a benyomást keltik elménkben, hogy a vizsgált folyamat az égitestek mechanikai mozgásától függ, és ezért állapota t csillagászati ​​időn keresztül fejeződik ki. Ezt a következtetést figyelembe lehetne venni; ha a folyamat további lefolyásának előrejelzése során nem merültek fel állandó nehézségek. Nagyszámú, az égitestek mechanikai mozgásaival nem közvetlenül összefüggő különböző folyamatok esetében a megfigyelési intervallumon kívül az x = x(t) függvény használatával kapott elméleti előrejelzések jelentősen eltérnek a későbbi kísérleti adatoktól. Általában egy sikertelenül kiválasztott feldolgozási módszerrel próbálják megmagyarázni az elmélet és a kísérlet közötti eltérés okát, de lehet, hogy nem ez a lényege.

Minden minket érdeklő folyamat az Univerzumban megy végbe. Minden bizonnyal „érzi” az égitestek mozgásának hatását. Ez a befolyás azonban kiderülhet, hogy „nem merev”, nem meghatározó. Ez különösen abban nyilvánulhat meg, hogy a csillagászati ​​idő bizonyos szakaszaiban a folyamat állapota változatlan marad. Ezzel kapcsolatban emlékezzünk vissza a zárt üres helyiség korábbi példájára, elzárva a külvilágtól. Csak egy élő szálljon be a szobába. A „szoba-légy” rendszer állapotának változása több napon keresztül a légy mozgásától függ, mivel a szoba állapotában változás nem várható. Ugyanakkor nehéz elképzelni, hogy a légy viselkedése szorosan összefügg a csillagászati ​​idő lefolyásával.

Miután megtettünk egy ilyen hosszú kitérőt, térjünk át a folyamat saját idejének kiszámítására szolgáló algoritmus leírására.

Ebben az algoritmusban a helyi maximumok kiszámításának mértékegysége az idő természetes mértéke. Ezenkívül figyelembe veszik a folyamat stacionárius állapotának lehetséges szakaszait, amelyeknél, mint korábban említettük, a megfelelő idő megáll. Mivel két állapot azonossága csak a mérési pontosság határain belül mondható el, a továbbiakban egy bizonyos pozitív e számot használunk - a megengedett mérési hibát.

Tehát az algoritmus bemeneti adatai az n természetes szám, a pozitív szám 8, a (tk) és (x k) tömbök, k = 1, ..., n A programozás megkönnyítése érdekében az algoritmust a következő formában mutatjuk be négy szekvenciálisan végrehajtott modulból.

1. modul, a p, e, t k), (x k) adatok felhasználásával általános esetben új 7 = (7+ X = (X t) tömböt és egy nagyon specifikus kísérő tömböt képez a P = (?), ahol 1 = 1, ..., t és t<Сп. Основное назначение этого модуля -- выявление в массиве x k) последовательностей идентичных состояний процесса, сохранение первых элементов в таких последовательностях и удаление всех остальных и, наконец, уменьшение по определенному, правилу исходного интервала наблюдения от t до на сумму тех промежутков времени, в которых процесс протекает стационарно.

Az 1. modul a következő eljárásokat tartalmazza:

p: = 1, t: = 0, k: = 1.

A pp. 1, 2 számláló meghatározott kezdeti értékekkel kerül bevezetésre:

A pp. 3, 4 a számláló értékek 1-gyel nőnek.

Ellenőrizze a k^n állapotot. Ha kész, folytassa a 6. lépéssel, ellenkező esetben folytassa a 11. lépéssel.

Ellenőrizze az x k --x k = e egyenlőtlenséget, ha teljesül, akkor folytassa a 7. lépéssel, ellenkező esetben a 9. lépésre.

7. tii = ti - (tkl - tk), i = k1, ..., p.

Ez az eljárás azt jelenti, hogy ha az Xk és Xk 1 értékei nem különböztethetők meg a hibán belül, akkor a tk-tól kezdődő összes időpontot csökkentjük a tki-tk mennyiséggel.

r = r. Térjünk vissza a 4. ponthoz.

Tv = t k ; X v:=x k ; p = p v = v+l., azaz. a T, X, P tömbök elemeit képezzük és a következő v értéket rendeljük hozzá.

  • 10. Vegyük (t k, ..., t n ÉS (Xk, - X n) az n--k 1 + 1 méretű eredeti tömböket, majd térjünk vissza a 2. lépéshez.
  • 11. Nyomtasson m, (T), (X,) és (P,), ahol i = l, ..., t.

Magyarázzuk meg a kísérő P tömb elemeinek jelentését. Az előző szövegből az következik, hogy pk értéke egyenlő a tömb azon elemeinek számával (xk), amelyek közvetlenül következnek és különböznek x pi+ ... +, + kevesebb, mint e Azt is megjegyezzük, hogy pi+ ... +p m = n.

1. példa Adott: n = 20, (/*) = (2, 4, 7, 10, 12, 13, 15, 17, 20, 22, 24, 25,

  • 27, 30, 32, 33, 34, 35, 36) és (x,)= (4, 4, 6, 6, 6, 3, 2, 4, 3, 3, 3, 2, 2, 4, 5) , 5,
  • 5., 4., 3.), lásd az ábrát. 9, a.

Az 1. modul végrehajtása eredményeként m = 11-et kapunk,

(G) = (2, 3, 4, 6, 8, 11, 1-2, 15, 17, 18, 19) = (4, 6, 3, 2, 4, 3, 2, 4,5,4,3)

i(d.) = (2, 4, 1, 1, 1,3, 2, 1,3, 1, 1), lásd az ábrát. 9, b.

2. modul. Ennek bemeneti adata egy természetes m szám, valamint tömbök (7+ (X L), = 1, ..., m. Ez a modul a tömbben (TJ az időpillanatokat azonosítja [TM a], 1 = 1 m (ml

2. példa Az m, (Ть) és (X,] értékeket az előző példából vettük át. A 2. modul befejezése után ml = 3, m2 = 8, (Ш,) = (3, 8, 17) ), (Т*) = (3, 4, 6, 8, 11, 12, 15, 17), lásd még a 9. ábrát, b.

3. modul. Bemeneti adatok ml, m2, (TM n), 1 = 1, ..., ml, (G*), /2 = 1, ..., gn2.

Ez a modul egy tömb (t(-r)) létrehozására szolgál a képlet segítségével

Hol van a TV 6 [TMp, TMn+i]

A t változó az x változó változása által generált megfelelő idő. Természetes mértéke a helyi maximumok kiszámításának mértékegysége.

3. példa A T 2) kezdeti adatai megegyeznek a ml, m2 ITM és a 2. példában szereplő értékekkel. A megfelelő számítások után Н = (0; 0,2; 0,6; 1; 1,33; 1,78; 2).

4. modul. Az eredmények kimenetét generálja úgy, hogy megfeleltetést hoz létre az m értékei és a tömb x elemei között (xk).

4. példa A 2. és 3. példából származó adatok alapján a következő eredményt kapjuk, lásd a 3. ábrát. 9, itt:

t: 0; 0,2; 0,6; 1; 1,33; 1,44;

x: 6; 3; 2; 4; 3T 0 2;

Így a vizsgált algoritmus lehetővé teszi, hogy a folyamat állapotában bekövetkezett változásokról csillagászati ​​időskálán rögzített információk alapján kidolgozzuk a folyamat saját idejére vonatkozó fogalmat. Teljesen világos, hogy más algoritmusokat is használhat, például a helyi minimumok sorozatának vagy a helyi maximumokból és minimumokból álló vegyes sorozat kiszámításán. A kísérleti adatok feldolgozásakor valószínűleg különféle lehetőségeket kell tesztelni. Ha a kísérletező valamilyen oknál fogva a konkrét megfelelő idők valamelyikét választotta, és kapott tömböket (t4 és (xk), akkor a következő lépésben matematikai módszerekkel kell közelítenie a kísérleti pontokat (t*, x) valamilyen közelítő világegyenlettel. Az x = x(t) folyamatnak ezt az egyenest a kezdeti megfigyelési perióduson túlra extrapolálva jóslatokat készíthet a folyamat további lefolyásáról.

Érdekes megemlíteni egy számítási kísérletet, amelynek célja a javasolt algoritmus alkalmazásának lehetőségeinek értékelése. Kísérleti anyagként a folyók évi vízhozamára vonatkozó adatokat választottam. Vakhsh (Tádzsikisztán) az elmúlt 40 évben. Ugyanebben az időszakban információkat szereztek a Farkas-szám dinamikájáról - a naptevékenység leggyakrabban használt integrált indexéről. Ez utóbbi volt az alapja a naptevékenységi folyamat megfelelő időpontjának kialakításához. A modern időkre a folyami kiadásokra vonatkozó információk átalakultak. Vakhsh, majd a megfigyelési időszakban a vízhozam elméleti függőségét adták meg a naptevékenység megfelelő idejének függvényében. Az így kapott grafikon jellegzetessége a maximális és minimális költségek szinte periodikus viselkedése. A költségek azonban nem állandóak.

Bevezetés

A termelésszervezéssel foglalkozó workshop célja az elméleti ismeretek bővítése, elmélyítése, a gyakorlatban a leggyakrabban felmerülő problémák megoldásához szükséges készségek elsajátítása a gyártásszervezés és tervezés során.

A workshop a kurzus főbb részeinek feladatait tartalmazza. Minden téma elején rövid módszertani utasításokat és elméleti információkat, tipikus megoldási problémákat és önálló megoldási problémákat mutatnak be.

A módszertani utasítások és a rövid elméleti információk jelenléte az egyes témákban lehetővé teszi, hogy ezt a műhelyt távoktatásra használja.


A gyártási ciklus időtartamának kiszámítása

A gyártási ciklus időtartama a gyártási folyamat hatékonyságának mutatójaként szolgál.

Gyártási ciklus- a munkatárgyak gyártási folyamatban való tartózkodásának időtartama a nyersanyagok forgalomba hozatalától a késztermékek kiadásának pillanatáig.

A gyártási ciklus abból áll munkaidő, amely során a munkaerőt kiadják, és szünetek. A szünetek az őket okozó okoktól függően a következőkre oszthatók:

1) be természetes vagy technológiai – ezeket a termék jellege határozza meg;

2) szervezeti(szünet a műszakok között).

A gyártási ciklus időtartama a következő összetevőkből áll:

T ciklus = t azok a + t eszik + t tr + t k.k. + t m.o. + t m.ts.

Ahol t azok– a technológiai műveletek ideje;

nem eszik - természetes folyamatok ideje (száradás, lehűlés stb.);

t tr – a munkatárgyak szállítási ideje;

t k.k. – minőség-ellenőrzési idő;

t m.o – interoperatív ellátási idő;

t m.c. – tárolási idő az üzletek közötti raktárakban;

(t három t k.k. -vel kombinálható t m.o).

A gyártási ciklusidő számítása a termelés típusától függ. A tömeggyártásban a gyártási ciklus időtartamát a termék gyártási ideje határozza meg, azaz.

T ciklus = t M-ben,

Ahol t V– kioldó löket;

M– munkahelyek száma.

Alatt feloldó löket meg kell érteni az egyik legyártott termék megjelenése és a következő termék megjelenése közötti időintervallumot.

A kioldási löketet a képlet határozza meg

t in = Teff /V,

Ahol Tef– az elszámolási időszakra (műszak, nap, év) a munkavállalói idő tényleges alapja;

IN– ugyanarra az időszakra kibocsátott mennyiség (természetes egységekben).

Példa: T cm = 8 óra = 480 perc; T per = 30 perc; → Teff = 480 – – 30 = 450 perc.

B = 225 db; → t in = 450/225 = 2 perc.

A sorozatgyártásban, ahol a feldolgozás tételesen történik, a technológiai ciklus időtartamát nem termékegységenként, hanem a teljes tételre vonatkozóan határozzák meg. Sőt, attól függően, hogy egy tételt milyen módszerrel indítunk gyártásba, különböző ciklusidőket kapunk. A gyártás során a termékek mozgatásának három módja van: szekvenciális, párhuzamos és vegyes (soros-párhuzamos).


én. at egymás utáni Az alkatrészek mozgatásakor minden további művelet csak az előző befejezése után kezdődik. Az alkatrészek szekvenciális mozgásának ciklusideje egyenlő lesz:

Ahol n – a feldolgozás alatt álló tétel részeinek száma;

t dbén- egy műtéti idő darabszáma;

C i– munkahelyek száma per én th művelet;

m– technológiai folyamatműveletek száma.

Egy 5 darabból álló terméktételt adunk meg. A tételt egymás után 4 műveleten keresztül vezetik át; az első művelet időtartama 10 perc, a második 20 perc, a harmadik 10 perc, a negyedik 30 perc (1. ábra).

1. ábra

T ciklus = T utolsó = 5·(10+20+10+30) = 350 perc.

A mozgó alkatrészek szekvenciális módszerének előnye, hogy biztosítja a berendezés leállás nélküli működését. De hátránya, hogy a gyártási ciklus időtartama ebben az esetben a leghosszabb. Emellett a munkaterületeken jelentős alkatrészkészletek keletkeznek, ami további gyártási területet igényel.

II. at párhuzamos A tétel mozgatása során az egyes alkatrészeket nem tartják vissza a munkaállomásokon, hanem egyenként haladéktalanul továbbítják a következő művelethez, anélkül, hogy megvárnák a teljes tétel feldolgozásának befejezését. Így egy köteg alkatrész párhuzamos mozgatásával minden munkahelyen egyidejűleg különböző műveleteket hajtanak végre ugyanannak a tételnek különböző részein.

A termékek párhuzamos mozgásával járó tétel feldolgozási ideje jelentősen csökken:

dl .

Ahol n n- az alkatrészek száma benne átviteli tétel(szállítási tétel), i.e. az egyik műveletből a másikba egyidejűleg átvitt termékek száma;

Hosszúság – a leghosszabb működési ciklus.

Egy tétel párhuzamos forgalomba hozatalakor a teljes tétel részeit csak azokon a munkahelyeken dolgozzák fel folyamatosan, ahol a rövidebbeket hosszú műveletek követik. Azokban az esetekben, amikor rövid műveletek követik a hosszúakat, pl. hosszabb ideig (példánkban a harmadik művelet), ezeket a műveleteket megszakítás nélkül hajtják végre, azaz. a berendezés tétlen. Itt egy köteg alkatrészt nem lehet azonnal, késedelem nélkül feldolgozni, mivel a korábbi (hosszú) művelet ezt nem teszi lehetővé.

Példánkban: n= 5, t 1 = 10; t 2 = 20; t 3 = 10; t 4 = 30; Vel= 1.

T gőz = 1·(10+20+10+30)+(5-1)·30=70+120 = 190 perc.

Tekintsük az alkatrészek párhuzamos mozgásának diagramját (2. ábra):

2. ábra

III. A köteg egyes részeinek feldolgozásának megszakításainak kiküszöbölése érdekében minden műveletnél használja a párhuzamos-soros vagy vegyes olyan indítási mód, amelyben az alkatrészeket (feldolgozás után) egyenként, vagy „szállítási” kötegek (több darab) formájában továbbítják a következő művelethez úgy, hogy a műveletek végrehajtása egyetlen munkahelyen sem szakad meg. A vegyes módszernél a feldolgozás folytonosságát a szekvenciális módszerből, az alkatrész üzemből üzembe való átmenetét pedig közvetlenül a feldolgozása után a párhuzamos módszerből veszik át. A gyártásba való vegyes módszerrel a ciklus időtartamát a képlet határozza meg

mag .

hol van a kor. – a legrövidebb működési ciklus (minden pár szomszédos művelet);

m-1 kombinációk száma.

Ha a következő művelet hosszabb, mint az előző, vagy időben megegyezik, akkor ez a művelet egyedileg indul, közvetlenül az előző műveletben az első rész feldolgozása után. Ha éppen ellenkezőleg, a következő művelet rövidebb, mint az előző, akkor itt megszakítások lépnek fel a darabátvitel során. Ezek megelőzése érdekében olyan mennyiségű szállítási tartalékot kell felhalmozni, amely elegendő a későbbi műveletek elvégzéséhez. Ennek a pontnak a grafikonon való gyakorlati megtalálásához át kell vinni a köteg utolsó részét, és jobbra kell mozgatni a végrehajtás időtartamát. A köteg összes többi részének feldolgozási ideje a grafikon bal oldalán látható. Az első rész feldolgozásának kezdete azt a pillanatot jelzi, amikor az előző művelet szállítási hátralékát át kell vinni ebbe a műveletbe.

Ha a szomszédos műveletek időtartama azonos, akkor csak az egyiket tekintjük rövidnek vagy hosszúnak (3. ábra).

3. ábra

T utolsó pár = 5·(10+20+10+30)-(5-1)·(10+10+10) = 350-120 = 230 perc.

A gyártási ciklusidő csökkentésének fő módjai a következők:

1) A termékgyártás munkaintenzitásának csökkentése a legyártott kivitel gyárthatóságának javításával, számítógépek alkalmazásával, fejlett technológiai folyamatok bevezetésével.

2) A munkafolyamatok ésszerű megszervezése, a munkahelyek specializáción és együttműködésen alapuló elrendezése és fenntartása, a termelés kiterjedt gépesítése és automatizálása.

3) A különböző tervezett és nem tervezett munkaszünetek csökkentése a termelési folyamat tudományos megszervezésének elveinek ésszerű alkalmazása alapján.

4) A reakciók felgyorsulása növekvő nyomás, hőmérséklet, folyamatos folyamatra való átállás stb. következtében.

5) A szállítási, tárolási és ellenőrzési folyamatok fejlesztése és azok időbeni kombinálása a feldolgozási és összeszerelési folyamattal.

A termelési ciklus időtartamának csökkentése a termelésszervezés egyik komoly feladata, mert befolyásolja a forgóeszköz forgalmát, csökkenti a munkaerőköltségeket, csökkenti a raktárterületet, a szállítási igényt stb.

Feladatok

1 Határozza meg 50 darab feldolgozási ciklusának időtartamát szekvenciális, párhuzamos és soros-párhuzamos mozgástípusokkal a gyártási folyamatban! Az alkatrészek feldolgozásának folyamata öt műveletből áll, amelyek időtartama rendre minimum: t 1 =2; t 2 =3; t 3 =4; t 4 =1; t 5 =3. A második műveletet két gépen, a többit egy-egy gépen hajtják végre. A transzfer tétel mérete 4 db.

2 Határozza meg 50 darab feldolgozási ciklusának időtartamát szekvenciális, párhuzamos és soros-párhuzamos mozgástípusokkal a gyártási folyamatban! Az alkatrészek feldolgozásának folyamata négy műveletből áll, amelyek időtartama rendre minimum: t 1 =1; t 2 =4; t 3 =2; t 4 =6. A negyedik műveletet két gépen, a többit egy-egy gépen hajtják végre. A transzfer tétel mérete 5 db.

3 A gyártási folyamat során egy 200 darabos alkatrészből álló köteg párhuzamos-szekvenciális mozgással kerül feldolgozásra. Az alkatrészek feldolgozásának folyamata hat műveletből áll, amelyek időtartama rendre minimum: t 1 =8; t 2 =3; t 3 =27; t 4 =6; t 5 =4; t 6 =20. A harmadik művelet három gépen, a hatodik kettőn, a többi művelet pedig egy gépen történik. Határozza meg, hogyan fog változni a feldolgozási ciklus időtartama egy alkatrészkötegnél, ha a gyártási folyamat párhuzamos-szekvenciális változatát egy párhuzamosra cseréljük. A transzfer tétel mérete 20 db.

4 A gyártási folyamat során egy 300 darabból álló tételt párhuzamos-szekvenciális mozgással dolgoznak fel. Az alkatrészek feldolgozásának folyamata hét műveletből áll, amelyek időtartama rendre minimum: t 1 =4; t 2 =5; t 3 =7; t 4 =3; t 5 =4; t 6 =5; t 7 =6. Minden művelet egy gépen történik. Transzfer tétel – 30 darab. A gyártástechnológia fejlesztésének eredményeként a harmadik művelet időtartama 3 perccel, a hetedik művelet időtartama 2 perccel csökkent. Határozza meg, hogyan változik az alkatrészköteg feldolgozási ciklusa.

5 Egy 5 darabból álló nyersdarabot adunk meg. A köteg 4 műveleten megy keresztül: az első időtartama 10 perc, a második 20 perc, a harmadik 10 perc, a negyedik 30 perc. Határozza meg a ciklus időtartamát analitikai és grafikus módszerekkel, szekvenciális mozgással.

6 Egy négy darabból álló nyersdarabot adunk meg. A köteg 4 műveleten megy keresztül: az első időtartama 5 perc, a második 10 perc, a harmadik 5 perc, a negyedik 15 perc. Határozza meg a ciklus időtartamát analitikai és grafikus módszerekkel párhuzamos mozgással.

7 Egy 5 darabból álló nyersdarabot adunk meg. A köteg 4 műveleten megy keresztül: az első időtartama 10 perc, a második 20 perc, a harmadik 10 perc, a negyedik 30 perc. Határozza meg a ciklus időtartamát analitikai és grafikus módszerekkel soros-párhuzamos mozgás esetén.

8 Határozza meg a technológiai ciklus időtartamát egy 180 darabos terméktétel feldolgozásához! mozgásának párhuzamos és szekvenciális változataival. Feldolgozási folyamat grafikonok készítése. Az átadó tétel mérete 30 db. Az időszabványok és a műveletek száma a következő.

Az előző algoritmus váltott változata a legrövidebb hátralévő végrehajtási idő algoritmus. Ennek az algoritmusnak megfelelően az ütemező minden alkalommal azt a folyamatot választja ki, amelynek a hátralévő végrehajtási ideje a legrövidebb. Ebben az esetben is szükséges előre tudni a feladat elvégzésének idejét. Amikor új feladat érkezik, a teljes végrehajtási idejét a rendszer összehasonlítja az aktuális feladat hátralévő végrehajtási idejével. Ha az új feladat végrehajtási ideje rövidebb, az aktuális folyamat felfüggesztésre kerül, és az irányítás átkerül az új feladatra. Ez a séma lehetővé teszi a rövid kérések gyors kiszolgálását.

Háromszintű tervezés

A kötegelt feldolgozó rendszerek háromszintű ütemezést tesznek lehetővé, amint az az ábrán látható. Amint új feladatok érkeznek a rendszerbe, először a lemezen tárolt sorba kerülnek. Bemenet hozzáférés ütemező kiválaszt egy feladatot és átadja a rendszernek. A fennmaradó feladatok a sorban maradnak.

Amint egy job belép a rendszerbe, létrejön hozzá egy megfelelő folyamat, amely azonnal versenyezni kezd a processzorhoz való hozzáférésért. Előfordulhat azonban, hogy túl sok folyamat van, és mindegyik nem fér el a memóriában, akkor ezek egy része lemezre kerül. Az ütemezés második szintje határozza meg, hogy mely folyamatok tárolhatók a memóriában és melyek tárolhatók lemezen. Ezt csinálja memória ütemező .

A memóriaütemező rendszeresen megvizsgálja a lemezen lévő folyamatokat, hogy eldöntse, melyiket helyezze át a memóriába. Az ütemező által használt kritériumok között a következők szerepelnek:

1. Mennyi idő telt el a folyamat lemezre cseréje vagy lemezről való betöltése óta?

2. Mióta használja a folyamat a CPU-t?

3. Mekkora a folyamat mérete (a kis folyamatok nem zavarnak)?

4. Mi a folyamat jelentősége?

A harmadik ütemezési szint felelős azért, hogy a kész állapotban lévő folyamatok hozzáférjenek a processzorhoz. Amikor „ütemezőről” beszélünk, általában arra gondolunk CPU ütemező . Ez az ütemező bármilyen, a helyzetnek megfelelő algoritmust használ, megszakítással és anélkül is. Ezen algoritmusok egy részét már megvizsgáltuk, másokkal később fogunk megismerkedni.

Tervezés interaktív rendszerekben.

Ciklikus tervezés.

Az egyik legrégebbi, legegyszerűbb, legigazságosabb és leggyakrabban használt algoritmus a ciklikus ütemező algoritmus. Minden folyamatnak adott processzoridő, az úgynevezett időszelet. Ha a folyamat az időszelet végén még fut, akkor leáll, és a vezérlés átkerül egy másik folyamatra. Természetesen, ha a folyamat leáll vagy korán leáll, akkor ezen a ponton vezérlési átmenet következik be. A kör-robin ütemezés megvalósítása egyszerű. Az ütemezőnek csak a folyamatok listáját kell fenntartania kész állapotban. Amikor egy folyamat elérte az időkorlátot, akkor a lista végére kerül.

Ennek az algoritmusnak az egyetlen érdekes aspektusa a kvantum hossza. Az egyik folyamatról a másikra való váltás eltart egy ideig - el kell menteni és betölteni a regisztereket és memóriatérképeket, frissíteni kell a táblákat és listákat, el kell menteni és újratölteni a memória gyorsítótárat stb. A következtetés a következőképpen fogalmazható meg: túl kicsi kvantum vezet. a gyakori folyamatváltáshoz és a kis hatékonysághoz, de a túl nagy kvantum lassú választ eredményezhet a rövid interaktív kérésekre. A 20-50 ms körüli kvantumérték gyakran ésszerű kompromisszum.

Kiemelt tervezés.

A körmérkőzéses ütemezésnek van egy fontos feltételezése, hogy minden folyamat egyenlő. Egy nagy számú felhasználóval rendelkező számítógép esetében ez nem biztos, hogy így van. Például egy egyetemen először a dékánokat kell kiszolgálni, utána a professzorokat, titkárokat, takarítókat, és csak azután a hallgatókat. Az ilyen külső tényezők figyelembevétele prioritási tervezéshez vezet. Az alapötlet egyszerű: minden folyamathoz prioritást rendelnek, és a vezérlés a legmagasabb prioritású kész folyamatra kerül át.

Több sor.

Az egyik első prioritású ütemező a CTSS rendszerben (kompatibilis time-shared system) került megvalósításra. A CTSS rendszer fő problémája az volt, hogy túl lassú volt a folyamatváltás, mivel az IBM 7094 számítógép csak egy folyamatot tudott tárolni. Minden egyes kapcsoló az aktuális folyamat lemezre való feltöltését jelentette

és kiolvassa az új folyamatot a lemezről. A CTSS fejlesztői hamar rájöttek, hogy a hatékonyság nagyobb lenne, ha a processzorral korlátozott folyamatok nagyobb időszeletet kapnának, mintha kis időszeleteket kapnának, de gyakran. Ez egyrészt csökkenti a memóriából a lemezre történő átvitelek számát, másrészt a válaszidő romlásához vezet, ahogy azt már láthattuk.

Ennek eredményeként egy olyan megoldás született, amely elsőbbségi osztályokat tartalmaz. A legmagasabb prioritású osztályba tartozó folyamatok egy kvantumot, a következő osztályba tartozó folyamatok két kvantumot, a következő osztályba tartozó folyamatok négy kvantumot, stb. osztály.

Példaként vegyünk egy folyamatot, amelynek több mint 100 kvantumot kell kiszámítania. Először egy kvantumot kap, majd lemezre pumpálja. Legközelebb 2 kvantumot kap, akkor 4, 8,16, 32, 64, bár a 64-ből csak 37-et használ. Ebben az esetben a 100 helyett csak 7 átvitelre lesz szükség (beleértve a kezdeti terhelést is). kör-robin algoritmus használatával szükséges. Ráadásul, ahogy a folyamat egyre mélyebbre kerül a prioritási sorba, egyre ritkábban indul el, így a processzor rövidebb folyamatokra kerül.

„A legrövidebb folyamat a következő”

Mivel a Shortest Task First algoritmus minimálisra csökkenti az átlagos átfutási időt a kötegelt feldolgozó rendszerekben, ezért interaktív rendszerekben is szeretnénk használni. Bizonyos mértékig ez lehetséges. Az interaktív folyamatok leggyakrabban a „parancsra várás, parancs végrehajtása, parancsra várás, parancs végrehajtása...” mintát követik, ha az egyes parancsok végrehajtását külön feladatként kezeljük, minimálisra csökkenthetjük a teljes átlagos választ. időt úgy, hogy először futtassa le a legrövidebb feladatot. Az egyetlen probléma az

annak megértése, hogy a várakozási folyamatok közül melyik a legrövidebb.

Az egyik módszer a folyamat hosszának becslésén alapul a folyamat korábbi viselkedése alapján. Ebben az esetben a legrövidebb becsült idejű folyamat indul el. Tegyük fel, hogy a parancs várható végrehajtási ideje T 0 és a következő futás várható ideje T 1 . Az időbecslés javítható, ha ezeknek az időknek a súlyozott összegét aT 0 + (1 - a)T 1 vesszük. A megfelelő érték kiválasztásával a becslési algoritmust gyorsan elfelejthetjük, vagy éppen ellenkezőleg, sokáig megjegyezhetjük azokat. Ha a = 1/2-t veszünk, egy sor becslést kapunk:

T 0, T 0/2 + T 1/2, T 0/4 + T 1/4 + T 2/2, T 0/8 + T 1/8 + T 2/4 + T 3/2.

Három futtatás után a T 0 súlya a becslésben 1/8-ra csökken.

A sorozat következő értékének az előző érték és az előző becslés súlyozott átlaga alapján történő becslésének módszerét gyakran nevezik öregedésnek. Ez a módszer sok olyan helyzetben alkalmazható, ahol a korábbi értékek alapján történő becslés szükséges. Az öregedés megvalósításának legegyszerűbb módja a = 1/2. Minden lépésnél csak kell

adjunk hozzá egy új értéket az aktuális becsléshez, és osszuk fel az összeget (1 bittel jobbra tolva).

Garantált tervezés.

A tervezés alapvetően más megközelítése az, hogy valódi ígéreteket teszünk a felhasználóknak, majd teljesítjük azokat. Íme egy ígéret, amelyet könnyű kimondani és betartani: ha n felhasználóval osztasz meg egy processzort, akkor a processzor teljesítményének 1/n-ét megkapod.

És egy olyan rendszerben, amelyben egy felhasználó és n processzor fut, mindegyik 1/n processzorciklust kap.

Ennek az ígéretnek a teljesítéséhez a rendszernek nyomon kell követnie a CPU-allokációt a folyamatok között az egyes folyamatok létrehozásának pillanatától kezdve. A rendszer ezután kiszámítja a processzorra jogosult CPU erőforrások mennyiségét, például a létrehozás óta eltelt időt osztva n-nel. Most kiszámolhatjuk a folyamatnak adott idő és a jogosult idő arányát. Az így kapott 0,5-ös érték azt jelenti, hogy a folyamat csak a felét kapta meg, a 2,0 pedig azt, hogy a folyamat kétszer annyit kapott, mint amennyit kellett volna. Ezután a legkisebb arányú folyamatot indítjuk el, amíg

nem lesz nagyobb, mint a legközelebbi szomszédé.

Lottó tervezés.

Az algoritmus azon alapul, hogy sorsjegyeket osztanak ki különböző erőforrásokhoz, köztük a processzorhoz való hozzáférés érdekében. Amikor a tervezőnek döntést kell hoznia, véletlenszerűen kiválaszt egy sorsjegyet, és annak tulajdonosa hozzáfér az erőforráshoz. Ami a CPU-hozzáférést illeti, a "lottó" másodpercenként 50-szer történhet meg, a nyertes 20 ms CPU-időt kap.

A fontosabb folyamatokhoz további jegyeket lehet adni a nyerési valószínűség növelésére. Ha csak 100 jegy van és ebből 20 van egy folyamatban, akkor a processzoridő 20%-át kapja. Ellentétben az elsőbbségi ütemezővel, amelyben nagyon nehéz felmérni, hogy mondjuk a 40-es prioritás mit jelent, a lottóütemezésben minden nyilvánvaló. Minden folyamat hozzávetőlegesen a jegyek százalékos arányával azonos mennyiségű erőforrást kap.

A lottó tervezésnek számos érdekes tulajdonsága van. Például, ha a létrehozás során egy folyamat több jegyet kap, akkor a következő sorsolásnál a nyerési esélye arányos a jegyek számával.

A kommunikációs folyamatok szükség esetén jegyet válthatnak. Tehát, ha egy kliens folyamat üzenetet küld egy szerverfolyamatnak, majd blokkolja, akkor az összes jegyét átadhatja a szerverfolyamatnak, hogy növelje a szerver elindulásának esélyét. Amikor a szerverfolyamat befejeződik, visszaküldheti az összes jegyet.

Tisztességes tervezés.

Eddig azt feltételeztük, hogy minden folyamatot attól függetlenül irányítanak, hogy ki a tulajdonosa. Ezért ha az 1. felhasználó 9, a 2. felhasználó pedig 1. folyamatot hoz létre, akkor kör-robin ütemezéssel vagy egyenlő prioritások esetén az 1. felhasználó a processzor 90%-át kapja meg, a 2. felhasználó pedig csak 10-et.

Az ilyen helyzetek elkerülése érdekében egyes rendszerek az ütemezés előtt figyelmet fordítanak a folyamat tulajdonosára. Ebben a modellben minden felhasználó egy bizonyos részt kap a processzorból, és az ütemező ennek megfelelően választ ki egy folyamatot. Ha a példánkban minden felhasználó rendelkezett

a processzor 50%-át ígérték, akkor a processzor 50%-át megkapják, a processzorok számától függetlenül.

Tervezés valós idejű rendszerekben.

A valós idejű rendszerekben az idő alapvető szerepet játszik. Leggyakrabban egy vagy több külső fizikai eszköz generál bemeneti jeleket, amelyekre a számítógépnek adott időn belül megfelelően reagálnia kell.

A valós idejű rendszerek fel vannak osztva kemény valós idejű rendszerek , ami minden feladatnál szigorú határidők meglétét jelenti (ezeket be kell tartani), ill rugalmas valós idejű rendszerek , amelyben az időbeosztás megszegése nem kívánatos, de elfogadható. A program mindkét esetben több folyamatra oszlik, amelyek mindegyike előre jelezhető. Ezek a folyamatok leggyakrabban rövidek, és egy másodpercen belül befejezik munkájukat. Külső jelzés megjelenésekor a tervezőnek kell gondoskodnia az ütemterv betartásáról.

A külső események, amelyekre a rendszernek reagálnia kell, felosztható időszakos(rendszeres időközönként előforduló) és nem időszakos(megjósolhatatlanul bekövetkezik). A rendszernek több időszakonkénti eseményfolyamot is fel kell dolgoznia. Az egyes események feldolgozásához szükséges időtől függően előfordulhat, hogy a rendszer nem képes minden eseményt időben feldolgozni.


Kapcsolódó információk.


(periódusos tevékenység esetén a munkából eltöltött idő annak befejezéséig, interaktív tevékenység esetén pedig a rendszer reagálásáig és az első felhasználói kilépés átadásáig számít bele); vagy maximalizálás igazságszolgáltatás(egyenlő mennyiségű CPU-idő minden folyamathoz, vagy általánosabban megfelelő idő az egyes folyamatok prioritásától és munkaterhelésétől függően). A gyakorlatban ezek a célok gyakran ütköznek egymással (például az átviteli sebesség a késleltetéssel szemben), ezért az ütemező megfelelő kompromisszumot köt. A preferenciát a fent említett kérdések bármelyike ​​méri, a felhasználó igényeitől és céljaitól függően.

OS/360 és utódai

AIX

Az AIX 4-es verziójában a szálütemezési házirend három lehetséges beállítása lehetséges:

  • Először, először ki: Ha egy ilyen házirenddel rendelkező szál ütemezése megtörtént, az teljesen lefut, hacsak nem blokkolják, önként feladja a processzor irányítását, vagy egy magasabb prioritású szál küldhetővé válik. Csak a rögzített prioritású szálak rendelkezhetnek FIFO ütemezési házirenddel.
  • Round Robin: Ez hasonló az AIX 3-as verzió áramkör-ütemezőjéhez, amely 10 ms-os időszeletek alapján ciklusokat hajt végre. Ha egy PP-szál vezérléssel rendelkezik egy időrés végén, akkor az azonos prioritású szálak sorának végére lép. Csak a rögzített prioritású szálaknak lehet Round Robin ütemezési szabályzata.
  • EGYÉB: Ezt a házirendet a POSIX1003.4a határozza meg. Az AIX 4-es verziójában ez a házirend egyenértékű az RR-vel, kivéve, hogy a nem rögzített prioritású szálakra vonatkozik. Egy futó szál prioritásértékének újraszámítása minden megszakításhoz azt jelenti, hogy egy szál elveszítheti az irányítást, mert a prioritás értéke magasabbra emelkedett, mint egy másik szál. Ez az AIX 3-as verzió viselkedése.

A szálak elsősorban azon alkalmazások számára érdekesek, amelyek jelenleg több aszinkron folyamatból állnak. Ezek az alkalmazások kis terhelést jelenthetnek a rendszerre, ha többszálas szerkezetté alakítják át.

Az AIX 5 a következő ütemezési házirendeket valósítja meg: FIFO, round-robin és fair round-robin. A FIFO házirend három különböző megvalósításból áll: FIFO, FIFO2 és FIFO3. A körmérkőzés házirendje az AIX-ben SCHED_RR, a tisztességes körmérkőzés házirend pedig SCHED_OTHER.

Linux

Linux 2.4

A szintén Kolivas által létrehozott Brain Fuck Scheduler (BFS) a CFS alternatívája.

FreeBSD

A FreeBSD többszintű visszacsatolási sort használ 0-255 prioritásokkal. A 0-63 a megszakítások számára van fenntartva, a 64-127 a kernel felső fele, a 128-159 a valós idejű felhasználói szálak, a 160-223 az időmegosztó felhasználói szálak, és a 224-255 a tétlen felhasználói szálak számára. Ezenkívül a Linuxhoz hasonlóan aktív sorbeállítást használ, de van tétlen sora is.

A fejlesztők, különösen a tapasztalatlanok, gyakran összezavarodnak, amikor megkérik őket, hogy határozzanak meg határidőket a feladatok elvégzésére. A tervezés képessége azonban nagyon hasznos és szükséges készség, amely nemcsak a munkában, hanem az életben is segít. Úgy döntöttünk, hogy megkérdezzük a szakértőket, hogyan tanulhatják meg a helyes tervezést és a projektek időben történő megvalósítását.

A rövid következtetések a cikk végén találhatók.

A fejlesztőnek általában több paramétert kell egyszerre figyelembe vennie, hogy megbecsülje, mennyi időbe telik egy feladat elvégzéséhez:

  1. Ilyen feladatok elvégzésében és ezzel a technológiai köteggel való munkavégzésben szerzett tapasztalat. Ha valami alapvetően újat kell tennie, akkor különösen óvatosnak kell lennie az értékeléssel.
  2. Ezzel az ügyféllel végzett munka során szerzett tapasztalat. Az ügyfél ismeretében nagyjából megjósolható néhány további követelmény és a változtatások köre.
  3. A kód minősége, amellyel dolgozni fog. Ez a leginkább befolyásoló tényező, ami miatt minden sokáig eltarthat, és általában nem a tervek szerint alakul. Ha a projektnek vannak tesztjei, akkor mindenhol csak kifejezett függőségek vannak, és a funkcionalitás jól el van szigetelve, minden nem olyan ijesztő. Sokkal rosszabb a helyzet, ha tesztek nélküli örökölt kóddal vagy implicit függőségekkel túlterhelt kóddal van dolgunk. Az olyan dolgok, mint a „mágikus függvények” (amikor nehéz látni a kódból a végső híváscsomagot) és a kódmásolás (amikor több független szakaszt kell szerkesztenie bizonyos funkciók megváltoztatásához), szintén bonyolíthatják a dolgokat.

Ahhoz, hogy megtanulja, hogyan kell megfelelően becsülni a munkavégzési határidőket, folyamatosan gyakorolnia kell. Munkám elején pontosan ezt tettem: megbecsültem a beérkező feladatok elvégzésének idejét, még akkor is, ha senki nem kérte, majd megnéztem, mennyire sikerült pontosan bekerülni a becslésembe. A feladat elvégzése közben feljegyezte, mely műveletek tartanak tovább. Ha valami jelentősen megnövelte az időszakot, emlékeztem erre a pillanatra, és figyelembe vettem a következő értékeléseknél.

A tisztán munkához szükséges idő objektív értékeléséhez egy kis tartalékot kell hozzáadni a vis maior helyzetek fedezésére. Ezt gyakran a fő feladat elvégzésének százalékában értékelik, de ez mindenkinél más: van, aki az idő 20%-át, van, aki 10%-ot, és van, aki 50%-ot tesz hozzá.

Szintén hasznos elemezni a határidők elmulasztásának okait minden egyes súlyos határidősértés után. Ha hiányzik a képzettséged, dolgoznod kell a gyenge pontjaidon. Ha a probléma szervezeti volt, értse meg, mi akadályozta meg a normális működését.

Lefokozás előléptetése

, a "Jet Infosystems" innovatív technológiákkal és megoldásokkal foglalkozó központ műszaki igazgatója

Számos cikket szentelnek a projekt munkaintenzitásának felmérésére szolgáló módszereknek, beleértve a munka időtartamát és az egyes feladatokat. Ez azonban továbbra is konfliktusokat okoz mind a projektcsapaton belül, mind az ügyféllel való kommunikáció során.

Az értékelés fő asszisztense a tapasztalat. Próbáld meg valahogy összehasonlítani az új feladatot a már elvégzettekkel. Ha jelentést készít, nézze meg, mennyi ideig tartott egy hasonló jelentés a múltban. Ha valami újat csinál, próbálja azt ismert részekre bontani és értékelni. Ha a feladat teljesen új, szánjunk időt a tanulásra (még jobb, ha ezt az időt egyeztetjük a feladatot kiíróval).

Ügyeljen a kísérő szakaszokra - ha szolgáltatást kell fejlesztenie, akkor az értékelésnek tartalmaznia kell az egységtesztet is (és talán nem csak az egységtesztet), a tesztadatok előkészítése eltart egy ideig. Érdemes megfontolni az integrációt más szolgáltatásokkal stb. Hagyjon időt a talált hibák kijavítására saját maga vagy tesztelők segítségével. Sok időt el lehet pazarolni „láthatatlan” feladatokra. Például van egy értékelés a fejlesztéshez és van egy értékelés a teszteléshez, de egy műtermék tesztelésre való átadása magában foglalhatja az állványok telepítését. Ezért fontos, hogy mentálisan vizualizáljuk az egész folyamatot, hogy ne maradjunk le semmiről.

A komplexitás meghatározása után új munkákat kell bevinni a naptárba, nem feledkezve meg a párhuzamosan futó egyéb feladatokról, tevékenységekről sem.

És ne felejtsd el, hogy a tervek haszontalanok, de a tervezés felbecsülhetetlen. Tanulja meg időben módosítani a terveket, tájékoztassa minden érintettet, és időben eszkaláljon, hogy az elmulasztott határidők senkit ne érjenek meglepetésként.

Lefokozás előléptetése

Kérdés, amire nem lehet röviden válaszolni. Ha egyszerű lenne, akkor nem létezne a határidők elmulasztásának problémája.

Ahhoz, hogy a fejlesztési határidőket kiszámíthatóbbá tegyük, először meg kell értenünk, hogy a programozók miért követnek el állandóan hibákat.

Az első ok az, hogy a programozó által elvégzett feladatok többsége bizonyos fokig egyedi. Ez azt jelenti, hogy a programozó valószínűleg először fog hasonló feladatot végezni. Fogalma sincs arról, mennyi ideig tart ez a munka. Ha ez egy komoly tapasztalattal rendelkező programozó, és hasonló feladatot kellett végrehajtania, akkor az értékelése közelebb áll a valósághoz.

Vegyünk egy egyszerű hasonlatot: ha még soha nem ásott árkot, nem tudja pontosan megmondani, hogy mennyi ideig tart egy 30 cm széles, 60 cm mély és 20 méter hosszú árok kiásása. Ha korábban ásott, akkor a munkaidőre vonatkozó becslése sokkal közelebb áll a munka tényleges időtartamához.

A második ok az, hogy a programozók természetüknél fogva optimisták. Azaz egy feladat mérlegelésekor, megvalósítási lehetőség kiválasztásánál és a fejlesztések kiértékelésénél a fejlesztő elvárja, hogy minden úgy fog működni, ahogy elvárja. És nem gondol azokra a problémákra, amelyekkel útközben találkozni fog. Gyakran nem tudja előre látni őket. Például van egy olyan feladat, amelyet a programozó egy harmadik féltől származó nyílt forráskódú szoftverkönyvtár segítségével hajthat végre. Az értékelés szakaszában megtalálta az interneten, olvassa el a leírását - megfelel neki. És még azt is helyesen becsülte meg, hogy mekkora munkát kell végeznie a könyvtár használatának kiépítéséhez. De egyáltalán nem számított arra, hogy ebben a könyvtárban hiba léphet fel szoftverterméke környezetében.

A fejlesztőnek nemcsak a könyvtár használatát kell beépítenie a kódjába, hanem magában a könyvtárban is ki kell javítania egy hibát. És gyakran a fejlesztő nem ad időt a hibáinak kijavítására. A statisztikák azt mutatják, hogy a tesztelés és a hibák kijavítása a kódolással töltött idő körülbelül 50%-át teheti ki. Az ábra a fejlesztő képzettségétől, a környezettől és az alkalmazott fejlesztési gyakorlattól függ (pl. az egységtesztek jelentősen lerövidítik ezt az időt, és kisebb a fejlesztési feladat végső időtartama/munkaintenzitása).

Ha visszatérünk az ásóval való hasonlathoz, az ásó nem számított arra, hogy eltörik a lapátja, és két órát kell töltenie új vágás után.

A harmadik ok az előre nem látható követelmények. Az anyaggyártás egyetlen más területén sem, amellyel a vásárlók annyira szeretik a szoftverfejlesztést összehasonlítani, nincs ekkora új igény. Képzeljük el egy ásó áthaladását, aki 20-ból 19 métert ásott, és a megrendelőtől azt a kívánságot hallotta, hogy az árok ne egyenes vonalban menjen, hanem egy 97 centiméteres karhosszúságú kígyóban.

Hogyan lehet mindezt kezelni, és hogyan lehet ilyen bizonytalan körülmények között élni? A bizonytalanság csökkentése és az időtartalékok felépítése.

A legegyszerűbb módja annak, hogy az elvárásait a valósághoz közelítse, a játékos Pi hüvelykujjszabály használatával. Miután megkapta a becslést a fejlesztőtől (idő vagy munkaintenzitás tekintetében), meg kell szoroznia Pi-vel (= 3,14159). Minél tapasztaltabb a fejlesztő az értékelést, annál alacsonyabb lehet ez az arány.

Kötelező az eredeti probléma kis, legfeljebb 4 órás feladatokra bontásának gyakorlata. Minél részletesebb a dekompozíció, annál nagyobb az esélye, hogy a becslés közel áll a tényleges összetettséghez/időtartamhoz.
Ha visszatérünk a tartalék felosztásához, akkor ezt az időt a projekt végén kell felosztani. Rossz gyakorlat tartalékot képezni, és minden feladathoz beépíteni. Szigorúan betartják a Parkinson-törvényt: „A munka minden rászánt időt kitölt”.

Röviden összefoglalva, a munka befejezésének határidejének helyes meghatározása érdekében a következő műveletek hasznosak lesznek:

  • munkabontást végezni, a feladatot a lehető legrészletesebb lépésekre bontva;
  • prototípuskészítést végezni;
  • korlátozza a korábban előre nem látott követelmények végrehajtását. Ez nem jelenti azt, hogy ezeket nem szabad megtenni, de célszerű kiemelni ezeket a követelményeket, és egyeztetni a megrendelővel a megvalósításuk ütemezésének és költségének módosításáról;
  • vegye figyelembe az oldat stabilizálásához szükséges időt;
  • gyakorlatok alkalmazása a kód minőségének javítására, például írási egységtesztek;
  • általános tartalékot állapít meg.

Nos, ne feledje, hogy ha egy tény 30%-kal meghaladja a becslését, akkor ez nagyon jó eredmény.

Lefokozás előléptetése

A legpontosabb értékeléshez valódi fejlesztési tapasztalatra van szükség, és kifejezetten egy adott területen. De vannak általános szabályok is, amelyek segítenek elkerülni a tervezési hibákat és a problémákat a munka megrendelőhöz való eljuttatása során. Ezeket a szabályokat így írnám le.

Először is meg kell értened a problémát. Ez nyilvánvalónak tűnik, és nem kapcsolódik közvetlenül az időzítési becslésekhez, de valójában ez egy kulcsfontosságú pont. Még komoly nagy projekteknél is a meghibásodás és a késedelem egyik fő tényezője a követelmények meghatározásának problémája. A kezdő fejlesztők számára ez sajnos komoly probléma - nem olvassák el a műszaki leírást, vagy nagyon szelektíven olvasnak és értenek (tíz pontból ötöt emlékeztek és teljesítettek, a többire pedig emlékeztek az eredmény beküldésekor). Nyilvánvaló, hogy egy félreértett feladatot nem lehet időben helyesen végrehajtani.

A következő lépés magának a fejlesztési időnek a becslése. A programozás sajátossága, hogy nincsenek teljesen azonos feladatok. Ez érdekesebbé teszi a munkánkat, de a határidők becslése nehezebb. Itt jól működik a dekompozíció, pl. egy összetett, egyedi probléma felosztása apró, ismerős részfeladatok sorozatára. És mindegyik már eléggé megfelelően értékelhető órákban. Adjuk össze a részfeladatok becsléseit, és kapjunk becslést a teljes feladatra.

Általában egy ilyen becslés csak magának a kódolásnak a költségeit tartalmazza. Ez természetesen a fejlesztés legfontosabb része, de messze nem az egyetlen (és gyakran nem is a legterjedelmesebb). A feladat teljes körű elvégzéséhez hozzátartozik még a specifikáció elolvasása, pontosítása, kollégákkal vagy a megrendelővel való találkozás, hibakeresés és tesztelés, dokumentáció elkészítése, az eredmény kézbesítése (megbízónak történő bemutatás és esetleges módosítások az ő észrevételei alapján). Csak a tapasztalat fogja megmondani, hogy pontosan mennyi idő alatt hajtja végre ezeket a műveleteket. Eleinte fontos, hogy ne felejtse el ezeket figyelembe venni a számítások során, és tapasztaltabb kollégáktól kérhet hozzávetőleges időbecslést.

Tehát becslést készítünk a kódolás munkaerőköltségeiről, hozzáadjuk a további munkák költségeit - és megkapjuk a feladat elvégzéséhez szükséges idő becslését. De ez még nem minden! Fel kell tüntetni a feladat tervezett befejezési dátumát. Hiba lenne egyszerűen elosztani a munkaerőköltségeket (órákban) 8 órával, és hozzáadni az aktuális dátumhoz. A gyakorlatban a fejlesztő soha (oké, szinte soha) nem dolgozik 100%-ban egy adott feladaton. Minden bizonnyal más munkával fog időt tölteni - fontos, de nem közvetlenül a fő munkához kapcsolódóan. Például kollégák segítése, képzés, riportírás stb. A tervezés során általában úgy gondolják, hogy a munkaidő 60-70%-át közvetlenül az aktuális projekten dolgozzák. Ezenkívül figyelembe kell vennie az esetleges késéseket, amelyek megakadályozzák, hogy folyamatosan dolgozzon a feladaton. Például, ha ehhez más emberekkel (kollégákkal, ügyfelekkel) kell kapcsolatba lépnie, vegye figyelembe az elérhetőségüket, a munkabeosztásukat stb.

Itt vannak az alapvető szabályok, amelyek véleményem szerint segítenek a fejlesztőnek elkerülni a problémákat a becsléssel és a határidők betartásával. Ezenkívül a kulcs az, hogy saját tapasztalatot gyűjtsön mind a feladatok végrehajtásában, mind az értékelésben. Például nagyon hasznos egy feladat elvégzése után összehasonlítani a kezdeti becslést a tényleges határidőkkel, és következtetéseket levonni a jövőre nézve. És természetesen érdemes tanulmányozni mások tapasztalatait. Ajánlom figyelmedbe S. McConnell „Mennyibe kerül egy szoftverprojekt” és S. Arkhipenkov „Előadások a szoftverprojektmenedzsmentről” című könyvét.

Lefokozás előléptetése

A határidők becslése és tervezése során a következőket kell tennie:

  1. Bontsa fel a feladatot kis funkcionális darabokra oly módon, hogy világosan megértse, mennyi ideig tart az egyes darabok kidolgozása.
  2. A dekompozícióval párhuzamosan minden bizonnyal további kérdések is felmerülnek a funkcionalitást illetően, amelyeket a problémafelvetésben nem írtak le. Az ilyen kérdésekre választ kell kapni, mivel ez közvetlenül kapcsolódik a munka terjedelméhez és így az időzítéshez.
  3. Adja hozzá a kockázatok bizonyos százalékát a végső értékeléshez. Ezt empirikusan határozzák meg. Kezdheti például 10-15%-os kockázattal.
  4. Tudja meg, hogy egy programozó naponta hány órát hajlandó egy feladat elvégzésére fordítani.
  5. A végső becslést elosztjuk a naponta kiosztott óraszámmal, és megkapjuk a megvalósításhoz szükséges napok számát.
  6. A naptárra és a teljesítéshez szükséges napok számára összpontosítunk. Figyelembe vesszük a hétvégéket és egyéb napokat, amikor a programozó nem tud a feladaton dolgozni, valamint a munka kezdési dátumát (a fejlesztő nem mindig kész ugyanazon a napon átvállalni a feladatot). Így megkapjuk a munka kezdési és befejezési dátumát.

Lefokozás előléptetése

Cégünknél a feladattervezés mindig több szakaszon megy keresztül. Üzleti oldalon 5-6 stratégiai célt fogalmazunk meg az évre. Ezek magas szintű feladatok, például néhány paraméter megnövelése ennyi százalékkal. Ezt követően a vállalat különböző részlegei üzleti feladatokat fogalmaznak meg minden IT csapat számára. Ezeknek a feladatoknak a határideje kezdeti hozzávetőleges becslést kap, amelyet gyakran a csapat összes tagja – menedzser, elemző, fejlesztő és tesztelő – alakít ki. Miután a vállalkozás megkapta ezt az értékelést, a vállalat stratégiai céljai alapján rangsorolja a feladatokat. Ebben segítenek az átfogó stratégiai célok, nyilvánvalóvá válik, hogy mindannyian valamilyen közös ügyért dolgozunk, nincs olyan helyzet, amikor valaki csak a saját irányába húz; A határidők szempontjából pontosan megbecsült feladatokból sprinteket gyűjtünk. Egyes csapatok esetében negyedévente, másoknak havonta. A csapatok több olyan feladatra is pontos becslést adnak, amelyek az előzetes becslés szerint a következő sprintre esnek majd. A nagy feladatokat alacsonyabb szintű feladatokra osztják, amelyekért egy-egy konkrét végrehajtó felel, és ő ad pontos értékelést.

Ebben a szakaszban fontos, hogy ne felejtsen el időt tartalékolni a hibák kijavítására, mert csak az nem hibázik, aki nem csinál semmit. Mind a terméktulajdonosok, mind az üzleti ügyfelek nagyon jól megértik ezt. Ugyanakkor a szükséges időnek megfelelőnek kell lennie: senki sem fogja megérteni azt a fejlesztőt, aki túl hosszú határidőt szab egy egyszerű feladatra, meg kell indokolnia a döntését. A legnehezebb dolog elmagyarázni a vállalkozásnak, hogy miért kell időbe telik az átalakítás. Hálásak vagyunk cégünknek azért, hogy ez időről időre sikerül, mert végső soron az átalakítás az infrastruktúra egyszerűsödéséhez, a kód rendbetételéhez vezet, ami növeli a rendszer stabilitását és jelentősen felgyorsíthatja a fejlesztést. új funkciókról.

Néha még mindig előfordulnak hibák az értékelésben. Véleményem szerint ezt a fejlett infrastruktúrával rendelkező nagyvállalatok fejlesztési osztálya nem tudja teljesen elkerülni. Ebben az esetben fontos, hogy a fejlesztő haladéktalanul tájékoztassa menedzserét a történtekről, neki pedig sikerül figyelmeztetnie az üzletet, és „visszajátszani” valamit a cég általános terveiben. Ebben a módban dolgozni sokkal helyesebb, mint kétségbeesetten megpróbálni 3 nap alatt megtenni azt, ami 5-öt vesz igénybe, és aztán belefulladni a rengeteg hibába, amelyek az ilyen kapkodás miatt keletkeztek.

Lefokozás előléptetése

A helyes válasz a kérdés mindkét részére [hogyan tanuljunk meg helyesen tervezni és időben teljesíteni egy projektet - Piros.] - tapasztalat. Nincs más módja annak, hogy „megismerjük a zent”. A döntéselmélet szerint pontos következtetéseket csak számos, már rendelkezésre álló adat elemzése alapján lehet levonni. És minél több adat áll rendelkezésre, annál pontosabb a végső előrejelzés és értékelés.

Herbert Shaw szavaival élve: „A tapasztalat az az iskola, amelyben az ember megtanulja, milyen bolond volt korábban.” Ez egy meglehetősen egyszerű következtetéshez vezet: ha a programozónak már van olyan tapasztalata, amely megfelel az adott feladatnak, akkor támaszkodhat rá, ha nem, támaszkodhat „kollégái” tapasztalataira.

Ezután meg kell értened, hogy a határidők közvetlen tervezése olyan feladat, amellyel az emberek nagyon-nagyon rosszul birkózni, különösen a fejlesztés során. Az esedékesség becslésekor jó gyakorlatnak tekinthető, ha az eredeti becslésbe „korrekciós tényezőket” vezetnek be. Ez a mérőszám 1,5 és 3 között változhat, a fejlesztő tapasztalataitól és a projekten belül megoldandó feladatok bizonytalansági fokainak összességétől függően.

Lefokozás előléptetése

A határidők meghatározásakor számos tényezőt figyelembe kell venni.

Például munkatapasztalat. Mennyire érti pontosan az előttünk álló munka körét? Csináltál már ilyesmit? Nyilvánvaló, hogy minél több tapasztalattal rendelkezik, annál gyorsabban fejeződik be a munka.

A határidők meghatározásában jelentős szerepe van a jól megírt műszaki specifikációnak. A mi térségünkben ezzel nagyon nehéz a helyzet. Gyakran az ügyfél maga sem tudja, mit akar, ezért azt tanácsolom, hogy töltsön el egy-két plusz napot, de szerezze meg az ügyfélnek, hogy világos képet kapjon a kívánt eredményről. Fontos, hogy ez a megértés kölcsönös legyen. És csak ezt követően kezdheti meg a tárgyalásokat az összegről és a feltételekről.

Ezenkívül mindig vegye figyelembe a kockázatokat. Kezdőknek azt javaslom, hogy a becsült befejezési időt szorozzák meg kettővel. Végtére is, jobb egy projektet az ütemterv előtt teljesíteni, és az ügyfél szemében szakemberré fejlődni, mint később szállítani, és tönkretenni a hírnevét.

Lefokozás előléptetése

Általános ajánlás, hogy a fejlesztőnek meg kell tanulnia a feladatok helyes bontását, mindig keresse a lehetséges buktatókat, hagyatkozzon saját tapasztalataira, és ne felejtse el időben figyelmeztetni az ügyfeleket, kollégákat, ha a feladat nem oldható meg a megadott időn belül. keret.

Egy világos tervet felépíteni sokkal nehezebb, mint egyetlen feladat elvégzésének határidejét meghatározni. Ugyanakkor fontos, hogy ne csak a projektet időben teljesítsük, hanem az is, hogy az Ön által kifejlesztett rendszer megfelelően megoldja az üzleti problémákat. Itt különféle szoftverfejlesztési módszertanok segítik az informatikai csapatokat: a RUP-tól és az MSF-től a SCRUM-ig és más Agile formátumokig. Az eszközök választéka nagyon széles, és sok ügyfelünk szeretné előre megérteni, hogyan fogunk velük dolgozni a projektben, milyen elveket tartunk be.

Az Agilis témája egyébként ma már mind az üzleti élethez, mind pedig az egyes projektekben a közszférához közelít, hiszen ennek a módszertannak az elvei lehetővé teszik a projektek nagyon gyors megvalósítását, minden iterációnál kezelve a vevői elvárásokat. Például egy Agilis csapatban gyakorlatilag nincs elhúzódó megbeszélés az ügyféllel. Felejtsd el a több tucat oldalt, amelyek szükségtelen technikai részleteket írnak le, például, hogy milyen gyorsan jelenik meg a legördülő lista. Adja meg az ügyfélnek, hogy kipróbálja a rendszer egy köztes verzióját, akkor sokkal könnyebben megérti egymást.

Az Agilis csapat mindent együtt tervez meg, és meghatározza az optimális munkaerőszintet, amelyre egy adott probléma megoldásához szükség lesz. Például az egyik technikát „Pókertervezésnek” hívják, ahol minden résztvevő névtelenül megadja az értékelését az adott feladathoz szükséges munkaerőköltségről. Ezt követően a csapat meghatározza a feladat átlagos súlyát történetpontokban vagy munkaórákban, és a „ki mit szeret” elv szerint osztja el a feladatokat. Ugyanakkor minden nap összegyűlik a csapat egy 15 perces megbeszélésre, amikor mindenki pár percben megbeszéli az aktuális feladatai állását, beleértve a felmerült nehézségeket is. A csapat gyorsan kijavítja az észlelt problémát, így az ügyfél a lehető leggyorsabban áttekinti a programozó munkájának következő szakaszát. A fejlesztők nem késleltetik a feladatok elvégzését a csapat ismételt megzavarása miatti vonakodás miatt, vagy azért, mert hiába próbálkoznak saját maguk kitalálni, értékes időt ölve ezzel. Mellesleg, az ilyen mini-státuszokban a fejlesztők vágya, hogy a legjobb oldalukat mutassák meg, hogy megmutassák, hogy felelősségteljesen közelíti meg munkáját. Valóban motivál és önfegyelmez.