Cel mai mic timp de execuție rămas. Cum să învățați cum să determinați corect momentul lucrării - experții răspund Procesul de calcul al timpului rămas

Tot ceea ce a fost descris în secțiunile anterioare s-a concentrat mai mult pe efectuarea unor cercetări suplimentare asupra problemei momentului adecvat al procesului și, într-o măsură mult mai mică, pe aplicații practice... Pentru a umple acest gol, să prezentăm una dintre modalitățile de a calcula timpul adecvat al unui proces pe baza datelor statistice privind evoluția acestuia.

Luați în considerare un proces unidimensional, a cărui stare se caracterizează printr-o variabilă reală x. Să presupunem că observațiile dinamicii procesului sunt efectuate în timpul astronomic t, astfel încât t \u003d tk și x \u003d xk, k \u003d 1, ..., n sunt momente fixe de observare și valorile corespunzătoare ale stărilor procesului . Există multe metode matematice diferite care fac posibilă construirea curbelor care fie trec prin puncte (t k, Xk), fie le abordează în „cel mai bun mod”. Funcțiile rezultate x \u003d x (t) dau naștere, în mintea noastră, impresiei că procesul luat în considerare depinde de mișcarea mecanică a corpurilor cerești și, prin urmare, starea sa este exprimată prin timpul astronomic t. O astfel de concluzie ar putea fi luată în calcul; dacă nu au existat dificultăți constante în încercarea de a prezice cursul ulterior al procesului. Pentru un număr mare de diverse procese care nu sunt direct legate de mișcările mecanice ale corpurilor cerești, predicțiile teoretice obținute folosind funcția x \u003d x (t) în afara intervalului de observație încep să se abată semnificativ de la datele experimentale ulterioare. Motivul discrepanței dintre teorie și experiment este de obicei încercat să fie explicat printr-o metodă de prelucrare aleasă fără succes, dar esența problemei poate să nu fie în aceasta.

Orice proces care ne interesează are loc în Univers. El, desigur, „simte” impactul mișcării corpurilor cerești. Cu toate acestea, acest impact se poate dovedi a fi „non-rigid”, nedeterminist. Acest lucru, în special, se poate manifesta prin faptul că la anumite intervale ale fluxului de timp astronomic starea procesului rămâne neschimbată. Să ne amintim în acest sens exemplul dat mai devreme cu o cameră goală închisă izolată de lumea exterioară. Să lăsăm să zboare un singur viu în cameră. În câteva zile, schimbările în starea sistemului de acoperire a casei vor depinde de mișcarea zborului, deoarece schimbările în starea casei nu pot fi așteptate. În același timp, este dificil să ne imaginăm că comportamentul mustei este legat rigid de cursul timpului astronomic.

După ce am făcut o digresiune atât de lungă, să trecem la descrierea algoritmului pentru calcularea timpului adecvat al procesului.

În acest algoritm, unitatea de calcul a maximelor locale este aleasă ca măsură naturală a timpului. În plus, sunt luate în considerare posibile secțiuni ale stării staționare a procesului, la care, după cum sa menționat mai devreme, timpul corect se oprește. Deoarece identitatea celor două stări poate fi spusă numai în limitele preciziei măsurătorilor, atunci se va folosi un număr pozitiv e în viitor - eroarea de măsurare permisă.

Deci, datele de intrare pentru algoritm sunt un număr natural n, un număr pozitiv 8, tablouri (tk) și (xk), k \u003d 1, ..., n. Pentru comoditatea programării, algoritmul este prezentat în forma a patru module executate secvențial.

Modulul 1,folosind datele n, e, tk), (xk), în cazul general formează matrici noi 7 \u003d (7+ X \u003d (X t) și o matrice foarte specifică P \u003d (?), unde 1 \u003d 1,. .., t și t<Сп. Основное назначение этого модуля -- выявление в массиве x k) последовательностей идентичных состояний процесса, сохранение первых элементов в таких последовательностях и удаление всех остальных и, наконец, уменьшение по определенному, правилу исходного интервала наблюдения от t до на сумму тех промежутков времени, в которых процесс протекает стационарно.

Modulul 1 include următoarele proceduri:

p: \u003d 1, m: \u003d 0, k: \u003d 1.

În p.p. Se introduc 1, 2, contoare cu valori inițiale specifice:

În p.p. 3, 4, valorile contorului cresc cu 1.

Verificați starea k ^ n. Dacă este satisfăcut, mergeți la articolul 6, altfel mergeți la articolul 11.

Verificați inegalitatea x k --x k \u003d e. Dacă se menține, mergeți la articolul 7, altfel mergeți la articolul 9.

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

Această procedură înseamnă că, dacă valorile Xk și Xk 1 nu se pot distinge în cadrul erorii, atunci, de fiecare dată, începând de la tk, scade cu cantitatea de tki-tk.

p \u003d p. Reveniți la articolul 4.

