Najmniejszy pozostały czas wykonania. Jak dowiedzieć się, jak prawidłowo określić harmonogram prac - odpowiadają eksperci Proces obliczania pozostałego czasu

Wszystko, co zostało opisane w kilku poprzednich rozdziałach, skupiało się bardziej na prowadzeniu dalszych badań nad problemem właściwego czasu procesu oraz, w znacznie mniejszym stopniu, na praktyczne zastosowania... Aby wypełnić tę lukę, nakreślmy jeden ze sposobów obliczania właściwego czasu procesu na podstawie danych statystycznych dotyczących jego ewolucji.

Rozważmy proces jednowymiarowy, którego stan charakteryzuje się rzeczywistą zmienną x. Załóżmy, że obserwacje dynamiki procesu są prowadzone w czasie astronomicznym t, tak że t \u003d t k i x \u003d x k, k \u003d 1, ..., n są stałymi momentami obserwacji i odpowiadającymi im wartościami stanów procesu. Istnieje wiele różnych metod matematycznych, które umożliwiają konstruowanie krzywych, które albo przechodzą przez punkty (t k, Xk), albo zbliżają się do nich w „najlepszy sposób”. Wynikające z tego funkcje x \u003d x (t) wywołują w naszym umyśle wrażenie, że rozpatrywany proces zależy od mechanicznego ruchu ciał niebieskich, a zatem jego stan wyraża się w czasie astronomicznym t. Z takim wnioskiem można się liczyć; gdyby nie było ciągłych trudności przy próbie przewidzenia dalszego przebiegu procesu. W przypadku dużej liczby różnych procesów, które nie są bezpośrednio związane z ruchami mechanicznymi ciał niebieskich, przewidywania teoretyczne uzyskane za pomocą funkcji x \u003d x (t) poza przedziałem obserwacji zaczynają znacznie odbiegać od późniejszych danych eksperymentalnych. Przyczyną rozbieżności między teorią a eksperymentem zwykle próbuje się wyjaśnić nieudaną metodą przetwarzania, ale istota sprawy może nie być w tym.

Każdy interesujący nas proces zachodzi we Wszechświecie. On, oczywiście, „czuje” wpływ ruchu ciał niebieskich. Jednak wpływ ten może okazać się „niesztywny”, niedeterministyczny. W szczególności może się to przejawiać w fakcie, że w określonych odstępach czasu astronomicznego stan procesu pozostaje niezmieniony. Przypomnijmy w związku z tym podany wcześniej przykład z zamkniętym, pustym pokojem odizolowanym od świata zewnętrznego. Niech do pokoju wleci tylko jeden żywy. W ciągu kilku dni zmiany stanu systemu much domowych będą zależały od ruchu muchy, ponieważ nie można oczekiwać zmian w stanie domu. Jednocześnie trudno sobie wyobrazić, że zachowanie muchy jest ściśle związane z biegiem czasu astronomicznego.

Po tak długiej dygresji przejdźmy do opisu algorytmu obliczania właściwego czasu procesu.

W tym algorytmie jednostka obliczania lokalnych maksimów jest wybierana jako naturalna miara czasu. Dodatkowo brane są pod uwagę możliwe odcinki stacjonarnego stanu procesu, na których, jak wspomniano wcześniej, zatrzymuje się właściwy czas. Ponieważ o tożsamości tych dwóch stanów można mówić tylko w granicach dokładności pomiaru, w przyszłości przyjmuje się pewną liczbę dodatnią e - dopuszczalny błąd pomiaru.

Zatem danymi wejściowymi dla algorytmu są liczba naturalna n, liczba dodatnia 8, tablice (tk) i (x k), k \u003d 1, ..., n. Dla wygody programowania algorytm jest przedstawiony w postaci czterech kolejno wykonywanych modułów.

Moduł 1,używając danych n, e, tk), (xk), w ogólnym przypadku tworzy nowe tablice 7 \u003d (7+ X \u003d (X t) i bardzo specyficzną towarzyszącą tablicę P \u003d (?), gdzie 1 \u003d 1, ..., t i t<Сп. Основное назначение этого модуля -- выявление в массиве x k) последовательностей идентичных состояний процесса, сохранение первых элементов в таких последовательностях и удаление всех остальных и, наконец, уменьшение по определенному, правилу исходного интервала наблюдения от t до на сумму тех промежутков времени, в которых процесс протекает стационарно.

Moduł 1 obejmuje następujące procedury:

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

W p.p. 1, 2, wprowadzono liczniki z określonymi wartościami początkowymi:

W p.p. 3, 4, wartości liczników zwiększają się o 1.

Sprawdź warunek k ^ n. Jeśli jest spełniony, przejdź do punktu 6, w przeciwnym razie przejdź do punktu 11.

Sprawdź nierówność x k --x k \u003d e. Jeśli tak, przejdź do punktu 7, w przeciwnym razie przejdź do punktu 9.

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

Procedura ta oznacza, że \u200b\u200bjeśli wartości Xk i Xk 1 są nie do odróżnienia w ramach błędu, to zawsze, począwszy od tk, zmniejszają się o wartość tki-tk.

p \u003d p. Wróć do punktu 4.

Tv \u003d t k; X v: \u003d x k; p \u003d p v \u003d v + l., tj. formowane są elementy tablic T, X, P i przypisywana jest następna wartość v.

  • 10. Weź (t k, ..., t n AND (Xk, - X n) jako początkowe tablice wymiaru n - k 1 + 1, a następnie wróć do punktu 2.
  • 11. Wydrukuj m, (T), (X,) i (P,), gdzie i \u003d l, ..., m. Koniec.

Wyjaśnijmy znaczenie elementów towarzyszącej tablicy P. Z poprzedniego tekstu wynika, że \u200b\u200bwartość pk jest równa liczbie tych elementów tablicy (xk), które następują bezpośrednio po niej i różnią się od x pi + ... +, +, o mniej niż e. Uwaga: że pi + ... + pm \u003d n.

Przykład 1. Biorąc pod uwagę: 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), patrz rys. 9, a.

W wyniku modułu 1 otrzymujemy 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), patrz rys. 9, b.

