บทที่ 17 Dependable system specification Dependable
หมายถึงการที่เราพัฒนาหรือ software มาใช้งานแล้ว เราจะเอาธุรกิจของเราไปฝากไว้กับ software ตัวนี้ได้มากน้อยแค่ไหน หรือว่า software ตัวนี้มีความน่าเชื่อถือมากน้อยแค่ไหน ซึ่งจะประกอบด้วย
-
Availability คือ software มีความพร้อมใช้งานได้ตลอดเวลาหรือเปล่า
-
Reliability คือ software จะมีความน่าเชื่อถือได้มากน้อยแค่ไหน
-
Safety คือ software มีความปลอดภัยมากน้อยแค่ไหน
-
Security คือ software นั้นมีการรักษาความปลอดภัยได้ดีแค่ไหน มีการจัดการสิทธิในการใช้งานดีหรือเปล่า

System reliability specification จะแบ่งออกเป็น
-
Hardware reliability คือโอกาสที่ hardware จะล้มเหลว และเมื่อล้มเหลวแล้วจะใช้เวลาเท่าไรจึงจะกลับมาใช้งานใหม่ได้อีก
-
Software reliability คือโอกาสที่ software จะล้มเหลวและให้ข้อมูลที่ผิดพลาดออกมา ซึ่งจะต่างกับ Hardware เพราะว่าเวลาที่ Hardware ล้มเหลวจะหยุดทำงาน แต่ของ Software บางทีอาจจะไม่หยุดทำงาน แต่จะให้ข้อมูลที่ผิดพลาดออกมา
-
Operator reliability คือโอกาสที่ผู้ใช้งานในระบบจะทำผิดพลาดมีมากน้อยแค่ไหน เช่น ปุ่มที่ไม่เกี่ยวข้องกับการทำงานควรจะไม่สามารถกดได้

การวัดโอกาสที่จะเกิดความผิพลาด
เราจะวัดจากความเป็นไปได้ ( Probabilities ) ที่ระบบจะล้มเหลว แต่ว่าในระบบหนึ่งๆจะแบ่งออกเป็นระบบย่อยๆ เราจึงต้องวัดโอกาสที่จะเกิดความล้มเหลว ของแต่ละระบบย่อย แล้วเอามารวมกันเป็นโอกาสความล้มเหลวของระบบใหญ่ ตย.เช่น (slide4) มีระบบย่อย 2 ระบบคือ A กับ B โอกาสความล้มเหลวของระบบ A และ B จะเขียนเป็น P(A) และ P(B) และโอกาสของความล้มเหลวของระบบใหญ่คือ P(S) = P(A) + P(B)

หรือในอีกกรณีหนึ่งคือถ้าระบบย่อยถูกสร้างขึ้นมาบนพื้นฐานเดียวกันต่างกันก็เพียงข้อมูลเท่านั้นเอง เพราะฉะนั้นโอกาสความผิดพลาดของระบบใหญ่คือ P(S) = P(A)n โดยที่ n คือจำนวนของระบบย่อยที่มีโครงสร้างเหมือนกัน หรือในบางกรณีอาจจะเกิดเป็นแบบ P(S) = P(A) + P(B)3 + P(C) ก็ได้

Functional reliability requirement ( ความต้องการของความน่าเชื่อถือของ Software )
-
เช็คช่วงของข้อมูลที่ user ใส่เข้ามาว่ามีช่วงไหนบ้างที่ทำให้เกิดความล้มเหลวได้ หรือ ช่วงไหนที่ยอมรับได้
-
ทุกครั้งที่ระบบเริ่มการทำงานครั้งแรกจะมีการตรวจสอบว่ามี error บน Hard disk บ้างหรือเปล่า

Non – functional reliability specification ( ข้อกำหนดด้านความน่าเชื่อถือของ software )
-
ควรจะเป็นตัวเลขที่สามารถวัดผลได้ เช่น จะไม่ยอมให้ความผิดพลาดมากกว่า 3 ครั้งใน 1000 บรรทัด
-
มักจะทำเป็น reliability metric ก็คือตารางระบุว่าความผิดพลาดแบบไหนยอมรับได้มากน้อยแค่ไหน

Reliability metric
- เป็นหน่วยในการวัดความน่าเชื่อถือของระบบ
-
จะวัดจากจำนวนความล้มเหลวว่าเกิดขึ้นกี่ครั้งเมื่อเทียบกับความต้องการที่จะใช้ระบบ หรือเทียบกับระยะเวลาที่ระบบถูกใช้งาน