Tv \u003d t k; X v: \u003d x k; p \u003d p v \u003d v + l., adică se formează elementele matricilor T, X, P și se atribuie următoarea valoare v.

  • 10. Luați (t k, ..., t n ȘI (Xk, - X n) ca matrice originale ale dimensiunii n - k 1 + 1 și apoi reveniți la pasul 2.
  • 11. Imprimați m, (T), (X,) și (P,), unde i \u003d l, ..., m. End.

Să explicăm semnificația elementelor matricei însoțitoare P. Din textul anterior rezultă că valoarea lui pk este egală cu numărul acelor elemente ale matricei (xk) care urmează imediat și diferă de x pi +. .. +, +, cu mai puțin de e. Rețineți, de asemenea, că pi + ... + pm \u003d n.

Exemplul 1. Dat: n \u003d 20, (/ *) \u003d (2, 4, 7, 10, 12, 13, 15, 17, 20, 22, 24, 25,

  • 27, 30, 32, 33, 34, 35, 36) și (x,) \u003d (4, 4, 6, 6, 6, 3, 2, 4, 3, 3, 3, 2, 2, 4, 5 , 5,
  • 5, 4, 3), vezi fig. 9, a.

Ca rezultat al modulului 1, obținem m \u003d 11,

(G) \u003d (2, 3, 4, 6, 8, 11, 1-2, 15, 17, 18, 19); (X,) \u003d (4, 6, 3, 2, 4, 3, 2, 4,5,4,3)

și (d.) \u003d (2, 4, 1, 1, 1.3, 2, 1.3, 1, 1), vezi fig. 9, b.

Unitatea 2.Datele de intrare pentru acesta sunt un număr natural m, precum și matrice (7+ (XL), \u003d 1, ..., t. Acest modul din matrice (TJ dezvăluie momentele de timp [TM a], 1 \u003d 1 m (ml

Exemplul 2. Valorile m, (T b) și (X,] sunt împrumutate din exemplul anterior. După executarea modulului 2, obținem ml \u003d 3, m2 \u003d 8, (U,) \u003d (3, 8, 17), (T *) \u003d (3, 4, 6, 8, 11, 12, 15, 17), vezi și Fig. 9, b.

Modulul 3.Date de intrare ml, m2, (TM n), 1 \u003d 1, ..., ml, (T *), / 2 \u003d 1, ..., rn2.

Acest modul este conceput pentru a construi o matrice (m (-g) după formulă

Unde TV 6 [TMp, TMn + i]

Variabila m este timpul propriu generat de schimbarea variabilei x. Măsura sa naturală este unitatea maximă locală.

Exemplul 3. Datele inițiale pentru T 2) sunt aceleași ca valorile ml, m2 ITM și în exemplul 2 .. După calculele corespunzătoare, obținem N \u003d (0; 0,2; 0,6; 1; 1,33; 1,78; 2).

Modulul 4.Formează ieșirea rezultatelor stabilind o corespondență între valorile lui m și elementele x din matrice (xk).

Exemplul 4. Pe baza datelor din exemplele 2 și 3, se produce următorul rezultat, vezi fig. 9, în:

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

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

Astfel, algoritmul luat în considerare face posibilă dezvoltarea conceptului de timp adecvat al procesului pe baza informațiilor despre schimbarea stării procesului înregistrate pe scara astronomică de timp. Este destul de clar că puteți utiliza alți algoritmi bazați, de exemplu, pe calcularea unei secvențe de minime locale sau a unei secvențe mixte formate din maxime și minime locale. Când prelucrați date experimentale, probabil că ar trebui să încercați diferite opțiuni. Dacă, dintr-un anumit motiv, experimentatorul a optat pentru unul dintre momentele specifice specifice și a primit matricele (m4 și (xk) în același timp, atunci în etapa următoare ar trebui să folosească câteva metode matematice pentru a aproxima punctele experimentale (m * , x) o linie mondială aproximativă a procesului x \u003d x (t). Extrapolând această linie dincolo de intervalul de observație inițială, el poate da prognoze despre cursul ulterior al procesului.

Este interesant de menționat un experiment de calcul conceput pentru a evalua perspectivele utilizării algoritmului propus. Datele privind debitele anuale ale râului au fost alese ca material experimental. Vakhsh (Tadjikistan) pentru 40 de ani anteriori. Pentru aceeași perioadă de timp, s-au luat informații despre dinamica numărului Wolf, cel mai frecvent utilizat indice integral al activității solare. Acesta din urmă a stat la baza dezvoltării timpului adecvat al procesului de activitate solară. În noua perioadă, informațiile despre costurile râului au fost transformate. Vakhsh și apoi, în timpul perioadei de observație, a fost dată dependența teoretică a debitului de apă în funcție de timpul adecvat al activității solare. O caracteristică a programului rezultat este comportamentul aproape periodic al costurilor maxime și minime. Cu toate acestea, costurile nu rămân constante.

Versiunea de comutare a algoritmului anterior este cel mai puțin timp rămas algoritm. Conform acestui algoritm, planificatorul alege procesul cu cel mai mic timp de execuție rămas de fiecare dată. În acest caz, este, de asemenea, necesar să cunoașteți în avans timpul de execuție a sarcinii. Când ajunge o nouă sarcină, timpul său total de execuție este comparat cu timpul de execuție rămas al sarcinii curente. Dacă timpul de execuție al noii sarcini este mai scurt, procesul curent este suspendat și controlul este transferat noii sarcini. Această schemă vă permite să serviți rapid cereri scurte.

Planificare pe trei niveluri

Sistemele în serie vă permit să implementați planificarea pe trei niveluri, așa cum se arată în figură. Pe măsură ce activitățile noi intră în sistem, acestea sunt plasate mai întâi într-o coadă stocată pe disc. Admisie planificator de acces selectează jobul și îl transferă în sistem. Restul sarcinilor rămân în coadă.

De îndată ce o sarcină a intrat în sistem, va fi creat un proces corespunzător pentru aceasta și poate intra imediat în lupta pentru accesul la procesor. Cu toate acestea, o situație este posibilă atunci când există prea multe procese și toate nu se încadrează în memorie, atunci unele dintre ele vor fi paginate pe disc. Al doilea nivel de planificare determină ce procese pot fi stocate în memorie și care pot fi stocate pe disc. Acest lucru este făcut programator de memorie .

Programatorul de memorie se uită periodic la procesele de pe disc pentru a decide care să se mute în memorie. Printre criteriile utilizate de programator sunt următoarele:

1. Cât timp a trecut de când procesul a fost spălat pe disc sau încărcat de pe disc?

2. Cât timp folosește procesul procesorul?

3. Care este dimensiunea procesului (procesele mici nu interferează)?

4. Care este importanța procesului?

Al treilea nivel de planificare este responsabil pentru accesarea procesului gata la procesor. Când se vorbește despre un „planificator”, se întâmplă de obicei programator procesor ... Acest planificator folosește orice algoritm adecvat situației, atât cu, cât și fără întrerupere. Am luat deja în considerare unii dintre acești algoritmi și ne vom familiariza cu alții.

Planificare în sisteme interactive.

Planificarea ciclică.

Unul dintre cei mai vechi, simpli, corecți și mai frecvent utilizați algoritmi este algoritmul de planificare ciclică. Fiecărui proces i se acordă un anumit interval de timp al procesorului, așa-numita felie de timp. Dacă procesul rulează încă la sfârșitul intervalului de timp, acesta este întrerupt și controlul este transferat către un alt proces. Desigur, dacă procesul se blochează sau iese din timp, tranziția de control are loc în acel moment. Implementarea programării round-robin este simplă. Planificatorul trebuie doar să mențină lista proceselor pregătită. Când un proces și-a epuizat limita de timp, acesta este trimis la sfârșitul listei.

Singurul punct interesant al acestui algoritm este lungimea cuantică. Trecerea de la un proces la altul durează ceva timp - trebuie să salvați și să încărcați registre și carduri de memorie, să actualizați tabele și liste, să salvați și să reîncărcați memoria cache etc. Concluzia poate fi formulată după cum urmează: o cuantică prea mică va duce la comutarea frecventă a proceselor și o eficiență mică, dar o cuantică prea mare poate duce la un răspuns lent la interogări scurte interactive. O valoare cuantică în jurul valorii de 2 0 -5 0 ms este adesea un compromis rezonabil.

Planificarea prioritară.

Algoritmul de planificare ciclică are o presupunere importantă că toate procesele sunt egale. Într-o situație de computer cu un număr mare de utilizatori, este posibil să nu fie cazul. De exemplu, la universitate, în primul rând, ar trebui să fie deserviți decani, apoi profesori, secretari, agenți de curățenie și abia apoi studenți. Nevoia de a lua în considerare astfel de factori externi duce la planificarea prioritară. Ideea de bază este simplă: fiecărui proces i se atribuie o prioritate și controlul este transferat procesului gata de rulare cu cea mai mare prioritate.

Mai multe cozi.

Unul dintre primele planificatoare prioritare a fost implementat în sistemul compatibil cu timp partajat (CTSS). Problema principală cu sistemul CTSS a fost comutarea proceselor prea lentă, deoarece în memoria IBM 7094 exista un singur proces. Fiecare comutator însemna descărcarea procesului actual pe disc

și citirea unui nou proces de pe disc. Dezvoltatorii CTSS și-au dat seama rapid că eficiența ar fi mai mare dacă proceselor, limitate de procesor, li s-ar aloca o perioadă mai mare de timp decât dacă li s-ar da felii mici, dar deseori. Pe de o parte, acest lucru va reduce numărul de swap-uri din memorie pe disc și, pe de altă parte, va duce la o deteriorare a timpului de răspuns, așa cum am văzut deja.

Ca rezultat, a fost dezvoltată o soluție cu clase prioritare. Proceselor clasei cu cea mai mare prioritate li s-a alocat o cuantică, procesele clasei următoare - două cuante, următoarea - patru cuante și așa mai departe. Când procesul a consumat tot timpul alocat acesteia, a trecut la clasa de jos.

De exemplu, luați în considerare un proces care trebuie să efectueze calcule de peste 100 de cuante. În primul rând, i se va da o cuantică, apoi va fi pompată pe disc. Data viitoare va primi 2 cuante, apoi 4, 8,16, 32, 64, deși folosește doar 37 din 64. În acest caz, va avea nevoie doar de 7 transferuri (inclusiv încărcarea inițială) în loc de 100, care ar fi necesar dacă se utilizează un algoritm ciclic. În plus, pe măsură ce vă scufundați în coada prioritară, procesul va începe din ce în ce mai rar, lăsând procesorul la procese mai scurte.

„Cel mai scurt proces este următorul”

Deoarece algoritmul Shortest Task First minimizează timpul mediu de răspuns în sistemele de procesare în serie, am dori să îl folosim și în sistemele interactive. Într-o anumită măsură, acest lucru este posibil. Procesele interactive urmează cel mai adesea modelul „așteptarea unei comenzi, executarea unei comenzi, așteptarea unei comenzi, executarea unei comenzi ...” Având în vedere executarea fiecărei comenzi ca o sarcină separată, puteți minimiza timpul mediu general de răspuns începând cea mai scurtă sarcină mai întâi. Singura problemă este

în a afla care dintre procesele în așteptare este cel mai scurt.

O metodă se bazează pe estimarea lungimii procesului pe baza comportamentului anterior al procesului. Aceasta începe procesul cu cel mai scurt timp estimat. Să presupunem că timpul estimat de execuție a comenzii este T 0 și timpul estimat pentru următoarea lansare este T 1. Puteți îmbunătăți estimarea timpului luând suma ponderată a acestor ori aT 0 + (1 - a) T 1. Alegând valoarea adecvată pentru a, putem face ca algoritmul de estimare să uite rapid de lansările anterioare sau, dimpotrivă, să le amintim mult timp. Luând a \u003d 1/2, obținem o serie de estimări:

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.

După trei porniri, greutatea T 0 în estimare va scădea la 1/8.

Metoda de estimare a valorii următoare dintr-o serie printr-o medie ponderată a valorii anterioare și a estimării anterioare este adesea denumită îmbătrânire. Această metodă este aplicabilă în multe situații în care este necesară o estimare din valorile anterioare. Cel mai simplu mod de a realiza îmbătrânirea este de a \u003d 1/2. La fiecare pas ai nevoie doar

adăugați o nouă valoare la estimarea curentă și înjumătățiți suma (prin deplasarea cu 1 bit spre dreapta).

Planificare garantată.

O abordare fundamental diferită a planificării este de a face promisiuni reale utilizatorilor și apoi de a le îndeplini. Iată o promisiune ușor de realizat și ușor de îndeplinit: dacă n utilizatori împărtășesc un procesor cu dvs., vi se va oferi 1 / n putere de procesor.

Și pe un sistem cu un singur utilizator și n procesoare care rulează, fiecare va primi 1 / n cicluri de procesor.

Pentru a îndeplini această promisiune, sistemul trebuie să urmărească alocarea procesorului între procese din momentul în care este creat fiecare proces. Sistemul calculează apoi cantitatea de resurse de procesare la care are dreptul procesul, cum ar fi timpul de la crearea împărțit la n. Acum puteți calcula raportul dintre timpul acordat procesului și timpul la care are dreptul. Valoarea rezultată de 0,5 înseamnă că doar jumătate din ceea ce ar fi trebuit să fie alocat procesului și 2.0 înseamnă că procesul a obținut de două ori mai mult decât ar trebui. Apoi procesul este început cu cel mai mic raport până la

nu va deveni mai mare decât cel al celui mai apropiat vecin.

Planificarea loteriei.

Algoritmul se bazează pe distribuirea biletelor de loterie către procesele de acces la diferite resurse, inclusiv la procesor. Când planificatorul trebuie să ia o decizie, un bilet de loterie este selectat la întâmplare, iar titularul acestuia are acces la resursă. În ceea ce privește accesul la CPU, „loteria” se poate întâmpla de 50 de ori pe secundă, iar câștigătorul primește 20 ms de timp CPU.

Proceselor mai importante li se pot oferi bilete suplimentare pentru a crește probabilitatea de a câștiga. Dacă doar 100 de bilete și 20 dintre ele sunt într-un singur proces, atunci va primi 20% din timpul procesorului. Spre deosebire de planificatorul prioritar, unde este foarte dificil de estimat ce înseamnă, să zicem, prioritatea 40, în planificarea loteriei totul este evident. Fiecare proces va primi un procent de resurse aproximativ egal cu procentul de bilete pe care le are.

Programarea loteriei are mai multe proprietăți interesante. De exemplu, dacă un proces primește mai multe bilete în timpul creației, atunci la următoarea loterie șansele sale de a câștiga sunt proporționale cu numărul de bilete.

Procesele de interacțiune pot schimba bilete după cum este necesar. De exemplu, dacă un proces client trimite un mesaj către un proces server și apoi îl blochează, acesta poate transmite toate biletele sale procesului server pentru a crește șansa de a porni serverul. Când procesul serverului iese, acesta poate returna toate biletele înapoi.

Planificare corectă.

Până în prezent, am presupus că fiecare proces este controlat indiferent de cine este șeful. Prin urmare, dacă utilizatorul 1 creează 9 procese, iar utilizatorul 2 creează 1 proces, atunci utilizând programarea ciclică sau în cazul priorităților egale, utilizatorul 1 va primi 90% din procesor, iar utilizatorul 2 doar 10.

Pentru a evita aceste situații, unele sisteme acordă atenție proprietarului procesului înainte de planificare. Într-un astfel de model, fiecare utilizator primește o parte din procesor, iar programatorul alege procesul în conformitate cu acest fapt. Dacă în exemplul nostru, fiecare dintre utilizatori avea

se promite 50% din procesor, apoi vor primi 50% din procesor, indiferent de numărul de procese.

Programare în sisteme în timp real.

Timpul joacă un rol semnificativ în sistemele în timp real. Cel mai adesea, unul sau mai multe dispozitive fizice externe generează semnale de intrare, iar computerul trebuie să răspundă în mod adecvat la acestea într-o anumită perioadă de timp.

Sistemele în timp real sunt împărțite în sisteme dificile în timp real , ceea ce înseamnă că există termene limită strânse pentru fiecare sarcină (trebuie îndeplinite) și sisteme flexibile în timp real în care încălcările orarului sunt nedorite, dar acceptabile. În ambele cazuri, programul este împărțit în mai multe procese, fiecare dintre acestea fiind previzibil. Aceste procese sunt cel mai adesea scurte și complete într-o secundă. Când apare un semnal extern, planificatorul trebuie să se asigure că programul este îndeplinit.

Evenimentele externe la care sistemul trebuie să reacționeze pot fi împărțite în periodic(care apar la intervale regulate) și non-periodice(care apare imprevizibil). Pot exista mai multe fluxuri periodice de evenimente pe care sistemul trebuie să le proceseze. În funcție de timpul petrecut pentru procesarea fiecărui eveniment, este posibil ca sistemul să nu poată procesa toate evenimentele în timp util.


Informații similare.


Introducere

Scopul atelierului de organizare a producției este de a extinde și aprofunda cunoștințele teoretice, de a insufla abilitățile necesare pentru a rezolva cele mai frecvente probleme din practică privind organizarea și planificarea producției.

Atelierul include sarcini pentru principalele secțiuni ale cursului. La începutul fiecărui subiect, sunt prezentate instrucțiuni metodologice scurte și informații teoretice, probleme tipice cu soluții și probleme pentru soluții independente.

Prezența în fiecare subiect a liniilor directoare și a informațiilor teoretice scurte vă permite să utilizați acest atelier în cursuri de corespondență.


Calculul duratei ciclului de producție

Durata ciclului de producție servește ca indicator al eficienței procesului de producție.

Ciclul de producție - perioada de ședere a obiectelor de muncă în procesul de producție din momentul lansării materiilor prime până la eliberarea produsului finit

Ciclul de producție constă din timpul de lucru, în timpul căruia se cheltuiește munca și ori de pauză... Pauzele, în funcție de motivele care le-au provocat, pot fi împărțite:

1) pe natural sau tehnologice - se datorează naturii produsului;

2) organizatoric (pauze între schimburi).

Durata ciclului de producție constă din următoarele componente:

Ciclul T \u003d t acele + t mâncând + t tr + t k.k. + t m. o. + t m.ts.

unde t acestea - timpul operațiunilor tehnologice;

nu mănâncă -timpul proceselor naturale (uscare, răcire etc.);

t tr -timpul transportului obiectelor de muncă;

t c.c. -timpul de control al calității;

t m.o -timpul de așternut interoperator;

t m.ts. -timpul petrecut în depozite interdepartamentale;

(t Trei t k.k. poate fi combinat cu t m.o).

Calculul duratei ciclului de producție depinde de tipul de producție. În producția în serie, durata ciclului de producție este determinată de timpul în care produsul se află în flux, adică

Ciclul T \u003d t in m,

unde t în - ciclul de eliberare;

M - numărul locurilor de muncă.

Sub eliberați tactul ar trebui înțeles intervalul de timp dintre lansarea unui produs fabricat și următorul produs.

Ciclul de eliberare este determinat de formulă

t în \u003d Teff / V,

unde Teff- fondul efectiv al timpului lucrătorului pentru perioada de facturare (schimb, zi, an);

ÎN - volumul producției pentru aceeași perioadă (în unități naturale).

Exemplu: T cm \u003d 8 ore \u003d 480 min; Banda T \u003d 30 min; → Teff \u003d 480 - - 30 \u003d 450 min.

B \u003d 225 buc; → t h \u003d 450/225 \u003d 2 min.

În producția pe loturi, în care prelucrarea se efectuează pe loturi, durata ciclului tehnologic este determinată nu pe unitate de producție, ci pentru întregul lot. Mai mult, în funcție de metoda de lansare a unui lot în producție, obținem timpi de ciclu diferiți. Există trei moduri de a muta produsele în producție: secvențial, paralel și mixt (serial-paralel).


Eu... Cand consistent piese în mișcare, fiecare operație ulterioară începe numai după ce se încheie cea anterioară. Timpul ciclului pentru mișcarea secvențială a pieselor va fi egal cu:

unde n - numărul de părți ale lotului procesat;

t buc eu - rata de timp pentru operație;

C i - numărul de locuri de muncă pe eua operațiunea;

m - numărul de operațiuni ale procesului tehnologic.

Se dă un lot de produse, format din 5 bucăți. Lotul este trecut secvențial prin 4 operații; durata primei operații - 10 minute, a doua - 20 de minute, a treia - 10 minute, a patra - 30 de minute (Fig. 1).

Imaginea 1

T ciclu \u003d T ultimul \u003d 5 (10 + 20 + 10 + 30) \u003d 350 min.

Mișcarea secvențială a pieselor are avantajul că permite echipamentului să funcționeze fără timp de oprire. Dezavantajul său este însă că ciclul de producție este cel mai lung în acest caz. În plus, se creează stocuri semnificative de piese la locurile de muncă, ceea ce necesită spațiu de producție suplimentar.

II... Cand paralel mișcarea lotului, părțile individuale nu sunt întârziate la locurile de muncă, ci sunt transferate individual la următoarea operație imediat, fără a aștepta finalizarea procesării întregului lot. Astfel, odată cu mișcarea paralelă a unui lot de piese la fiecare stație de lucru, se efectuează simultan diferite operații pe diferite părți ale aceluiași lot.

Durata procesării în serie cu mișcarea paralelă a produselor este redusă brusc:

dl .

unde n n - numărul de piese din transfer de lot (transport de transport), adică numărul de produse transferate simultan de la o operațiune la alta;

Dl - cel mai lung ciclu de funcționare.

Cu o lansare paralelă a unui lot de produse, părți din întregul lot sunt procesate continuu numai la acele locuri de muncă în care operațiunile lungi urmează celor scurte. În cazurile în care operațiile scurte urmează cele lungi, adică mai mult (în exemplul nostru - a treia operație), aceste operații sunt efectuate intermitent, adică echipament inactiv. Aici, un lot de piese nu poate fi procesat imediat, fără întârzieri, deoarece operația anterioară (lungă) nu permite acest lucru.

În exemplul nostru: n= 5, t 1 = 10; t 2 = 20; t 3 = 10; t 4 = 30; din= 1.

T abur \u003d 1 (10 + 20 + 10 + 30) + (5-1) 30 \u003d 70 + 120 \u003d 190 min.

Luați în considerare schema mișcării paralele a pieselor (Fig. 2):

Figura 2

III... Pentru a elimina întreruperile procesării părților individuale ale lotului în toate operațiunile, aplicați paralel-serialsau amestecato metodă de pornire, în care piesele (după prelucrarea lor) sunt transferate la următoarea operație una câte una, sau sub formă de stocuri „de transport” (mai multe piese la un moment dat) în așa fel încât executarea operațiunilor să nu fie întreruptă la niciun loc de muncă. În metoda mixtă, continuitatea prelucrării este preluată din metoda secvențială și din metoda paralelă, tranziția piesei de la funcționare la operație imediat după procesare. Cu o metodă mixtă de lansare în producție, timpul ciclului este determinat de formulă

cor .

unde cor. - cel mai scurt ciclu de operare (din fiecare pereche de operații adiacente);

m-1 numărul de alinieri.

Dacă operațiunea ulterioară este mai lungă decât cea anterioară sau este egală cu aceasta în timp, atunci această operațiune este pornită una câte una, imediat după procesarea primei părți din operația anterioară. Dacă, dimpotrivă, operația ulterioară este mai scurtă decât cea anterioară, atunci există goluri în transmisia piesei. Pentru a le preveni, este necesar să se acumuleze o rezervă de transport de un astfel de volum, care este suficientă pentru a asigura lucrul la operațiunea ulterioară. Pentru a găsi practic acest punct pe grafic, este necesar să transferați ultimul detaliu al lotului și să amânați durata de execuție a acestuia spre dreapta. Timpul de procesare pentru toate celelalte părți ale lotului este reprezentat grafic la stânga. Începutul procesării primei părți arată momentul în care stocul de transport din operațiunea anterioară ar trebui transferat la această operațiune.

Dacă operațiile adiacente au aceeași durată, atunci doar una dintre ele este acceptată ca fiind scurtă sau lungă (Fig. 3).

Figura 3

T ultima pereche \u003d 5 (10 + 20 + 10 + 30) - (5-1) (10 + 10 + 10) \u003d 350-120 \u003d 230 min.

Principalele modalități de reducere a duratei ciclului de producție sunt:

1) Reducerea intensității forței de muncă a produselor de fabricație prin îmbunătățirea fabricabilității structurii fabricate, utilizarea computerelor, introducerea proceselor tehnologice avansate.

2) Organizarea rațională a proceselor de muncă, amenajarea și întreținerea locurilor de muncă pe baza specializării și cooperării, mecanizarea extinsă și automatizarea producției.

3) Reducerea diferitelor pauze planificate și neplanificate la locul de muncă pe baza utilizării raționale a principiilor de organizare științifică a procesului de producție.