Rozdział 2.Dane wejściowe to liczba naturalna m, a także tablice (7+ (X L), \u003d 1, ..., t. Ten moduł w tablicy (TJ ujawnia momenty czasu [TM a], 1 \u003d 1 m (ml

Przykład 2. Wartości m, (T b) i (X,] są zapożyczone z poprzedniego przykładu. Po wykonaniu modułu 2 otrzymujemy ml \u003d 3, m2 \u003d 8, (U,) \u003d (3, 8, 17), (T *) \u003d (3, 4, 6, 8, 11, 12, 15, 17), patrz także rys. 9, b.

Moduł 3.Dane wejściowe ml, m2, (TM n), 1 \u003d 1, ..., ml, (T *), / 2 \u003d 1, ..., rn2.

Ten moduł jest przeznaczony do budowania tablicy (m (-g) na podstawie formuły

Where TV 6 [TMp, TMn + i]

Zmienna m jest własnym czasem generowanym przez zmianę zmiennej x. Jego naturalną miarą jest lokalna jednostka maksimum.

Przykład 3. Początkowe dane dla T 2) są takie same jak wartości ml, m2 ITM, aw przykładzie 2 .. Po odpowiednich obliczeniach otrzymujemy N \u003d (0; 0,2; 0,6; 1; 1,33; 1,78; 2).

Moduł 4.Tworzy dane wyjściowe wyników przez ustalenie zgodności między wartościami m i elementami x z tablicy (xk).

Przykład 4. Na podstawie danych z przykładów 2 i 3 otrzymano następujący wynik, patrz rys. 9, w:

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

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

Rozpatrywany algorytm umożliwia zatem opracowanie koncepcji właściwego czasu procesu na podstawie informacji o zmianie stanu procesu zarejestrowanej w astronomicznej skali czasu. Jest całkiem jasne, że można użyć innych algorytmów opartych na przykład na obliczeniu sekwencji lokalnych minimów lub sekwencji mieszanej składającej się z lokalnych maksimów i minimów. Przetwarzając dane eksperymentalne, prawdopodobnie powinieneś wypróbować różne opcje. Jeśli z jakiegoś powodu eksperymentator wybrał jeden z określonych czasów właściwych i otrzymał w tym samym czasie tablice (m4 i (xk)), to w kolejnym etapie powinien zastosować jakieś metody matematyczne do przybliżenia punktów eksperymentalnych (m *, x) pewna przybliżona światowa linia procesu x \u003d x (t). Ekstrapolując tę \u200b\u200blinię poza początkowy przedział obserwacyjny, może on dać prognozy dotyczące dalszego przebiegu procesu.

Warto wspomnieć o eksperymencie obliczeniowym mającym na celu ocenę perspektyw wykorzystania proponowanego algorytmu. Jako materiał doświadczalny wybrano dane dotyczące rocznych przepływów rzeki. Wachsz (Tadżykistan) przez 40 poprzednich lat. W tym samym okresie zbierano informacje o dynamice liczby Wolfa, najczęściej używanego integralnego wskaźnika aktywności słonecznej. To ostatnie było podstawą do ustalenia odpowiedniego czasu procesu aktywności słonecznej. Do nowego czasu informacje o kosztach rzeki uległy zmianie. Vakhsh, a następnie w okresie obserwacji podano teoretyczną zależność natężenia przepływu wody w funkcji właściwego czasu aktywności słonecznej. Charakterystyczną cechą powstałego harmonogramu jest niemal okresowe zachowanie kosztów maksymalnych i minimalnych. Koszty jednak nie pozostają stałe.

Wersja przełącznika poprzedniego algorytmu jest algorytmem, który pozostał do końca czasu. Zgodnie z tym algorytmem planista za każdym razem wybiera proces z najmniejszym pozostałym czasem wykonania. W takim przypadku konieczne jest również wcześniejsze poznanie czasu wykonania zadania. Kiedy pojawia się nowe zadanie, jego całkowity czas wykonania jest porównywany z pozostałym czasem wykonywania bieżącego zadania. Jeśli czas wykonania nowego zadania jest krótszy, bieżący proces zostaje zawieszony, a kontrola zostaje przeniesiona do nowego zadania. Ten schemat pozwala szybko obsługiwać krótkie żądania.

Planowanie trójpoziomowe

Systemy wsadowe umożliwiają wdrażanie planowania trójpoziomowego, jak pokazano na rysunku. Gdy nowe zadania wchodzą do systemu, są najpierw umieszczane w kolejce przechowywanej na dysku. Wlot planer dostępu wybiera zadanie i przekazuje je do systemu. Reszta zadań pozostaje w kolejce.

Gdy tylko zadanie wejdzie do systemu, zostanie dla niego utworzony odpowiedni proces, który może od razu wejść do walki o dostęp do procesora. Niemniej jednak możliwe jest, że jest zbyt wiele procesów i wszystkie nie mieszczą się w pamięci, wtedy część z nich zostanie wysłana na dysk. Drugi poziom planowania określa, które procesy mogą być przechowywane w pamięci, a które na dysku. Zrobione harmonogram pamięci .

Planista pamięci okresowo sprawdza procesy na dysku, aby zdecydować, który z nich przenieść do pamięci. Wśród kryteriów stosowanych przez planistę są następujące:

1. Ile czasu minęło, odkąd proces został przepłukany na dysk lub załadowany z dysku?

2. Jak długo proces używa procesora?

3. Jaka jest wielkość procesu (małe procesy nie przeszkadzają)?

4. Jakie jest znaczenie tego procesu?

Trzeci poziom planowania odpowiada za dostęp do gotowego procesu do procesora. Kiedy mówi się o „planistce”, to zazwyczaj harmonogram procesora ... Ten program planujący używa dowolnego algorytmu odpowiedniego do sytuacji, zarówno z przerwą, jak i bez niej. Niektóre z tych algorytmów już rozważaliśmy, a inne poznamy.

Planowanie w systemach interaktywnych.

Planowanie cykliczne.

Jednym z najstarszych, najprostszych, najbardziej sprawiedliwych i najczęściej używanych algorytmów jest algorytm szeregowania okrężnego. Każdy proces ma określony przedział czasu procesora, tak zwany przedział czasu. Jeśli na koniec przedziału czasu proces nadal działa, jest przerywany, a sterowanie jest przenoszone do innego procesu. Oczywiście, jeśli proces blokuje się lub kończy wcześniej, przejście sterowania następuje w tym momencie. Wdrażanie planowania okrężnego jest proste. Harmonogram musi tylko utrzymywać gotową listę procesów. Gdy proces dobiegnie końca, jest przesyłany na koniec listy.

Jedynym interesującym punktem tego algorytmu jest długość kwantowa. Przełączanie się z jednego procesu na inny zajmuje trochę czasu - trzeba zapisywać i ładować rejestry i karty pamięci, aktualizować tabele i listy, zapisywać i ponownie ładować pamięć podręczną itp. Wniosek można sformułować następująco: zbyt mały kwant prowadzi do częstego wydajność, ale zbyt duży kwant może skutkować powolną odpowiedzią na krótkie zapytania interaktywne. Wartość kwantowa około 2 0-5 0 ms jest często rozsądnym kompromisem.

Planowanie priorytetowe.

Algorytm planowania cyklicznego ma ważne założenie, że wszystkie procesy są równe. W przypadku komputera z dużą liczbą użytkowników może tak nie być. Na przykład na uniwersytecie należy obsłużyć przede wszystkim dziekanów, potem profesorów, sekretarzy, sprzątaczek, a dopiero potem studentów. Konieczność uwzględnienia takich czynników zewnętrznych prowadzi do priorytetowego planowania. Podstawowa idea jest prosta: każdemu procesowi przypisuje się priorytet, a sterowanie jest przekazywane do gotowego do uruchomienia procesu o najwyższym priorytecie.

Kilka kolejek.

Jeden z harmonogramów pierwszego priorytetu został zaimplementowany w kompatybilnym systemie współdzielonym w czasie (CTSS) Głównym problemem z systemem CTSS było zbyt wolne przełączanie procesów, ponieważ w pamięci IBM 7094 był tylko jeden proces. Każdy przełącznik oznaczał zrzucanie bieżącego procesu na dysk

i odczytuje nowy proces z dysku. Programiści CTSS szybko zdali sobie sprawę, że wydajność byłaby wyższa, gdyby procesom ograniczonym przez procesor przydzielono większy wycinek czasu niż w przypadku małych wycinków, ale często. Z jednej strony zmniejszy to liczbę wymian z pamięci na dysk, az drugiej doprowadzi do pogorszenia czasu odpowiedzi, jak już widzieliśmy.

W rezultacie opracowano rozwiązanie z klasami priorytetowymi. Procesom z klasy o najwyższym priorytecie przydzielono jeden kwant, procesom z klasy następnej - dwa kwanty, kolejnej - cztery kwanty itd. Gdy procesowi zużywał się cały przydzielony mu czas, przeszedł do klasy niższej.

Jako przykład rozważmy proces, który musi wykonać obliczenia dla 100 kwantów. Najpierw otrzyma jeden kwant, a następnie zostanie przepompowany na dysk. Następnym razem dostanie 2 kwanty, potem 4, 8,16, 32, 64, chociaż używa tylko 37 z 64. W tym przypadku będzie potrzebował tylko 7 transferów (w tym początkowe ładowanie) zamiast 100, które byłyby potrzebne przy zastosowaniu algorytmu cyklicznego. Ponadto w miarę zagłębiania się w kolejkę priorytetów proces będzie rozpoczynał się coraz rzadziej, pozostawiając procesor krótszym procesom.

„Najkrótszy proces jest następny”

Ponieważ algorytm Shortest Task First minimalizuje średni czas realizacji w systemach przetwarzania wsadowego, chcielibyśmy go używać również w systemach interaktywnych. Do pewnego stopnia jest to możliwe. Procesy interaktywne najczęściej postępują zgodnie ze schematem „oczekiwanie na polecenie, wykonanie polecenia, oczekiwanie na polecenie, wykonanie polecenia…” Biorąc pod uwagę wykonanie każdego polecenia jako osobnego zadania, można zminimalizować ogólny średni czas odpowiedzi, uruchamiając najpierw najkrótsze zadanie. Jedynym problemem jest to

w ustalaniu, który z oczekujących procesów jest najkrótszy.

Jedna metoda polega na szacowaniu długości procesu na podstawie poprzedniego zachowania procesu. Rozpoczyna to proces w najkrótszym przewidywanym czasie. Załóżmy, że przewidywany czas wykonania polecenia to T 0, a szacowany czas kolejnego uruchomienia to T 1. Możesz poprawić oszacowanie czasu, biorąc sumę ważoną tych czasów aT 0 + (1 - a) T 1. Wybierając odpowiednią wartość dla a, możemy sprawić, że algorytm estymacji szybko zapomni o poprzednich uruchomieniach lub odwrotnie, zapamięta je na długo. Przyjmując a \u003d 1/2, otrzymujemy szereg szacunków:

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

Po trzech startach waga T 0 w oszacowaniu spadnie do 1/8.

Metoda szacowania następnej wartości w szeregu poprzez średnią ważoną poprzedniej wartości i poprzedniego oszacowania jest często nazywana starzeniem. Ta metoda ma zastosowanie w wielu sytuacjach, w których wymagana jest ocena na podstawie poprzednich wartości. Najłatwiejszy sposób uświadomienia sobie starzenia to a \u003d 1/2. Na każdym kroku po prostu potrzebujesz

dodać nową wartość do aktualnego oszacowania i zmniejszyć o połowę sumę (przesuwając o 1 bit w prawo).

Gwarantowane planowanie.

Zasadniczo innym podejściem do planowania jest składanie użytkownikom rzeczywistych obietnic, a następnie ich spełnianie. Oto jedna obietnica, którą łatwo złożyć i spełnić: jeśli n użytkowników będzie dzielić z Tobą procesor, otrzymasz 1 / n mocy procesora.

W systemie z jednym użytkownikiem i n uruchomionymi procesorami każdy otrzyma 1 / n cykli procesora.

Aby spełnić tę obietnicę, system musi śledzić przydział procesora między procesami od momentu utworzenia każdego procesu. Następnie system oblicza ilość zasobów procesora, do których proces jest uprawniony, na przykład czas od utworzenia podzielony przez n. Teraz możesz obliczyć stosunek czasu poświęconego procesowi do czasu, do którego jest on uprawniony. Wynikowa wartość 0,5 oznacza, że \u200b\u200bprocesowi przydzielono tylko połowę tego, co powinien, a 2,0 oznacza, że \u200b\u200bprocesowi przydzielono dwa razy więcej niż powinien. Następnie rozpoczyna się proces z najmniejszym stosunkiem do

nie będzie większe niż jego najbliższego sąsiada.

Planowanie loterii.

Algorytm opiera się na dystrybucji losów loterii do procesów dostępu do różnych zasobów, w tym procesora. Kiedy planista musi podjąć decyzję, los na loterię jest wybierany losowo, a jego posiadacz uzyskuje dostęp do zasobu. Jeśli chodzi o dostęp do procesora, „loteria” może odbywać się 50 razy na sekundę, a zwycięzca otrzymuje 20 ms czasu procesora.

Ważniejszym procesom można przyznać dodatkowe bilety, aby zwiększyć prawdopodobieństwo wygranej. Jeśli tylko 100 biletów i 20 z nich jest w jednym procesie, otrzyma 20% czasu procesora. W przeciwieństwie do planowania priorytetów, w którym bardzo trudno jest oszacować, co oznacza, powiedzmy, priorytet 40, w planowaniu loterii wszystko jest oczywiste. Każdy proces otrzyma procent zasobów mniej więcej równy procentowi posiadanych biletów.

Planowanie loterii ma kilka interesujących właściwości. Na przykład, jeśli proces otrzyma kilka losów podczas tworzenia, to w następnej loterii jego szanse na wygraną są proporcjonalne do liczby losów.

Procesy wchodzące w interakcje mogą w razie potrzeby wymieniać bilety. Na przykład, jeśli proces klienta wysyła wiadomość do procesu serwera, a następnie blokuje, może przekazać wszystkie swoje bilety do procesu serwera, aby zwiększyć szansę na uruchomienie serwera. Kiedy proces serwera kończy pracę, może zwrócić wszystkie bilety z powrotem.

Uczciwe planowanie.

Do tej pory zakładaliśmy, że każdy proces jest kontrolowany niezależnie od tego, kto jest szefem. Dlatego, jeśli użytkownik 1 utworzy 9 procesów, a użytkownik 2 utworzy 1 proces, to przy użyciu planowania cyklicznego lub w przypadku równych priorytetów użytkownik 1 otrzyma 90% procesora, a użytkownik 2 tylko 10.

Aby uniknąć takich sytuacji, niektóre systemy zwracają uwagę właściciela procesu przed planowaniem. W takim modelu każdy użytkownik otrzymuje jakąś część procesora, a planista wybiera proces zgodnie z tym faktem. Jeśli w naszym przykładzie każdy z użytkowników miał

obiecano 50% procesora, a następnie otrzymają 50% procesora, niezależnie od liczby procesów.

Harmonogramowanie w systemach czasu rzeczywistego.

Czas odgrywa zasadniczą rolę w systemach czasu rzeczywistego. Najczęściej jedno lub więcej zewnętrznych urządzeń fizycznych generuje sygnały wejściowe, a komputer musi odpowiednio na nie reagować w określonym czasie.

Systemy czasu rzeczywistego są podzielone na trudne systemy czasu rzeczywistego , co oznacza, że \u200b\u200bdla każdego zadania są napięte terminy (muszą być dotrzymane) oraz elastyczne systemy czasu rzeczywistego w których naruszenia harmonogramu są niepożądane, ale dopuszczalne. W obu przypadkach program jest podzielony na kilka procesów, z których każdy jest przewidywalny. Procesy te są najczęściej krótkie i kończą swoją pracę w ciągu sekundy. Gdy pojawi się sygnał zewnętrzny, planista musi upewnić się, że harmonogram jest dotrzymany.

Zdarzenia zewnętrzne, na które system musi reagować, można podzielić na okresowy(występujące w regularnych odstępach czasu) i nieokresowe(powstające w nieprzewidywalny sposób). Może istnieć kilka okresowych strumieni zdarzeń, które system musi przetworzyć. W zależności od czasu spędzonego na przetwarzaniu każdego ze zdarzeń, system może nie być w stanie przetworzyć wszystkich zdarzeń w odpowiednim czasie.


Podobne informacje.


Wprowadzenie

Celem warsztatów z organizacji produkcji jest poszerzenie i pogłębienie wiedzy teoretycznej, zaszczepienie umiejętności niezbędnych do rozwiązywania najczęściej spotykanych w praktyce problemów dotyczących organizacji i planowania produkcji.

Warsztat obejmuje zadania z głównych sekcji kursu. Na początku każdego tematu przedstawiono krótkie instrukcje metodologiczne i informacje teoretyczne, typowe problemy z rozwiązaniami oraz problemy do samodzielnego rozwiązania.

Obecność w każdym temacie wskazówek i krótkich informacji teoretycznych pozwala na wykorzystanie tego warsztatu w kursach korespondencyjnych.


Obliczanie czasu trwania cyklu produkcyjnego

Czas trwania cyklu produkcyjnego służy jako wskaźnik efektywności procesu produkcyjnego.

Cykl produkcyjny - okres przebywania obiektów pracy w procesie produkcyjnym od momentu uruchomienia surowca do momentu wydania gotowego produktu.

Cykl produkcyjny składa się z czas pracy, podczas których wykonywana jest praca, i czasy przerw... Przerwy, w zależności od przyczyn, które je spowodowały, można podzielić:

1) włączony naturalny lub technologiczne - wynikają z charakteru produktu;

2) organizacyjny (przerwy między zmianami).

Na czas trwania cyklu produkcyjnego składają się następujące elementy:

Cykl T \u003d t te + t jedzenie + t tr + t k.k. + t m. o. + t m.ts.

gdzie t te - czas operacji technologicznych;

je -czas naturalnych procesów (suszenie, chłodzenie itp.);

t tr -czas transportu przedmiotów pracy;

t c.c. -czas kontroli jakości;

t m.o -czas ściółki interoperacyjnej;

t m.ts. -czas spędzony w magazynach międzywydziałowych;

(t trzy t k.k. można łączyć z t m.o).

Obliczenie czasu trwania cyklu produkcyjnego zależy od rodzaju produkcji. W produkcji masowej o czasie trwania cyklu produkcyjnego decyduje czas przebywania produktu w strumieniu, tj.

Cykl T \u003d t w M,

gdzie t w - cykl wydawniczy;

M - liczba miejsc pracy.

Pod takt uwolnienia należy przez to rozumieć odstęp czasu między wydaniem jednego wytworzonego produktu a następnym produktem.

Cykl wydania jest określony przez wzór

t in \u003d Teff / V,

gdzie Teff- efektywny fundusz czasu pracownika za okres rozliczeniowy (zmiana, dzień, rok);

W - wielkość produkcji w tym samym okresie (w jednostkach naturalnych).

Przykład: T cm \u003d 8 godzin \u003d 480 min; Pas T \u003d 30 min; → Teff \u003d 480 - - 30 \u003d 450 min.

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

W produkcji seryjnej, w której przetwarzanie odbywa się partiami, czas trwania cyklu technologicznego określa się nie na jednostkę produkcji, ale na całą partię. Ponadto w zależności od sposobu uruchomienia partii do produkcji uzyskujemy różne czasy cykli. Istnieją trzy sposoby przenoszenia produktów w produkcji: sekwencyjne, równoległe i mieszane (szeregowo-równoległe).


ja... Gdy zgodny części ruchome, każda kolejna operacja rozpoczyna się dopiero po zakończeniu poprzedniej. Czas cyklu dla sekwencyjnego ruchu części będzie równy:

gdzie n - liczba przetwarzanych części partii;

t szt ja - akordowy czas operacji;

C i - liczba miejsc pracy na jaoperacja;

m - liczba operacji procesu technologicznego.

Podaje się partię produktów składającą się z 5 sztuk. Wsad przechodzi kolejno przez 4 operacje; czas trwania pierwszej operacji - 10 minut, drugiej - 20 minut, trzeciej - 10 minut, czwartej - 30 minut (rys. 1).

Obrazek 1

T cykl \u003d T ostatnia \u003d 5 (10 + 20 + 10 + 30) \u003d 350 min.

Sekwencyjny ruch części ma tę zaletę, że pozwala na pracę sprzętu bez przestojów. Ale jego wadą jest to, że czas trwania cyklu produkcyjnego w tym przypadku jest największy. Ponadto na stanowiskach pracy tworzone są znaczne zapasy części, co wymaga dodatkowej powierzchni produkcyjnej.

II... Gdy równolegle ruchu partii, poszczególne części nie są opóźniane na stanowiskach pracy, ale indywidualnie przenoszone do kolejnej operacji natychmiast, bez czekania na zakończenie przetwarzania całej partii. Tak więc, przy równoległym ruchu partii części na każdym stanowisku roboczym, różne operacje są wykonywane jednocześnie na różnych częściach tej samej partii.

Czas przetwarzania wsadowego z równoległym ruchem produktów jest znacznie skrócony:

dl .

gdzie n n - liczba części w partia transferu (partia transportowa), tj. liczbę produktów jednocześnie przenoszonych z jednej operacji do drugiej;

Dl - najdłuższy cykl operacyjny.

Przy równoległym uruchamianiu partii produktów, części całej partii są przetwarzane w sposób ciągły tylko na tych stanowiskach pracy, gdzie długie operacje następują po krótkich. W przypadkach, gdy krótkie operacje następują po długich, tj. dłużej (w naszym przykładzie trzecia operacja), operacje te wykonywane są z przerwami, tj. bezczynny sprzęt. W tym przypadku partia części nie może zostać przetworzona natychmiast, bez opóźnień, ponieważ poprzednia (długa) operacja na to nie pozwala.

W naszym przykładzie: n= 5, t 1 = 10; t 2 = 20; t 3 = 10; t 4 = 30; od= 1.

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

Rozważ schemat równoległego ruchu części (ryc.2):

Rysunek 2

III... Aby wyeliminować przerwy w przetwarzaniu poszczególnych części partii we wszystkich operacjach, należy zastosować szeregowy równoległylub mieszanysposób uruchomienia, w którym części (po ich obróbce) są przekazywane do kolejnej operacji pojedynczo lub w postaci zapasów „transportowych” (po kilka sztuk na raz) w taki sposób, aby wykonanie operacji nie było przerywane na żadnym stanowisku pracy. W metodzie mieszanej ciągłość obróbki jest pobierana z metody sekwencyjnej, a z metody równoległej przejście części z operacji do operacji bezpośrednio po jej obróbce. Przy mieszanej metodzie uruchomienia do produkcji czas cyklu określa wzór

cor .

gdzie cor. - najkrótszy cykl operacyjny (z każdej pary sąsiednich operacji);

m-1 liczba linii trasowania.

Jeśli kolejna operacja jest dłuższa niż poprzednia lub jest jej równa w czasie, operacja ta jest uruchamiana pojedynczo, natychmiast po przetworzeniu pierwszej części w poprzedniej operacji. Jeśli, przeciwnie, kolejna operacja jest krótsza niż poprzednia, to występują przerwy w przenoszeniu sztuki. Aby im zapobiec, konieczne jest zgromadzenie rezerwy transportowej o takiej objętości, która jest wystarczająca do zapewnienia pracy w późniejszej operacji. Aby praktycznie znaleźć ten punkt na wykresie, konieczne jest przeniesienie ostatniego szczegółu partii i przesunięcie czasu jej wykonania w prawo. Czas przetwarzania dla wszystkich innych części partii jest wykreślony po lewej stronie. Początek przetwarzania pierwszej części wskazuje moment, w którym rezerwa transportowa z poprzedniej operacji powinna zostać przeniesiona do tej operacji.

Jeśli sąsiednie operacje mają ten sam czas trwania, tylko jedna z nich jest traktowana jako krótka lub długa (ryc. 3).

Rysunek 3

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

Główne sposoby na skrócenie czasu trwania cyklu produkcyjnego to:

1) Zmniejszenie pracochłonności wytwarzania wyrobów poprzez poprawę produktywności wytwarzanej konstrukcji przy użyciu komputerów, wprowadzenie zaawansowanych procesów technologicznych.

