เวลาดำเนินการที่เหลืออยู่สั้นที่สุด อัลกอริทึมสำหรับการคำนวณเวลาของกระบวนการเอง กระบวนการสำหรับการคำนวณเวลาที่เหลือ

ทุกสิ่งที่อธิบายไว้ในหัวข้อก่อนหน้านี้มุ่งเน้นไปที่การดำเนินการวิจัยเพิ่มเติมเกี่ยวกับปัญหาของเวลาของกระบวนการและในขอบเขตที่น้อยกว่ามาก การใช้งานจริง- เพื่อเติมเต็มช่องว่างนี้ เราจะร่างวิธีการหนึ่งในการคำนวณเวลาที่เหมาะสมของกระบวนการโดยพิจารณาจากข้อมูลทางสถิติเกี่ยวกับวิวัฒนาการของกระบวนการ

ขอให้เราพิจารณากระบวนการหนึ่งมิติซึ่งมีสถานะเป็นตัวแปรจริง x ให้เราสมมติว่าการสังเกตพลวัตของกระบวนการดำเนินการในเวลาทางดาราศาสตร์ t ดังนั้น t = t k และ x = x k, k =1, ..., n เป็นช่วงเวลาคงที่ของการสังเกตและค่าที่สอดคล้องกันของ กระบวนการระบุ มีมากมายที่แตกต่างกัน วิธีการทางคณิตศาสตร์ทำให้สามารถสร้างเส้นโค้งที่ผ่านจุดต่างๆ (t k, Xk) หรือ "แนวทางที่ดีที่สุด" ไปยังจุดเหล่านั้นได้ ฟังก์ชัน x = x(t) ที่ได้รับในลักษณะนี้ทำให้เกิดความรู้สึกในใจของเราว่ากระบวนการที่พิจารณานั้นขึ้นอยู่กับการเคลื่อนที่ทางกลของเทห์ฟากฟ้า ดังนั้นสถานะของมันจึงแสดงออกมาผ่านเวลาทางดาราศาสตร์ t ข้อสรุปนี้สามารถนำมาพิจารณาได้ หากไม่มีปัญหาคงที่เกิดขึ้นเมื่อพยายามทำนายแนวทางต่อไปของกระบวนการ สำหรับกระบวนการต่างๆ จำนวนมากที่ไม่เกี่ยวข้องโดยตรงกับการเคลื่อนที่ทางกลของเทห์ฟากฟ้า การทำนายทางทฤษฎีที่ได้รับโดยใช้ฟังก์ชัน x = x(t) นอกช่วงการสังเกตจะเริ่มเบี่ยงเบนไปจากข้อมูลการทดลองที่ตามมาอย่างมีนัยสำคัญ พวกเขามักจะพยายามอธิบายสาเหตุของความแตกต่างระหว่างทฤษฎีและการทดลองโดยวิธีการประมวลผลที่เลือกไม่สำเร็จ แต่นี่อาจไม่ใช่สาระสำคัญของเรื่องนี้

กระบวนการใด ๆ ที่เราสนใจเกิดขึ้นในจักรวาล เขา "สัมผัส" อย่างแน่นอนถึงอิทธิพลของการเคลื่อนที่ของเทห์ฟากฟ้า อย่างไรก็ตาม อิทธิพลนี้อาจกลายเป็น "ไม่เข้มงวด" และไม่สามารถกำหนดได้ โดยเฉพาะอย่างยิ่งสิ่งนี้สามารถประจักษ์ได้ในความจริงที่ว่าในช่วงเวลาหนึ่งทางดาราศาสตร์สถานะของกระบวนการยังคงไม่เปลี่ยนแปลง ในเรื่องนี้ ให้เรานึกถึงตัวอย่างที่ให้มาก่อนหน้านี้ด้วยการปิด ห้องว่าง,แยกตัวออกจากโลกภายนอก ปล่อยให้มีเพียงหนึ่งสดบินเข้ามาในห้อง ในช่วงหลายวัน การเปลี่ยนแปลงสถานะของระบบ "room-fly" จะขึ้นอยู่กับการเคลื่อนที่ของแมลงวัน เนื่องจากไม่สามารถคาดหวังการเปลี่ยนแปลงสถานะของห้องได้ ในเวลาเดียวกัน เป็นเรื่องยากที่จะจินตนาการว่าพฤติกรรมของแมลงวันมีความเชื่อมโยงอย่างเคร่งครัดกับวิถีทางดาราศาสตร์

หลังจากที่พูดนอกเรื่องมายาวนาน เรามาอธิบายอัลกอริทึมสำหรับการคำนวณเวลาของกระบวนการกันดีกว่า

ในอัลกอริทึมนี้ หน่วยสำหรับการคำนวณค่าสูงสุดเฉพาะจุดจะถูกเลือกเป็นหน่วยวัดเวลาตามธรรมชาติ นอกจากนี้ ส่วนที่เป็นไปได้ของสถานะคงที่ของกระบวนการจะถูกนำมาพิจารณาด้วย ซึ่งตามที่ระบุไว้ก่อนหน้านี้ เวลาที่เหมาะสมจะหยุดลง เนื่องจากการระบุตัวตนของสองสถานะสามารถพูดได้ภายในขอบเขตความแม่นยำของการวัดเท่านั้น ในสิ่งที่ตามมาด้วยจำนวนบวกที่แน่นอน e จึงถูกนำมาใช้ - ข้อผิดพลาดในการวัดที่อนุญาต

ดังนั้น ข้อมูลอินพุตสำหรับอัลกอริธึมคือจำนวนธรรมชาติ n, จำนวนบวก 8, อาร์เรย์ (tk) และ (x k), k = 1, ..., n เพื่อความสะดวกในการเขียนโปรแกรม อัลกอริธึมจึงถูกนำเสนอในรูปแบบ ของสี่โมดูลที่ดำเนินการตามลำดับ

โมดูล 1โดยใช้ข้อมูล p, e, t k), (x k) ในกรณีทั่วไป สร้างอาร์เรย์ใหม่ 7 = (7+ X = (X t) และอาร์เรย์ประกอบที่เจาะจงมาก P = (?) โดยที่ 1 = 1 ..., เสื้อ และ ต<Сп. Основное назначение этого модуля -- выявление в массиве x k) последовательностей идентичных состояний процесса, сохранение первых элементов в таких последовательностях и удаление всех остальных и, наконец, уменьшение по определенному, правилу исходного интервала наблюдения от t до на сумму тех промежутков времени, в которых процесс протекает стационарно.

โมดูล 1 ประกอบด้วยขั้นตอนต่อไปนี้:

พี: = 1, เสื้อ: = 0, เค: = 1

ในหน้า มีการแนะนำตัวนับ 1, 2 ที่มีค่าเริ่มต้นเฉพาะ:

ในหน้า 3, 4 ค่าตัวนับเพิ่มขึ้น 1

ตรวจเช็คสภาพ k^n. หากเสร็จแล้วให้ไปที่ขั้นตอนที่ 6 หรือไปที่ขั้นตอนที่ 11

ตรวจสอบความไม่เท่าเทียมกัน x k --x k = e หากเป็นเช่นนั้น ให้ไปที่ขั้นตอนที่ 7 หรือไปที่ขั้นตอนที่ 9

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

ขั้นตอนนี้หมายความว่าหากค่าของ Xk และ Xk 1 ไม่สามารถแยกความแตกต่างได้ภายในข้อผิดพลาด จากนั้นเวลาทั้งหมดที่เริ่มต้นจาก tk จะลดลงตามจำนวน tki-tk

ร = ร. กลับไปที่จุดที่ 4