4) Accelerarea cursului reacțiilor ca urmare a creșterii presiunii, temperaturilor, tranziției la un proces continuu etc.

5) Îmbunătățirea proceselor de transport, depozitare și control și alinierea timpului acestora cu procesul de prelucrare și asamblare.

Reducerea duratei ciclului de producție este una dintre sarcinile serioase de organizare a producției, deoarece afectează cifra de afaceri a activelor aflate în circulație, reducând costurile forței de muncă, reducând spațiul de depozitare, nevoia de transport etc.

Sarcini

1 Determinați durata ciclului de procesare a 50 de părți în mișcări secvențiale, paralele și secvențiale-paralele în procesul de producție. Prelucrarea pieselor constă din cinci operații, a căror durată este, respectiv, min: t 1 =2; t 2 =3; t 3 =4; t 4 =1; t 5 \u003d 3. A doua operație este efectuată pe două mașini și fiecare dintre celelalte pe una. Dimensiunea lotului de transfer este de 4 bucăți.

2 Determinați durata ciclului de procesare a 50 de părți cu tipuri de mișcare secvențiale, paralele și secvențiale-paralele în procesul de producție. Prelucrarea pieselor constă din patru operații, a căror durată este, respectiv, min: t 1 =1; t 2 =4; t 3 =2; t 4 \u003d 6. A patra operație se efectuează pe două mașini și fiecare dintre celelalte pe una. Dimensiunea lotului de transfer este de 5 bucăți.