2) Racjonalna organizacja procesów pracy, aranżacja i utrzymanie miejsc pracy w oparciu o specjalizację i kooperację, rozbudowana mechanizacja i automatyzacja produkcji.

3) Ograniczanie różnorodnych planowanych i nieplanowanych przerw w pracy w oparciu o racjonalne wykorzystanie zasad naukowej organizacji procesu produkcyjnego.

4) Przyspieszenie przebiegu reakcji w wyniku wzrostu ciśnienia, temperatury, przejścia w proces ciągły itp.

5) Doskonalenie procesów transportu, magazynowania i kontroli oraz ich nakładanie się w czasie z procesem obróbki i montażu.

Skrócenie czasu trwania cyklu produkcyjnego jest jednym z poważnych zadań organizacji produkcji, ponieważ wpływa na rotację majątku w obiegu, obniżenie kosztów pracy, zmniejszenie powierzchni magazynowej, konieczność transportu itp.

Zadania

1 Określić czas trwania cyklu przetwarzania 50 części w sekwencyjnych, równoległych i sekwencyjno-równoległych typach ruchu w procesie produkcyjnym. Obróbka części składa się z pięciu operacji, których czas trwania wynosi odpowiednio min: t 1 =2; t 2 =3; t 3 =4; t 4 =1; t 5 \u003d 3. Druga operacja jest wykonywana na dwóch maszynach, a każda z pozostałych na jednej. Wielkość partii transferowej to 4 sztuki.