ทีวี = เสื้อ ; X โวลต์:=x k ; p = p v = v+l. เช่น องค์ประกอบของอาร์เรย์ T, X, P ถูกสร้างขึ้นและกำหนดค่า v ถัดไป

  • 10. นำ (t k, ..., t n AND (Xk, - X n) เป็นอาร์เรย์ดั้งเดิมของมิติ n--k 1 + 1 แล้วกลับสู่ขั้นตอนที่ 2
  • 11. พิมพ์ m, (T), (X,) และ (P,) โดยที่ i = l, ..., t

ให้เราอธิบายความหมายขององค์ประกอบของอาร์เรย์ P ที่มาคู่กัน จากข้อความที่แล้วตามมาว่าค่าของ pk เท่ากับจำนวนขององค์ประกอบของอาร์เรย์ (xk) ที่ตามมาโดยตรงและแตกต่างจาก x pi+ ... +, + น้อยกว่า e เรายังสังเกตด้วยว่า pi+ ... +p m = n

ตัวอย่างที่ 1 ให้ไว้: n = 20, (/*) = (2, 4, 7, 10, 12, 13, 15, 17, 20, 22, 24, 25,

  • 27, 30, 32, 33, 34, 35, 36) และ (x,)= (4, 4, 6, 6, 6, 3, 2, 4, 3, 3, 3, 2, 2, 4, 5 , 5,
  • 5, 4, 3) ดูภาพประกอบ 9, ก.

จากการดำเนินการโมดูล 1 จะได้ m = 11

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

ผม(ง.) = (2, 4, 1, 1, 1.3, 2, 1.3, 1, 1) ดูภาพประกอบ 9 บี

โมดูล 2ข้อมูลอินพุตเป็นตัวเลขธรรมชาติ m เช่นเดียวกับอาร์เรย์ (7+ (X L), = 1, ..., m โมดูลนี้ในอาร์เรย์ (TJ ระบุช่วงเวลา [TM a], 1 = 1 ม. (มล

ตัวอย่างที่ 2 ค่า m, (Ть) และ (X,] ถูกยืมมาจากตัวอย่างก่อนหน้า หลังจากจบโมดูล 2 แล้ว เราจะได้ ml = 3, m2 = 8, (Ш,) = (3, 8, 17 ), (Т*) = (3, 4, 6, 8, 11, 12, 15, 17) โปรดดูรูปที่ 9 ข.

โมดูล 3ป้อนข้อมูล ml, m2, (TM n), 1 = 1, ..., ml, (G*), /2 = 1, ..., gn2

โมดูลนี้ได้รับการออกแบบเพื่อสร้างอาร์เรย์ (t(-r) โดยใช้สูตร

ทีวี 6 อยู่ที่ไหน [TMp, TMn+i]

ตัวแปร t คือเวลาที่เหมาะสมที่เกิดจากการเปลี่ยนแปลงของตัวแปร x การวัดตามธรรมชาติของมันคือหน่วยในการคำนวณค่าสูงสุดเฉพาะจุด

ตัวอย่างที่ 3 ข้อมูลเริ่มต้นสำหรับ T 2) เหมือนกับค่า ml, m2 ITM และในตัวอย่างที่ 2 . หลังจากการคำนวณที่เหมาะสมแล้ว เราจะได้ Н = (0; 0.2; 0.6; 1; 1,33; 1,78; 2).

โมดูล 4สร้างผลลัพธ์ของผลลัพธ์โดยสร้างความสอดคล้องระหว่างค่าของ m และองค์ประกอบ x จากอาร์เรย์ (xk)

ตัวอย่างที่ 4 จากข้อมูลจากตัวอย่างที่ 2 และ 3 ผลลัพธ์ต่อไปนี้จะถูกสร้างขึ้น ดูรูปที่ 9 ใน:

เสื้อ: 0; 0.2; 0.6; 1; 1.33; 1.44;

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

ดังนั้น อัลกอริธึมที่ได้รับการพิจารณาช่วยให้เราสามารถพัฒนาแนวคิดเกี่ยวกับเวลาของกระบวนการโดยอิงตามข้อมูลเกี่ยวกับการเปลี่ยนแปลงในสถานะของกระบวนการที่บันทึกไว้ตามมาตราส่วนเวลาทางดาราศาสตร์ ค่อนข้างชัดเจนว่าคุณสามารถใช้อัลกอริธึมอื่นๆ ได้ เช่น ในการคำนวณลำดับของค่าต่ำสุดเฉพาะที่หรือลำดับผสมที่ประกอบด้วยค่าสูงสุดและค่าต่ำสุดเฉพาะ เมื่อประมวลผลข้อมูลการทดลอง ควรทดสอบตัวเลือกต่างๆ หากผู้ทดลองเลือกเวลาที่เหมาะสมอย่างใดอย่างหนึ่งและรับอาร์เรย์ (t4 และ (xk)) ด้วยเหตุผลบางประการ ในขั้นต่อไปเขาควรใช้วิธีทางคณิตศาสตร์บางอย่างเพื่อประมาณคะแนนการทดลอง (t*, x) ด้วยเส้นโลกโดยประมาณ ของกระบวนการ x = x(t) โดยการประมาณค่าเส้นนี้เกินช่วงสังเกตเริ่มแรก เขาสามารถคาดการณ์เกี่ยวกับเส้นทางต่อไปของกระบวนการได้

เป็นเรื่องน่าสนใจที่จะกล่าวถึงการทดลองทางคอมพิวเตอร์ที่มีจุดมุ่งหมายเพื่อประเมินโอกาสในการใช้อัลกอริทึมที่เสนอ เลือกข้อมูลเกี่ยวกับการไหลของแม่น้ำประจำปีเป็นวัสดุทดลอง Vakhsh (ทาจิกิสถาน) ในรอบ 40 ปีที่ผ่านมา ในช่วงเวลาเดียวกันนั้น ข้อมูลได้ถูกนำไปใช้เกี่ยวกับพลวัตของเลขหมาป่า ซึ่งเป็นดัชนีรวมของกิจกรรมสุริยะที่ใช้กันมากที่สุด อย่างหลังเป็นพื้นฐานสำหรับการพัฒนาเวลาที่เหมาะสมของกระบวนการกิจกรรมแสงอาทิตย์ ในยุคปัจจุบัน ข้อมูลเกี่ยวกับค่าใช้จ่ายในแม่น้ำได้รับการเปลี่ยนแปลง Vakhsh และในช่วงระยะเวลาการสังเกต ทฤษฎีจะขึ้นอยู่กับการไหลของน้ำตามฟังก์ชันของเวลาที่เหมาะสมของกิจกรรมสุริยะ คุณลักษณะเฉพาะของกราฟผลลัพธ์คือพฤติกรรมที่เกือบจะเป็นระยะของค่าใช้จ่ายสูงสุดและต่ำสุด อย่างไรก็ตามต้นทุนไม่คงที่

(เวลาจากการทำงานจะไม่ได้รับการสนับสนุนจนกว่าจะเริ่มดำเนินการกับทรัพยากรในช่วงแรก) การย่อเล็กสุด ความล่าช้าหรือ เวลาตอบสนอง(รวมเวลาจากการทำงานจนกว่าจะเสร็จสิ้นในกรณีของกิจกรรมเป็นระยะ หรือจนกว่าระบบจะตอบสนองและมอบทางออกให้กับผู้ใช้คนแรกในกรณีของกิจกรรมเชิงโต้ตอบ) หรือการเพิ่มประสิทธิภาพสูงสุด ความยุติธรรม(เวลา CPU ที่เท่ากันสำหรับแต่ละกระบวนการ หรือเวลาที่สอดคล้องกันโดยทั่วไปมากกว่านั้นตามลำดับความสำคัญและปริมาณงานของแต่ละกระบวนการ) ในทางปฏิบัติ เป้าหมายเหล่านี้มักจะขัดแย้งกัน (เช่น ปริมาณงานเทียบกับเวลาแฝง) ดังนั้นผู้จัดกำหนดการจะสร้างการแลกเปลี่ยนที่เหมาะสม การตั้งค่าจะวัดจากปัญหาใดๆ ที่กล่าวถึงข้างต้น ขึ้นอยู่กับความต้องการและวัตถุประสงค์ของผู้ใช้

OS/360 และผู้สืบทอด

เอไอเอ็กซ์

ใน AIX เวอร์ชัน 4 มีการตั้งค่าที่เป็นไปได้สามแบบสำหรับนโยบายการกำหนดตารางเวลาเธรด:

  • อันดับแรก ออกก่อน: เมื่อมีการกำหนดเวลาเธรดที่มีนโยบายนี้ เธรดจะทำงานจนเสร็จสิ้น เว้นแต่จะถูกบล็อก เธรดจะสละการควบคุมตัวประมวลผลโดยสมัครใจ หรือเธรดที่มีลำดับความสำคัญสูงกว่าสามารถจัดส่งได้ เฉพาะเธรดที่มีลำดับความสำคัญคงที่เท่านั้นที่สามารถมีนโยบายการกำหนดเวลา FIFO
  • Round Robin: สิ่งนี้คล้ายกับตัวกำหนดเวลาวงจร AIX เวอร์ชัน 3 ที่หมุนเวียนตามการแบ่งเวลา 10ms เมื่อเธรด PP มีการควบคุมเมื่อสิ้นสุดช่วงเวลา เธรดนั้นจะย้ายไปที่ส่วนท้ายของคิวของเธรดที่มีลำดับความสำคัญเท่ากัน เฉพาะเธรดที่มีลำดับความสำคัญคงที่เท่านั้นที่สามารถมีนโยบายการกำหนดเวลา Round Robin
  • อื่นๆ: นโยบายนี้กำหนดการใช้งานโดย POSIX1003.4a ใน AIX เวอร์ชัน 4 นโยบายนี้ถูกกำหนดให้เทียบเท่ากับ RR ยกเว้นว่าใช้กับเธรดที่มีลำดับความสำคัญที่ไม่คงที่ การคำนวณค่าลำดับความสำคัญของเธรดที่กำลังรันอยู่ใหม่สำหรับแต่ละอินเตอร์รัปต์หมายความว่าเธรดอาจสูญเสียการควบคุมเนื่องจากค่าลำดับความสำคัญนั้นสูงกว่าเธรดอื่น นี่เป็นลักษณะการทำงาน AIX เวอร์ชัน 3

เธรดเป็นที่สนใจหลักของแอปพลิเคชันที่ปัจจุบันประกอบด้วยกระบวนการอะซิงโครนัสหลายกระบวนการ แอปพลิเคชันเหล่านี้สามารถกำหนดภาระงานเบาบนระบบได้หากแปลงเป็นโครงสร้างแบบมัลติเธรด

บ่อยครั้งที่นักพัฒนา โดยเฉพาะผู้ที่ไม่มีประสบการณ์ มักจะสับสนเมื่อถูกขอให้กำหนดกำหนดเวลาในการทำงานให้เสร็จสิ้น อย่างไรก็ตาม ความสามารถในการวางแผนเป็นทักษะที่มีประโยชน์และจำเป็นซึ่งไม่เพียงช่วยในการทำงานเท่านั้น แต่ยังช่วยในชีวิตด้วย เราตัดสินใจถามผู้เชี่ยวชาญว่าจะเรียนรู้วิธีการวางแผนอย่างถูกต้องและส่งมอบโครงการตรงเวลาได้อย่างไร

บทสรุปสั้น ๆ สามารถพบได้ในตอนท้ายของบทความ

นักพัฒนามักจะต้องคำนึงถึงพารามิเตอร์หลายตัวพร้อมกันเพื่อประมาณเวลาที่ใช้ในการทำงานให้เสร็จสิ้น:

  1. มีประสบการณ์ในการปฏิบัติงานดังกล่าวและการทำงานกับกองเทคโนโลยีนี้ หากคุณต้องทำสิ่งใหม่โดยพื้นฐาน คุณต้องระมัดระวังเป็นพิเศษกับการประเมินของคุณ
  2. ประสบการณ์การทำงานกับลูกค้ารายนี้ เมื่อรู้จักลูกค้าแล้ว คุณสามารถคาดการณ์ข้อกำหนดเพิ่มเติมและขอบเขตของการเปลี่ยนแปลงได้คร่าวๆ
  3. คุณภาพของโค้ดที่คุณจะใช้งาน นี่เป็นปัจจัยที่มีอิทธิพลมากที่สุดเพราะทุกอย่างอาจใช้เวลานานและโดยทั่วไปไม่เป็นไปตามแผนที่วางไว้ หากโปรเจ็กต์มีการทดสอบ ก็จะมีเฉพาะการขึ้นต่อกันที่ชัดเจนทุกที่และฟังก์ชันการทำงานก็แยกจากกันอย่างดี ทุกอย่างก็ไม่น่ากลัวนัก จะแย่กว่านั้นมากหากคุณกำลังเผชิญกับโค้ดรุ่นเก่าโดยไม่มีการทดสอบหรือมีโค้ดโอเวอร์โหลดโดยมีการขึ้นต่อกันโดยนัย สิ่งต่างๆ เช่น “ฟังก์ชันเวทย์มนตร์” (เมื่อยากที่จะเห็น call stack สุดท้ายจากโค้ด) และการทำสำเนาโค้ด (เมื่อคุณต้องการแก้ไขส่วนที่แยกจากกันหลายๆ ส่วนเพื่อเปลี่ยนฟังก์ชันการทำงานบางอย่าง) ก็อาจทำให้เรื่องยุ่งยากได้เช่นกัน

หากต้องการเรียนรู้วิธีประมาณกำหนดเวลางานอย่างเพียงพอ คุณต้องฝึกฝนอย่างต่อเนื่อง ในช่วงเริ่มต้นของงาน ฉันทำสิ่งนี้ทุกประการ: ฉันประมาณเวลาในการทำงานที่เข้ามาให้เสร็จสิ้น แม้ว่าจะไม่มีใครต้องการก็ตาม จากนั้นดูว่าฉันสามารถจัดการได้อย่างแม่นยำเพียงใดเพื่อประเมินผล ในขณะที่ทำงานเสร็จ เขาสังเกตว่าการกระทำใดใช้เวลานานกว่านั้น หากมีสิ่งใดทำให้ระยะเวลาเพิ่มขึ้นอย่างมาก ฉันจำช่วงเวลานี้และนำมาพิจารณาในการประเมินครั้งถัดไป

ในการประเมินอย่างเป็นกลางเกี่ยวกับเวลาที่จำเป็นสำหรับการทำงานโดยเฉพาะ ควรเพิ่มระยะขอบเล็กน้อยเพื่อให้ครอบคลุมสถานการณ์เหตุสุดวิสัย มักได้รับการประเมินเป็นเปอร์เซ็นต์ของความสำเร็จของงานหลัก แต่จะแตกต่างกันไปสำหรับทุกคน บางคนบวก 20% ของเวลา บางคน 10% และบางส่วน 50%

นอกจากนี้ยังเป็นประโยชน์ในการวิเคราะห์สาเหตุของการพลาดกำหนดเวลาหลังจากการละเมิดกำหนดเวลาที่ร้ายแรงแต่ละครั้ง หากคุณขาดคุณสมบัติ คุณจะต้องแก้ไขจุดอ่อนของตนเอง หากปัญหาเป็นเรื่องขององค์กร ให้ทำความเข้าใจว่าอะไรขัดขวางไม่ให้ทำงานได้ตามปกติ

เลื่อนตำแหน่ง

, ผู้อำนวยการฝ่ายเทคนิคศูนย์นวัตกรรมเทคโนโลยีและโซลูชั่น “เจ็ท อินโฟซิสเต็มส์”

บทความจำนวนมากมีไว้สำหรับวิธีการประเมินความเข้มข้นของแรงงานของโครงการ รวมถึงระยะเวลาของงานและงานแต่ละงาน อย่างไรก็ตามสิ่งนี้ยังคงทำให้เกิดความขัดแย้งทั้งภายในทีมงานโครงการและในการสื่อสารกับลูกค้า

ผู้ช่วยหลักในการประเมินคือประสบการณ์ ลองเปรียบเทียบงานใหม่กับงานที่ทำไปแล้ว หากคุณกำลังจัดทำรายงาน ให้ดูว่ารายงานที่คล้ายกันนี้ใช้เวลานานเท่าใดในอดีต หากคุณกำลังทำอะไรใหม่ๆ ลองแบ่งมันออกเป็นส่วนที่ทราบแล้วประเมินผล ถ้างานนี้เป็นงานใหม่ ให้แบ่งเวลาไว้เพื่อศึกษา (ให้ดียิ่งขึ้น ให้ประสานงานในครั้งนี้กับบุคคลที่กำหนดงาน)

โปรดใส่ใจกับขั้นตอนต่อไปนี้ - หากคุณต้องการพัฒนาบริการ การประเมินจะต้องรวมการทดสอบหน่วยด้วย (และอาจไม่ใช่แค่การทดสอบหน่วยเท่านั้น) การจัดเตรียมข้อมูลการทดสอบจะใช้เวลาระยะหนึ่ง คุณควรพิจารณาบูรณาการกับบริการอื่น ๆ เป็นต้น ให้เวลาในการแก้ไขข้อบกพร่องที่คุณพบด้วยตนเองหรือด้วยความช่วยเหลือจากผู้ทดสอบ อาจเสียเวลาไปมากกับงานที่ "มองไม่เห็น" ตัวอย่างเช่น มีการประเมินเพื่อการพัฒนาและมีการประเมินเพื่อการทดสอบ แต่การถ่ายโอนสิ่งประดิษฐ์เพื่อการทดสอบอาจเกี่ยวข้องกับการปรับใช้แท่น ดังนั้นจึงเป็นสิ่งสำคัญที่จะต้องเห็นภาพกระบวนการทั้งหมดด้วยจิตใจเพื่อไม่ให้พลาดสิ่งใด

หลังจากพิจารณาความซับซ้อนแล้ว จำเป็นต้องรวมงานใหม่ลงในปฏิทิน โดยไม่ลืมงานและกิจกรรมอื่นๆ ที่ดำเนินไปพร้อมๆ กัน

และอย่าลืมว่าแผนนั้นไร้ประโยชน์ แต่การวางแผนนั้นประเมินค่าไม่ได้ เรียนรู้ที่จะปรับเปลี่ยนแผนในเวลาที่เหมาะสม แจ้งให้ทุกคนที่เกี่ยวข้องทราบ และเพิ่มระดับในเวลาที่เหมาะสมเพื่อไม่ให้พลาดกำหนดเวลาจะไม่สร้างความประหลาดใจให้กับใครๆ

เลื่อนตำแหน่ง

คำถามที่ไม่สามารถตอบแบบสั้นได้ ถ้ามันง่าย ปัญหาเรื่องกำหนดเวลาที่ขาดหายไปก็จะไม่มีอยู่จริง

เพื่อให้คาดการณ์กำหนดเวลาการพัฒนาได้มากขึ้น เราต้องเข้าใจก่อนว่าทำไมโปรแกรมเมอร์จึงทำผิดพลาดตลอดเวลา

เหตุผลแรกก็คืองานส่วนใหญ่ที่โปรแกรมเมอร์ทำนั้นมีเอกลักษณ์เฉพาะตัวในระดับหนึ่งหรืออย่างอื่น นั่นเป็นไปได้มากว่าโปรแกรมเมอร์จะทำงานที่คล้ายกันเป็นครั้งแรก เขาไม่รู้ว่างานนี้จะใช้เวลานานแค่ไหน หากนี่คือโปรแกรมเมอร์ที่มีประสบการณ์สูงและต้องทำงานที่คล้ายกัน การประเมินของเขาจะใกล้เคียงกับความเป็นจริงมากขึ้น

ลองใช้การเปรียบเทียบง่ายๆ - หากคุณไม่เคยขุดคูน้ำ คุณจะไม่สามารถบอกได้อย่างแน่ชัดว่าจะใช้เวลาขุดคูน้ำกว้าง 30 ซม. ลึก 60 ซม. และยาว 20 ม. นานแค่ไหน หากคุณเคยขุดมาก่อน เวลาทำงานโดยประมาณจะใกล้เคียงกับระยะเวลาจริงของงานมากขึ้น

เหตุผลที่สองคือโปรแกรมเมอร์เป็นคนมองโลกในแง่ดีโดยธรรมชาติ นั่นคือเมื่อพิจารณางาน เลือกตัวเลือกการใช้งาน และประเมินการปรับปรุง นักพัฒนาคาดหวังว่าทุกอย่างจะทำงานได้ตามที่เขาคาดหวัง และเขาไม่คิดถึงปัญหาที่เขาจะต้องเจอระหว่างทาง บ่อยครั้งเขาไม่สามารถคาดเดาได้ ตัวอย่างเช่น มีงานที่โปรแกรมเมอร์สามารถใช้งานได้โดยใช้ไลบรารีซอฟต์แวร์โอเพ่นซอร์สของบุคคลที่สาม ในขั้นตอนการประเมิน เขาพบมันบนอินเทอร์เน็ต อ่านคำอธิบาย - มันเหมาะกับเขา และเขายังประมาณปริมาณงานที่เขาต้องทำเพื่อสร้างในการใช้ห้องสมุดนี้ได้อย่างถูกต้องอีกด้วย แต่เขาไม่ได้คาดการณ์เลยว่าจะเกิดข้อผิดพลาดในไลบรารีนี้ในสภาพแวดล้อมของผลิตภัณฑ์ซอฟต์แวร์ของเขา

นักพัฒนาจะต้องไม่เพียงแต่สร้างการใช้ไลบรารีลงในโค้ดของเขาเท่านั้น แต่ยังต้องแก้ไขข้อบกพร่องในไลบรารีด้วย และบ่อยครั้งที่นักพัฒนาไม่ได้ให้เวลาในการแก้ไขข้อผิดพลาดของเขา สถิติแสดงให้เห็นว่าการทดสอบและแก้ไขข้อผิดพลาดอาจใช้เวลาประมาณ 50% ของเวลาที่ใช้ในการเขียนโค้ด ตัวเลขดังกล่าวขึ้นอยู่กับคุณสมบัติของนักพัฒนา สภาพแวดล้อม และแนวทางปฏิบัติในการพัฒนาที่ใช้ (เช่น การทดสอบหน่วยจะช่วยลดเวลานี้ลงอย่างมาก และระยะเวลาสุดท้าย/ความเข้มข้นของแรงงานของงานการพัฒนาจะน้อยลง)

หากเรากลับไปสู่การเปรียบเทียบกับผู้ขุด ผู้ขุดไม่คาดคิดว่าพลั่วจะหัก และเขาต้องใช้เวลาสองชั่วโมงในการหากิ่งใหม่

เหตุผลที่สามคือข้อกำหนดที่ไม่คาดฝัน ไม่มีการผลิตวัสดุในด้านอื่นใดที่ลูกค้าชื่นชอบการเปรียบเทียบการพัฒนาซอฟต์แวร์จึงมีข้อกำหนดใหม่ ๆ มากมายหรือไม่ ลองนึกภาพทางเดินของผู้ขุดที่ขุดลึก 19 เมตรจากทั้งหมด 20 เมตร และได้ยินจากลูกค้าว่าขอให้ขุดคูน้ำไม่ให้เป็นเส้นตรง แต่ให้วิ่งเป็นงูที่มีความยาวแขน 97 เซนติเมตร

จะจัดการกับทั้งหมดนี้อย่างไรและจะใช้ชีวิตในสภาวะที่ไม่แน่นอนดังกล่าวได้อย่างไร? ลดความไม่แน่นอนและสร้างเวลาสำรอง

วิธีที่ง่ายที่สุดในการทำให้ความคาดหวังของคุณเข้าใกล้ความเป็นจริงมากขึ้นคือการใช้กฎง่ายๆ ของ Pi เมื่อได้รับค่าประมาณจากนักพัฒนา (ในแง่ของเวลาหรือความเข้มข้นของแรงงาน) คุณต้องคูณด้วย Pi (= 3.14159) ยิ่งนักพัฒนาซอฟต์แวร์มีประสบการณ์มากในการประเมิน อัตราส่วนนี้ก็จะยิ่งต่ำลง

การฝึกแยกปัญหาเดิมออกเป็นงานเล็กๆ โดยใช้เวลาไม่เกิน 4 ชั่วโมง ยิ่งการสลายตัวมีรายละเอียดมากเท่าใด โอกาสที่การประมาณการจะใกล้เคียงกับความซับซ้อน/ระยะเวลาจริงก็จะยิ่งมากขึ้นเท่านั้น
หากเรากลับมาจัดสรรทุนสำรองครั้งนี้ควรจัดสรรเมื่อสิ้นสุดโครงการ การสำรองและรวมไว้สำหรับแต่ละงานถือเป็นแนวปฏิบัติที่ไม่ดี กฎพาร์กินสัน “งานเต็มตลอดเวลาที่ได้รับจัดสรร” ปฏิบัติตามอย่างเคร่งครัด

เพื่อสรุปโดยย่อเพื่อกำหนดกำหนดเวลาในการทำงานให้เสร็จสิ้นอย่างถูกต้องการดำเนินการต่อไปนี้จะมีประโยชน์:

  • ดำเนินการสลายงานโดยแบ่งงานออกเป็นขั้นตอนที่มีรายละเอียดมากที่สุด
  • ดำเนินการสร้างต้นแบบ
  • จำกัดการดำเนินการตามข้อกำหนดที่ไม่คาดฝันก่อนหน้านี้ นี่ไม่ได้หมายความว่าไม่ควรทำ แต่ขอแนะนำให้เน้นข้อกำหนดเหล่านี้และตกลงกับลูกค้าเกี่ยวกับการเปลี่ยนแปลงระยะเวลาและค่าใช้จ่ายในการดำเนินการ
  • คำนึงถึงเวลาที่จำเป็นในการทำให้สารละลายมีเสถียรภาพ
  • ใช้แนวทางปฏิบัติเพื่อปรับปรุงคุณภาพของโค้ด เช่น การเขียนการทดสอบหน่วย
  • วางเงินสำรองทั่วไป

โปรดจำไว้ว่าหากข้อเท็จจริงเกินประมาณการของคุณ 30% นี่เป็นผลลัพธ์ที่ดีมาก

เลื่อนตำแหน่ง

เพื่อการประเมินที่แม่นยำที่สุด คุณต้องมีประสบการณ์ในการพัฒนาจริง และโดยเฉพาะในด้านเฉพาะ แต่ยังมีกฎทั่วไปที่จะช่วยให้คุณหลีกเลี่ยงข้อผิดพลาดในการวางแผนและปัญหาในการส่งมอบงานให้กับลูกค้า ฉันจะอธิบายกฎเหล่านี้เช่นนี้

ก่อนอื่นคุณต้องเข้าใจปัญหาก่อน สิ่งนี้ดูเหมือนชัดเจนและไม่เกี่ยวข้องโดยตรงกับการประมาณเวลา แต่จริงๆ แล้ว มันเป็นประเด็นสำคัญ แม้แต่ในโครงการขนาดใหญ่ที่จริงจัง หนึ่งในปัจจัยหลักของความล้มเหลวและความล่าช้าก็คือปัญหาในการกำหนดข้อกำหนด สำหรับนักพัฒนามือใหม่ น่าเสียดายที่นี่เป็นปัญหาร้ายแรง - พวกเขาไม่ได้อ่านข้อกำหนดทางเทคนิคหรืออ่านและทำความเข้าใจอย่างเฉพาะเจาะจง (จากสิบคะแนน พวกเขาจำได้และทำครบห้าข้อ และจำส่วนที่เหลือเมื่อส่งผลลัพธ์) เป็นที่ชัดเจนว่างานที่เข้าใจผิดไม่สามารถดำเนินการได้อย่างถูกต้องตรงเวลา

ต่อไปคือการประมาณเวลาในการพัฒนานั่นเอง ลักษณะเฉพาะของการเขียนโปรแกรมคือไม่มีงานที่เหมือนกันทุกประการ สิ่งนี้ทำให้งานของเราน่าสนใจยิ่งขึ้น แต่การประมาณกำหนดเวลานั้นยากกว่า การสลายตัวทำงานได้ดีที่นี่เช่น การแบ่งปัญหาที่ซับซ้อนและไม่ซ้ำกันออกเป็นลำดับงานย่อยเล็กๆ ที่คุ้นเคย และแต่ละรายการสามารถประเมินได้ภายในเวลาไม่กี่ชั่วโมงอย่างเพียงพอ มาบวกค่าประมาณของงานย่อยและรับค่าประมาณสำหรับงานทั้งหมดกันดีกว่า

ตามกฎแล้วการประมาณการดังกล่าวจะรวมเฉพาะค่าใช้จ่ายในการเขียนโค้ดเท่านั้น แน่นอนว่านี่คือส่วนที่สำคัญที่สุดของการพัฒนา แต่ยังห่างไกลจากส่วนเดียว (และมักไม่ใหญ่โตที่สุด) ความสำเร็จของงานยังรวมถึงการอ่านและชี้แจงข้อกำหนด การประชุมกับเพื่อนร่วมงานหรือลูกค้า การดีบักและการทดสอบ การจัดทำเอกสาร การส่งมอบผลลัพธ์ (การสาธิตให้ลูกค้าเห็น และการแก้ไขที่เป็นไปได้ตามความคิดเห็นของเขา) ประสบการณ์เท่านั้นที่จะบอกคุณได้อย่างชัดเจนว่าจะใช้เวลานานแค่ไหนในการดำเนินการเหล่านี้ให้เสร็จสิ้น ในตอนแรก อย่างน้อยที่สุดก็เป็นสิ่งสำคัญที่จะไม่ลืมที่จะนำมาพิจารณาในการคำนวณ และคุณสามารถขอประมาณเวลาโดยประมาณจากเพื่อนร่วมงานที่มีประสบการณ์มากกว่าได้

ดังนั้นเราจึงประมาณค่าแรงสำหรับการเขียนโค้ดเพิ่มประมาณการต้นทุนของงานเพิ่มเติม - และเราได้รับเวลาประมาณที่จำเป็นในการทำงานให้เสร็จสิ้น แต่นั่นไม่ใช่ทั้งหมด! คุณต้องระบุวันที่เสร็จสิ้นตามแผนสำหรับงาน อาจเป็นความผิดพลาดที่จะหารค่าแรง (เป็นชั่วโมง) ด้วย 8 ชั่วโมงแล้วบวกเข้ากับวันที่ปัจจุบัน ในทางปฏิบัติจริง Developer ไม่เคย (โอเค ​​แทบไม่เคย) ทำงาน 100% ของเวลากับงานใดงานหนึ่งโดยเฉพาะเลย คุณจะใช้เวลากับงานอื่นอย่างแน่นอน - สำคัญ แต่ไม่เกี่ยวข้องโดยตรงกับงานหลัก เช่น ช่วยเหลือเพื่อนร่วมงาน ฝึกอบรม การเขียนรายงาน เป็นต้น โดยทั่วไปเมื่อวางแผนเชื่อว่า 60-70% ของเวลาทำงานถูกใช้ไปกับการทำงานโดยตรงในโครงการปัจจุบัน นอกจากนี้ คุณต้องคำนึงถึงความล่าช้าที่อาจเกิดขึ้นซึ่งจะทำให้คุณไม่สามารถทำงานต่อไปได้ ตัวอย่างเช่น หากคุณจำเป็นต้องโต้ตอบกับผู้อื่น (เพื่อนร่วมงาน ลูกค้า) เพื่อสิ่งนี้ ให้คำนึงถึงความพร้อม ตารางงาน ฯลฯ

ต่อไปนี้เป็นกฎพื้นฐานที่ในความคิดของฉัน จะช่วยให้นักพัฒนาหลีกเลี่ยงปัญหาในการประมาณและดำเนินการตามกำหนดเวลา นอกจากนี้ สิ่งสำคัญคือการสั่งสมประสบการณ์ของคุณเองทั้งในการปฏิบัติงานและในการประเมิน ตัวอย่างเช่น จะมีประโยชน์มากหลังจากเสร็จสิ้นงานในการเปรียบเทียบการประมาณการเบื้องต้นกับกำหนดเวลาจริงและสรุปผลในอนาคต และแน่นอนว่าควรศึกษาประสบการณ์ของผู้อื่นด้วย ฉันอยากจะแนะนำหนังสือในหัวข้อนี้โดย S. McConnell “โครงการซอฟต์แวร์มีค่าใช้จ่ายเท่าไร” และ S. Arkhipenkov “การบรรยายเกี่ยวกับการจัดการโครงการซอฟต์แวร์”

เลื่อนตำแหน่ง

เมื่อประมาณและวางแผนกำหนดเวลา คุณต้อง:

  1. แบ่งงานออกเป็นชิ้นเล็กๆ ในลักษณะที่มีความเข้าใจที่ชัดเจนว่าต้องใช้เวลานานแค่ไหนในการพัฒนางานแต่ละชิ้น
  2. ควบคู่ไปกับการสลายตัว คำถามเพิ่มเติมจะเกิดขึ้นอย่างแน่นอนเกี่ยวกับการทำงานที่ไม่ได้อธิบายไว้ในคำชี้แจงปัญหา มีความจำเป็นต้องได้รับคำตอบสำหรับคำถามดังกล่าวเนื่องจากเกี่ยวข้องโดยตรงกับขอบเขตของงานและระยะเวลา
  3. เพิ่มเปอร์เซ็นต์ความเสี่ยงในการประเมินขั้นสุดท้าย สิ่งนี้ถูกกำหนดโดยเชิงประจักษ์ คุณสามารถเริ่มต้นได้ เช่น โดยมีความเสี่ยง 10–15%
  4. ทำความเข้าใจว่าโปรแกรมเมอร์เต็มใจทุ่มเทเวลากี่ชั่วโมงต่อวันในการทำงานให้สำเร็จ
  5. เราหารการประมาณการขั้นสุดท้ายด้วยจำนวนชั่วโมงที่เราจัดสรรต่อวัน และรับจำนวนวันที่ต้องดำเนินการ
  6. เรามุ่งเน้นไปที่ปฏิทินและจำนวนวันที่ต้องดำเนินการให้เสร็จสิ้น เราคำนึงถึงวันหยุดสุดสัปดาห์และวันอื่นๆ ที่โปรแกรมเมอร์ไม่สามารถทำงานนี้ได้ รวมถึงวันที่เริ่มทำงาน (นักพัฒนาไม่พร้อมที่จะรับงานในวันเดียวกันเสมอไป) ดังนั้นเราจึงได้วันที่เริ่มต้นและสิ้นสุดของงาน

เลื่อนตำแหน่ง

ในบริษัทของเรา การวางแผนงานจะต้องผ่านหลายขั้นตอนเสมอ ในด้านธุรกิจ เรากำหนดเป้าหมายเชิงกลยุทธ์ 5-6 ประการสำหรับปี งานเหล่านี้เป็นงานระดับสูง เช่น การเพิ่มพารามิเตอร์บางอย่างขึ้นหลายเปอร์เซ็นต์ จากนั้น แผนกต่างๆ ของบริษัทจะกำหนดงานทางธุรกิจให้กับทีมไอทีทั้งหมด กำหนดเวลาสำหรับงานเหล่านี้จะได้รับการประเมินเบื้องต้นคร่าวๆ ซึ่งมักกำหนดโดยสมาชิกในทีมทุกคน เช่น ผู้จัดการ นักวิเคราะห์ นักพัฒนา และผู้ทดสอบ เมื่อธุรกิจได้รับการประเมินนี้แล้ว ธุรกิจจะจัดลำดับความสำคัญของงานตามเป้าหมายเชิงกลยุทธ์ของบริษัท เป้าหมายเชิงกลยุทธ์แบบตัดขวางช่วยในเรื่องนี้ เห็นได้ชัดว่าเราทุกคนทำงานเพื่อจุดประสงค์ร่วมกัน ไม่มีสถานการณ์เช่นนี้เมื่อมีคนดึงไปในทิศทางของตนเองเท่านั้น เรารวบรวมสปรินต์จากงานที่ประมาณไว้อย่างแม่นยำในแง่ของกำหนดเวลา สำหรับบางทีมจะเป็นรายไตรมาส สำหรับบางทีมจะเป็นรายเดือน สำหรับงานต่างๆ ที่จะจัดอยู่ในการวิ่งครั้งต่อไป ตามการประมาณการเบื้องต้น ทีมงานจะให้การประมาณที่แม่นยำ งานใหญ่แบ่งออกเป็นงานระดับล่าง โดยแต่ละงานมีนักแสดงเฉพาะรายเป็นผู้รับผิดชอบ และเป็นผู้ให้การประเมินที่แม่นยำ

ในขั้นตอนนี้ สิ่งสำคัญคืออย่าลืมเพิ่มเวลาสำรองเพื่อแก้ไขข้อบกพร่อง เพราะเฉพาะผู้ที่ไม่ทำอะไรเลยเท่านั้นที่ไม่มีข้อผิดพลาด ทั้งเจ้าของผลิตภัณฑ์และลูกค้าธุรกิจต่างเข้าใจเรื่องนี้เป็นอย่างดี ในเวลาเดียวกัน ระยะเวลาที่ต้องการจะต้องเพียงพอ: จะไม่มีใครเข้าใจนักพัฒนาที่กำหนดเวลาสำหรับงานง่ายๆ ที่ยาวเกินไป เขาจะถูกขอให้พิสูจน์เหตุผลในการตัดสินใจ สิ่งที่ยากที่สุดคือการอธิบายให้ธุรกิจทราบว่าเหตุใดจึงต้องใช้เวลาในการปรับโครงสร้างใหม่ เรารู้สึกขอบคุณบริษัทของเราสำหรับความจริงที่ว่าบางครั้งเราก็ประสบความสำเร็จในเรื่องนี้ เพราะท้ายที่สุดแล้ว การปรับโครงสร้างใหม่จะนำไปสู่การทำให้โครงสร้างพื้นฐานง่ายขึ้นและการวางโค้ดตามลำดับ ซึ่งจะเพิ่มความเสถียรของระบบและสามารถเร่งการพัฒนาได้อย่างมาก ของฟังก์ชันใหม่ๆ

บางครั้งข้อผิดพลาดในการประเมินยังคงเกิดขึ้น ในความคิดของฉัน เป็นไปไม่ได้ที่แผนกพัฒนาในบริษัทขนาดใหญ่ที่มีโครงสร้างพื้นฐานที่พัฒนาแล้วเพื่อหลีกเลี่ยงปัญหานี้โดยสิ้นเชิง ในกรณีนี้ เป็นสิ่งสำคัญที่นักพัฒนาจะต้องแจ้งให้ผู้จัดการของเขาทราบทันทีเกี่ยวกับสิ่งที่เกิดขึ้น และในทางกลับกัน เขาก็จัดการเพื่อเตือนธุรกิจและ "เล่นซ้ำ" บางสิ่งในแผนทั่วไปของบริษัท การทำงานในโหมดนี้ถูกต้องมากกว่าการพยายามทำอย่างเมามันใน 3 วันซึ่งใช้เวลา 5 วันและจากนั้นก็จมอยู่กับข้อผิดพลาดจำนวนมากที่เกิดขึ้นเนื่องจากความเร่งรีบดังกล่าว

เลื่อนตำแหน่ง

คำตอบที่ถูกต้องของคำถามทั้งสองส่วน [วิธีเรียนรู้วิธีการวางแผนอย่างถูกต้องและส่งมอบโครงการตรงเวลา - สีแดง.] - ประสบการณ์. ไม่มีวิธีอื่นในการ “รู้จักเซน” ตามทฤษฎีการตัดสินใจ การสรุปที่แม่นยำใดๆ สามารถสรุปได้เฉพาะจากการวิเคราะห์ข้อมูลจำนวนหนึ่งที่มีอยู่แล้วเท่านั้น และยิ่งมีข้อมูลมากเท่าใด การคาดการณ์และการประเมินขั้นสุดท้ายก็จะยิ่งแม่นยำมากขึ้นเท่านั้น

ตามคำพูดของเฮอร์เบิร์ต ชอว์: “ประสบการณ์คือโรงเรียนที่มนุษย์เรียนรู้ว่าเมื่อก่อนเขาเป็นคนโง่แค่ไหน” สิ่งนี้นำไปสู่ข้อสรุปที่ค่อนข้างง่าย: หากโปรแกรมเมอร์มีประสบการณ์ที่เกี่ยวข้องกับงานที่ทำอยู่อยู่แล้ว เขาก็สามารถไว้วางใจมันได้ ถ้าไม่ เขาก็สามารถพึ่งพาประสบการณ์ของ "เพื่อนร่วมงาน" ของเขาได้

ถัดไป คุณต้องเข้าใจว่าการวางแผนกำหนดเวลาโดยตรงเป็นงานที่ผู้คนต้องรับมือได้แย่มาก โดยเฉพาะในด้านการพัฒนา เมื่อประมาณวันที่ครบกำหนด ถือเป็นแนวปฏิบัติที่ดีที่จะแนะนำ "ปัจจัยการปรับปรุง" จากการประมาณการเดิม ตัวชี้วัดนี้สามารถอยู่ในช่วง 1.5 ถึง 3 ขึ้นอยู่กับประสบการณ์ของนักพัฒนาและระดับความไม่แน่นอนของงานที่ได้รับการแก้ไขภายในโครงการ

เลื่อนตำแหน่ง

สิ่งสำคัญคือต้องพิจารณาปัจจัยหลายประการในการกำหนดกำหนดเวลา

เช่น ประสบการณ์การทำงาน คุณเข้าใจขอบเขตของงานข้างหน้าชัดเจนแค่ไหน? คุณเคยทำอะไรแบบนี้มาก่อนหรือไม่? เห็นได้ชัดว่ายิ่งมีประสบการณ์มากเท่าไหร่งานก็จะเสร็จเร็วขึ้นเท่านั้น

ข้อกำหนดทางเทคนิคที่เป็นลายลักษณ์อักษรอย่างดีมีบทบาทสำคัญในการกำหนดกำหนดเวลา สิ่งต่างๆ ในพื้นที่ของเราเป็นเรื่องยากมาก บ่อยครั้งที่ลูกค้าไม่รู้ว่าเขาต้องการอะไร ดังนั้นฉันขอแนะนำให้คุณใช้เวลาเพิ่มอีกวันหรือสองวัน แต่ขอแนวคิดที่ชัดเจนจากลูกค้าเกี่ยวกับผลลัพธ์ที่ต้องการ สิ่งสำคัญคือความเข้าใจนี้มีร่วมกัน และหลังจากนี้คุณก็สามารถเริ่มเจรจาจำนวนและเงื่อนไขได้

รวมถึงความเสี่ยงด้วยเสมอ สำหรับผู้เริ่มต้น ฉันแนะนำให้คูณเวลาโดยประมาณที่จะเสร็จสิ้นด้วยสอง ท้ายที่สุดแล้ว การส่งมอบโครงการก่อนกำหนดและเติบโตในฐานะผู้เชี่ยวชาญในสายตาของลูกค้า จะดีกว่าที่จะส่งมอบในภายหลังและทำลายชื่อเสียงของคุณ

เลื่อนตำแหน่ง

คำแนะนำทั่วไปคือนักพัฒนาจำเป็นต้องเรียนรู้วิธีการแบ่งแยกงานอย่างถูกต้อง มองหาข้อผิดพลาดที่อาจเกิดขึ้นอยู่เสมอ อาศัยประสบการณ์ของตนเอง และอย่าลืมเตือนลูกค้าและเพื่อนร่วมงานอย่างทันท่วงทีหากงานไม่สามารถแก้ไขได้ภายในเวลาที่กำหนด กรอบ

การสร้างแผนงานที่ชัดเจนนั้นยากกว่าการกำหนดเส้นตายในการทำงานชิ้นเดียวให้สำเร็จ ในเวลาเดียวกัน สิ่งสำคัญไม่เพียงแต่จะต้องส่งมอบโครงการให้ตรงเวลาเท่านั้น แต่ยังต้องแน่ใจว่าระบบที่คุณพัฒนาสามารถแก้ไขปัญหาทางธุรกิจได้อย่างถูกต้องอีกด้วย ที่นี่ ทีมไอทีได้รับความช่วยเหลือจากวิธีการพัฒนาซอฟต์แวร์ต่างๆ ตั้งแต่ RUP และ MSF ไปจนถึง SCRUM และรูปแบบ Agile อื่นๆ ตัวเลือกเครื่องมือมีมากมาย และลูกค้าของเราจำนวนมากต้องการทราบล่วงหน้าว่าเราจะทำงานร่วมกับพวกเขาในโครงการอย่างไร หลักการใดที่เรายึดถือ

อย่างไรก็ตาม หัวข้อของ Agile ในปัจจุบันมีความใกล้ชิดกับทั้งธุรกิจและแม้แต่ในแต่ละโครงการสำหรับภาครัฐ เนื่องจากหลักการของวิธีการนี้ทำให้สามารถดำเนินโครงการได้อย่างรวดเร็ว โดยจัดการความคาดหวังของลูกค้าในการวนซ้ำแต่ละครั้ง ตัวอย่างเช่น ในทีม Agile แทบไม่มีการพูดคุยกับลูกค้ายืดเยื้อเลย ลืมหน้าที่อธิบายรายละเอียดทางเทคนิคที่ไม่จำเป็นไปได้เลย เช่น ความรวดเร็วของรายการแบบเลื่อนลงที่ปรากฏ เปิดโอกาสให้ลูกค้าทดลองใช้ระบบเวอร์ชันกลาง จากนั้นคุณจะเข้าใจซึ่งกันและกันได้ง่ายขึ้นมาก

ทีม Agile วางแผนทุกอย่างร่วมกันและกำหนดระดับแรงงานที่เหมาะสมที่สุดซึ่งจำเป็นสำหรับการแก้ปัญหาเฉพาะ ตัวอย่างเช่น หนึ่งในเทคนิคที่เรียกว่า "การวางแผนโป๊กเกอร์" ซึ่งผู้เข้าร่วมแต่ละคนจะประเมินค่าแรงที่จำเป็นสำหรับงานเฉพาะโดยไม่เปิดเผยตัวตน หลังจากนั้นทีมงานจะกำหนดน้ำหนักเฉลี่ยของงานตามจุดเนื้อเรื่องหรือชั่วโมงคน และกระจายงานตามหลักการ “ใครชอบอะไร” ในเวลาเดียวกัน ทุกๆ วันทีมงานจะรวมตัวกันเพื่อประชุมเป็นเวลา 15 นาที โดยทุกคนจะพูดคุยเกี่ยวกับสถานะของงานปัจจุบันของตนภายในไม่กี่นาที รวมถึงรายงานปัญหาต่างๆ ที่เกิดขึ้นด้วย ทีมงานแก้ไขปัญหาที่ตรวจพบอย่างรวดเร็ว ดังนั้นลูกค้าจึงดูขั้นตอนต่อไปของการทำงานของโปรแกรมเมอร์โดยเร็วที่สุด นักพัฒนาจะไม่ชะลอการทำงานให้เสร็จสิ้นเนื่องจากการไม่เต็มใจที่จะรบกวนทีมอีกครั้งหรือความพยายามที่ไร้ประโยชน์ที่จะคิดออกด้วยตนเองซึ่งฆ่าเวลาอันมีค่า อย่างไรก็ตาม ในสถานะเล็กๆ ดังกล่าว นักพัฒนามีความปรารถนาที่จะแสดงด้านที่ดีที่สุดของตน เพื่อแสดงให้เห็นว่าคุณเข้าถึงงานของคุณอย่างมีความรับผิดชอบ มันกระตุ้นและมีวินัยในตนเองจริงๆ

อัลกอริธึมเวอร์ชันก่อนหน้าที่ถูกสลับคืออัลกอริธึมเวลาดำเนินการที่เหลืออยู่ที่สั้นที่สุด ตามอัลกอริธึมนี้ ตัวกำหนดเวลาจะเลือกกระบวนการที่มีเวลาดำเนินการเหลือสั้นที่สุดในแต่ละครั้ง ในกรณีนี้จำเป็นต้องทราบเวลาเสร็จงานล่วงหน้าด้วย เมื่องานใหม่มาถึง เวลาดำเนินการทั้งหมดจะถูกเปรียบเทียบกับเวลาดำเนินการที่เหลืออยู่ของงานปัจจุบัน หากเวลาดำเนินการของงานใหม่สั้นลง กระบวนการปัจจุบันจะถูกระงับและการควบคุมจะถูกโอนไปยังงานใหม่ โครงการนี้ช่วยให้คุณสามารถให้บริการคำขอระยะสั้นได้อย่างรวดเร็ว

การวางแผนสามระดับ

ระบบการประมวลผลแบบแบตช์อนุญาตให้มีการจัดกำหนดการได้สามระดับ ดังแสดงในรูป เมื่องานใหม่เข้ามาในระบบ งานเหล่านั้นจะถูกวางไว้ในคิวที่จัดเก็บไว้ในดิสก์ก่อน ทางเข้า กำหนดการเข้าถึง เลือกงานและโอนเข้าระบบ งานที่เหลือยังคงอยู่ในคิว

เมื่องานเข้าสู่ระบบแล้ว กระบวนการที่เกี่ยวข้องจะถูกสร้างขึ้น และสามารถแข่งขันเพื่อเข้าถึงโปรเซสเซอร์ได้ทันที อย่างไรก็ตาม อาจเป็นไปได้ว่ามีกระบวนการมากเกินไปและกระบวนการทั้งหมดไม่พอดีกับหน่วยความจำ จากนั้นบางกระบวนการก็จะถูกเพจออกไปยังดิสก์ การกำหนดเวลาระดับที่สองจะกำหนดว่ากระบวนการใดที่สามารถจัดเก็บไว้ในหน่วยความจำ และกระบวนการใดที่สามารถจัดเก็บไว้ในดิสก์ได้ นี่คือสิ่งที่เขาทำ กำหนดการหน่วยความจำ .

ตัวกำหนดเวลาหน่วยความจำจะดูกระบวนการบนดิสก์เป็นระยะๆ เพื่อตัดสินใจว่าจะย้ายกระบวนการใดไปยังหน่วยความจำ ในบรรดาเกณฑ์ที่ใช้โดยตัวกำหนดตารางเวลามีดังต่อไปนี้:

1. นานแค่ไหนแล้วตั้งแต่กระบวนการถูกสลับไปยังดิสก์หรือโหลดจากดิสก์?

2. กระบวนการใช้ CPU นานแค่ไหน?

3. ขนาดของกระบวนการคือเท่าใด (กระบวนการขนาดเล็กไม่รบกวน)?

4. ความสำคัญของกระบวนการคืออะไร?

ระดับการกำหนดเวลาที่สามมีหน้าที่รับผิดชอบในการอนุญาตให้กระบวนการในสถานะพร้อมเข้าถึงโปรเซสเซอร์ เมื่อเราพูดถึง “ผู้จัดกำหนดการ” เรามักจะหมายถึง ตัวกำหนดเวลาซีพียู - ตัวกำหนดเวลานี้ใช้อัลกอริธึมที่เหมาะสมกับสถานการณ์ ทั้งที่มีและไม่มีการหยุดชะงัก เราได้ดูอัลกอริธึมเหล่านี้บางส่วนแล้ว และเราจะทำความคุ้นเคยกับอัลกอริธึมอื่นๆ ในภายหลัง

การวางแผนในระบบเชิงโต้ตอบ

การวางแผนแบบวนรอบ

หนึ่งในวิธีที่เก่าแก่ที่สุด ง่ายที่สุด ยุติธรรมที่สุด และใช้บ่อยที่สุดคืออัลกอริธึมการตั้งเวลาแบบวน แต่ละกระบวนการจะได้รับเวลาโปรเซสเซอร์จำนวนหนึ่ง ซึ่งเรียกว่าการแบ่งเวลา หากกระบวนการยังคงทำงานอยู่เมื่อสิ้นสุดการแบ่งเวลา กระบวนการนั้นจะถูกยกเลิกและการควบคุมจะถูกถ่ายโอนไปยังกระบวนการอื่น แน่นอนว่าหากกระบวนการบล็อกหรือยุติก่อนกำหนด การเปลี่ยนแปลงการควบคุมจะเกิดขึ้น ณ จุดนี้ การใช้งานการกำหนดเวลาแบบ Round-Robin นั้นง่ายดาย ตัวกำหนดตารางเวลาจำเป็นต้องรักษารายการกระบวนการให้อยู่ในสถานะพร้อมเท่านั้น เมื่อกระบวนการถึงขีดจำกัดเวลา กระบวนการจะถูกส่งไปยังจุดสิ้นสุดของรายการ

แง่มุมเดียวที่น่าสนใจของอัลกอริธึมนี้คือความยาวของควอนตัม การสลับจากกระบวนการหนึ่งไปอีกกระบวนการหนึ่งต้องใช้เวลา - จำเป็นต้องบันทึกและโหลดการลงทะเบียนและแผนที่หน่วยความจำอัปเดตตารางและรายการบันทึกและโหลดแคชหน่วยความจำใหม่ ฯลฯ สามารถกำหนดข้อสรุปได้ดังนี้: ควอนตัมที่เล็กเกินไปจะนำไปสู่ การสลับกระบวนการบ่อยครั้งและประสิทธิภาพเพียงเล็กน้อย แต่ควอนตัมที่มีขนาดใหญ่เกินไปอาจส่งผลให้การตอบสนองช้าต่อคำขอเชิงโต้ตอบระยะสั้น ค่าควอนตัมประมาณ 2 0 -5 0 ms มักจะเป็นการประนีประนอมที่สมเหตุสมผล

การวางแผนลำดับความสำคัญ

การจัดกำหนดการแบบ Round-robin มีสมมติฐานที่สำคัญว่ากระบวนการทั้งหมดเท่าเทียมกัน ในสถานการณ์ของคอมพิวเตอร์ที่มีผู้ใช้จำนวนมาก สิ่งนี้อาจไม่เป็นเช่นนั้น ตัวอย่างเช่น ในมหาวิทยาลัย คณบดีควรได้รับการแต่งตั้งก่อน ตามด้วยอาจารย์ เลขานุการ คนทำความสะอาด และตามด้วยนักศึกษาเท่านั้น ความจำเป็นที่ต้องคำนึงถึงปัจจัยภายนอกดังกล่าวนำไปสู่การวางแผนลำดับความสำคัญ แนวคิดพื้นฐานนั้นเรียบง่าย: แต่ละกระบวนการได้รับการกำหนดลำดับความสำคัญ และการควบคุมจะถูกถ่ายโอนไปยังกระบวนการที่พร้อมซึ่งมีลำดับความสำคัญสูงสุด

หลายคิว.

ตัวกำหนดเวลาลำดับความสำคัญอันดับแรกๆ ถูกนำไปใช้ในระบบ CTSS (ระบบแบ่งเวลาที่ใช้ร่วมกันได้) ปัญหาหลักของระบบ CTSS คือการสลับกระบวนการช้าเกินไป เนื่องจากคอมพิวเตอร์ IBM 7094 สามารถเก็บกระบวนการเดียวในหน่วยความจำได้เท่านั้น สวิตช์แต่ละตัวหมายถึงการถ่ายกระบวนการปัจจุบันลงดิสก์

และอ่านกระบวนการใหม่จากดิสก์ นักพัฒนาของ CTSS ตระหนักได้อย่างรวดเร็วว่าประสิทธิภาพจะดีขึ้นหากกระบวนการที่จำกัดโดยโปรเซสเซอร์ได้รับการแบ่งเวลาให้ใหญ่กว่าการได้รับการแบ่งเวลาเพียงเล็กน้อย แต่บ่อยครั้ง ในอีกด้านหนึ่งสิ่งนี้จะลดจำนวนการถ่ายโอนจากหน่วยความจำไปยังดิสก์และในทางกลับกันจะทำให้เวลาตอบสนองลดลงดังที่เราได้เห็นไปแล้ว

เป็นผลให้มีการพัฒนาโซลูชันที่มีคลาสลำดับความสำคัญ กระบวนการในคลาสที่มีลำดับความสำคัญสูงสุดได้รับการจัดสรรหนึ่งควอนตัม กระบวนการในคลาสถัดไปได้รับการจัดสรรสองควอนตัม กระบวนการในคลาสถัดไปได้รับการจัดสรรสี่ควอนตัม ฯลฯ เมื่อกระบวนการใช้เวลาที่ได้รับจัดสรรทั้งหมด กระบวนการจะถูกย้ายไปยังระดับที่ต่ำกว่า ระดับ.

ตัวอย่างเช่น พิจารณากระบวนการที่ต้องคำนวณมากกว่า 100 ควอนตัม ขั้นแรก มันจะได้รับหนึ่งควอนตัม จากนั้นมันจะถูกปั๊มลงดิสก์ ครั้งต่อไปเขาได้รับ 2 ควอนตัม จากนั้น 4, 8,16, 32, 64 แม้ว่าจาก 64 เขาจะใช้เพียง 37 เท่านั้น ในกรณีนี้ จำเป็นต้องมีการถ่ายโอนเพียง 7 ครั้ง (รวมการโหลดเริ่มต้น) แทนที่จะเป็น 100 ซึ่งจะเป็น จำเป็นต้องใช้อัลกอริธึมแบบ Round-robin นอกจากนี้ เมื่อเข้าสู่คิวลำดับความสำคัญมากขึ้น กระบวนการจะเริ่มน้อยลงเรื่อยๆ ส่งผลให้ CPU ใช้กระบวนการสั้นลง

“กระบวนการที่สั้นที่สุดคือขั้นตอนถัดไป”

เนื่องจากอัลกอริธึม Shortest Task First ช่วยลดเวลาตอบสนองโดยเฉลี่ยในระบบการประมวลผลเป็นชุด เราจึงต้องการใช้อัลกอริทึมนี้ในระบบโต้ตอบเช่นกัน สิ่งนี้เป็นไปได้ในระดับหนึ่ง กระบวนการโต้ตอบส่วนใหญ่มักเป็นไปตามรูปแบบของ “การรอคำสั่ง การดำเนินการคำสั่ง การรอคำสั่ง การดำเนินการคำสั่ง...” หากคุณถือว่าการดำเนินการแต่ละคำสั่งเป็นงานที่แยกจากกัน คุณสามารถลดการตอบสนองโดยเฉลี่ยโดยรวมให้เหลือน้อยที่สุด เวลาโดยรันงานที่สั้นที่สุดก่อน ปัญหาเดียวก็คือ

คือการทำความเข้าใจว่ากระบวนการรอใดที่สั้นที่สุด

วิธีการหนึ่งจะขึ้นอยู่กับการประมาณความยาวของกระบวนการโดยพิจารณาจากพฤติกรรมก่อนหน้าของกระบวนการ ในกรณีนี้ กระบวนการที่มีเวลาโดยประมาณสั้นที่สุดจะเริ่มขึ้น สมมติว่าเวลาดำเนินการที่คาดหวังของคำสั่งคือ T 0 และเวลาที่คาดหวังของการรันครั้งต่อไปคือ T 1 คุณสามารถปรับปรุงการประมาณเวลาได้โดยนำผลรวมถ่วงน้ำหนักของเวลาเหล่านี้ ที่ 0 + (1 - a)T 1 . โดยการเลือกค่าที่เหมาะสมสำหรับ a เราสามารถบังคับให้อัลกอริธึมการประมาณค่าลืมเกี่ยวกับการรันครั้งก่อนๆ ได้อย่างรวดเร็ว หรือในทางกลับกัน คือการจดจำมันเป็นเวลานาน เมื่อหา = 1/2 เราจะได้ค่าประมาณแบบต่างๆ:

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

หลังจากการวิ่งสามครั้ง น้ำหนักของ T 0 ในการประมาณการจะลดลงเหลือ 1/8

วิธีการประมาณค่าถัดไปในชุดข้อมูลโดยใช้ค่าเฉลี่ยถ่วงน้ำหนักของค่าก่อนหน้าและการประมาณค่าก่อนหน้า มักเรียกว่าการชราภาพ วิธีการนี้ใช้ได้กับหลายสถานการณ์ที่จำเป็นต้องมีการประมาณค่าจากค่าก่อนหน้า วิธีที่ง่ายที่สุดในการใช้ความชราคือที่ = 1/2 ในทุกขั้นตอนที่คุณต้องการ

เพิ่มค่าใหม่ให้กับค่าประมาณปัจจุบันและหารผลรวมครึ่งหนึ่ง (เลื่อนไปทางขวา 1 บิต)

รับประกันการวางแผน

แนวทางการวางแผนที่แตกต่างกันโดยพื้นฐานคือการให้คำมั่นสัญญาที่แท้จริงแก่ผู้ใช้แล้วจึงดำเนินการตามนั้น ต่อไปนี้เป็นคำมั่นสัญญาที่พูดง่ายและรักษาได้ง่าย: หากคุณแชร์โปรเซสเซอร์กับผู้ใช้ n ราย คุณจะได้รับพลังของโปรเซสเซอร์ 1/n

และในระบบที่มีผู้ใช้หนึ่งคนและมีตัวประมวลผล n ตัวทำงานอยู่ แต่ละตัวจะได้รับรอบตัวประมวลผล 1/n

เพื่อให้บรรลุตามสัญญานี้ ระบบจะต้องติดตามการจัดสรร CPU ระหว่างกระบวนการตั้งแต่วินาทีแรกที่แต่ละกระบวนการถูกสร้างขึ้น จากนั้นระบบจะคำนวณจำนวนทรัพยากร CPU ที่กระบวนการมีสิทธิ์ได้รับ เช่น เวลานับตั้งแต่สร้างหารด้วย n ตอนนี้เราสามารถคำนวณอัตราส่วนของเวลาที่ให้กับกระบวนการต่อเวลาที่มีสิทธิได้ ค่าผลลัพธ์ 0.5 หมายความว่ากระบวนการได้รับเพียงครึ่งหนึ่งของจำนวนเงินที่จัดสรร และ 2.0 หมายความว่ากระบวนการได้รับมากเป็นสองเท่าของที่ควรจะเป็น จากนั้นจึงเริ่มกระบวนการที่มีอัตราส่วนน้อยที่สุดจนกระทั่ง

มันจะไม่ใหญ่กว่าเพื่อนบ้านที่ใกล้ที่สุด

การวางแผนลอตเตอรี

อัลกอริธึมจะขึ้นอยู่กับการแจกจ่ายตั๋วลอตเตอรีเพื่อประมวลผลการเข้าถึงทรัพยากรต่างๆ รวมถึงตัวประมวลผล เมื่อผู้วางแผนจำเป็นต้องตัดสินใจ ลอตเตอรีจะถูกสุ่มเลือกและเจ้าของจะสามารถเข้าถึงทรัพยากรได้ ในแง่ของการเข้าถึง CPU "ลอตเตอรี" สามารถเกิดขึ้นได้ 50 ครั้งต่อวินาที โดยผู้ชนะจะได้รับเวลา CPU 20ms

กระบวนการที่สำคัญกว่าสามารถได้รับตั๋วเพิ่มเติมเพื่อเพิ่มโอกาสในการชนะ หากมีตั๋วเพียง 100 ใบและ 20 ใบอยู่ในกระบวนการเดียว จะได้รับ 20% ของเวลาประมวลผล แตกต่างจากตัวกำหนดเวลาลำดับความสำคัญซึ่งเป็นเรื่องยากมากที่จะประเมินว่าลำดับความสำคัญ 40 หมายถึงอะไรในการกำหนดเวลาลอตเตอรีทุกอย่างชัดเจน แต่ละกระบวนการจะได้รับเปอร์เซ็นต์ของทรัพยากรโดยประมาณเท่ากับเปอร์เซ็นต์ของตั๋วที่มีอยู่

การวางแผนลอตเตอรีมีคุณสมบัติที่น่าสนใจหลายประการ ตัวอย่างเช่น หากในระหว่างการสร้างกระบวนการได้รับตั๋วหลายใบ โอกาสในการถูกรางวัลในลอตเตอรีครั้งต่อไปจะแปรผันตามจำนวนตั๋ว

กระบวนการสื่อสารสามารถแลกเปลี่ยนตั๋วได้หากจำเป็น ดังนั้น หากกระบวนการของไคลเอ็นต์ส่งข้อความไปยังกระบวนการของเซิร์ฟเวอร์แล้วบล็อก กระบวนการดังกล่าวสามารถส่งตั๋วทั้งหมดไปยังกระบวนการของเซิร์ฟเวอร์เพื่อเพิ่มโอกาสที่เซิร์ฟเวอร์จะเริ่มทำงาน เมื่อกระบวนการเซิร์ฟเวอร์เสร็จสิ้น ก็สามารถคืนตั๋วทั้งหมดกลับมาได้

การวางแผนอย่างยุติธรรม

จนถึงตอนนี้ เราได้สันนิษฐานว่าแต่ละกระบวนการได้รับการควบคุมโดยอิสระจากผู้ที่เป็นเจ้าของ ดังนั้น หากผู้ใช้ 1 สร้าง 9 กระบวนการ และผู้ใช้ 2 - 1 กระบวนการ จากนั้นใช้การกำหนดเวลาแบบ Round-robin หรือในกรณีที่มีลำดับความสำคัญเท่ากัน ผู้ใช้ 1 จะได้รับ 90% ของตัวประมวลผล และผู้ใช้ 2 เพียง 10 เท่านั้น

เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าว บางระบบจะให้ความสนใจกับเจ้าของกระบวนการก่อนที่จะจัดกำหนดการ ในรุ่นนี้ ผู้ใช้แต่ละคนจะได้รับส่วนแบ่งของโปรเซสเซอร์ และผู้กำหนดเวลาจะเลือกกระบวนการตามข้อเท็จจริงนี้ หากในตัวอย่างของเราผู้ใช้แต่ละคนมี

สัญญา 50% ของโปรเซสเซอร์จากนั้นพวกเขาจะได้รับ 50% ของโปรเซสเซอร์โดยไม่คำนึงถึงจำนวนกระบวนการ

การวางแผนในระบบเรียลไทม์

ในระบบเรียลไทม์ เวลามีบทบาทสำคัญ โดยส่วนใหญ่ อุปกรณ์ทางกายภาพภายนอกตั้งแต่หนึ่งเครื่องขึ้นไปจะสร้างสัญญาณอินพุต และคอมพิวเตอร์จะต้องตอบสนองอย่างเพียงพอภายในระยะเวลาที่กำหนด

ระบบเรียลไทม์แบ่งออกเป็น ระบบเรียลไทม์อย่างหนัก ซึ่งหมายถึงการมีกำหนดเวลาที่เข้มงวดสำหรับแต่ละงาน (ต้องปฏิบัติตาม) และ ระบบเรียลไทม์ที่ยืดหยุ่น ซึ่งการฝ่าฝืนกำหนดเวลาเป็นสิ่งที่ไม่พึงประสงค์แต่ก็ยอมรับได้ ในทั้งสองกรณี โปรแกรมจะแบ่งออกเป็นหลายกระบวนการ ซึ่งแต่ละกระบวนการสามารถคาดเดาได้ กระบวนการเหล่านี้มักใช้เวลาสั้นและทำงานเสร็จภายในไม่กี่วินาที เมื่อสัญญาณภายนอกปรากฏขึ้น ขึ้นอยู่กับผู้จัดกำหนดการเพื่อให้แน่ใจว่ากำหนดการจะยังคงอยู่

เหตุการณ์ภายนอกที่ระบบต้องตอบสนองสามารถแบ่งออกเป็น เป็นระยะๆ(เกิดขึ้นเป็นระยะๆ) และ ไม่ใช่เป็นระยะ(เกิดขึ้นอย่างไม่คาดฝัน) อาจมีกระแสเหตุการณ์เป็นระยะๆ หลายช่วงที่ระบบต้องประมวลผล ขึ้นอยู่กับเวลาที่ใช้ในการประมวลผลแต่ละเหตุการณ์ ระบบอาจไม่สามารถประมวลผลเหตุการณ์ทั้งหมดได้ทันเวลา


ข้อมูลที่เกี่ยวข้อง.


การแนะนำ

วัตถุประสงค์ของการประชุมเชิงปฏิบัติการเกี่ยวกับองค์กรการผลิตคือเพื่อขยายและเพิ่มพูนความรู้ทางทฤษฎีเพื่อปลูกฝังทักษะที่จำเป็นสำหรับการแก้ปัญหาที่พบบ่อยที่สุดในทางปฏิบัติเกี่ยวกับองค์กรและการวางแผนการผลิต

การประชุมเชิงปฏิบัติการประกอบด้วยงานสำหรับส่วนหลักของหลักสูตร ในตอนต้นของแต่ละหัวข้อจะมีการนำเสนอคำแนะนำระเบียบวิธีสั้น ๆ และข้อมูลทางทฤษฎี ปัญหาทั่วไปพร้อมวิธีแก้ไข และปัญหาสำหรับวิธีแก้ปัญหาอิสระ

การมีคำแนะนำด้านระเบียบวิธีและข้อมูลทางทฤษฎีโดยย่อในแต่ละหัวข้อทำให้คุณสามารถใช้เวิร์กช็อปนี้เพื่อการเรียนรู้ทางไกลได้


การคำนวณระยะเวลารอบการผลิต

ระยะเวลาของวงจรการผลิตทำหน้าที่เป็นตัวบ่งชี้ประสิทธิภาพของกระบวนการผลิต

วงจรการผลิต– ระยะเวลาการเข้าพักของวัตถุแรงงานในกระบวนการผลิตตั้งแต่ช่วงเวลาที่เปิดตัววัตถุดิบจนถึงช่วงเวลาที่ปล่อยผลิตภัณฑ์สำเร็จรูป

วงจรการผลิตประกอบด้วย ชั่วโมงการทำงานในระหว่างที่มีการใช้แรงงานและ เวลาพัก- การหยุดพักขึ้นอยู่กับสาเหตุที่ทำให้เกิดสามารถแบ่งออกเป็น:

1) เปิด เป็นธรรมชาติหรือเทคโนโลยี - ถูกกำหนดโดยธรรมชาติของผลิตภัณฑ์

2) องค์กร(หยุดพักระหว่างกะ)

ระยะเวลาของวงจรการผลิตประกอบด้วยองค์ประกอบดังต่อไปนี้:

ทีไซเคิล = ที+ เหล่านั้น ทีกิน + ทีทีอาร์ + ทีเคเค - ทีเดือน - ทีมทส.

ที่ไหน ทีเหล่านั้น– เวลาของการดำเนินการทางเทคโนโลยี

ไม่ได้กิน -เวลาของกระบวนการทางธรรมชาติ (การทำให้แห้ง การทำให้เย็นลง ฯลฯ );

ที ตร –เวลาขนส่งวัตถุแรงงาน

ที เคเค -เวลาควบคุมคุณภาพ

t mo –ระยะเวลาการดูแลระหว่างการผ่าตัด

ทีเอ็มซี -เวลาจัดเก็บในคลังสินค้าระหว่างร้านค้า

(ทีสาม ทีเคเค สามารถใช้ร่วมกับ ทีเดือน)

การคำนวณรอบเวลาการผลิตขึ้นอยู่กับประเภทของการผลิต ในการผลิตจำนวนมาก ระยะเวลาของวงจรการผลิตจะถูกกำหนดตามเวลาที่ผลิตภัณฑ์อยู่ในการผลิต เช่น

ทีไซเคิล = ทีในเอ็ม

ที่ไหน ทีวี– ปล่อยจังหวะ;

– จำนวนงาน

ภายใต้ ปล่อยจังหวะจำเป็นต้องเข้าใจช่วงเวลาระหว่างการเปิดตัวผลิตภัณฑ์ที่ผลิตหนึ่งและผลิตภัณฑ์ถัดไป

จังหวะการปล่อยถูกกำหนดโดยสูตร

เสื้อ ใน = เทฟฟ์ /V,

ที่ไหน เทฟ– กองทุนที่มีประสิทธิผลของเวลาคนงานสำหรับรอบระยะเวลาการเรียกเก็บเงิน (กะ วัน ปี)

ใน– ปริมาณผลผลิตในช่วงเวลาเดียวกัน (ในหน่วยธรรมชาติ)

ตัวอย่าง: T cm = 8 ชั่วโมง = 480 นาที; T ต่อ = 30 นาที; → เทฟฟ์ = 480 – – 30 = 450 นาที

B = 225 ชิ้น; ทีใน = 450/225 = 2 นาที

ในการผลิตแบบอนุกรม ซึ่งการประมวลผลดำเนินการเป็นชุด ระยะเวลาของวงจรเทคโนโลยีไม่ได้ถูกกำหนดต่อหน่วยของผลิตภัณฑ์ แต่สำหรับทั้งชุด ยิ่งไปกว่านั้น ขึ้นอยู่กับวิธีการปล่อยแบทช์เข้าสู่การผลิต เราจะได้รอบเวลาที่แตกต่างกัน การเคลื่อนย้ายผลิตภัณฑ์ในการผลิตมีสามวิธี: ตามลำดับ ขนาน และผสม (อนุกรม-ขนาน)


ฉัน- ที่ ตามลำดับเมื่อชิ้นส่วนเคลื่อนที่ การดำเนินการแต่ละครั้งจะเริ่มต้นหลังจากที่ชิ้นส่วนก่อนหน้าเสร็จสิ้นแล้วเท่านั้น ระยะเวลาของวงจรสำหรับการเคลื่อนที่ตามลำดับของชิ้นส่วนจะเท่ากับ:

ที่ไหน n – จำนวนชิ้นส่วนของชุดที่กำลังดำเนินการ

เสื้อชิ้นฉัน- อัตราชิ้นของเวลาในการดำเนินการ

ซี ฉัน– จำนวนงานต่อ ฉันการดำเนินงาน;

– จำนวนการดำเนินการตามกระบวนการทางเทคโนโลยี

มอบชุดผลิตภัณฑ์จำนวน 5 ชิ้น แบตช์จะถูกส่งผ่านตามลำดับผ่านการดำเนินการ 4 ครั้ง ระยะเวลาของการดำเนินการครั้งแรกคือ 10 นาที ครั้งที่สองคือ 20 นาที ที่สามคือ 10 นาที ครั้งที่สี่คือ 30 นาที (รูปที่ 1)

รูปที่ 1

วงจร = สุดท้าย = 5·(10+20+10+30) = 350 นาที

วิธีการเรียงลำดับชิ้นส่วนที่เคลื่อนไหวมีข้อดีที่ทำให้มั่นใจได้ถึงการทำงานของอุปกรณ์โดยไม่ต้องหยุดทำงาน แต่ข้อเสียคือระยะเวลาของวงจรการผลิตในกรณีนี้จะยาวที่สุด นอกจากนี้ ยังมีการสร้างสต็อกชิ้นส่วนจำนวนมากที่ไซต์งาน ซึ่งต้องใช้พื้นที่การผลิตเพิ่มเติม

ครั้งที่สอง- ที่ ขนานในระหว่างการเคลื่อนย้ายแบทช์ แต่ละชิ้นส่วนจะไม่ถูกกักไว้ที่สถานีงาน แต่จะถูกถ่ายโอนทีละรายการไปยังการปฏิบัติงานถัดไปทันที โดยไม่ต้องรอให้การประมวลผลของทั้งแบทช์เสร็จสิ้น ดังนั้น ด้วยการเคลื่อนที่แบบขนานของชิ้นส่วนชุดหนึ่ง ในสถานที่ทำงานแต่ละแห่ง การดำเนินการต่างๆ จะดำเนินการพร้อมกันในส่วนต่างๆ ของชุดเดียวกัน

เวลาการประมวลผลของแบทช์ที่มีการเคลื่อนย้ายผลิตภัณฑ์แบบขนานจะลดลงอย่างรวดเร็ว:

ดล .

ที่ไหน ไม่– จำนวนชิ้นส่วนใน ชุดโอน(ชุดการขนส่ง) เช่น จำนวนผลิตภัณฑ์ที่ถูกถ่ายโอนจากการดำเนินการหนึ่งไปยังอีกที่หนึ่งพร้อมกัน

ความยาว – รอบการทำงานที่ยาวที่สุด

เมื่อเปิดตัวผลิตภัณฑ์เป็นชุดพร้อมกัน ชิ้นส่วนของทั้งชุดจะได้รับการประมวลผลอย่างต่อเนื่องเฉพาะในสถานที่ทำงานที่การปฏิบัติงานระยะยาวเป็นไปตามระยะเวลาสั้นๆ เท่านั้น ในกรณีที่การดำเนินการระยะสั้นตามมาด้วยการดำเนินการที่ยาวนาน เช่น อีกต่อไป (ในตัวอย่างของเรา การดำเนินการครั้งที่สาม) การดำเนินการเหล่านี้จะดำเนินการไม่ต่อเนื่อง เช่น อุปกรณ์ไม่ได้ใช้งาน ที่นี่ ไม่สามารถประมวลผลชุดชิ้นส่วนได้ทันทีโดยไม่มีความล่าช้า เนื่องจากการดำเนินการก่อนหน้า (ที่ยาวนาน) ไม่อนุญาตให้ทำเช่นนี้

ในตัวอย่างของเรา: n= 5, ที 1 = 10; ที 2 = 20; ที 3 = 10; ที 4 = 30; กับ= 1.

ไอน้ำ = 1·(10+20+10+30)+(5-1)·30=70+120 = 190 นาที

ลองพิจารณาแผนภาพการเคลื่อนที่แบบขนานของชิ้นส่วน (รูปที่ 2):

รูปที่ 2

III- เพื่อลดการหยุดชะงักในการประมวลผลแต่ละส่วนของชุดงานในการดำเนินการทั้งหมด ให้ใช้ ขนาน-อนุกรมหรือ ผสมวิธีการเปิดตัวซึ่งชิ้นส่วน (หลังการประมวลผล) จะถูกถ่ายโอนไปยังการดำเนินการถัดไปทีละรายการ หรือในรูปแบบของชุด "การขนส่ง" (หลายชิ้น) ในลักษณะที่การดำเนินการจะไม่หยุดชะงักในสถานที่ทำงานใดๆ ในวิธีผสม ความต่อเนื่องของการประมวลผลจะถูกดึงมาจากวิธีตามลำดับ และการเปลี่ยนชิ้นส่วนจากการดำเนินการไปสู่การดำเนินการทันทีหลังจากการประมวลผลถูกนำมาจากวิธีคู่ขนาน ด้วยวิธีการเปิดตัวสู่การผลิตแบบผสมผสาน ระยะเวลาของวงจรจะถูกกำหนดโดยสูตร

แกนกลาง .

คอร์อยู่ไหน – วงจรการทำงานที่สั้นที่สุด (จากการทำงานแต่ละคู่ที่อยู่ติดกัน)

-1จำนวนชุดค่าผสม

หากการดำเนินการที่ตามมานั้นนานกว่าการดำเนินการก่อนหน้าหรือเท่ากัน การดำเนินการนี้จะเริ่มต้นทีละรายการทันทีหลังจากประมวลผลส่วนแรกในการดำเนินการก่อนหน้า ในทางกลับกัน หากการดำเนินการครั้งต่อไปสั้นกว่าครั้งก่อน การหยุดชะงักจะเกิดขึ้นที่นี่ระหว่างการโอนชิ้นงาน เพื่อป้องกันไม่ให้เกิดความจำเป็นต้องสะสมสำรองการขนส่งในปริมาณที่เพียงพอเพื่อให้แน่ใจว่าการทำงานในการดำเนินการครั้งต่อไป ในการค้นหาจุดนี้บนกราฟในทางปฏิบัติ จำเป็นต้องถ่ายโอนส่วนสุดท้ายของแบทช์และย้ายระยะเวลาของการดำเนินการไปทางขวา เวลาในการประมวลผลสำหรับส่วนอื่นๆ ทั้งหมดในแบทช์จะถูกพล็อตไว้ทางด้านซ้ายบนกราฟ จุดเริ่มต้นของการประมวลผลส่วนแรกบ่งบอกถึงช่วงเวลาที่ต้องโอนงานค้างในการขนส่งจากการดำเนินการก่อนหน้าไปยังการดำเนินการนี้

หากการดำเนินการที่อยู่ติดกันมีระยะเวลาเท่ากัน จะมีเพียงการดำเนินการเดียวเท่านั้นที่ถือว่าสั้นหรือยาว (รูปที่ 3)

รูปที่ 3

คู่สุดท้าย = 5·(10+20+10+30)-(5-1)·(10+10+10) = 350-120 = 230 นาที

วิธีหลักในการลดรอบเวลาการผลิตคือ:

1) การลดความเข้มข้นของแรงงานของผลิตภัณฑ์การผลิตโดยการปรับปรุงความสามารถในการผลิตของการออกแบบที่ผลิตขึ้น การใช้คอมพิวเตอร์ และการแนะนำกระบวนการทางเทคโนโลยีขั้นสูง

2) การจัดกระบวนการแรงงานอย่างมีเหตุผล การจัดและการบำรุงรักษาสถานที่ทำงานโดยอาศัยความเชี่ยวชาญและความร่วมมือ การใช้เครื่องจักรที่กว้างขวาง และระบบอัตโนมัติของการผลิต

3) ลดการหยุดพักในที่ทำงานทั้งที่วางแผนไว้และไม่ได้วางแผนไว้โดยอาศัยการใช้หลักการทางวิทยาศาสตร์ของกระบวนการผลิตอย่างมีเหตุผล

4) การเร่งปฏิกิริยาอันเป็นผลมาจากการเพิ่มความดัน อุณหภูมิ การเปลี่ยนไปสู่กระบวนการต่อเนื่อง เป็นต้น

5) ปรับปรุงกระบวนการขนส่ง การจัดเก็บ และการควบคุม และรวมเข้ากับกระบวนการแปรรูปและประกอบให้ทันเวลา

การลดระยะเวลาของวงจรการผลิตถือเป็นภารกิจสำคัญอย่างหนึ่งในการจัดการการผลิตเพราะว่า ส่งผลต่อการหมุนเวียนของเงินทุนหมุนเวียน, ลดต้นทุนค่าแรง, ลดพื้นที่จัดเก็บ, ความจำเป็นในการขนส่ง เป็นต้น

งาน

1 กำหนดระยะเวลาของรอบการประมวลผลของชิ้นส่วน 50 ชิ้นพร้อมประเภทการเคลื่อนที่ตามลำดับ ขนาน และอนุกรม-ขนานในกระบวนการผลิต กระบวนการประมวลผลชิ้นส่วนประกอบด้วยการดำเนินการห้าครั้งซึ่งมีระยะเวลาขั้นต่ำตามลำดับ: ที 1 =2; ที 2 =3; ที 3 =4; ที 4 =1; ที 5 = 3 การดำเนินการครั้งที่สองจะดำเนินการในเครื่องสองเครื่อง และดำเนินการแต่ละเครื่องในเครื่องเดียว ขนาดล็อตโอนมี 4 ชิ้น

2 กำหนดระยะเวลาของรอบการประมวลผลของชิ้นส่วน 50 ชิ้นพร้อมประเภทการเคลื่อนที่ตามลำดับ ขนาน และอนุกรม-ขนานในกระบวนการผลิต กระบวนการประมวลผลชิ้นส่วนประกอบด้วยการดำเนินการสี่ประการซึ่งมีระยะเวลาขั้นต่ำตามลำดับ: ที 1 =1; ที 2 =4; ที 3 =2; ที 4 = 6 การดำเนินการที่สี่จะดำเนินการในเครื่องสองเครื่องและอีกเครื่องหนึ่งดำเนินการในเครื่องเดียว ขนาดล็อตโอน 5 ชิ้น

3 ชุดชิ้นส่วน 200 ชิ้นได้รับการประมวลผลโดยมีการเคลื่อนตามลำดับแบบขนานในระหว่างกระบวนการผลิต กระบวนการแปรรูปชิ้นส่วนประกอบด้วยการดำเนินการหกครั้ง โดยมีระยะเวลาขั้นต่ำตามลำดับ: ที 1 =8; ที 2 =3; ที 3 =27; ที 4 =6; ที 5 =4; ที 6 =20. การดำเนินการที่สามจะดำเนินการในเครื่องสามเครื่อง การดำเนินการที่หกจะดำเนินการในสองเครื่อง และการดำเนินการที่เหลือแต่ละรายการในเครื่องเดียว กำหนดว่าระยะเวลาของรอบการประมวลผลสำหรับชุดชิ้นส่วนจะเปลี่ยนไปอย่างไร หากการเคลื่อนไหวในการผลิตเวอร์ชันขนานตามลำดับถูกแทนที่ด้วยการเคลื่อนไหวแบบขนาน ขนาดล็อตโอน 20 ชิ้น

4 ชุดชิ้นส่วนจำนวน 300 ชิ้นได้รับการประมวลผลโดยมีการเคลื่อนตามลำดับแบบขนานในระหว่างกระบวนการผลิต กระบวนการประมวลผลชิ้นส่วนประกอบด้วยการดำเนินการเจ็ดครั้งซึ่งมีระยะเวลาตามลำดับขั้นต่ำ: ที 1 =4; ที 2 =5; ที 3 =7; ที 4 =3; ที 5 =4; ที 6 =5; ที 7 = 6 การดำเนินการแต่ละครั้งจะดำเนินการในเครื่องเดียว ล็อตการโอน – 30 ชิ้น จากการปรับปรุงเทคโนโลยีการผลิตระยะเวลาของการดำเนินการครั้งที่สามลดลง 3 นาทีครั้งที่เจ็ด - 2 นาที พิจารณาว่ารอบการประมวลผลของชุดชิ้นส่วนเปลี่ยนแปลงไปอย่างไร

5 ให้ชุดช่องว่างประกอบด้วย 5 ชิ้น ชุดต้องผ่านการปฏิบัติการ 4 ครั้ง: ระยะเวลาของครั้งแรกคือ 10 นาที, ครั้งที่สองคือ 20 นาที, ที่สามคือ 10 นาที, ที่สี่คือ 30 นาที กำหนดระยะเวลาของวงจรโดยวิธีการวิเคราะห์และกราฟิกพร้อมการเคลื่อนไหวตามลำดับ

6 ให้ชุดช่องว่างประกอบด้วยสี่ชิ้น ชุดต้องผ่านการปฏิบัติการ 4 ครั้ง: ระยะเวลาของครั้งแรกคือ 5 นาที, ครั้งที่สองคือ 10 นาที, ที่สามคือ 5 นาที, ที่สี่คือ 15 นาที กำหนดระยะเวลาของวงจรโดยวิธีการวิเคราะห์และกราฟิกที่มีการเคลื่อนที่แบบขนาน

7 ให้ชุดช่องว่างประกอบด้วย 5 ชิ้น ชุดต้องผ่านการปฏิบัติการ 4 ครั้ง: ระยะเวลาของครั้งแรกคือ 10 นาที, ครั้งที่สองคือ 20 นาที, ที่สามคือ 10 นาที, ที่สี่คือ 30 นาที กำหนดระยะเวลาของวงจรโดยวิธีการวิเคราะห์และกราฟิกสำหรับการเคลื่อนที่แบบอนุกรม-ขนาน

8 กำหนดระยะเวลาของวงจรเทคโนโลยีในการประมวลผลชุดผลิตภัณฑ์จำนวน 180 ชิ้น ด้วยการเคลื่อนไหวแบบขนานและต่อเนื่อง สร้างกราฟกระบวนการประมวลผล ขนาดของล็อตโอนคือ 30 ชิ้น มาตรฐานเวลาและจำนวนงานในการดำเนินงานมีดังนี้




สูงสุด