3 Un lot de părți de 200 de bucăți este procesat cu mișcarea sa paralel-secvențială în procesul de producție. Procesul de prelucrare a pieselor constă în șase operații, a căror durată este, respectiv, min: t 1 =8; t 2 =3; t 3 =27; t 4 =6; t 5 =4; t 6 \u003d 20. A treia operație se efectuează pe trei mașini, a șasea pe două și fiecare dintre celelalte operații pe o mașină. Determinați modul în care se va schimba timpul ciclului de procesare pentru un lot de piese dacă varianta paralel-secvențială a mișcării în producție este înlocuită cu una paralelă. Dimensiunea lotului de transfer este de 20 de bucăți.

4 Un lot de 300 de bucăți este procesat în mișcare paralel-secvențială în timpul procesului de producție. Prelucrarea pieselor constă în șapte operații, a căror durată este, respectiv, min: t 1 =4; t 2 =5; t 3 =7; t 4 =3; t 5 =4; t 6 =5; t 7 \u003d 6. Fiecare operație se efectuează pe o singură mașină. Transfer de lot - 30 de bucăți. Ca urmare a îmbunătățirii tehnologiei de producție, durata celei de-a treia operații a fost redusă cu 3 minute, a șaptea - cu 2 minute. Determinați modul în care se modifică ciclul lotului.