2 Określić czas trwania cyklu przetwarzania 50 części z sekwencyjnymi, równoległymi i sekwencyjno-równoległymi typami ruchu w procesie produkcyjnym. Obróbka części składa się z czterech operacji, których czas trwania wynosi odpowiednio min: t 1 =1; t 2 =4; t 3 =2; t 4 \u003d 6. Czwarta operacja jest wykonywana na dwóch maszynach, a każda z pozostałych na jednej. Wielkość partii przelewu to 5 sztuk.

3 Partia części składająca się z 200 sztuk jest przetwarzana równolegle-sekwencyjnym ruchem w procesie produkcyjnym. Obróbka części składa się z sześciu operacji, których czas trwania wynosi odpowiednio min: t 1 =8; t 2 =3; t 3 =27; t 4 =6; t 5 =4; t 6 \u003d 20. Trzecia operacja jest wykonywana na trzech maszynach, szósta na dwóch, a każda z pozostałych operacji na jednej maszynie. Określ, jak zmieni się czas cyklu przetwarzania partii części, jeśli równolegle sekwencyjny wariant ruchu w produkcji zostanie zastąpiony równoległym. Wielkość partii transferowej to 20 sztuk.

4 Partia 300 sztuk jest przetwarzana równolegle sekwencyjnie podczas procesu produkcyjnego. Proces przetwarzania części składa się z siedmiu operacji, których czas trwania wynosi odpowiednio min: t 1 =4; t 2 =5; t 3 =7; t 4 =3; t 5 =4; t 6 =5; t 7 \u003d 6. Każda operacja wykonywana jest na jednej maszynie. Partia transferowa - 30 sztuk. W wyniku udoskonalonej technologii produkcji czas trwania trzeciej operacji został skrócony o 3 minuty, siódmej - o 2 minuty. Określ, jak zmienia się cykl wsadowy.