ตัวอย่างของ reliability metric ( จริงๆจะมีมากกว่านี้แต่จะแสดงเพียง 5 แบบ )
-
POFOD ( Probability of failure on demand ) คือโอกาสที่ระบบจะล้มเหลวเมื่อมีการเรียกใช้งานหรือก็คือไม่ทำงานเลยเมื่อมีการเรียกใช้ ตย.เช่นค่า POFOD = 0.001 จะหมายความว่าถ้าระบบถูกเรียกใช้ 1000 ครั้ง มันอาจจะล้มเหลวได้ไม่เกิน 1 ครั้ง
-
ROCOF ( Rate of failure occurrence ) คือความล้มเหลวที่เกิดขึ้นนั้นเกิดขึ้นบ่อยแค่ไหน เช่นค่าROCOF=2/100 จะหมายความว่า software นี้ระหว่างการทำงาน 100 ครั้ง จะล้มเหลวไม่เกิน 2 ครั้ง
-
MTTF ( Mean time to failure ) คืออัตราเฉลี่ยที่ระบบจะล้มเหลวเทียบกับจำนวนครั้งที่ใช้งาน เช่นค่าMTTF=500 จะหมายความว่าถ้าใช้งานที่ 500 ครั้งจะเกิดความล้มเหลวได้ 1 ครั้ง ค่า MTTF นี้ส่วนใหญ่จะใช้ระบุในอุปกรณ์ Hardware หรือ Software ที่มีขนาดใหญ่
-
AVAIL ( Availability ) คือความพร้อมที่ software จะให้บริการคิดเป็นเปอร์เซ็นต์กับระยะเวลาใช้งานทั้งหมด จะสำคัญมากสำหรับงานแบบ ASP ( Application service provider )
Note :
ASP คือการให้บริการเช่า Software ผ่านทางระบบเครือข่าย ถ้าระบบผู้ให้บริการล่มจะทำให้ลูกค้าที่เช่าใช้บริการล่มด้วย เกิดความเสียหายมากมาย ส่วนใหญ่ค่า MTTF กับ AVAIL จะใช้คู่กัน โดยที่ MTTF จะใช้กับ hardware แต่ AVAILจะใช้กับ software

ส่วนใหญ่จะมีระบุกันในสัญญาการเช่าใช้งานเลยว่า AVAIL=99.9% หมายความว่า ถ้าให้บริการ 100 ชม.จะเกิดโอกาสล้มเหลวได้เพียง 0.01% เท่านั้น

การจัดหมวดหมู่ความล้มเหลวของระบบ ( จากเบาสุดไปยังหนักสุด )
-
Transient คือความล้มเหลวที่เกิดขึ้นเฉพาะบางเหตุการณ์ ไม่ได้เกิดขึ้นเสมอไป แล้วไม่นานก็กลับมาใช้งานได้เหมือนเดิม
-
Permanent คือความล้มเหลวถาวร ทุก input ที่ใส่เข้ามาแล้วล้มเหลวหมด
-
Recoverable คือเมื่อเกิดความล้มเหลวแล้วสามารถกลับมาเริ่มใหม่ได้ โดยข้อมูลยังคงอยู่
-
Unrecoverable คือระบบล้มเหลวแล้วข้อมูลจะหายไป แต่ยังกลับมาเริ่มใหม่ได้
-
Non–corrupting คือเมื่อเกิดความล้มเหลวแล้วข้อมูลกับระบบยังไม่เสียหาย
-
Corrupting คือเป็นความเสียหายอย่างสิ้นเชิง ข้อมูลก็เสียหายด้วย

ส่วนใหญ่เราจะเปรียบเทียบเป็นคู่ๆไปคือ Transient กับ Permanent , Recoverable กับ Unrecoverable , Non-corrupting กับ Corrupting

ขั้นตอนในการกำหนด specification ของความน่าเชื่อถือของระบบ
ขั้นตอนไม่มีอะไรมากให้ข้ามไปดูตย.ข้างล่างเลย (slide11) จะเห็นได้ชัดเจนกว่า

จากตารางในส่วนซ้ายมือจะบอกถึงความรุนแรงของความล้มเหลวนั้นๆ ส่วนตรงกลางจะเป็นตย.ความรุนแรงที่เกิดขึ้น ส่วนขวาสุดคือค่า reliability metric ตารางนี้ควรจะมีในเอกสารกำหนด specification ของระบบด้วย

Reliability specification ต่างๆที่ได้กำหนดไว้แล้วนี้ ในความเป็นจริงอาจจะเป็นไปไม่ได้ที่จะวัดได้จริงๆ ( นอกจากว่าเคยเกิดขึ้นจริงแล้วจึงสามารถวัดได้ ) เพราะว่าโอกาสที่ความล้มเหลวจะเกิดขึ้นมามันต่ำมาก เช่น โอกาสล้มเหลว 1/1000 เราจะต้องให้ระบบทำงานถึง 1000 รอบจึงจะวัดโอกาสที่จะล้มเหลวได้ มันจึงไม่คุ้มค่ากับเวลาและงบประมาณที่จะต้องใช้ หรือในบางกรณีอาจจะเป็นไปไม่ได้เลยที่จะทำการทดสอบเลยก็ได้

ส่วนที่เหลือจะเป็นเรื่องการวิเคราะห์ภัย ( Hazard ) ที่เกิดขึ้นกับระบบและการวิเคราะห์ความเสี่ยง ( Risk ) ของระบบ ซึ่งจะไม่ค่อยสำคัญ สามารถอ่านทำความเข้าใจเองได้ อาจารย์จึงข้ามไปบทที่ 18 เลย

 

บรรยายเมื่อ 25กพ. 2545 เทอม 2/44

 

ฺBack Lesson 16 Lesson 17 Lesson 18 Lesson 20 Lesson 29 Index Mores