5 Se dă un lot de semifabricate, format din 5 bucăți. Lotul este trecut prin 4 operații: durata primei este de 10 minute, a doua este de 20 de minute, a treia este de 10 minute, iar a patra este de 30 de minute. Determinați timpul ciclului analitic și grafic cu mișcare secvențială.

6 Se dă un lot de semifabricate, format din patru bucăți. Lotul este trecut prin 4 operații: durata primei este de 5 minute, a doua este de 10 minute, a treia este de 5 minute, iar a patra este de 15 minute. Determinați timpul ciclului analitic și grafic cu mișcare paralelă.

7 Se dă un lot de semifabricate, format din 5 bucăți. Lotul este trecut prin 4 operații: durata primei este de 10 minute, a doua este de 20 de minute, a treia este de 10 minute, iar a patra este de 30 de minute. Determinați durata ciclului utilizând metode analitice și grafice pentru mișcarea secvențială-paralelă.

8 Determinați durata ciclului tehnologic pentru procesarea unui lot de 180 de bucăți. cu versiuni paralele și secvențiale ale mișcării sale. Construiți grafice de procesare. Dimensiunea lotului de transfer - 30 buc. Timpii și numărul de locuri de muncă în operațiuni sunt după cum urmează.

Adesea, dezvoltatorii, în special cei neexperimentați, se pierd când li se cere să stabilească termene pentru sarcini. Cu toate acestea, abilitatea de a planifica este o abilitate foarte utilă și necesară, care ajută nu numai la muncă, ci și la viață. Am decis să întrebăm experții cum să învețe cum să planifice și să livreze proiectele în timp util.

Concluzii scurte pot fi găsite la sfârșitul articolului.

De obicei, dezvoltatorul trebuie să ia în considerare mai mulți parametri simultan pentru a estima timpul de execuție a sarcinii:

  1. Experiență în îndeplinirea acestor sarcini și lucrul cu această stivă de tehnologie. Dacă trebuie să faci ceva fundamental nou, trebuie să fii deosebit de atent cu evaluarea.
  2. Experiență cu acest client. Cunoscând clientul, puteți prevedea aproximativ câteva cerințe suplimentare și cantitatea de modificări.
  3. Calitatea codului cu care să lucrați. Acesta este cel mai influent factor, din cauza căruia totul poate fi foarte întârziat și, în general, nu merge conform planului. Dacă proiectul are teste, peste tot există doar dependențe explicite și funcționalitatea este bine izolată, totul nu este atât de înfricoșător. Este mult mai rău dacă aveți de-a face cu un cod vechi fără teste sau cu un cod supraîncărcat cu dependențe implicite. Lucruri precum „funcții magice” (când este greu să vezi stiva finală de apel din cod) și duplicarea codului (când trebuie să editezi mai multe secțiuni independente pentru a schimba orice funcționalitate) pot complica, de asemenea, lucrurile.

Pentru a învăța cum să evaluați în mod adecvat momentul de lucru, trebuie să practicați în mod constant. La începutul muncii mele, am făcut exact asta: am estimat timpul pentru finalizarea oricărei sarcini primite, chiar dacă nimeni nu mi-a cerut-o, apoi am urmărit cât de precis am reușit să intru în estimarea mea. În procesul de finalizare a sarcinii, am observat ce acțiuni necesită mai mult timp. Dacă ceva a crescut mult termenul, mi-am amintit acest moment și l-am luat în considerare în următoarele evaluări.

La o evaluare obiectivă a timpului necesar doar pentru muncă, ar trebui adăugată o mică marjă pentru a acoperi situațiile de forță majoră. Este adesea estimat ca un procent din realizarea sarcinii principale, dar este diferit pentru toată lumea: cineva adaugă 20% din timp, cineva - 10% și cineva - 50%.

De asemenea, este util să se analizeze motivele termenelor ratate după fiecare încălcare majoră a termenului. Dacă nu aveți suficiente calificări, trebuie să lucrați la punctele dvs. slabe. Dacă problema era organizațională - să înțelegeți ce a împiedicat munca normală.

Promovați mai jos

, director tehnic al Centrului pentru tehnologii și soluții inovatoare „Jet Infosystems”