5 Podano partię półfabrykatów składającą się z 5 sztuk. Wsad przechodzi przez 4 operacje: czas trwania pierwszej to 10 minut, druga to 20 minut, trzecia to 10 minut, a czwarta to 30 minut. Określić czas trwania cyklu za pomocą analitycznych i graficznych metod dla ruchu sekwencyjnego.

6 Podano partię półfabrykatów, składającą się z czterech sztuk. Wsad przechodzi przez 4 operacje: czas trwania pierwszej to 5 minut, druga to 10 minut, trzecia to 5 minut, a czwarta to 15 minut. Określ analitycznie i graficznie czas cyklu z ruchem równoległym.

7 Podaje się partię półfabrykatów składającą się z 5 sztuk. Wsad przechodzi przez 4 operacje: czas trwania pierwszej to 10 minut, druga to 20 minut, trzecia to 10 minut, a czwarta to 30 minut. Określić czas trwania cyklu za pomocą metod analitycznych i graficznych dla ruchu sekwencyjno-równoległego.

8 Określić czas trwania cyklu technologicznego dla przetworzenia partii 180 sztuk. z równoległymi i sekwencyjnymi wersjami jego ruchu. Twórz wykresy przetwarzania. Wielkość partii przelewu - 30 szt. Czasy i liczba zadań w operacjach są następujące.

Często programiści, zwłaszcza niedoświadczeni, gubią się, gdy proszeni są o wyznaczenie terminów wykonania zadań. Jednak umiejętność planowania jest bardzo przydatną i niezbędną umiejętnością, która pomaga nie tylko w pracy, ale także w życiu. Postanowiliśmy zapytać ekspertów, jak nauczyć się prawidłowo planować i terminowo realizować projekty.

Krótkie wnioski znajdują się na końcu artykułu.

Deweloper zazwyczaj musi wziąć pod uwagę kilka parametrów jednocześnie, aby oszacować czas wykonania zadania:

  1. Doświadczenie w wykonywaniu takich zadań i pracy z tym stosem technologii. Jeśli musisz zrobić coś całkowicie nowego, musisz zachować szczególną ostrożność podczas oceny.
  2. Doświadczenie z tym klientem. Znając klienta, możesz z grubsza przewidzieć dodatkowe wymagania i liczbę zmian.
  3. Jakość kodu do pracy. Jest to najbardziej wpływowy czynnik, przez który wszystko może być bardzo opóźnione i generalnie nie idzie zgodnie z planem. Jeśli projekt ma testy, wszędzie są tylko wyraźne zależności, a funkcjonalność jest dobrze izolowana, wszystko nie jest takie straszne. Znacznie gorzej jest, jeśli masz do czynienia ze starszym kodem bez testów lub z kodem przesyconym niejawnymi zależnościami. Rzeczy takie jak „funkcje magiczne” (kiedy trudno jest zobaczyć końcowy stos wywołań z kodu) i powielanie kodu (kiedy trzeba edytować kilka niezależnych sekcji, aby zmienić jakąkolwiek funkcjonalność) również mogą komplikować sprawę.

Aby nauczyć się odpowiednio oceniać czas pracy, musisz stale ćwiczyć. Na początku swojej pracy zrobiłem dokładnie to: oszacowałem czas na wykonanie każdego nadchodzącego zadania, nawet jeśli nikt tego nie wymagał, a potem obserwowałem, jak dokładnie udało mi się uzyskać szacunek. W trakcie wykonywania zadania zauważyłem, które czynności zajmują więcej czasu. Jeśli coś znacznie wydłużyło termin, zapamiętał ten moment i wziął to pod uwagę w kolejnych ocenach.

Do obiektywnej oceny czasu wymaganego wyłącznie do pracy, należy dodać niewielki margines na pokrycie sytuacji siły wyższej. Często jest szacowany jako procent wykonania głównego zadania, ale dla każdego jest inny: ktoś dodaje 20% czasu, ktoś - 10%, a ktoś - 50%.

Warto również przeanalizować przyczyny przekroczenia terminów po każdym większym naruszeniu terminu. Jeśli nie masz wystarczających kwalifikacji, musisz popracować nad swoimi słabymi punktami. Jeśli problem był organizacyjny - aby zrozumieć, co uniemożliwiło normalną pracę.

Promuj niższe

, dyrektor Techniczny Centrum Innowacyjnych Technologii i Rozwiązań „Jet Infosystems”

Wiele artykułów poświęconych jest metodom oceny złożoności projektu, w tym czasowi pracy i poszczególnym zadaniom. Jednak do tej pory jest to przyczyną konfliktów zarówno w zespole projektowym, jak i podczas komunikacji z klientem.

