วันจันทร์ที่ 26 สิงหาคม พ.ศ. 2556

คุณภาพของซอฟต์แวร์ Software quality

คุณภาพของซอฟต์แวร์

คุณภาพของซอฟต์แวร์สามารถแบ่งประเภทได้เป็น 5 ประเภท คือ
1.คุณภาพด้านการใช้งาน หรือ Usability
2.คุณภาพด้านประสิทธิภาพ หรือ Efficiency
3.คุณภาพด้านความคงทน หรือ Reliability
4.คุณภาพด้านการบำรุงรักษา หรือ Maintainability
5.คุณภาพด้านการนำมาใช้ใหม่ หรือ Reusability
http://www.mollom.50webs.com/images/5dd04uu6.gif คุณลักษณะของซอฟต์แวร์ที่มีคุณภาพวัดจากผู้เกี่ยวข้อง 3 กลุ่ม คือ
1. ผู้ใช้ ซอฟต์แวร์ที่มีคุณภาพ คือ ซอฟต์แวร์ ที่สามารถทำงานตามที่ผู้ใช้ต้องการได้อย่างถูกต้อง ง่ายต่อการเรียนรู้และใช้งาน
2. ผู้บำรุงรักษาระดับ วัดคุณภาพจากการอัพเกรด และการเปลี่ยนแปลงระบบ
3. โปรแกรมเมอร์ ซึ่งมีหน้าที่ปรับเปลี่ยนระบบตามที่ลูกค้าต้องการ
   ผู้ใช้ทั้งสามกลุ่มมีความหวัง เหมือนกันว่า ระบบต้องมีความน่าเชื่อถือ และมีประสิทธิภาพ   ความน่าเชื่อถือวัดได้จากระดับความถูกต้องของผลลัพธ์จากการทำงานของระบบ ซอฟต์แวร์ ที่มีคุณภาพต้องมีระดับความถูกต้องอยู่ในเกณฑ์สูง  
http://www.mollom.50webs.com/images/5dd04uu6.gif ทีมงานในการพัฒนาระบบ
   