Un număr mare de articole sunt dedicate metodelor de evaluare a complexității unui proiect, inclusiv durata muncii și sarcinile individuale. Cu toate acestea, până acum, aceasta este cauza conflictelor atât în \u200b\u200bcadrul echipei de proiect, cât și atunci când comunicăm cu clientul.

Asistentul principal în evaluare este experiența. Încercați cumva să corelați noua sarcină cu cele deja finalizate. Dacă faceți un raport, vedeți cât a durat un raport similar în trecut. Dacă faci ceva nou, încearcă să te descompui în bucăți cunoscute și să le apreciezi. Dacă sarcina este complet nouă, luați ceva timp pentru a studia (chiar mai bine - coordonați de data aceasta cu persoana care stabilește sarcina).

Acordați atenție etapelor însoțitoare - dacă trebuie să dezvoltați un serviciu, atunci testarea unității (și poate nu doar o unitate) trebuie să fie inclusă în evaluare, pregătirea datelor de testare va dura o anumită perioadă de timp. Luați în considerare integrarea cu alte servicii și așa mai departe. Luați timp pentru a remedia erorile pe care le găsiți sau cu ajutorul testerilor. Se poate pierde mult timp în sarcini „invizibile”. De exemplu, există o evaluare pentru dezvoltare și există o evaluare pentru testare, dar transferul unui artefact pentru testare poate fi asociat cu desfășurarea standurilor. Prin urmare, este important să vă imaginați mental întregul proces pentru a nu rata nimic.

După determinarea intensității muncii, este necesar să se includă noi locuri de muncă în calendar, fără a uita de alte sarcini și activități care se desfășoară în paralel.

Și nu uitați că planurile sunt inutile, dar planificarea este neprețuită. Învață să ajustezi planurile la timp, să îi menții pe toți interesați și să escaladezi în timp util, astfel încât termenele ratate să nu fie o surpriză pentru nimeni.

Promovați mai jos

O întrebare la care nu se poate răspunde într-o formă scurtă. Dacă ar fi ușor, atunci nu ar exista nicio problemă de lipsă a termenelor.

Pentru a face termenele de dezvoltare mai previzibile, trebuie mai întâi să înțelegeți motivele pentru care programatorii fac în mod constant greșeli.

Primul motiv este că majoritatea sarcinilor pe care le face un programator sunt unice într-un grad sau altul. Adică, cel mai probabil, programatorul va face o astfel de sarcină pentru prima dată. Nu știe destul de mult cât va dura această lucrare. Dacă acesta este un programator cu o experiență solidă și a trebuit să îndeplinească o sarcină similară, evaluarea sa va fi mai aproape de realitate.

Pentru a folosi o analogie simplă, dacă nu ați săpat niciodată șanțuri, nu puteți spune cu exactitate cât vă va dura să săpați un șanț de 30 cm lățime, 60 cm adâncime și 20 de metri lungime. Dacă ați mai săpat, estimarea timpului de lucru va fi mult mai aproape de durata efectivă a lucrării.

Al doilea motiv este că programatorii sunt în mod inerent optimisti. Adică, luând în considerare sarcina, alegând o opțiune de implementare pentru aceasta, evaluând îmbunătățirile, dezvoltatorul se așteaptă ca totul să funcționeze așa cum se așteaptă. Și nu se gândește la problemele pe care le va întâlni pe drum. Adesea nu le poate prevedea. De exemplu, există o sarcină pe care un programator o poate îndeplini folosind o bibliotecă software open-source terță parte. La etapa de evaluare, a găsit-o pe Internet, a citit descrierea ei - i se potrivește. Și chiar a estimat corect sfera muncii sale pentru a construi în utilizarea acestei biblioteci. Dar el nu a prevăzut deloc că va apărea o eroare în mediul produsului său software din această bibliotecă.

Dezvoltatorul va trebui nu numai să încorporeze utilizarea bibliotecii în codul lor, ci și să remedieze eroarea din biblioteca în sine. Și adesea dezvoltatorul nu oferă timp pentru a-și rezolva greșelile. După cum arată statisticile, testarea și remedierea erorilor poate dura aproximativ 50% din timpul petrecut în codificare. Cifra depinde de calificările dezvoltatorului, de mediu, de practicile de dezvoltare utilizate (de exemplu, testele unitare reduc semnificativ acest timp și durata totală / intensitatea muncii sarcinii de dezvoltare este mai mică).

Dacă ne întoarcem la analogia cu excavatorul, atunci excavatorul nu se aștepta ca lopata să se rupă și va trebui să petreacă două ore în căutarea unei noi tăieturi.

Al treilea motiv este cerințele neprevăzute. Niciunul dintre domeniile de fabricație a materialelor cu care clienții adoră să compare dezvoltarea de software nu are un astfel de flux de cerințe noi. Imaginați-vă trecerea unui excavator care a săpat 19 metri din 20 și a auzit de la client dorința ca șanțul să nu meargă în linie dreaptă, ci ca un șarpe cu o lungime de umăr de 97 de centimetri.

Cum să rezolvăm toate acestea și cum să trăim în condiții de asemenea incertitudine? Reducerea incertitudinii și creșterea rezervelor de timp.

Cel mai simplu mod de a vă apropia așteptările de realitate este să folosiți regula umoristică „Pi”. După ce ați primit o estimare de la dezvoltator (în termeni de timp sau intensitate a muncii), trebuie să o multiplicați cu numărul Pi (\u003d 3,14159). Cu cât dezvoltatorul a făcut estimarea cu mai multă experiență, cu atât poate fi mai mic acest coeficient.

Este imperativ să exersăm descompunerea problemei inițiale în mici probleme de cel mult 4 ore. Cu cât descompunerea este mai detaliată, cu atât sunt mai mari șansele ca estimarea să fie aproape de intrarea / durata efectivă a forței de muncă.
Dacă ne întoarcem la alocarea rezervei - acest timp ar trebui alocat la sfârșitul proiectului. Este o practică proastă să faci o rezervă și să o incluzi pentru fiecare sarcină. Legea Parkinson „Munca umple tot timpul alocat pentru aceasta” este strict efectuată.

Dacă rezumați un „total” scurt, atunci pentru a determina corect momentul lucrării, următoarele acțiuni vor fi utile:

  • efectuați descompunerea muncii, împărțiți sarcina în pași cât mai detaliați posibil;
  • prototipare;
  • să limiteze punerea în aplicare a cerințelor neprevăzute anterior. Acest lucru nu înseamnă că acestea nu ar trebui realizate, dar este indicat să evidențiați aceste cerințe și să conveniți cu clientul să schimbe calendarul și costurile pentru implementarea lor;
  • ia în considerare timpul pentru stabilizarea soluției;
  • utilizați practicile de îmbunătățire a calității codului, de exemplu, scrierea testelor unitare;
  • stabiliți o rezervă generală.

Ei bine, și amintiți-vă că, dacă un fapt depășește estimarea dvs. cu 30%, atunci acesta este un rezultat foarte bun.

Promovați mai jos

Pentru cea mai exactă evaluare, aveți nevoie de o experiență reală de dezvoltare și într-un anumit domeniu. Dar există reguli generale care vor ajuta la evitarea greșelilor în planificare și a problemelor la predarea lucrării către client. Aș descrie aceste reguli după cum urmează.

