ผลกระทบระหว่างฟังก์ชั่นกับคุณภาพ

FunctionMechanismQA

ความสัมพันธ์ระหว่าง function, mechanism, quality attribute

  • คุณภาพของซอฟต์แวร์ไม่ได้หาจาก functional requirement แต่ได้จาก non-functional requirement และการจัดการ (ออกแบบ เขียนโปรแกรม ทดสอบ) ด้าน non-functional
  • ซอฟต์แวร์มีได้หลายฟังก์ชั่น ปกติและฟังก์ชั่นอาจต้องการคุณภาพด้านต่างๆ ที่แตกต่างกันไป
  • เช่นฟังก์ชั่นการบวกเลข 1 + 1 = 2 อาจต้องการคุณภาพด้าน performance, reliability

 

FunctionQuality2

 

ความสัมพันธ์ระหว่างคุณภาพกับฟังก์ชั่น

จากรูปด้านบน พบว่าฟังก์ชั่นที่ #3 มีความเสี่ยงที่สุด เพราะต้องการคุณภาพด้านต่างๆ สูงกว่าฟังก์ชั่นที่ #2 และ #1 การพัฒนาซอฟต์แวร์ปกติแต่ไหนแต่ไรมามักสนใจแต่ฟังก์ชั่น และมักมีกระบวนการพัฒนาแบบเป็นลำดับ แต่ในทางด้าน software architecture นั้น ให้ความสำคัญกับส่วนสำคัญและส่วนที่มีความเสี่ยงมากๆ ก่อน โดยไม่สนใจมากว่าเป็นฟังก์ชั่นอะไร ทำอะไร การจัดลำดับความสำคัญจึงเน้นไปที่ฟังก์ชั่นที่ #3 ก่อน

แนวทาง Function-Driven Development หรือแนวคิดด้านฟังก์ชั่นนั้น สนใจที่ output ว่าสอดคล้องกับ input ไหม ไม่ได้สนใจที่การทำงาน เช่น สมการ a + b = c หาก a=1, b=1 เราก็สนใจแค่ว่า a กับ b มันต้องบวกกัน ส่วน functional test ก็สนใจแค่ว่า c เท่ากับ 2 หรือไม่ คือ สนใจว่าถูกหรือผิด แค่นั้นเอง ไม่ได้สนใจว่า เร็วไหม? ปลอดภัยไหม? มีเสถียรภาพไหม? แต่ประเด็นเหล่านี้แนวทางแบบ Non-Functional สนใจ เพราะ Non-Functional สนใจวิธีการทำงาน ดังนั้น non-functional test จึงสนใจที่คุณภาพของการทำงาน ไม่ได้สนใจแค่ output เท่านั้น

หากฟังก์ชั่นสนใจคุณภาพ ต้องพึ่ง non-function (เรียกอีกอย่างว่ากลไกทางสถาปัตยกรรม: architectural mechanism) เพราะกลไกฯ เน้นการทำงานภายในระบบ เหมือนระบบหายใจ ระบบควบคุมการทรงตัว ระบบ ขับถ่าย ระบบย่อยอาหาร ระบบกล้ามเนื้อ ฯลฯ ในร่างกายของคนเราไง ถ้าอยากให้ฟังก์ชั่นมีคุณภาพ ต้องทำให้กลไกฯ มีคุณภาพก่อน เพราะกลไกฯ สนับสนุนการทำงานของฟังก์ชั่น

 

NFRtoMechanism

ความสัมพันธ์ระหว่าง quality scenario, architectural strategies, architectural mechanism

จากรูปด้านบน ในการทำงานเริ่มต้นจากความต้องการประเภท non-functional requirement ซึ่งอธิบายออกมาเป็น quality scenario (ในรูปคือกล่องสีฟ้า) จากนั้น architect ก็มาออกแบบ คิดโซลูชั่น เรียกว่า architectural strategy จากนั้นก็นำโซลูชั่นมาสร้างเป็นกลไก (architectural mechanism) ส่วนเส้นสีแดงคือเส้น traceability ทำให้ทราบว่าอะไรเกี่ยวกับอะไร ลำดับของ 3 ประเด็นนี้สำคัญมาก จะเห็นได้ว่ากลไกฯ จะออกมาดีหรือไม่ดีขึ้นกับโซลูชั่น ส่วนโซลูชั่นจะออกมาดีหรือไม่ดีก็ขึ้นกับความต้องการประเภท non-functional requirement ดังนั้น หากไม่เก็บความต้องการประเภทนี้ หรือเก็บไม่ดี หรือบริหารไม่ดี ก็จะส่งผลไปถึงกลไกฯ ซึ่งแน่นอนว่ากลไกฯ ก็จะทำงานไม่ดี ไม่มีคุณภาพอย่างที่ต้องการ แล้วก็จะส่งผลไปถึงฟังก์ชั่นนั่นเอง

Matrix_UC_Mechanism

จากตารางด้านบน คือตาราง traceability matrix ระหว่าง ฟังก์ชั่น (use case) กับ กลไกฯ ตัวอักษร H=High, M=Medium, L=Low ส่วนตัวเลขต่อท้ายเอาไว้อ้างอิงเพื่ออธิบายท้ายตาราง เช่น หากอ่านแนวตั้ง จะพบว่าฟังก์ชั่น View Product ต้องพึ่งกลไกฯ Exception Handling, Session Management, Logging, Object Pooling Management, Legacy Connector หากกลไกฯ ใดกลไกฯ หนึ่งมีปัญหาก็จะส่งผลต่อฟังก์ชั่น View Product ขณะที่ฟังก์ชั่น View Product ต้องพึ่งกลไกฯ Session Management กับ Object Pooling Management ที่ระดับ High ดังนั้นจึงต้องพัฒนา 2 กลไกฯ นี้ให้ดี อีกรูปแบบการอ่านคือ อ่านแนวนอน จะพบว่ากลไกฯ Logging สนับสนุนทุกฟังก์ชั่น แต่เป็นระดับ Low ทั้งสิ้น

ตาราง traceability matrix จึงสามารถใช้บริหารสมดุลระหว่างฟังก์ชั่น กลไกฯ และ คุณภาพ ได้ด้วย และ แน่นอนใช้บริหารผลกระทบ (impact) และ ความเสี่ยง (risk) ได้ดีมากเช่นกัน

 

Matrix_QA_QA

ตารางด้านบนเป็นการอธิบายผลสะท้อน (reflection) ระหว่างคุณภาพด้วยกันเอง ตัวเลขหมายถึงระดับผลกระทบ (1 – 5) เพราะการเปลี่ยนแปลงระดับคุณภาพตัวหนึ่งสามารถส่งผลบวกหรือลบต่อคุณภาพอื่นๆ ได้ เช่น หากระบบมี performance แย่ลงเรื่อยๆ ก็อาจส่งผลต่อระดับความพร้อม (availability) ในทางลบ ทำให้ระบบอาจล่มได้ เป็นต้น


Matrix_UC_QA

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

สรุป

หากอยากให้ฟังก์ชั่นมีคุณภาพ หรือ อยากให้ระบบมีคุณภาพ ก็ต้องเก็บ วิเคราะห์ และ บริหาร non-functional requirement และต้องออกแบบโซลูชั่นให้ดี จะได้สร้างกลไกฯ ที่ดี เพื่อสนับสนุนฟังก์ชั่น…นะคร้าบ 🙂

 

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s