ผู้พัฒนาซอฟต์แวร์ทำหน้าที่สร้างระบบโดยทำงานเป็นทีมงานประกอบด้วยบุคคลต่างๆ  ที่มีความเชี่ยวชาญที่แตกต่างกัน ในขั้นตอนแรกของการพัฒนาต้องมีการพบปะพูดคุยกับลูกค้าและผู้ใช้ระบบ เพื่อวิเคราะห์และกำหนดระบบ โดยทำความเข้าใจถึงหน้าที่ทั้งหมดที่ระบบกระทำได้ เขียนเป็นเอกสารระบุความต้องการเพื่อใช้ในการอ้างอิงในการพัฒนาระบบในขั้นตอนต่อไป ผู้ที่ทำหน้าที่นี้เรียกว่านักวิเคราะห์ระบบ (analyst)
ต่อจากนั้นนักวิเคราะห์ระบบจะทำงานร่วมกับผู้ออกแบบระบบ (designers) เพื่อสร้างรายละเอียดในระดับย่อย ๆ ที่ระบบสามารถกระทำได้ ต่อจากนั้นผู้ออกแบบระบบจากทำงานร่วมกับโปรแกรมเมอร์ (programmers) เพื่อให้ผู้เขียนโปรแกรมสามารถเขียนคำสั่งโปรแกรมตามความต้องการได้อย่างถูกต้อง
หลังจากนั้นเป็นหน้าที่ของผู้ทดสอบระบบ (tester) ทำหน้าที่หาข้อผิดพลาดที่อาจเกิดขึ้นในโปรแกรม การทำงานของผู้ทดสอบระบบจะทำงานร่วมกับลูกค้าเพื่อพิสูจน์ว่าระบบสามารถทำงานตามที่ลูกค้าต้องการได้ เมื่อลูกค้ายอมรับจะมีการฝึกฝนการใช้โปรแกรมให้กับผู้ใช้ระบบ โดยผู้ฝึก (trainers) ถึงแม้จะมีการส่งมอบระบบให้ลูกค้าแล้ว ไม่ใช่ว่างานในการพัฒนาจะจบ  ถ้ามีข้อผิดพลาดเกิดขึ้นในระบบหรือความต้องการของระบบเปลี่ยนไป ทีมงานบำรุงรักษา (maintenance team) จะเป็นกลุ่มที่ทำหน้าที่รับผิดชอบแก้ไข ปรับปรุง เปลี่ยนแปลงตามความต้องการซึ่งอาจเป็นการแก้ไขการออกแบบ แก้ไขคำสั่งโปรแกรม มีการทดสอบระบบใหม่ และเมื่อมีการปรับเปลี่ยนเกิดขึ้นผู้ฝึกจะต้องสอนหน้าที่ใหม่ที่เพิ่มเติมขึ้นมาให้กับผู้ใช้ระบบเพื่อให้สามารถทำงานได้ตามปกติ
http://www.mollom.50webs.com/images/5dd04uu6.gif ประเภทของผู้ใช้ระบบ
แบ่งตามความรู้และประสบการณ์
1.  ผู้ใช้หน้าใหม่ด้อยประสบการณ์ (Novice User) ผู้ใช้กลุ่มนี้อาจเป็นผู้ที่มีความรู้น้อยมากในด้านคอมพิวเตอร์และระบบงาน  และยังอาจจะหวาดวิตกเกี่ยวกับการใช้คอมพิวเตอร์หรือการใช้ระบบงาน 
2.  ผู้ใช้ที่มีประสบการณ์และความรู้ระดับกลาง (Knowledgeable  intermittent  user) บางคนมีความรู้ดีในงานและวิธีการใช้คอมพิวเตอร์ แต่จำคำสั่งต่าง ๆ  ไม่ค่อยได้ เพราะไม่ได้ใช้บ่อยนัก 
3.  ผู้ใช้ที่ใช้งานประจำหรือผู้เชี่ยวชาญ (Frequent  User / Expert) ผู้ใช้กลุ่มนี้เป็นผู้ที่มีความรู้ความเข้าใจในระบบงานอย่างถ่องแท้  สิ่งที่ผู้ใช้กลุ่มนี้ต้องการคือ ความสามารถในการทำงาน  การประมวลผล และการตอบสนองกลับเป็นไปอย่างรวดเร็ว    
http://www.mollom.50webs.com/images/5dd04uu6.gif กระบวนการวิเคราะห์ความต้องการ
การบวนการวิเคราะห์ความต้องการมีขั้นตอนดังต่อไปนี้
  • เก็บรวบรวมข้อมูลที่เป็นข้อเท็จจริงต่าง ๆ (Data gathering)
  • วิเคราะห์เพื่อระบุถึงความต้องการต่าง ๆ (Requirement Identification)
  • คัดเลือกส่วนที่เป็นสาระสำคัญและอยู่ในขอบเขตการพัฒนา (Requirement selection)
  • จัดจำแนกและจัดโครงสร้างของความต้องการ (Requirement classification and structuring)
  • จัดลำดับความสำคัญและตกลงเจรจา (Prioritization and negotiation)
  • ตรวจสอบความถูกต้อง (Requirement validation)
  • จัดทำ Requirement specification
  การพัฒนาระบบจะทำการวิเคราะห์ความต้องการ  ผู้เกี่ยวข้อง  2 กลุ่ม  คือ  ลูกค้าและผู้พัฒนา
1. Requirement Definition Document  เป็นเอกสารที่เขียนสำหรับลูกค้า  โดยเขียนด้วยภาษาที่ลูกค้าเข้าใจง่าย  มีการอธิบายถึงปัญหาและสิ่งที่ลูกค้าต้องการ  เป็นภาพรวมของระบบใหม่ที่สามารถกระทำได้  กำหนดไว้ในเอกสารอย่างชัดเจน  เพื่อใช้เป็นหลักฐานแสดงข้อตกลงระหว่างลูกค้าและผู้พัฒนา
2. Requirement Specification Document เป็นเอกสารที่บรรยายคุณลักษณะของระบบทางด้านเทคนิค  เป็นเอกสารที่ใช้สำหรับนักออกแบบระบบ เพื่อให้สามารถเข้าใจระบบได้ง่าย
กรณีศึกษา
กรณีศึกษา

