วันพุธที่ 28 สิงหาคม พ.ศ. 2556


บทที่ 7 คุณภาพของซอฟต์แวร์ 

 คุณภาพของซอฟต์แวร์และความสำคัญ


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

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

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

อย่างไรก็ดี คุณภาพของ Software ตามหลักเกณฑ์(ที่ได้เรียนมา)ประกอบไปด้วย

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

2. คุณภาพด้านประสิทธิภาพ หรือ Efficiency ได้แก่ ไม่กิน CPU-time, ใช้ Memory น้อย, ใช้พื้นที่ใน Disk น้อย, ใช้ Network Bandwidth น้อย, สรุปคือใช้ Resource ให้น้อยที่สุดเท่าที่จะทำได้ ซึ่งข้อนี้เด็กจบใหม่มักจะขาดหายไปหรือลืมนึกไปเสมอๆ เวลาเราคิด Argorithm ขึ้นมาอย่าพึ่งรีบใช้ ให้ลองคิดดูดีๆเสียก่อนว่ายังมี Argorithm อื่นอีกหรือเปล่าที่สามารถทำงานได้เร็วกว่านี้ ใช้ Memory น้อยกว่านี้ ซึ่งตามปกติแล้วการแก้ไขปัญหาใดๆ มันจะมีวิธีแก้ไขมากกว่า 1 วิธีเสมอ ไม่จำเป็นต้องคิดจนครบ แต่ลองคิดให้ได้มากกว่า 1 วิธี ก็จะทำให้เรามีทางเลือกมากขึ้น

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

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

5. คุณภาพด้านการนำมาใช้ใหม่ หรือ Resusability คือ ระบบที่พัฒนาขึ้นมาควรที่จะสามารถนำไปติดตั้งที่ระบบอื่นหรือสภาพแวดล้อมอื่นได้ง่าย โดยแก้ไขเล็กน้อยหรือไม่ต้องแก้ไขเลย เช่น Web Application ที่พัฒนาขึ้นควรที่จะสามารถติดตั้งได้ทั้งบน Tomcat หรือ WebLogic ก็ได้

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

 ความหมายและความสำคัญของซอฟแวร์
ความหมายของซอฟต์แวร์

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

          การที่เราเห็นคอมพิวเตอร์ทำงานให้กับเราได้อย่างหลากหลาย เพราะมีซอฟต์แวร์ต่างๆ ช่วยสนับสนุนการทำงานเหล่านั้น เช่น ร้านค้าอาจใช้คอมพิวเตอร์ในการจัดทำบัญชีที่ยุ่งยากซับซ้อน บริษัทขายตั๋วเครื่องบินใช้คอมพิวเตอร์ช่วยในระบบการจองตั๋ว ธนาคารใช้คอมพิวเตอร์ช่วยในการจัดการข้อมูลต่างๆ ที่มีอยู่มากมาย ครูและนักเรียนใช้คอมพิวเตอร์ช่วยในการจัดพิมพ์เอกสาร ดังนั้น ซอฟต์แวร์จึงหมายรวมถึง โปรแกรมคอมพิวเตอร์ทุกประเภทที่ทำให้คอมพิวเตอร์ทำงานได้
 
การจัดการคุณภาพของซอฟต์แวร
การกำหนดมาตรฐานคุณภาพ
software
CMM & CMMI
CMM (Capability Maturity Model)
แบบจำลองวุฒิภาวะความสามารถ มีชืื่อเรียกอีกอย่างหนึ่งว่า
SW-CMM
กำเนิดจาก Software Engineering Institute
(SEI) ของมหาวิทยาลัยคาร์เนกี เมลลอน (Carnegie
Mellon University)
เป็ นมาตรฐานที่กำหนดขึ้นเพื่อวัดความเชื่อมั่นและคุณภาพของ
กระบวนการพัฒนาซอฟต์แวร์ของบริษัทพัฒนาซอฟต์แวร์
CMM
ได้รวมเอาข้อดีของมาตรฐาน TQM
(Total Quality Management)
มาปรับใช้กับการพัฒนาซอฟต์แวร์
โมเดลที่ใช้วัดความเชื่อมั่น และคุณภาพของกระบวนการพัฒนาซอฟต์แวร์
ของบริษัทพัฒนาซอฟต์แวร์กันในปัจจุบัน
บริษัทที่สอบผ่าน จะมีชื่ออยู่ใน
http://www.sei.cmu.edu
ประโยชน์ของ CMM
การทำางานเป็ นระบบมากขึ้น ทุกขั้นตอนต้องการจดบันทึกรายละเอียด
ระหว่างการทำงานไว้เป็นเอกสาร หรือมีหลักฐานการทำงานที่ตรวจสอบได้
โดยง่าย
เมื่อการทำงานเป็นระบบโอกาสที่จะประสบผลสำเร็จในการทำงานก็มาก
ขึ้น เป็นการสร้างชื่อเสียงให้หน่วยงานได้ และสร้างโอกาสในการรับงาน
จากลูกค้าเพิ่มขึ้นด้วย
การทำงานของหน่วยงานจะมีวัฒนธรรมการทำงานที่เป็นแบบเดียวกัน
 