Głównym asystentem w ocenie jest doświadczenie. Spróbuj jakoś skorelować nowe zadanie z już wykonanymi. Jeśli tworzysz raport, zobacz, ile czasu zajmował podobny raport w przeszłości. Jeśli robisz coś nowego, spróbuj rozbić na znane fragmenty i docenić je. Jeśli zadanie jest zupełnie nowe, poświęć trochę czasu na naukę (jeszcze lepiej - skoordynuj ten czas z osobą, która je wyznacza).

Zwróć uwagę na etapy towarzyszące - jeśli potrzebujesz rozwinąć usługę, to testowanie jednostkowe (a może nie tylko jednostkowe) również powinno zostać uwzględnione w ocenie, przygotowanie danych testowych zajmie pewien czas. Rozważ integrację z innymi usługami itd. Poświęć trochę czasu na naprawienie błędów, które znajdziesz samodzielnie lub z pomocą testerów. Dużo czasu można zmarnować na „niewidzialne” zadania. Na przykład istnieje ocena do celów deweloperskich i ocena do celów testowych, ale przekazanie artefaktu do testów może być związane z rozmieszczeniem stanowisk. Dlatego ważne jest, aby wyobrazić sobie mentalnie cały proces, aby niczego nie przegapić.

Po ustaleniu pracochłonności konieczne jest uwzględnienie w kalendarzu nowych miejsc pracy, nie zapominając o innych zadaniach i czynnościach, które toczą się równolegle.

I nie zapominaj, że plany są bezużyteczne, ale planowanie jest bezcenne. Naucz się dostosowywać plany na czas, utrzymuj zainteresowanie wszystkich i eskaluj w odpowiednim czasie, aby terminy nie były dla nikogo zaskoczeniem.

Promuj niższe

Pytanie, na które nie można odpowiedzieć w krótkiej formie. Gdyby to było łatwe, nie byłoby problemu z brakiem terminów.

Aby terminy rozwoju były bardziej przewidywalne, musisz najpierw zrozumieć powody, dla których programiści ciągle popełniają błędy.

Pierwszym powodem jest to, że większość zadań wykonywanych przez programistę jest w pewnym stopniu wyjątkowa. Oznacza to, że najprawdopodobniej programista wykona takie zadanie po raz pierwszy. Nie wie wystarczająco dobrze, jak długo potrwa ta praca. Jeśli jest to programista z dużym doświadczeniem i miał do wykonania podobne zadanie, jego ocena będzie bliższa rzeczywistości.

Aby użyć prostej analogii, jeśli nigdy nie kopałeś rowów, nie możesz dokładnie określić, ile czasu zajmie wykopanie rowu o szerokości 30 cm, głębokości 60 cm i długości 20 metrów. Jeśli kopałeś wcześniej, Twój szacunkowy czas pracy będzie znacznie bliższy faktycznemu czasowi pracy.

Drugim powodem jest to, że programiści są z natury optymistyczni. To znaczy, biorąc pod uwagę zadanie, wybierając dla niego opcję implementacji, oceniając ulepszenia, programista oczekuje, że wszystko będzie działać zgodnie z oczekiwaniami. I nie myśli o problemach, które napotka po drodze. Często nie może ich przewidzieć. Na przykład istnieje zadanie, które programista może wykonać za pomocą biblioteki oprogramowania open source innej firmy. Na etapie oceny znalazł go w Internecie, przeczytał jego opis - to mu odpowiada. I nawet poprawnie oszacował zakres swojej pracy, aby wykorzystać tę bibliotekę. Ale wcale nie przewidział, że wystąpi błąd w środowisku jego oprogramowania w tej bibliotece.

Deweloper będzie musiał nie tylko wbudować użycie biblioteki do swojego kodu, ale także naprawić błąd w samej bibliotece. Często deweloper nie ma czasu na poprawienie swoich błędów. Jak pokazują statystyki, testowanie i naprawianie błędów może zająć około 50% czasu poświęconego na kodowanie. Liczba ta zależy od kwalifikacji dewelopera, środowiska, stosowanych praktyk deweloperskich (na przykład testy jednostkowe znacznie skracają ten czas, a łączny czas trwania / pracochłonność zadania programistycznego jest mniejszy).

Jeśli wrócimy do analogii z koparką, to koparka nie spodziewała się, że jego łopata pęknie i będzie musiał spędzić dwie godziny na poszukiwaniu nowego cięcia.

Trzeci powód to nieprzewidziane wymagania. Żaden z obszarów produkcji materiałów, z którymi klienci lubią porównywać tworzenie oprogramowania, nie ma tak wielu nowych wymagań. Wyobraź sobie przejście koparki, która wykopała 19 metrów z 20 i usłyszała od klienta życzenie, aby rów nie przebiegał w linii prostej, ale jak wąż o długości ramion 97 centymetrów.

Jak sobie z tym wszystkim radzić i jak żyć w takiej niepewności? Zmniejszanie niepewności i budowanie rezerw czasu.

Najłatwiejszym sposobem na przybliżenie swoich oczekiwań do rzeczywistości jest użycie humorystycznej zasady „Pi”. Po otrzymaniu szacunku od dewelopera (pod względem czasu lub pracochłonności) należy go pomnożyć przez liczbę Pi (\u003d 3,14159). Im bardziej doświadczony deweloper dokonał oszacowania, tym niższy może być ten współczynnik.

Konieczne jest przećwiczenie rozkładu pierwotnego problemu na małe problemy nie dłuższe niż 4 godziny. Im bardziej szczegółowy jest rozkład, tym większe są szanse, że oszacowanie będzie zbliżone do rzeczywistego nakładu pracy / czasu trwania.
Jeśli wrócimy do alokacji rezerwy - ten czas należy przeznaczyć na koniec projektu. Robienie rezerwy i włączanie jej do każdego zadania jest złą praktyką. Prawo Parkinsona „Praca wypełnia się cały czas przeznaczony na nią” jest ściśle wykonywana.

Jeśli podsumujesz krótką „sumę”, to w celu prawidłowego określenia czasu pracy przydatne będą następujące działania:

  • przeprowadzić dekompozycję pracy, podzielić zadanie na jak najbardziej szczegółowe kroki;
  • prototypowanie;
  • ograniczają realizację wcześniej nieprzewidzianych wymagań. Nie oznacza to, że nie należy ich wykonywać, ale wskazane jest podkreślenie tych wymagań i uzgodnienie z klientem zmiany terminu i kosztów ich wdrożenia;
  • wziąć pod uwagę czas potrzebny na ustabilizowanie rozwiązania;
  • stosować praktyki poprawiające jakość kodu, na przykład pisać testy jednostkowe;
  • ustanowić rezerwę ogólną.

No i pamiętaj, że jeśli fakt przekracza Twoje oszacowanie o 30%, to jest to bardzo dobry wynik.

Promuj niższe

Aby uzyskać najdokładniejszą ocenę, potrzebujesz prawdziwego doświadczenia programistycznego w określonym obszarze. Ale istnieją ogólne zasady, które pomogą uniknąć błędów w planowaniu i problemów podczas przekazywania pracy klientowi. Opisałbym te zasady w następujący sposób.

Najpierw musisz zrozumieć zadanie. Wydaje się to oczywiste i nie ma bezpośredniego związku z czasem, ale w rzeczywistości jest to kluczowa kwestia. Nawet w przypadku poważnych dużych projektów jednym z głównych czynników niepowodzenia i opóźnień jest problem z określeniem wymagań. Dla początkujących deweloperów jest to niestety poważny problem - nie czytają zadania technicznego ani nie czytają go i rozumieją bardzo wybiórczo (zapamiętali i uzupełnili pięć z dziesięciu punktów, a resztę zapamiętali, gdy wynik został przesłany). Oczywiste jest, że źle zrozumianego zadania nie można odpowiednio zrealizować na czas.