บุคลากรด้านซอฟต์แวร์

          การวิเคราะห์ของแบรี่ บีม (Barry Boehm ; ๑๙๘๘)  จากประสบการณ์เกี่ยวกับโครงการพัฒนาซอฟต์แวร์ต่างๆ มากว่ายี่สิบปี พบว่า คุณภาพของบุคลากร ที่พัฒนาซอฟต์แวร์ โดยเฉพาะคุณภาพของหัวหน้าโครงการที่รู้จักพิจารณาว่า เรื่องใดมีความสำคัญ หรือมีความเสี่ยงสูง แล้วทำสิ่งนั้นก่อน สามารถจะบ่งบอกถึงความสำเร็จของโครงการ และคุณภาพของซอฟต์แวร์ได้ ในขณะที่วิธีการพัฒนา หรือเครื่องมือที่ใช้จำเพาะแบบ ไม่สามารถรับประกันได้ว่า การใช้วิธีจำเพาะแบบนั้น จะส่งผลให้ซอฟต์แวร์มีคุณภาพเสมอ ผลการศึกษาของนายเคอร์ติส (B. Curtis : ๑๙๘๘และนายแอนดรู โนแลน (Andrew J. Nolan :๑๙๘๘ยืนยันได้ว่า ปัจจัยของความสำเร็จในการพัฒนาซอฟต์แวร์อยู่ที่การมีบุคคลที่มีคุณภาพในทีมงาน 

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

ทีมงานพัฒนาซอฟต์แวร์

อาจจะประกอบด้วยบุคลากรหลายตำแหน่ง ซึ่งมีหน้าที่และคุณสมบัติต่างๆ กัน ดังต่อไปนี้ 

ผู้บริหารอาวุโส (senior manager) เป็นผู้กำหนดสาระสำคัญของโครงการพัฒนาซอฟต์แวร์ 

หัวหน้าโครงการ (project manager) มีหน้าที่บริหารโครงการ จัดทีมงาน ประสานการทำงานแบบทีม ติดตามผลงาน ให้กำลังใจ เข้าใจปัญหาในการบริหารงาน ทั้งด้านบุคคล และเทคนิค ในการวิเคราะห์สถานการณ์ต่างๆ ลำดับความสำคัญของเรื่องที่จะต้องทำ และปรับแนวทางการดำเนินงาน ให้เหมาะสมกับสถานการณ์ได้ 

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

นักวิเคราะห์องค์ความรู้ (Knowledge engineer) มีหน้าที่สอบถาม และรวบรวมองค์ความรู้จากผู้เชี่ยวชาญในสาขาต่างๆ เพื่อให้ทราบถึงกฎเกณฑ์ (rule) ต่างๆ และวิธีวินิจฉัยปัญหาในสาขานั้นๆ องค์ความรู้นี้มักจำเป็นต้องมีในการพัฒนาซอฟต์แวร์ ที่จำลองการทำงานของผู้เชี่ยวชาญ (Expert system) หรือระบบช่วยตัดสินใจ (Decision support system) 

นักออกแบบระบบ (designer) มีหน้าที่วางแนวทาง รายละเอียดขั้นตอน และวิธีการทำงานซอฟต์แวร์ เพื่อให้สามารถทำงานได้ตามข้อกำหนด รวมถึงการออกแบบวิธีประสานงานระหว่างคนกับคอมพิวเตอร์ ออกแบบวิธีจัดระเบียบข้อมูลในฐานข้อมูล ออกแบบหน้าจอแนวทางนำเสนอข้อมูลที่เป็นรูป เสียง บทความ ภาพเคลื่อนไหว ฯลฯ 

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

นักเขียนโปรแกรม (Programmer) หรือโปรแกรมเมอร์ ทำหน้าที่เขียนซอฟต์แวร์ หรือชุดคำสั่ง ให้คอมพิวเตอร์ทำงานตามที่ได้ออกแบบไว้ 

นักทดสอบคุณภาพระบบ (tester) มีหน้าที่จัดทำกรณีทดสอบ เพื่อทดสอบ และประเมินคุณภาพของโปรแกรม ซึ่งรวมถึงความถูกต้อง ประสิทธิภาพ ฯลฯ ตามที่ระบุในข้อกำหนดของซอฟต์แวร์ 

ผู้ประเมินคุณภาพการใช้งานของระบบ (usability engineer) ทำหน้าที่ตรวจสอบความสะดวก ในการใช้งานของซอฟต์แวร์ ซึ่งสามารถทำได้ตั้งแต่เริ่มต้นออกแบบซอฟต์แวร์ 

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

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

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

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


ไม่มีความคิดเห็น:

แสดงความคิดเห็น