การประกันคุณภาพ
 
การประกันคุณภาพซอฟต์แวร์ ( Quality Assurance - The Series)

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

เมื่อเร็วๆนี้ได้มีโอกาสหยิบคู่มือเล่มหนึ่งที่เขียนเกี่ยวกับ QA ล้วนๆ มาค่อยๆอ่าน (ต้องค่อยๆอ่านจริงๆ เพราะภาษาอังกฤษไม่ค่อยแข็งแรง เป็น guide book ของ Quality Assurance Institute ที่ใช้สำหรับการสอบ CSQA certification หากใครสนใจลองเข้าไปดูได้ใน website www.softwarecertifications.org) ก็ค่อยๆ ไขความเข้าใจให้กระจ่างที่ละเล็กละน้อย เลยอยากเอาความเข้าใจที่ได้ มาแบ่งปันให้กับเพื่อนๆ พี่ๆ น้องๆ โดยตั้งใจว่าจะค่อยๆ เขียนไปเรื่อยๆ ปูพื้นกันตั้งแต่แนวคิดไปเลย โดยจะพยายามปะติดปะต่อแต่ละหัวข้อที่คิดว่าน่าสนใจให้ต่อเนื่องกันไป ถ้ามีแรงมากก็จะเขียนจนจบเล่ม ชอบหรือไม่ชอบ เห็นด้วยหรือไม่เห็นด้วยอย่างไรคอมเมนต์กันเข้ามาเลย
 
มุมมองทางด้านคุณภาพ (Quality Views)

คำว่า "คุณภาพ" ในนิยามและจินตนาการของแต่ละคนย่อมมีความแตกต่างกัน ในอุตสากรรมซอฟต์แวร์ก็เช่นกัน หลายๆคนที่ทำโปรเจกต์ในการพัฒนาซอฟต์แวร์ คงเคยเจอกับปัญหาที่ทำเท่าไหร่ลูกค้าก็ไม่พอใจ หรือเขียนโปรแกรมกันมาเป็นย่างดี ถูกต้องตาม requirement และ program specification ทุกอย่าง ทดสอบมาอย่างดี แทบไม่มี bug เรียกว่าของเราคุณภาพเจ๋งจริง proud to deliver and present to customer แต่ว่าทำไม "ลูกค้าไม่พอใจ" และ "ไม่ตรวจรับ" บทความตอนนี้จะชี้ให้เห็นถึงมุมมองที่แตกต่างกันและช่องว่างที่เกิดขึ้นระหว่างผู้ผลิตและลูกค้า เพื่อสร้างความเข้าใจที่ตรงกันและการยอมรับถึงความแตกต่างนั้น ส่วนจะทำอย่างไรเพื่อลดช่องว่างนั้น ติดตามได้ในตอนต่อๆไป 
อ่านต่อ 
 
 

QA (Quality Assurance) กับ QC (Quality Control) ต่างกันอย่างไร?

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

คุณลักษณะของคุณภาพ (Quality Attributes)

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

