ปัจจุบันยังไม่มีนิยามสำหรับ ‘Software Architecture’ ที่ชัดเจนดีพอ และคำจำกัดความหรือความหมายที่มีอยู่ตามเว็บไซต์และตำรา ต่างสร้างความสับสนกำกวมให้แก่ผู้สนใจไม่น้อย มีผู้สนใจและผู้ที่ต้องการศึกษา software architecture มากมายที่แสวงหานิยามอมตะซึ่งใช้เพียงไม่กี่ประโยคเพื่อแทนความหมายของ software architecture ได้ชัดเจนที่สุด
แต่จะแสวงหานิยามไปเพื่ออะไรกัน? นิยามที่อยู่ในรูปประโยคเพียงไม่กี่ประโยค จะหวังให้สื่อถึงแก่นสาระทั้งมวลอาจไม่ได้เสมอไป โดยเฉพาะกับศาสตร์ที่ยังมีขวบวัยเพียงในระดับหนึ่งเท่านั้น ดังจะเห็นได้ว่ามีการตีความกันไปต่าง ๆ นานา ดังนั้นจงใช้หลัก ‘กาลามสูตร’ ของพระพุทธเจ้าเพื่อเป็นเกณฑ์ในการเลือกที่จะเชื่อในเนื้อความที่ได้อ่านหรือสดับมา
ผมจะขออธิบายความหมายของ ‘สถาปัตยกรรมซอฟต์แวร์ (software architecture)’ ในเชิงเปรียบเทียบกับร่างกายของมนุษย์ คำตอบแห่งหลายสิ่งในจักรวาลล้วนสามารถเริ่มต้นได้จากการเพ่งศึกษาในตัวตนก่อน ตามหลักแห่งพุทธแล้ว คำถามที่ยากจะแสวงหาคำตอบ ดิ้นรนฝ่าฟันทุกทิศก็ใช่จะหาความหมายที่ชัดเจนถูกใจได้ยาก แต่หากตั้งสติให้นิ่งแทนที่จะคอยแต่มองออกไปภายนอก บางครั้งคำตอบที่เราต้องการอาจอยู่ภายในตัวเรานี่เอง
มนุษย์เรามีความสามารถหลากหลาย สามารถทำอะไรได้หลายอย่าง เช่น กิน นอน เดิน วิ่ง ขับรถ ฯลฯ หลายอย่างที่บางคนอาจไม่เคยทำมาก่อน แต่เมื่ออยู่ในสถานการณ์จำเป็นที่มีปัจจัยบางอย่างตีกรอบ ก็สามารถทำในสิ่งที่ไม่เคยทำมาก่อนได้ เช่น
- เกิดมาอ่านหนังสือไม่ได้ แต่เมื่อถูกส่งเข้าโรงเรียนก็ได้เรียนรู้จนอ่านเขียนได้
- บางคนเพิ่งลาออกจากงานขายของหน้าร้าน เปลี่ยนมาทำงานใหม่ที่ไม่เคยทำมาก่อนคือเป็นบุรุษไปรษณีย์ ก็สามารถทำได้เมื่อได้รับการฝึกฝน
เป็นต้น
เราอาจเคยได้ยินประโยคที่ว่า “มนุษย์เป็นสัตว์สังคม” เมื่อคนเรามารวมกลุ่มกันก็ต้องมีกฏเกณฑ์มีสังคม ในปัจจุบันเรามีสังคมที่หลากหลาย และมีธุรกิจอุตสาหกรรมที่หลากหลาย เช่น ธุรกิจสิ่งทอ เกษตรกรรม เทคโนโลยี ประกอบรถยนต์ โรงพยาบาล เป็นต้น โดยในแต่ละสังคมธุรกิจล้วนต้องมีคนเข้าไปมีส่วนร่วม มีการใช้คนที่หลากหลายซึ่งสอดคล้องกับเกณฑ์ที่หลากหลาย เช่น อายุ การศึกษา ประสบการณ์ เป็นต้น
ในแต่ละสังคมคือโดเมน (domain) หนึ่งนั่นเอง ในโดเมนจึงสามารถมีโดเมนย่อยต่อไปได้อีก โดเมนหนึ่งก็อาจอยู่ภายในโดเมนหนึ่งที่ใหญ่กว่าได้ แล้วเกณฑ์ที่ใช้ในการจำแนกขนาดและประเภทโดเมนคืออะไร? นี่คือกฏเกณฑ์ของสังคมนั้น ๆ เป็นผู้กำหนด แต่สิ่งสำคัญอยู่ที่มุมมอง (perspective) ของผู้มองเองด้วย เพราะในสังคมที่มีลักษณะคล้ายคลึงกันราวกับฝาแฝด แต่อาจมีกฏเกณฑ์ที่แตกต่างกันอย่างสิ้นเชิงก็เป็นได้
ใครสักคนหนึ่งเมื่อต้องเข้าไปอยู่ในสังคมหนึ่ง เช่น นาย ก ได้สมัครเข้าทำงานเป็นพนักงานขายอุปกรณ์เลี้ยงปลา สิ่งที่ทางร้านต้องการจากนาย ก คือความสามารถ (feature) ในการขาย และความรู้การเลี้ยงปลาและอุปกรณ์เบื้องต้น โดยทางร้านได้ระบุความสามารถของนาย ก ว่าต้องมีอะไรบ้างในการทำงาน เพื่อให้สอดคล้องกับโมเดลธุรกิจ (business model) ของทางร้าน ทางร้านจึงจำเป็นต้องมีการฝึกอบรมเบื้องต้นให้แก่นาย ก เพื่อให้เข้าใจเป้าหมายธุรกิจ (business goals) ที่สัมพันธ์กับโมเดลธุรกิจของทางร้าน
แม้ว่านาย ก สามารถทำอะไรอย่างอื่นได้อีกมากมาย เช่น ขับรถ ว่ายน้ำ เล่นฟุตบอล ตีกลอง ฯลฯ ก็ไม่มีความจำเป็นต่องานเท่าใดนัก ดังนั้นนาย ก จึงต้องทำความเข้าใจกับโมเดลธุรกิจ เป้าหมายธุรกิจ และความสามารถหรือหน้าที่ที่ตนเองต้องทำ เพราะเหล่านี้คือความต้องการ (requirements) ที่ทางร้านคาดหวังในตัวเขา
จากการฝึกอบรม นาย ก พบว่างานขายอุปกรณ์เลี้ยงปลานั้นตนเองต้องสามารถอธิบายข้อมูลให้แก่ลูกค้าได้ ใช้อุปกรณ์ในร้านทุกชนิดเป็น ซ่อมอุปกรณ์ชิ้นง่าย ๆ ได้ ให้อาหารปลาในตู้ปลาที่โชว์ ทำความสะอาดตู้ปลา บรรจุหีบห่อ นำรถเข็นมายกอุปกรณ์ชิ้นใหญ่ไปส่งที่รถลูกค้า และรับเงินและคืนเงินทอน เหล่านี้คือความต้องการ (functional requirements) ของทางร้านที่ต้องการให้เขาทำ
ร่างกายของมนุษย์มีระบบการทำงานหลายประเภท แต่ละประเภทประกอบด้วยอวัยวะที่ซับซ้อน อวัยวะหลายส่วนมักทำงานร่วมกันและตอบสนองซึ่งกันและกัน เช่น ระบบหายใจประกอบด้วย จมูกที่หายใจนำอากาศผ่านลำคอเข้าสู่ปอดและหัวใจ ปากที่นำอาหารที่ทานผ่านลำคอ (ใช้ร่วมกันกับระบบหายใจ) สู่กระเพาะและสู่ลำไส้ เป็นต้น
ดังนั้นหากวาดเป็นรูปออกมาแล้วจะเห็นได้ว่าร่างกายมนุษย์เรามีระบบการทำงานมากมายและ
ซับซ้อนอย่างยิ่ง หากอวัยวะใดหรือระบบใดทำงานผิดเพี้ยนไปอาจส่งผลต่ออวัยวะหรือระบบการทำงานอื่นได้ เช่น หากสูบบุหรี่มากจะเป็นการสร้างความเสียหายให้กับปอด เมื่อปอดมีปัญหาก็จะฟอกอากาศได้แย่ลง ส่งผลต่อหัวใจและระบบหายใจ หากไตมีปัญหาก็อาจทำให้เป็นนิ่วได้ หากกระเพาะมีปัญหาก็อาจส่งผลต่อระบบย่อยอาหารได้ หากระบบประสาทบริเวณไขกระดูกสันหลังมีปัญหาอาจเป็นอัมพาตได้ หากระดับน้ำในหูมีปัญหาอาจส่งผลต่อการทรงตัวได้ เป็นต้น
ระบบการทำงาน หรือ กลไก (architectural mechanism) ภายในร่างกายส่วนใดส่วนหนึ่งประสบปัญหาจึงมักส่งผลข้างเคียง (side effect) ต่อระบบการทำงานและอวัยวะอื่นด้วยเสมอ และเมื่อระบบการทำงานใดทำงานผิดปกติไปก็จะส่งผลต่อความสามารถของคนนั้น หรือสิ่งที่คนนั้นจำเป็นต้องทำ (functional requirements) ไปด้วย เช่น วันหนึ่งนาย ก ไปตรวจสุขภาพ ผลการตรวจพบว่าเป็นโรคผิวหนัง เนื่องจากภูมิแพ้จากการทำความสะอาดตู้ปลาบ่อย ๆ แต่ล้างมือไม่สะอาด นาย ก จึงนำผลการตรวจไปแจ้งเจ้าของร้าน เจ้าของร้านจึงสั่งไม่ให้นาย ก ล้างตู้ปลา 1 สัปดาห์แล้วหักเงินค่าจ้างเพื่อทำโทษที่ไม่ยอมดูแลรักษาสุขภาพให้ดี
นอกจากนี้นาย ก ต้องเริ่มทำงานแต่เช้า ต้องเข้างานตรงเวลา (ความน่าเชื่อถือ – reliability) ในการอธิบายสินค้าแก่ลูกค้าต้องใช้เวลาที่สั้น กระชับ และทำให้ลูกค้าตัดสินใจซื้อได้เร็ว (ประสิทธิภาพ – performance) เพราะหากเป็นช่วงเวลาที่มีลูกค้าที่ร้านมาก นาย ก ยิ่งต้องอธิบายได้รวดเร็ว ชัดเจนมากยิ่งขึ้น และยังต้องรักษาสุขภาพ ไม่เจ็บไข้ได้ป่วยจนทำให้ต้องขาดงานบ่อย (ความพร้อม – availability) ต้องคอยศึกษาอุปกรณ์รุ่นใหม่ ๆ ที่มาแทนรุ่นเก่า (ปรับปรุง – modifiability) และทางร้านต้องสามารถตรวจสอบประเมินผลการทำงานได้ (ทดสอบ – testability) นี่คือความต้องการที่ทางร้านกำหนด และนาย ก ได้คิดเพิ่มเติมอีกว่าตนเองจะต้องพัฒนาทักษะความรู้อย่างต่อเนื่อง เพื่อจะได้ก้าวหน้าและเติบโตในหน้าที่ที่สูงขึ้นที่มีความรับผิดชอบที่มากขึ้นต่อไปไ
ด้ (ขยาย – scalability) ความต้องการเหล่านี้คือ สิ่งที่ใช้ชี้วัดคุณภาพการทำงานของนาย ก เป็นความต้องการที่ไม่ใช่หน้าที่โดยตรง (non-functional requirements) แต่มีความผลต่อหน้าที่รับผิดชอบ
ระบบการทำงานของร่างกาย (กลไก) ที่สำคัญที่ส่งผล (support) ต่อการทำงาน (functional requirements) ของนาย ก เช่น ระบบหายใจ (ต้องดมกลิ่นปลา กลิ่นตอนล้างตู้ปลาบ่อย ๆ) ระบบผิวหนัง (ต้องสัมผัสปลา อาหารปลา และตอนล้างตู้ปลา) ระบบสมอง (เรียนรู้ ท่องจำ คิด ฯลฯ) เป็นต้น หากระบบเหล่านี้ทำงานผิดพลาดจะส่งผลต่องานของนาย ก เมื่อนาย ก ทำงานผิดพลาดหรือมีประสิทธิภาพแย่ลง ก็จะส่งผลต่อหน้าที่การงานของนาย ก เอง และต่อธุรกิจของทางร้าน ดังนั้น non-functional requirements จึงมีผลต่อการทำงานของกลไกและการกำหนดระดับความสำคัญ (prioritize) ของกลไกต่าง ๆ หรือกล่าวได้ว่า non-functional requirements นำไปสู่การกำหนดกลไกที่จะมีในระบบฯ และเป็นตัวชี้วัดคุณภาพการทำงานของกลไก ซึ่งแน่นอนเมื่อกลไกทำงานได้ดี ย่อมส่งผลต่อการทำงาน (functional requirements) ได้ดีตามไปด้วย
จากการอธิบายในเชิงเปรียบเทียบนี้ เห็นได้ว่าสิ่งที่อยู่ใน ’software architecture’ คือ กลไกสำคัญที่มีผลต่อระบบฯ จากตัวอย่างข้างต้นระบบฯ ก็คือตัวนาย ก นั่นเอง
ประเด็นสำคัญคือการสร้างระบบฯ ต้องถูกตีกรอบด้วยโดเมน หรือเกณฑ์การจำแนกของสังคมนั้น ๆ เพราะบางกลไกที่มีความสำคัญต่อโดเมนหนึ่งแต่อาจไม่มีความสำคัญต่ออีกโดเมนก็ได้ เมื่อทราบแล้วว่าระบบฯ นั้นถูกจัดกลุ่มอยู่ในโดเมนใด จึงต้องกำหนดความต้องการของโดเมนหรือเป้าหมายทางธุรกิจ (business goals) นั้น กำหนดโดยผู้ที่มีผลต่อความสำเร็จหรือล้มเหลว (ผู้มีส่วนได้เสีย) (stakeholders) ภายในโดเมนนั้นเอง ไม่ใช่กำหนดโดยผู้ที่เข้าไปทำระบบฯ ให้ เมื่อโดเมนนั้นทราบแล้วว่าโมเดลธุรกิจและเป้าหมายทางธุรกิจของตนคืออะไร จึงจะกำหนดความสามารถ (feature) ของระบบฯ โดยจะกำหนดเอง หรือให้คนที่จะทำระบบฯ ให้กำหนด หรือจะกำหนดร่วมกันก็ได้ จากนั้นจึงกำหนดความต้องการ (functional requirements) ที่คาดหวังจากการทำงานของระบบฯ แต่ระบบฯ จะมีคุณภาพหรือไม่? แค่เพียงระบบฯ ทำงานได้นั้นไม่เพียงพอจะกล่าวได้ว่าระบบฯ มีคุณภาพ
จากตัวอย่างเปรียบเทียบ หากระบบการทำงานบางอย่างผิดปกติไปอาจส่งผลต่อความสามารถบางอย่างของมนุษย์ได้ นั่นคือ กลไกมีผลต่อความสามารถ (functional requirements) และหากนาย ก ยังไม่ยอมล้างมือให้สะอาดหลังจากล้างตู้ปลา อาจทำให้เป็นโรคผิวหนังเรื้อรัง และส่งผลต่อการทำงาน ซึ่งอาจทำให้นาย ก ถูกพักงานหรือต้องลางานไปรักษาตัวบ่อยขึ้น ฉะนั้นอาจทำให้คุณภาพการทำงานของนาย ก ตกลง และหากนาย ก ไม่ฝึกฝนการอธิบายรายละเอียดสินค้าแก่ลูกค้าให้ดี ก็อาจส่งผลต่อประสิทธิภาพและความน่าเชื่อถือไป นั่นคือ functional requirements และ non-functional requirements มักตอบสนองซึ่งกันและกันเสมอ
คุณภาพของระบบฯ ขึ้นอยู่กับประสิทธิภาพของการทำงานของกลไกในสถาปัตยกรรมฯ หรือกล่าวได้ว่าขึ้นกับสถาปัตยกรรมฯ ของระบบฯ นั่นเอง สถาปัตยกรรมฯ ที่ดีต้องทำให้ระบบฯ ทำงานได้ตาม functional requirements และ non-functional requirements ความต้องการทั้งสองประเภทนี้ต้องสอดคล้องกับความสามารถ (feature) ที่ผู้ทำระบบฯ ได้รับปาก (commit) กับเจ้าของระบบฯ (หรือโดเมนนั้น หรือลูกค้า) ไว้ และเมื่อระบบฯ ทำงานได้ตาม feature ที่ได้รับปาก ก็จะส่งผลได้ตรงตามเป้าหมายทางธุรกิจที่กำหนดไว้แต่แรก
ความสัมพันธ์จากเป้าหมายทางธุรกิจจนถึงสถาปัตยกรรมฯ และท้ายที่สุดจนถึงระบบฯ ที่สร้างเสร็จแล้ว เรียกว่า ‘Architecture Business Cycle’ (ABC) ซึ่งในทางกลับกันระบบฯ ที่สร้างเสร็จแล้วต้องตอบสนองได้ตรงตามเป้าหมายทางธุรกิจด้วยเช่นกัน
ดังนั้นจะเห็นได้ว่าหากสถาปัตยกรรมฯ มีคุณภาพ ระบบฯ ก็จะมีคุณภาพ โดยปัจจัยสำคัญต่อคุณภาพของสถาปัตยกรรมฯ คือ เป้าหมายทางธุรกิจ เพราะเป็นความต้องการที่สำคัญที่สุดและเป็นเสมือนกรอบการทำงานทั้งหมด และ non-functional requirements เพราะเป็นปัจจัยหลักนำไปสู่การกำหนดและสร้างกลไก
สถาปัตยกรรมซอฟต์แวร์ จึงเน้นที่การทำงานร่วมกันของกลไกสำคัญต่าง ๆ ภายในระบบฯ ที่มีผลต่อการทำงานและเป้าหมายทางธุรกิจ
เฉกเช่นร่างกายมนุษย์ หากระบบประสาทเสียหาย โดยที่อวัยวะอื่นยังทำงานปกติ แต่ถ้าเป็นอัมพาต แม้กำลังนอนอยู่ก็ไม่อาจกล่าวได้ว่าเป็นการนอนโดยแท้จริง….
สุดท้ายลองถามตัวเล่น ๆ กับตัวคุณเองดู… ว่าทำงานด้านใดอยู่ องค์กรที่คุณทำงานอยู่ในโดเมนใด ระบบการทำงานและอวัยวะใดของร่างกายที่สำคัญต่อหน้าที่รับผิดชอบ และทำงานร่วมกันและตอบสนองซึ่งกันอย่างไร หน้าที่รับผิดชอบของคุณคืออะไร การทำงานของคุณมีความสำคัญอย่างไรต่อธุรกิจหรือความสำเร็จขององค์กร….
เรามีสถาปัตยกรรมที่วิเศษที่สุดในจักรวาลอยู่ในตัวเรานี่เอง….
=======================================================================
ยาวเหยียด เฮ้อ…. ![]()
เป็นส่วนหนึ่งของหนังสือที่กำลังเขียนอยู่ครับ พอดีได้ไอเดียจากที่มักใช้มุขอวัยวะในร่างกายคนเราอธิบายเชิงเปรียบเทียบกับ software architecture อยู่่บ่อย ๆ ในงานบรรยาย เลยเอามาเขียนลงรายละเอียดหน่อยดีกว่า
แต่ยังไม่ค่อยกระชับเท่าไรนะครับ เอาไว้ถึงช่วงเรียบเรียงเรียบร้อยแล้วจะมาอัพเดตอีกทีพร้อมรูปประกอบ
อ้อ… ช่วย comment หน่อยนะครับ ![]()
minimalist (ณรงค์ จันทร์สร้อย ๒๐ เมษายน พ.ศ. ๒๕๕๑)
ความเห็นล่าสุด