În primul rând, trebuie să înțelegeți sarcina. Acest lucru pare a fi evident și nu are legătură directă cu momentul, dar de fapt este un punct cheie. Chiar și în proiecte mari serioase, unul dintre principalii factori de eșec și întârziere este problema în definirea cerințelor. Pentru dezvoltatorii începători, din păcate, aceasta este o problemă serioasă - nu citesc TOR sau citesc și înțeleg foarte selectiv (au memorat și au completat cinci din zece puncte și și-au amintit de cele rămase atunci când a fost trimis rezultatul). Este clar că o sarcină neînțeleasă nu poate fi implementată corect la timp.

În continuare - estimează timpul în sine pentru dezvoltare. Particularitatea programării este că nu există sarcini absolut identice. Acest lucru face munca noastră mai interesantă, dar calendarul este mai dificil. Descompunerea funcționează bine aici, adică împărțirea unei sarcini unice complexe într-o secvență de mici sarcini familiare mici. Și fiecare dintre ele poate fi deja estimat în mod adecvat în ore. Adunăm estimările subtaskurilor - și obținem estimarea întregii probleme.

De obicei, această estimare include doar costul codificării reale. Aceasta este, fără îndoială, cea mai importantă parte a dezvoltării, dar departe de a fi singura (și deseori - nu cea mai voluminoasă). Implementarea completă a sarcinii include, de asemenea, citirea și clarificarea TOR, întâlniri cu colegii sau cu clientul, depanare și testare, întocmirea documentației, predarea rezultatului (demonstrarea către client și eventuale modificări pe baza comentariilor sale). Cât timp îți va lua pentru aceste acțiuni, doar experiența ne va spune. La început, este important, cel puțin, să nu uităm să le luăm în calcul în calcule, iar o colecție mai experimentată poate solicita o estimare aproximativă a timpului.

Deci, luăm o estimare a codificării costurilor forței de muncă, adăugăm o estimare a costului muncii suplimentare - și obținem estimarea dorită a timpului pentru finalizarea sarcinii. Dar asta nu este tot! Este necesar să indicați data planificată de finalizare a sarcinii. Ar fi o greșeală să luați și să împărțiți pur și simplu costurile forței de muncă (în ore) la 8 ore și să le adăugați la data curentă. În viața reală, un dezvoltator nu lucrează niciodată (bine, aproape niciodată) 100% din timp la o sarcină specifică. Cu siguranță veți petrece timp pe alte lucrări - importante, dar nu direct legate de cea principală. De exemplu, ajutorarea colegilor, instruire, redactarea rapoartelor etc. De obicei, la planificare, se consideră că 60-70% din timpul de lucru este cheltuit direct pentru munca la proiectul curent. În plus, trebuie să țineți cont de posibile întârzieri care vă vor împiedica să lucrați continuu la sarcină. De exemplu, dacă pentru aceasta trebuie să interacționați cu alte persoane (colegi, clienți), atunci luați în considerare angajarea, programul de lucru etc.

Iată regulile de bază care, după părerea mea, vor ajuta dezvoltatorul să evite problemele de estimare și de respectare a termenelor. În plus, cheia este acumularea propriei experiențe atât în \u200b\u200bimplementarea sarcinilor, cât și în evaluare. De exemplu, după finalizarea unei sarcini, este foarte util să comparați estimarea inițială cu intervalul de timp real și să trageți concluzii pentru viitor. Și, desigur, merită să studiezi experiența altcuiva. Aș recomanda pe tema cărții de S. McConnell „Cât costă un proiect software” și S. Arkhipenkov „Prelegeri despre managementul proiectelor software”.

Promovați mai jos

La evaluarea și planificarea termenelor, este necesar:

  1. Descompuneți sarcina în mici bucăți funcționale în așa fel încât să existe o înțelegere clară a timpului necesar pentru a dezvolta fiecare astfel de bucată.
  2. În paralel cu descompunerea, cu siguranță vor apărea întrebări suplimentare despre funcționalitatea care nu au fost descrise în declarația problemei. Este necesar să obțineți răspunsuri la astfel de întrebări, deoarece acest lucru se referă direct la sfera de lucru și, prin urmare, la calendar.
  3. Adăugați un procent de riscuri la evaluarea finală. Acest lucru este determinat empiric. Puteți începe, de exemplu, cu riscuri de 10-15%.
  4. Înțelegeți câte ore pe zi un programator este dispus să aloce pentru o sarcină.
  5. Împărțim estimarea finală la numărul de ore pe care le alocăm pe zi și obținem numărul de zile necesare pentru implementare.
  6. Ne concentrăm pe calendar și pe numărul necesar de zile pentru finalizare. Luăm în considerare weekendurile și alte zile în care programatorul nu va putea face față sarcinii, precum și data de începere a lucrării (dezvoltatorul nu este întotdeauna gata să ia sarcina să lucreze în aceeași zi). Astfel, obținem data de început și de sfârșit a lucrului.

Promovați mai jos

În compania noastră, planificarea sarcinilor trece întotdeauna prin mai multe etape. În ceea ce privește afacerea, formulăm 5-6 obiective strategice pentru anul respectiv. Acestea sunt sarcini la nivel înalt, de exemplu, pentru a crește un parametru cu un anumit procent. Mai mult, diferitele divizii ale companiei formează sarcini de afaceri pentru toate echipele IT. Termenele limită pentru aceste sarcini primesc o estimare aproximativă inițială, care este adesea formată din toți membrii echipei - manager, analist, dezvoltator și tester. După ce a primit această evaluare, afacerea acordă prioritate sarcinilor, luând în considerare obiectivele strategice ale companiei. Obiectivele strategice transversale ajută în acest sens, odată cu ele devine evident că lucrăm cu toții pentru o cauză comună, nu există o astfel de situație când cineva trage doar în propria direcție. Colectăm sprinturi din sarcini estimate cu precizie. Unele echipe le au trimestrial, unele au lunar. Mai multe sarcini care sunt clasificate provizoriu în următorul sprint primesc estimări exacte de către echipe. Sarcinile mari sunt împărțite în cele de nivel inferior, pentru fiecare dintre care este responsabil un interpret specific, el este cel care oferă o evaluare exactă.

În această etapă, este important să nu uitați să adăugați timp suplimentar pentru a remedia erorile, deoarece numai cel care nu face nimic nu se înșală. Acest lucru este bine înțeles atât de proprietarul de produs, cât și de clienții de afaceri. În același timp, marja de timp necesară trebuie să fie adecvată: nimeni nu va înțelege un dezvoltator care stabilește o sarcină simplă prea mult timp, i se va cere să justifice decizia. Cel mai greu este să explici companiei de ce este nevoie de timp pentru refactorizare. Suntem recunoscători companiei noastre pentru faptul că, din când în când, reușim, pentru că refacerea în factori duce la o infrastructură mai ușoară și punerea lucrurilor în ordine în cod, ceea ce crește stabilitatea sistemului și poate accelera semnificativ dezvoltarea de noi funcții.

Uneori apar erori în evaluare. În opinia mea, este imposibil ca departamentul de dezvoltare din companiile mari cu infrastructură dezvoltată să evite complet acest lucru. În acest caz, este important ca dezvoltatorul să-și informeze managerul despre ceea ce se întâmplă în timp și, la rândul său, are timp să avertizeze afacerea și să „depășească” ceva din planurile generale ale companiei. În acest mod, este mult mai corect să lucrezi decât să încerci frenetic să faci ceea ce durează 5 zile în 3 zile, și apoi să te îneci într-un număr mare de greșeli care au apărut din cauza unei astfel de goane.

Promovați mai jos