ก่อนอื่นขอทำความเข้าใจก่อนว่า แผนคุณภาพที่จะนำมาพูดถึงวันนี้ หลายๆ องค์กรมีการจัดทำอยู่แล้ว เพียงแต่ว่าอาจจะมีชื่อเรียกแตกต่างกันไป เช่น Process Control Plan, Control Plan, Process Flow Chart, QC Flow Chart เป็นต้น เหตุที่ต้องย้ำอีกครั้งก็คือ ถ้ามีอยู่แล้วก็ใช้ตัวนั้นแหละอธิบายถึง Quality Plan ในความหมายของ ISO9001 ไม่ต้องทำขึ้นมาใหม่หรอกนะครับ
Quality Plan จะมีพูดถึงอยู่ในข้อกำหนด ISO9001:2000 ข้อ 7.1 หมายเหตุ 1 ดังนั้น จึงมีการขวนขวายทำ Quality Plan กัน แต่ถ้าถามว่าจำเป็นต้องทำในรูป Flow Chart ที่เราคุ้นเคยมั๊ย ผู้เขียนคิดว่าไม่จำเป็นหรอกครับ ข้อกำหนดเขาไม่ได้ระบุไว้ เพียงแต่การใช้ Flow Chart เข้าช่วยอธิบาย จะทำให้เห็นภาพ และลำดับขั้นตอน รวมถึงรายละเอียดต่างๆ ชัดเจน
โดยสรุปแล้ว ในความหมายของผู้เขียนเอง แผนคุณภาพก็คือ แผนที่อธิบายให้เห็นว่า คุณภาพมาได้อย่างไรจากกระบวนการหนึ่งๆ
กระบวนการ / ขั้นตอนใดบ้างที่ควรเขียนเป็นแผนคุณภาพ
จริงๆ แล้วข้อกำหนดในเรื่อง Product Realization ทุกข้อ ควรจัดทำเป็นแผนคุณภาพไว้ แต่ส่วนใหญ่จะนิยมทำเฉพาะในส่วนที่เป็นการผลิตจริงๆ คือมีแผนคุณภาพของแต่ละ Product แต่ละ Part ซึ่งก็โอเคแล้วครับ ลูกค้าส่วนใหญ่ก็จะชอบขอดู ทำไว้ทุก Part เถอะครับ ไม่เสียหลาย แสดงให้เห็นวิธีการควบคุม แต่ละ Part ในทุกขั้นตอน โดยอาจจะเริ่มตั้งแต่การตรวจรับวัตถุดิบ, การทดลองผลิต, ขั้นตอนต่างๆของการผลิต, การตรวจสอบ, การส่งมอบ ทั้งนี้ก็ต้องขึ้นอยู่กับความเหมาะสมของแต่ละองค์กรด้วยครับ (อาจเริ่มตั้งแต่การวิจัยตลาด, การจัดซื้อวัตถุดิบเลยก็ได้ครับ)
ในที่นี้จะขอนำเสนอรูปแบบหนึ่งของการเขียนแผนคุณภาพแบบง่ายๆ ไม่ซับซ้อน ยังไงถ้าสนใจจะนำไปใช้ ก็ประยุกต์ให้เหมาะสมกับองค์กรอีกทีนะครับ