Dalej - oszacuj czas na sam rozwój. Osobliwością programowania jest to, że nie ma absolutnie identycznych zadań. To sprawia, że \u200b\u200bnasza praca jest ciekawsza, ale czas jest trudniejszy. Rozkład działa tutaj dobrze, tj. dzielenie złożonego, unikalnego zadania na sekwencję małych znanych pod-zadań. A każdy z nich można już odpowiednio oszacować w godzinach. Sumujemy szacunki podzadań - i otrzymujemy oszacowanie całego problemu.

Zazwyczaj to oszacowanie obejmuje tylko koszt faktycznego kodowania. Jest to niewątpliwie najważniejsza część rozwoju, ale daleka od jedynej (a często nie najbardziej obszernej). Pełna realizacja zadania obejmuje również przeczytanie i wyjaśnienie specyfikacji technicznej, spotkania ze współpracownikami lub klientem, debugowanie i testowanie, sporządzenie dokumentacji, przekazanie wyniku (demonstracja klientowi i ewentualne zmiany na podstawie jego uwag). Ile czasu zajmie ci te działania, pokaże tylko doświadczenie. Na początku ważne jest przynajmniej, aby nie zapomnieć o uwzględnieniu ich w obliczeniach, ao przybliżone oszacowanie czasu można poprosić bardziej doświadczonych kolegów.

Robimy więc oszacowanie kosztów pracy kodowania, dodajemy szacunkowy koszt dodatkowej pracy - i otrzymujemy pożądany szacunek czasu na wykonanie zadania. Ale to nie wszystko! Konieczne jest wskazanie planowanego terminu zakończenia zadania. Błędem byłoby po prostu wziąć i podzielić koszty pracy (w godzinach) przez 8 godzin i dodać je do aktualnej daty. W prawdziwym życiu programista nigdy (no, prawie nigdy) nie pracuje przez 100% czasu nad jednym konkretnym zadaniem. Na pewno spędzisz czas na innej pracy - ważnej, ale nie związanej bezpośrednio z główną. Na przykład pomaganie kolegom, szkolenie, pisanie raportów itp. Zwykle przy planowaniu przyjmuje się, że 60-70% czasu pracy poświęcane jest bezpośrednio na pracę nad bieżącym projektem. Dodatkowo musisz liczyć się z możliwymi opóźnieniami, które uniemożliwiają Ci ciągłą pracę nad zadaniem. Na przykład, jeśli w tym celu musisz wchodzić w interakcje z innymi ludźmi (współpracownikami, klientami), rozważ ich zatrudnienie, harmonogram pracy itp.

Oto podstawowe zasady, które moim zdaniem pomogą deweloperowi uniknąć problemów z szacowaniem i dotrzymywaniem terminów. Ponadto kluczowe jest zdobycie osobistego doświadczenia zarówno w realizacji zadań, jak iw ocenie. Na przykład po wykonaniu zadania bardzo pomocne jest porównanie wstępnych szacunków z rzeczywistymi ramami czasowymi i wyciągnięcie wniosków na przyszłość. I oczywiście warto studiować czyjeś doświadczenie. Poleciłbym na temat książki S. McConnell „Ile kosztuje projekt oprogramowania” i S. Arkhipenkova „Wykłady z zarządzania projektami oprogramowania”.

Promuj niższe

Przy ocenie i planowaniu terminów konieczne jest:

  1. Podziel zadanie na małe funkcjonalne fragmenty w taki sposób, aby jasno zrozumieć, ile czasu zajmie opracowanie każdego takiego fragmentu.
  2. Równolegle z dekompozycją z pewnością pojawią się dodatkowe pytania dotyczące funkcjonalności, które nie zostały opisane w opisie problemu. Konieczne jest uzyskanie odpowiedzi na takie pytania, ponieważ odnosi się to bezpośrednio do zakresu pracy, a tym samym do czasu.
  3. Dodaj procent ryzyk do ostatecznej oceny. Określa się to empirycznie. Możesz zacząć na przykład od ryzyka 10-15%.
  4. Zrozum, ile godzin dziennie programista jest skłonny przeznaczyć na zadanie.
  5. Ostateczny kosztorys dzielimy przez liczbę godzin, które przydzielamy dziennie i otrzymujemy liczbę dni potrzebnych na realizację.
  6. Skupiamy się na kalendarzu i wymaganej liczbie dni do wykonania. Uwzględniamy weekendy i inne dni, kiedy programista nie będzie w stanie sobie poradzić z zadaniem, a także datę rozpoczęcia pracy (deweloper nie zawsze jest gotowy do podjęcia zadania w tym samym dniu). W ten sposób otrzymujemy datę rozpoczęcia i zakończenia pracy.

Promuj niższe

W naszej firmie planowanie zadań przebiega zawsze w kilku etapach. Od strony biznesowej formułujemy 5-6 celów strategicznych na rok. Są to zadania wysokiego poziomu, na przykład, aby zwiększyć parametr o określony procent. Ponadto różne działy firmy tworzą zadania biznesowe dla wszystkich zespołów IT. Terminy wykonania tych zadań są wstępnie szacowane, często tworzone przez wszystkich członków zespołu - menedżera, analityka, programistę i testera. Po uzyskaniu tej oceny firma nadaje priorytet zadaniom, biorąc pod uwagę strategiczne cele firmy. Pomagają w tym przekrojowe cele strategiczne, przy nich staje się oczywiste, że wszyscy pracujemy dla jakiejś wspólnej sprawy, nie ma takiej sytuacji, gdy ktoś ciągnie tylko w jego kierunku. Zbieramy sprinty z dokładnie oszacowanych zadań. Niektóre zespoły mają je raz na kwartał, inne raz w miesiącu. Zespoły podają dokładne szacunki kilku zadań wstępnie sklasyfikowanych w następnym sprincie. Duże zadania są podzielone na zadania niższego poziomu, za każde z których odpowiada konkretny wykonawca, to on dokonuje trafnej oceny.

Na tym etapie ważne jest, aby nie zapomnieć o dodaniu dodatkowego czasu na naprawienie błędów, ponieważ tylko ci, którzy nic nie robią, nie mylą się. Jest to dobrze rozumiane zarówno przez właściciela produktu, jak i klientów biznesowych. Jednocześnie wymagany margines czasu musi być odpowiedni: nikt nie zrozumie dewelopera, który zbyt długo stawia proste zadanie, zostanie poproszony o uzasadnienie decyzji. Najtrudniejszą częścią jest wyjaśnienie firmie, dlaczego refaktoryzacja zajmuje trochę czasu. Jesteśmy wdzięczni naszej firmie za to, że od czasu do czasu nam się udaje, bo ostatecznie refaktoryzacja prowadzi do lżejszej infrastruktury i uporządkowania kodu, co zwiększa stabilność systemu i może znacznie przyspieszyć rozwój nowych funkcji.

Czasami zdarzają się błędy w ocenie. Moim zdaniem nie jest możliwe, aby dział rozwoju w dużych firmach z rozwiniętą infrastrukturą całkowicie tego uniknął. W tym przypadku ważne jest, aby deweloper poinformował swojego menadżera na czas o tym, co się dzieje, a on z kolei ma czas, aby ostrzec biznes i „ograć” coś w ogólnych planach firmy. W tym trybie praca jest o wiele bardziej poprawna niż gorączkowa próba zrobienia tego, co zajmuje 5 dni w ciągu 3 dni, a następnie utonięcie w dużej liczbie błędów, które powstały z powodu takiego pośpiechu.

Promuj niższe

Prawidłowa odpowiedź na obie części pytania [jak nauczyć się prawidłowo planować i dostarczać projekt na czas - Ed.] - doświadczenie. Nie ma innych sposobów „poznania Zen”. Zgodnie z teorią podejmowania decyzji, wszelkie dokładne wnioski można zbudować tylko na podstawie analizy szeregu już dostępnych danych. Im więcej tych danych, tym dokładniejsza jest ostateczna prognoza i ocena.