Răspunsul corect la ambele părți ale întrebării [cum să învățați cum să planificați corect și să livrați un proiect la timp - Ed.] - experiență. Nu există alte modalități de a „cunoaște Zenul”. Conform teoriei luării deciziilor, orice fel de inferențe exacte pot fi construite numai pe baza unei analize a unui număr de date deja disponibile. Și cu cât aceste date sunt mai multe, cu atât previziunea și evaluarea finală sunt mai precise.

În cuvintele lui Herbert Shaw: „Experiența este o școală în care o persoană învață ce prost a fost înainte”. Prin urmare, urmează o concluzie destul de simplă: dacă un programator are deja o experiență care se corelează cu sarcina la îndemână, se poate baza pe ea, dacă nu, pe experiența „colegilor săi din magazin”.

Apoi, trebuie să înțelegeți că programarea directă este o sarcină pe care oamenii o fac foarte, foarte prost, mai ales în dezvoltare. Este bună practică atunci când se estimează datele scadente să se introducă „factori de corecție” pe estimarea inițială. Această valoare poate varia între 1,5 și 3, în funcție de experiența dezvoltatorului și de totalitatea gradelor de incertitudine ale problemelor rezolvate în cadrul proiectului.

Promovați mai jos

Este important să se ia în considerare mulți factori în determinarea calendarului.

De exemplu, experiența de lucru. Cât de clar vă imaginați scopul lucrării viitoare? Ai mai făcut așa ceva? Este clar că cu cât mai multă experiență, cu atât se va face mai repede munca.

O sarcină tehnică bine scrisă joacă un rol semnificativ în determinarea termenelor limită. Acest lucru este foarte dificil în zona noastră. De multe ori clientul însuși nu știe ce vrea, așa că vă sfătuiesc să petreceți o zi sau două în plus, dar obțineți de la client o idee clară a rezultatului dorit. Este important ca această viziune să fie reciprocă. Și numai după aceea puteți începe să negociați suma și termenii.

De asemenea, includeți întotdeauna riscuri. Pentru începători, vă recomand să înmulțiți timpul de plecare estimat cu două. La urma urmei, este mai bine să livrați proiectul înainte de termen și să vă dezvoltați ca specialist în ochii clientului, mai degrabă decât să îl prezentați mai târziu și să vă distrugeți reputația.

Promovați mai jos

Recomandarea generală este că dezvoltatorul trebuie să învețe cum să descompună corect sarcinile, să caute întotdeauna posibile capcane, să se bazeze pe propria experiență și să nu uite să avertizeze clienții și colegii la timp dacă sarcina nu poate fi rezolvată în intervalul de timp specificat.

Realizarea unui plan clar este mult mai dificil decât stabilirea unui termen limită pentru o anumită sarcină. În același timp, este important nu numai să livrați proiectul la timp, ci și să vă asigurați că sistemul pe care l-ați dezvoltat rezolvă corect problemele de afaceri. Aici, echipele IT sunt asistate de diverse metodologii de dezvoltare software: de la RUP și MSF la SCRUM și alte formate Agile. Alegerea instrumentelor este foarte extinsă și mulți dintre clienții noștri doresc să înțeleagă din timp modul în care vom lucra cu ei în proiect, la ce principii respectăm.

Apropo, subiectul Agile devine acum aproape de afaceri și chiar în proiecte individuale către sectorul public, deoarece principiile acestei metodologii fac posibilă implementarea proiectelor foarte rapid, gestionând așteptările clienților la fiecare iterație. De exemplu, într-o echipă Agile, practic nu există discuții îndelungate cu un client. Uitați de zeci de pagini care descriu detalii tehnice inutile, cum ar fi viteza cu care apar meniurile derulante. Oferiți clientului posibilitatea de a încerca o versiune intermediară a sistemului, atunci va deveni mult mai ușor să vă înțelegeți.

Echipa agilă planifică totul împreună și determină nivelul optim al costurilor forței de muncă care vor fi necesare pentru a rezolva o anumită problemă. De exemplu, una dintre tehnici se numește „Planificarea pokerului”, unde fiecare participant își dă în mod anonim estimarea muncii necesare pentru o sarcină specifică. După aceea, echipa determină greutatea medie a sarcinii în puncte de poveste sau ore de lucru și distribuie sarcinile conform principiului „cui îi place ce”. În același timp, în fiecare zi, echipa se adună pentru o întâlnire de 15 minute, când toată lumea vorbește în câteva minute despre starea sarcinilor lor curente, inclusiv despre raportarea dificultăților apărute. Echipa elimină rapid problema detectată, prin urmare clientul se uită la etapa următoare a activității programatorului cât mai repede posibil. Dezvoltatorii nu întârzie termenele limită pentru îndeplinirea sarcinilor din cauza refuzului de a atrage echipa din nou sau în zadar încercări de a-și da seama singuri, ucigând timp prețios. Apropo, cu astfel de mini-stări, dezvoltatorii au dorința de a-și arăta partea cea mai bună, de a arăta că ești responsabil pentru munca ta. Motivează și se autodisciplinează.

(timpul de la serviciu nu devine suport până în primul moment în care începe să se execute pe resurse); minimizând întârzieri sau timp de raspuns (timpul de la locul de muncă devine până se finalizează în cazul activității periodice sau până când sistemul răspunde și dă prima ieșire a utilizatorului în cazul activității interactive); sau maximizare justiţie (cantitate egală de timp de procesor pentru fiecare proces, sau mai general, momente corespunzătoare în timp în funcție de prioritatea și volumul de lucru al fiecărui proces). În practică, aceste obiective sunt adesea în conflict (de exemplu, randament versus latență), astfel încât programatorul va face un compromis adecvat. Preferința este măsurată prin oricare dintre problemele menționate mai sus, în funcție de nevoile și sarcinile utilizatorului.

OS / 360 și succesori

Aix

În versiunea AIX 4, există trei semnificații posibile pentru o politică de planificare a firelor:

  • În primul rând, a ieșit primul: după ce un thread cu această politică este programat, acesta este executat până la finalizare, dacă nu este blocat, renunță voluntar la controlul procesorului sau expedierea devine cu o prioritate de thread mai mare. Numai cu fluxuri de prioritate fixe poate avea o politică de planificare FIFO.
  • Round Robin: Acesta este similar cu planificatorul de scheme AIX Versiunea 3 într-un mod round robin bazat pe felii de timp de 10 ms. Atunci când un fir PP are control la sfârșitul intervalului de timp, acesta se deplasează la coada cozii firului cu aceeași prioritate. Numai firele cu prioritate fixă \u200b\u200bpot avea politica de planificare Round Robin.
  • ALTE: Această politică este definită de POSIX1003.4a în implementare. În versiunea AIX 4, această politică este definită ca echivalentul RR, cu excepția faptului că se aplică firelor de prioritate non-fixe. Recalcularea valorii de prioritate a unui fir de execuție pe întrerupere înseamnă că un fir de execuție poate pierde controlul, deoarece valoarea priorității sale a crescut mai mult decât un alt fir de execuție. Acesta este comportamentul AIX versiunea 3.

Subiectele sunt în primul rând de interes pentru aplicațiile care constau în prezent din mai multe procese asincrone. Aceste aplicații pot impune o sarcină ușoară asupra sistemului dacă sunt convertite într-o structură cu mai multe fire.

Articole similare

2021 choosevoice.ru. Treaba mea. Contabilitate. Povesti de succes. Idei. Calculatoare. Revistă.