ก่อนอื่นเรามาทำความเข้าใจกับสัญลักษณ์ต่างๆ ในการเขียน Flow Chart ก่อนนะครับ เป็นหลักสากลนิยม แต่ถ้าไม่ได้ใช้ตามนี้ เขาก็คงไม่ว่าอะไรหรอกครับ
หัวข้อที่ควรต้องระบุ ในการเขียน Quality Plan
หัวข้อที่เราจะกำหนดไว้เป็นหัวเรื่องคอลัมภ์ ควรประกอบด้วย (อาจมากหรือน้อยกว่านี้ ตามความเหมาะสม)
- Flow Chart
อธิบายถึงลำดับขั้นตอนของกระบวนการต่างๆ โดยใช้สัญลักษณ์
-
ชื่อกระบวนการ / ขั้นตอนการดำเนินงาน อธิบายถึงลำดับขั้นตอนของกระบวนการต่างๆ
-
เกณฑ์ที่ใช้ควบคุม (Criteria) อธิบายค่าควบคุมต่างๆ ที่ใช้เป็นเกณฑ์ในการควบคุมกระบวนการหรือขั้นตอนนั้นๆ หรือเกณฑ์การยอมรับ เช่น อุณหภูมิ ระหว่าง 10 - 15 องศาเซลเซียส เป็นต้น
-
เครื่องจักร / อุปกรณ์ ที่ใช้ในกระบวนการหรือขั้นตอนนั้นๆ อธิบายชื่อเครื่องจักร และ/หรือหมายเลขเครื่องจักร เครื่องมือวัด รวมถึงอุปกรณ์ต่างๆ เกจ ทูล จิ๊ก เป็นต้น
-
ฝ่าย / แผนก / ผู้รับผิดชอบ ระบุชื่อฝ่าย / แผนก หรือ ผู้รับผิดชอบดำเนินการในขั้นตอนนั้นๆ
-
เอกสารที่เกี่ยวข้อง ระบุชื่อ หรือหมายเลขเอกสารที่เกี่ยวข้อง ในที่นี้แนะนำให้ระบุ Procedure ลงไป
รูปแบบการเขียนแผนคุณภาพ
หลักการ เรียงตามลำดับกระบวนการ / ขั้นตอน ตามลำดับก่อนหลังให้ถูกต้อง
กระบวนการ / ขั้นตอนการดำเนินงาน
เกณฑ์ที่ใช้ควบคุม
เครื่องจักร / อุปกรณ์
ฝ่าย / แผนก
เอกสารที่เกี่ยวข้อง
รับวัตถุดิบ
xxx
yyy
a
zzz
ตรวจรับวัตถุดิบ
xxx
yyy
b
zzz
ผลิต 1
xxx
yyy
c
zzz
ผลิต 2
xxx
yyy
d
zzz
ตรวจสอบ
xxx
yyy
e
zzz
จัดเก็บ
xxx
yyy
f
zzz
ส่งมอบ
xxx
yyy
g
zzz
ในรายละเอียดแต่ละขั้นตอนในตาราง ผมคงไม่ลงไว้ให้ แต่คิดว่าผู้อ่านคงจะลงรายละเอียดเองได้ แต่ละองค์กรก็จะแตกต่างกันไปครับ โดยเฉพาะในส่วนที่ให้ตัวอย่างเป็น ผลิต 1 ผลิต 2 โดยส่วนมากจะแยกออกไปได้อีกเยอะเลยครับ เป็นกระบวนการย่อยๆ แจกแจงลงไปให้ละเอียดไปเลย ให้มองเห็นที่มาของคุณภาพได้อย่างชัดเจน

คงพอจะมองออกแล้วใช่ไหมครับ ว่าแผนคุณภาพควรจะเขียนอย่างไร แผนคุณภาพที่ดี ก็คือ การใช้แผนที่อาจเป็นแค่กระดาษแผ่นสองแผ่น แต่สามารถอธิบายถึงที่มาของคำว่าคุณภาพได้อย่างชัดเจน
 
 การควบคุมคุณภาพ
         คุณภาพของซอฟแวร์ (Software Quality) หมายถึง ระดับที่ผลิตภัณฑ์ซอฟแวร์สามารถตอบสนองความต้องการของผู้ใช้ซอฟแวร์ได้ โดยจะต้องมีคุณลักษณะที่ซอฟแวร์ใดๆ ควรจะมี หากซอฟแวร์มีคุณสมบัติครบถ้วนตามเงื่อนไข ก็จะเรียกว่าเป็น ซอฟแวร์ที่มีคุณภาพ
         คุณลักษณะของซอฟแวร์ เป็นสิ่งที่ใช้กำหนดระดับคุณภาพของซอฟแวร์ โดยซอฟแวร์คุณภาพตามา
         การจัดการคุณภาพของซอฟแวร์ (Software Quality Management) คือ การระบุวิธีการกำหนดคุณลักษณะของซอฟแวร์ที่มีคุณภาพ วิธีการวัดคุณภาพ และปรับปรุงคุณภาพของกระบวนการพัฒนาซอฟแวร์ โดยมีต้นทุนของคุณภาพ ประกอบไปด้วย
         1. ต้นทุนการป้องกัน (Prevention Cost) เป็นค่าใช้จ่ายที่ใช้ป้องกันเพื่อไม่ให้เกิดความบกพร่องในการควบคุมคุณภาพ
         2. ต้นทุนในการประเมิน (Appraisal Cost) เป็นค่าใช้จ่ายที่เกิดจากการตรวจสอบ หรือวัดเพื่อประเมินคุณภาพซอฟแวร์
         3. ต้นทุนของความผิดพลาดภายใน (Internal Failure Cost) เป็นค่าใช้จ่ายที่เกิดจากการผิดพลาดทางการผลิต
         4. ต้นทุนของความผิดพลาดภายนอก (External Failure Cost) เป็นค่าใช้จ่ายที่เกิดจากความผิดพลาดหลังส่งมอบสินค้าให้กับลูกค้า เช่น บริการหลังการขาย