Jak powiedział Herbert Shaw: „Doświadczenie to szkoła, w której człowiek dowiaduje się, jakim był głupcem”. Stąd wynika dość prosty wniosek: jeśli programista ma już doświadczenie korelujące z wykonywanym zadaniem, może na nim polegać, jeśli nie, na doświadczeniach swoich „kolegów w sklepie”.

Następnie musisz zrozumieć, że bezpośrednie planowanie to zadanie, które ludzie wykonują bardzo, bardzo słabo, zwłaszcza w zakresie programowania. Dobrą praktyką podczas szacowania terminów jest wprowadzenie „współczynników korygujących” do pierwotnego oszacowania. Wskaźnik ten może wahać się w zakresie od 1,5 do 3, w zależności od doświadczenia dewelopera i ogółu stopni niepewności problemów rozwiązanych w ramach projektu.

Promuj niższe

Podczas określania terminu należy wziąć pod uwagę wiele czynników.

Na przykład doświadczenie zawodowe. Jak jasno wyobrażasz sobie zakres nadchodzącej pracy? Czy robiłeś już coś takiego wcześniej? Oczywiste jest, że im więcej doświadczenia, tym szybciej praca zostanie wykonana.

Dobrze napisane zadanie techniczne odgrywa istotną rolę w ustalaniu terminów. Z tym w naszym regionie sprawy są bardzo trudne. Często sam klient nie wie, czego chce, więc radzę poświęcić dodatkowy dzień lub dwa, ale uzyskać od klienta jasny obraz pożądanego rezultatu. Ważne jest, aby ten pogląd był wzajemny. Dopiero potem możesz zacząć negocjować kwotę i warunki.

Zawsze uwzględniaj też ryzyko. Początkującym polecam pomnożyć szacowany czas realizacji przez dwa. W końcu lepiej jest realizować projekt przed terminem i rozwijać się jako specjalista w oczach klienta, niż składać go później i zrujnować swoją reputację.

Promuj niższe

Ogólna rekomendacja jest taka, że \u200b\u200bprogramista musi nauczyć się poprawnie rozkładać zadania, zawsze szukać możliwych pułapek, polegać na własnym doświadczeniu i pamiętać o ostrzeżeniu klientów i współpracowników na czas, jeśli zadanie nie może zostać rozwiązane w określonym czasie.

Zrobienie jasnego planu jest znacznie trudniejsze niż ustalenie terminu wykonania konkretnego zadania. Jednocześnie ważne jest nie tylko terminowe dostarczenie projektu, ale także upewnienie się, że opracowany przez Ciebie system poprawnie rozwiązuje problemy biznesowe. Tutaj zespoły IT są wspomagane przez różne metodologie tworzenia oprogramowania: od RUP i MSF po SCRUM i inne formaty Agile. Wybór narzędzi jest bardzo szeroki, a wielu naszych klientów chce z góry zrozumieć, jak będziemy z nimi współpracować przy projekcie, jakich zasad się trzymamy.

Nawiasem mówiąc, temat Agile jest teraz bliski biznesowi, a nawet w indywidualnych projektach sektorowi publicznemu, gdyż zasady tej metodologii pozwalają na bardzo szybką realizację projektów, zarządzając oczekiwaniami klienta w każdej iteracji. Na przykład w zespole zwinnym praktycznie nie ma długich rozmów z klientem. Zapomnij o dziesiątkach stron opisujących niepotrzebne szczegóły techniczne, takie jak szybkość, z jaką pojawiają się listy rozwijane. Daj klientowi możliwość wypróbowania pośredniej wersji systemu, wtedy znacznie łatwiej będzie Ci się zrozumieć.

Zwinny zespół wszystko razem planuje i określa optymalny poziom kosztów pracy, który będzie potrzebny do rozwiązania konkretnego problemu. Na przykład jedna z technik nazywa się „Planowanie pokera”, w której każdy uczestnik anonimowo podaje swoje oszacowanie kosztów pracy wymaganych do wykonania określonego zadania. Następnie zespół określa średnią wagę zadania w punktach fabularnych lub roboczogodzinach i rozdziela zadania zgodnie z zasadą „kto co lubi”. Jednocześnie zespół zbiera się codziennie na 15-minutowe spotkanie, podczas którego każdy w kilka minut opowiada o statusie swoich bieżących zadań, w tym o pojawiających się trudnościach. Zespół szybko eliminuje wykryty problem, dlatego klient jak najszybciej patrzy na kolejny etap pracy programisty. Deweloperzy nie opóźniają terminów wykonania zadań z powodu niechęci do ponownego pociągnięcia zespołu lub daremnych prób samodzielnego rozgryzienia, zabijając cenny czas. Nawiasem mówiąc, przy takich mini-statusach programiści chcą pokazać swoją najlepszą stronę, pokazać, że jesteś odpowiedzialny za swoją pracę. To naprawdę motywuje i samodyscyplina.

(czas od pracy staje się wsparciem dopiero w pierwszej chwili, gdy zaczyna ona działać na zasobach); minimalizowanie opóźnienia lub czas odpowiedzi (czas od pracy zostaje odblokowany do jej zakończenia w przypadku aktywności okresowej lub do momentu odpowiedzi systemu i podania pierwszego wyjścia użytkownika w przypadku aktywności interaktywnej); lub maksymalizacja sprawiedliwość (równa ilość czasu procesora dla każdego procesu lub, bardziej ogólnie, odpowiednie punkty w czasie zgodnie z priorytetem i obciążeniem każdego procesu). W praktyce cele te są często sprzeczne (np. Przepustowość a opóźnienie), więc planista dokona odpowiedniego kompromisu. Preferencje mierzone są jednym z wyżej wymienionych problemów, w zależności od potrzeb i zadań użytkownika.

OS / 360 i następcy

Aix

W systemie AIX w wersji 4 istnieją trzy możliwe znaczenia strategii planowania wątków:

  • Najpierw pojawił się pierwszy: Po zaplanowaniu wątku z tą polityką jest on wykonywany do zakończenia, jeśli nie jest zablokowany, dobrowolnie zrzeka się kontroli nad procesorem lub wysyłanie staje się z wyższym priorytetem wątku. Tylko w przypadku strumieni o stałym priorytecie można mieć zasady planowania FIFO.
  • Robin: Jest to podobne do harmonogramu schematu AIX wersja 3, działające w trybie okrężnym, opartym na odcinkach czasu 10 ms. Gdy wątek PP ma kontrolę na końcu przedziału czasowego, przechodzi do końca kolejki wątków o tym samym priorytecie. Tylko wątki o stałym priorytecie mogą mieć zasady planowania w trybie Round Robin.
  • INNE: Polityka ta jest zdefiniowana w implementacji przez POSIX1003.4a. W systemie AIX wersja 4 ta strategia jest zdefiniowana jako odpowiednik RR, z tą różnicą, że dotyczy wątków o stałym priorytecie. Ponowne obliczenie wartości priorytetu działającego wątku na przerwanie oznacza, że \u200b\u200bwątek może stracić kontrolę, ponieważ jego wartość priorytetu wzrosła powyżej innego wątku. Takie jest zachowanie systemu AIX wersja 3.

Wątki są szczególnie interesujące dla aplikacji, które obecnie składają się z wielu procesów asynchronicznych. Aplikacje te mogą powodować niewielkie obciążenie systemu, jeśli zostaną przekonwertowane na strukturę wielowątkową.

Podobne artykuły

2021 choosevoice.ru. Mój biznes. Księgowość. Historie sukcesów. Pomysły. Kalkulatory. Magazyn.