การพัฒนาระบบวิกฤติ
ซอฟแวร์ฟรีหนีวิกฤติแฮมเบอร์เกอร์
 คมชัดลึก - ภาวะเศรษฐกิจแบบนี้ ขืนควักเงินก้อนใหญ่ซื้อซอฟต์แวร์ลิขสิทธิ์ชุดละเป็นหมื่น โดยไม่รู้ว่าจะเหมาะสมกับองค์กรตัวเองหรือเปล่า คงมีแต่เจ๊ง ไม่มีเจ๊า ทางที่ดีลองหาพวกซอฟต์แวร์โอเพ่นซอร์ส หรือที่เรียกย่อๆ ว่า โอเอสเอส มาลองใช้ก่อนจะดีกว่า ถ้าถูกใจก็ใช้ไปเลย ไม่ต้องรีรอ
ดร.วิรัช ศรเลิศล้ำวาณิช ผู้ช่วยผู้อำนวยการศูนย์เทคโนโลยีอิเล็กทรอนิกส์และคอมพิวเตอร์แห่งชาติ (เนคเทค) มองว่า เจ้าซอฟต์แวร์คุณภาพแต่ไม่ต้องควักกระเป๋าจ่ายที่เรียกว่า "ซอฟต์แวร์โอเพ่นซอร์ส" พวกนี้ เป็นตัวช่วยในยุควิกฤติเศรษฐกิจ หรือจะพ้นวิกฤติไปแล้วก็ใช้ได้ตลอด ไม่มีใครหวง
 หลายคนมองว่า ซอฟต์แวร์โอเพ่นซอร์ส เหมาะกับธุรกิจขนาดเล็ก องค์กรขนาดย่อม แต่ ดร.วิรัชมีข้อมูลเด็ดมาบอกว่า องค์กรขนาดใหญ่เขาก็ใช้กัน เพราะฉะนั้นไม่ต้องไปห่วงว่าโปรแกรมจะใช้กับชาวบ้านชาวช่องไม่ได้
 “การ ไฟฟ้าฝ่ายผลิตแห่งประเทศไทย (กฟผ.) ก็เลือกใช้ซอฟต์แวร์โอเพ่นซอร์ส และสามารถประหยัดค่าใช้จ่ายไปกว่า 300 ล้านบาท และปัจจุบัน การไฟฟ้าฝ่ายภูมิภาค (กฟภ.) ก็เข้ามาปรึกษากับเนคเทคอยากใช้ซอฟต์แวร์โอเพ่นซอร์สบ้างเหมือนกันดร.วิรัชเผย
 เช่นเดียวกับ องค์กรขนาดใหญ่ด้านการสื่อสารอย่าง กสท โทรคมนาคม (แคท เทเลคอม) ทีทีแอนด์ที และศูนย์การศึกษานอกโรงเรียน (กศน.) ได้นำซอฟต์แวร์ เลิร์น สแควร์ ซึ่งเป็นโอเพ่นซอร์สด้านการเรียนผ่านระบบเครือข่ายอินเทอร์เน็ตที่เนคเท คพัฒนาขึ้นมาใช้งาน
 เหตุที่ทำให้องค์กรทั้งใหญ่น้อย หันมาสนใจซอฟต์แวร์โอเพ่นซอร์ส นอกจากความประหยัดแล้ว โอเพ่นซอร์สยังเป็นซอฟต์แวร์ที่สามารถดูแลได้ด้วยตนเอง ไม่ต้องจ้างบริษัทมาดูแลระบบ ทั้งยังสามารถปรับปรุง พัฒนาซอฟต์แวร์ได้ตลอดเวลา  
 ส่วนเทรนด์โอเพ่นซอร์สปี 2552 ดร.วิรัช ซึ่งสวมหมวกนายกสมาคมโอเพ่นซอร์สแห่งประเทศไทยอีกใบบอกว่า แนวโน้มที่จะเห็นได้ชัดคือ การนำโอเพ่นซอร์สไปใช้ในภาคการศึกษา ที่จะมีการเติบโตขึ้นอย่างต่อเนื่อง สำหรับการเรียนการสอนในปัจจุบัน ขณะที่การใช้งานในภาคธุรกิจนั้น ยังเติบโตแบบค่อยเป็นค่อยไป
 สิ่งที่ น่าจะเห็นในปี 2552 อีกอย่างคือ การรวมกลุ่มของผู้ใช้โอเพ่นซอร์ส ซึ่งจะเป็นการจัดตั้งชุมชนหรือคลับสำหรับโอเพ่นซอร์สตัวใดตัวหนึ่งโดยเฉพาะ ดร.วิรัชมองว่า กลุ่มดังกล่าวนี้จะเกิดจากการใช้งาน เช่น อาจจะเป็นผู้ดูแลระบบของบริษัทที่ทดลองใช้แล้วชอบ เกิดการชักชวนผู้ดูแลระบบของบริษัทอื่น หรือเพื่อนที่ใช้โอเพ่นซอร์สตัวนี้ มารวมตัวกัน และอาจจะทำให้เกิดการพัฒนาต่อยอดโอเพ่นซอร์สนั้นๆ ออกไปได้อีก จนเกิดเป็นโอเพ่นซอร์สของตนขึ้น
 แม้ปัจจุบันโอเพ่นซอร์สถูกพัฒนาและ เผยแพร่อย่างแพร่หลาย ไม่ว่าจะเป็น Fedora, Ubuntunclub, OpenSUSE, CentOS รวมถึงที่มักพบในไทยคือ จูมล่า (Joomla) และแมมโบ้ลายไทย (Mambo เวอร์ชั่นไทย) แต่กลับมีโอเพ่นซอร์สที่เป็นของไทยน้อยมาก
 “คนไทยยัง ไม่คุ้นกับการพัฒนาโอเพ่นซอร์ส ที่ต้องอาศัยการทำงานเป็นทีม ทำให้ทางเนคเทคพยายามที่จะปรับพฤติกรรมของนักพัฒนาโอเพ่นซอร์สไทย ด้วยการจัดแคมป์โค้ดเฟสดร.วิรัชอธิบาย
 โค้ดเฟส เป็นกิจกรรมการเขียนโปรแกรมมาราธอนที่เนคเทคและสมาคมโอเพ่นซอร์สแห่งประเทศ ไทยจัดขึ้นเพื่อเป็นการกระตุ้นให้นักพัฒนาโปรแกรมทั่วไปมีความสนใจการพัฒนา โปรแกรมโอเพ่นซอร์สมากขึ้น และทำให้ผู้เข้าร่วมกิจกรรมได้เรียนรู้ประสบการณ์การพัฒนาโปรแกรมที่ดี และสร้างความสัมพันธ์อันดีต่อกัน จนทำให้กลุ่มนักพัฒนาโปรแกรมโอเพ่นซอร์สของประเทศไทยมีจำนวนมากขึ้น เริ่มมีครั้งแรกในปี 2549 และจัดอย่างต่อเนื่องจนถึงปัจจุบันกว่า 6 ครั้งแล้ว
 ดร.วิรัชกล่าวว่า กิจกรรมดังกล่าว เป็นการส่งเสริมศักยภาพของนักพัฒนาโอเพ่นซอร์สไทย สร้างประสบการณ์การทำงานเป็นทีม แล้วยังได้เห็นของใหม่ ที่ไม่ใช่แค่โอเพ่นซอร์ส แต่มีการนำโอเพ่นซอร์สที่มีไปปรับใช้กับผลิตภัณฑ์ต่างๆ กลายเป็นนวัตกรรม เช่นที่ทำกันในการประกวดโครงการลีนุกซ์ฝังตัว (Embeded Linux Project Contest 2008)
 “นอกเหนือจากส่งเสริมการพัฒนาโอเพ่นซอร์สสัญชาติไทย การสร้างนวัตกรรมจากโอเพ่นซอร์สก็เป็นการเพิ่มมูลค่าได้ และเชื่อว่าในอนาคตจะมีผลิตภัณฑ์ที่ผสานกับซอฟต์แวร์โอเพ่นซอร์สออกมาวางขาย ในตลาดแน่นอนดร.วิรัชให้มุมมอง
 
กรณีศึกษา
 
บุคลากรด้านซอฟต์แวร์

          การวิเคราะห์ของแบรี่ บีม (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) ทำหน้าที่ตรวจสอบความสะดวก ในการใช้งานของซอฟต์แวร์ ซึ่งสามารถทำได้ตั้งแต่เริ่มต้นออกแบบซอฟต์แวร์ 

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

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

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

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


อ้างอิง

 

 


 


 

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

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