Saturday, May 7, 2016

การสื่อสารระหว่าง โปรเซส (Interprocess Communication)



การสื่อสารระหว่าง โปรเซส (Interprocess Communication)
การสื่อสารระหว่างโปรเซส (interprocess communication) มีสองรูปแบบ คือ โมเดลแบบผ่านค่าข้อมูล (message-passing model) และ แบบการแบ่งปันหน่วยความจำ (shared-memory model)
แบบโมเดลผ่านค่าข้อมูล (message-passing model) การสื่อสารกันระหว่าโปรเซสกระทำโดยการแลกเปลี่ยนข้อมูลระหว่ากัน ข้อความสามารถถูกแลกเปลี่ยนระหว่างโปรเซส ทั้งแบบทางตรง หรือแบบทางอ้อม ผ่านกล่องข้อความร่วม (common mailbox) ก่อนทำการสื่อสารระหว่างกัน จะต้องทำการเปิดการเชื่อมต่อระหว่างโปรเซสก่อน ต้องทราบถึงชื่อของตัวสื่อสาร (communicator) เพื่อให้โปรเซสอื่นๆ ที่อยู่ในระบบเดียวกัน หรือโปรเซสจากคอมพิวเตอร์เครื่องอื่นที่เชื่อมต่ออยู่ด้วยเครือข่ายการสื่อสาร ทราบด้วย คอมพิวเตอร์แต่ละเครื่องในเครือข่าย มีชื่อของโฮสต์ ที่ทุกเครื่องรู้จักเหมือนกัน โฮสต์มีตัวบ่งชี้ในเครือข่าย เช่น เลขไอพี (IP address) นอกจากนี้ แต่ละโปรเซสยังมีชื่อของโปรเซส และที่ถูกแปลให้เป็นบ่งชี้ (identifier) เพื่อให้ระบบปฏิบัติการสามารถอ้างอิงถึงโปรเซสนั้นๆ การระบุ ID ของโฮสต์ และ ID ของโปรเซส โดยการเรียกระบบ (system calls) เพื่อทำหน้าที่แปลผล ตัวบ่งชี้ (identifiers) จะทำการผ่านค่าไปยังการเรียกเปิดและปิดทั่วไป (general purpose open and close calls) ที่ให้บริการโดย ระบบไฟล์ (file system) หรือการเรียกระบบ (system calls) การเปิดและปิดการเชื่อมต่อเฉพาะ (specific open connection and close connection) ขึ้นอยู่กับรูปแบบการสื่อสารของระบบ โดยปกติโปรเซสที่รับค่า จะต้องให้สิทธิ์สำหรับการเชื่อมต่อเพื่อยอมรับการเชื่อมต่อเข้ามา โปรเซสโดยมาก จะยอมรับการเชื่อมต่อที่เป็นการเชื่อมต่อแบบเฉพาะ ที่โปรแกรมของระบบสนับสนุนให้สำหรับแต่ละงานเท่านั้น การเอ็กซ์ซีคิวจะรอคอยการเรียกการเชื่อมต่อและพื่นที่การทำงานเมื่อทำการเชื่อมต่อ แหล่งที่มาของการเชื่อมต่อ เรียกว่า ไคลเอนท์ (client) และตัวรับเรียกว่า เซิร์ฟเวอร์ (server) จากนั้นจึงเกิดการแลกเปลี่ยนข้อความระหว่างกัน ด้วยการอ่านของเขียนข้อความเรียกระบบ การปิดการเชื่อมต่อเรียกว่าการสิ้นสุดการสื่อสาร (terminates the communication)
การสื่อสารระหว่างโปรเซสในรูปแบบการแบ่งปันหน่วยความจำ (shared-memory model) โปรเซสจะใช้วิธีการแบ่งปันหน่วยความจำที่สร้างขึ้นด้วยการเรียกระบบในสร้างและกำหนดสิทธิ์ในขอบเขตพื้นที่ของหน่วยความจำ ที่โปรเซสนั้นเป็นเจ้าของ การเรียกซ้ำ (Recall) โดยปกติระบบปฏิบัติการจะป้องกันแต่ละโปรเซสจากการเข้าถึงหน่วยความจำของโปรเซสอื่น การแบ่งปันหน่วยความจำจึงจำเป็นสำหรับโปรเซสสองโปรเซสหรือมากกว่า ให้ยอมรับที่จะยกเลิกข้อจำกัดนั้น โปรเซสต่างๆ สามารถแลกเปลี่ยนข้อมูลระหว่างกันโดยการอ่านและเขียนข้อมูลลงในพื้นที่ที่แบ่งปันหรือใช้งานร่วมกัน รูปแบบของข้อมูลถูกกำหนดโดยโปรเซสซึ่งไม่อยู่ภายใต้การควบคุมของระบบปฏิบัติการ โปรเซสจึงต้องทำหน้าที่ดูแลและมั่นใจว่าไม่ทำการเขียนข้อมูลลงในพื้นที่ที่ใช้งานร่วมกันการส่งค่าแบบผ่านข้อความ (message-passing model) มีประโยชน์มากในการแลกเปลี่ยนข้อมูลขนาดเล็ก เนื่องจากไม่เกิดการชนกันของข้อมูล และยังนำวิธีการนี้ไปใช้งานได้ง่าย กว่าวิธีการแบ่งปันหน่วยความจำ ในการสื่อสารข้อมูลระหว่างคอมพิวเตอร์ วิธีการแบ่งปันข้อมูลทำให้ใช้ความเร็วสูงสุด และสะดวกสุดในการสื่อสารข้อมูล โดยขึ้นอยู่กับความเร็วในการส่งผ่านข้อมูลของหน่วยความจำ ในแต่คอมพิวเตอร์แต่ละเครื่อง อย่างไรก็ตามอาจเกิดปัญหาขึ้น ในพื้นที่ที่ถูกปกป้องและการเข้าจังหวะ (protection and synchronization) ระหว่างหน่วยความจำที่แบ่งปันใช้งานร่วมกันระหว่างโปรเซส

Friday, May 6, 2016

การช่วยเหลือตามบริบท (context-sensitive help)

การช่วยเหลือตามบริบท (context-sensitive help)
context-sensitive help ให้การช่วยเหลือผู้ใช้งานระบบโดยให้ข้อมูลการช่วยเหลือ โดยพิจารณาจากสิ่งที่ผู้ใช้กำลังทำ หรือกำลังใช้งาน ในขณะนั้น
context-sensitive help เป็นการช่วยเหลือแบบออนไลน์ประเภทหนึ่ง ที่พิจารณาจากสถานะใด สถานะหนึ่ง ของซอฟต์แวร์เป็นการเฉพาะ ทำให้สามารถให้การช่วยเหลือตามสถานะที่เหมาะสมเข้ากับสถานะการนั้นๆ
เมื่อเปรียบเทียบ context-sensitive help  กับการช่วยเหลือแบบออนไลน์ หรือคู่มือใช้ระบบแบบออนไลน์ ไม่จำเป็นต้อยเข้าไปยัง
แต่ละหัวข้อโดยตรง สถานะเดียวที่รองรับหรือสนับสนุนระบบื้ที่มีประสิทธิภาพมากขึ้น และเน้นที่จะอธิบายเจาะลืก สถานการณ์เชิงลึก รวมถึงคุณสมบัติของซอฟต์แวร์ด้วย
context-sensitive help
เป็นตัวช่วยที่สามารถติดตั้งใช้งานด้วยเครื่องมือโดยวิธีต่างๆ อาทิเช่น การอธิบายด้วย GUI widget หรือการแสดงผลเนื้อหาสมบูรณ์จากไฟล์ช่วยเหลือเป็นต้น
นอกจากนี้โดยทั่วไปเราใช้วิธีการนี้เพื่อเข้าถึง context-sensitive help ด้วยการคลิกปุ่มใดๆ
ด้วยวิธีนี้เราจะคลิกปุ่มวิดเจท (widget button) ปุ่มหนึ่งเพื่อแสดงผลการช่วยเหลือในทันที
หรือด้วยวิธีการเปลี่ยนขนาดของตัวชี้ (pointer) ให้เป็นเครื่องหมายคำถาม หลังจากที่ผู้ใช้คลิก วิดเจท ข้อความการให้ความช่วยเหลือก็จะปรากฏขึ้น
Context-sensitive help ส่วนมากถูกใช้ใน สภาพแวดล้อมการทำงานแบบ GUI แต่ไม่บังคับ อาจไม่มีก็ได้
ตัวอย่างเช่น
- Apple's System 7 Balloon help ระบบแอปเปิ้ล 7 มี การช่วยเหลือแบบบอลลูน
- Microsoft's WinHelp ไมโครซอฟต์มี วินเฮลป์
- OS/2's INF Help
- Panviva's SupportPoint
- Sun's JavaHelp

ความช่วยเหลืออีกแบบที่เหมือนกันเรียกว่า ความช่วยเหลือแบบฝังตัว (embedded help) ซึ่งสามารถมารถคิดได้ลึกซึ้ง หรือ "deeper" เหมือน context-sensitive help
โดยทั่วไปเราสามารถขอคำอธิบายพื้นฐาน หรือคู่มือแบบคลิกได้โดย การรับรู้ถึงความต้องการความช่วยเหลือของผู้ใช้ หรือการเสนอให้ความช่วยเหลือหรือคำแนะนำตามแต่ละสถานะการ
โดยต้องไม่สับสนระหว่าง ความช่วยเหลือแบบฝังตัว (Embedded help) กับ ซอฟต์แวร์วิชาร์ด (ตัวช่วยการดำเนินการ)

การออกแบบมาตรฐานอินเตอร์เฟส (Interface Standards Design)

การออกแบบมาตรฐานอินเตอร์เฟส (Interface Standards Design)

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

Thursday, May 5, 2016

การตรวจสอบความถูกต้องการนำเข้าข้อมูล (Input Validation)

การตรวจสอบความถูกต้องการนำเข้าข้อมูล (Input Validation)
การตรวจสอบความถูกต้องการนำเข้าข้อมูล มีความจำเป็นอย่างยิ่งเพื่อให้มั่นใจได้ว่าข้อมูลที่เข้าสู่ระบบเป็นข้อมูลที่ถูกต้อง
ในบางครั้งการตรวจสอบความถูกต้องการนำเข้าข้อมูล (Input Validation) อาจเรียกว่า edit checks
Input Validation สามารถทำได้หลากหลายรูปแบบ โดยมีวัตถุประสงค์เพื่่่่่อป้องกันการนำเข้าข้อมูลที่ไม่ถูกต้องสู่ระบบ อันจะทำให้ระบบเสียหาย ประมวลผลผิดพลาด สิ้นเปลืองพื้นที่ พลังงาน เวลาในการประมวลลผล โดยเปล่าประโยชน์ รวมทั้งเกิดขยะขึ้นมากมายในระบบ ดังนั้นระบบจึงจำเป็นต้องไม่ยอมรับข้อมูลที่ไม่ถูกต้อง ข้อมูลที่อยู่นอกเหนือขอบเขตที่กำหนด ข้อมูลที่มีรูปแบบไม่ถูกต้อง ไม่มีความหมาย ไม่มีประโยชน์ ใช้งานไม่ได้
อย่างไรก็ตาม คงเป็นการยากที่จะตรวจสอบข้อมูลทุกอย่างให้ถูกต้อง ก่อนการนำเข้า ซึ่งอาจนำเข้าโดยรู้เท่าไม่ถึงการณ์ โดยผู้ใช้
ดังนั้นระบบที่ดีจึงต้องสามารถแจ้งเตือนผู้ใช้ หรือปรับเปลี่ยนให้ถูกต้อง ก่อนการนำเข้าข้อมูลเสมอ
โดยปกติจะมีการตรวจสอบความถูกต้องการนำเข้าข้อมูล อยู่ 6 ประเภท
การตรวจสอบความครบถ้วน (completeness check), การตรวจสอบรูปแบบของข้อมูล (format check), การตรวจสอบขนาดของข้อมูล (range check),การตรวจสอบหลักของข้อมูล  (digit check), การตรวจสอบความถูกต้องเหมาะสม (consistency check), และ การตรวจสอบฐานข้อมูล (database check)
ระบบที่ดีควรตรวจสอบอย่างน้อย 1 ประเภท และทำการตรวจสอบให้ครบทุกประเภทหากสามารถกระทำได้

การพัฒนาระบบเชิงวัฒนธรรมการเมืองการปกครอง (cultural and political requirements)

การพัฒนาระบบเชิงวัฒนธรรมการเมืองการปกครอง (cultural and political requirements)
ข้อกำหนด หรือความต้องการ ในการพัฒนาระบบที่เป็นไปตาม ข้อกำหนดทางกฎหมาย และทางวัฒนธรรมการเมืองการปกครอง เป็นข้อกำหนดเฉพาะตามแต่ละเมือง ประเทศ ที่ใช้งานระบบนั้นๆ
ในปัจจุบัน สภาพแวดล้อมในการทำธุรกิจระดับโลก ทำให้องค์กรต่างๆ จำเป็นต้องขยายระบบเพื่อเข้าถึงลูกค้าจากทุกมุมโลก
แม้ว่าธุรกิจเหล่านั้นจะมีความเข้มแข็งในการทำธุรกิจอยู่แล้วก็ตาม แต่ก็ไม่สามารถปฏิเสธผลกระทบที่เกิดจากการพัฒนาแอพพลิเคชั่นใหม่ๆ ที่สามารถเข้าถึงผู้บริโภคได้อย่างกว้างขวาง และรวดเร็ว
ทำให้ทุกหน่วยงาน รวมทั้งผู้พัฒนาระบบจำเป็นต้องให้ความสำคัญ และเข้าใจอย่างถ่องแท้ ในการออกแบบสถาปัตยกรรมระบบที่สอดคล้องกับข้อกำหนด หรือความต้องการ เชิงวัฒนธรรมการเมืองการปกครอง ของแต่ละท้องถิ่น เมือง และประเทศได้
ตัวอย่างเช่น
- ความต้องการทางภาษาที่หลากหลาย ระบบจำเป็นต้องสามารถสนับสนุนภาษาที่หลากหลาย อาทิ ภาษาอังกฤษ ไทย ฝรั่งเศส จีน เป็นต้น
- ความต้องการในการปรับแต่งให้เข้ากับแต่ละบุคคล (Customization) ทำให้ผู้ใช้ระบบสามารถปรับแต่งระบบให้ตรงตามความต้องการของตนเองได้ เช่น ผู้จัดการประจำภูมิภาคสามารถเพิ่มฟิลด์ สำหรับฐานข้อมูลสินค้าได้ด้วยตนเอง เพื่อการเก็บข้อมูลเฉพาะสำหรับภูมิภาคของตนเอง หรือ ผู้จัดการสามารถปรับเปลี่ยนรูปแบบของหมายเลขโทรศัพท์ลูกค้าของตนเอง ในฐานข้อมูลเป็นต้น
-  การกำหนดรูปแบบของข้อมูล ที่ใช้ในท้องถิ่น อาทิ การปรับแต่งรูปแบบวันที่ ให้เป็น เดือน วัน ปี หรือ ปี เดือน วัน ที่ตรงกับรูปแบบที่นิยมใช้ในท้องถิ่นนั้นๆ หรือหน่วยวัดน้ำหนัก เป็นแบบกิโลกรัม ซึ่งเป็นรูปแบบที่ใช้กันโดยทั่วไปในเมืองนั้น แทนที่จะเป็น ปอนด์ ตามที่ผู้พัฒนาเคยชิน
- ข้อกำหนดทางด้านกฎหมาย ด้วยกฎหมายเป็นเครื่องมือของรัฐในการกำกับดูแลความเป็นระเบียบเรียบร้อย จำเป็นที่นักพัฒนาต้องศึกษาถึงกฏหมาย รวมทั้ง กฎ ระเบียบต่างๆ ทางสังคม เพื่อสามารถพัฒนาระบบให้สอดคล้องกับข้อกำหนดเหล่านั้น และไม่เกิดปัญหากับผู้ใช้งานระบบในภายหลัง ตัวอย่างเช่น ข้อมูลส่วนบุคคลของลูกค้า ไม่สามารถส่งออกไปยังเซิร์ฟเวอร์ ที่มีที่ตั้งในต่างประเทศได้ และ ผู้ดูแลระบบไม่สามารถเปิดเผยการใช้งานอินเตอร์เน็ตของผู้ใช้ในระบบให้บุคคลภายนอกทราบได้ เว้นแต่จะมีคำสั่งศาล

สถาปัตยกรรมแบบไคลเอนท์เซิร์ฟเวอร์ (Client-Server Architectures)

สถาปัตยกรรมแบบไคลเอนท์เซิร์ฟเวอร์ (Client-Server Architectures)
ในปัจจุบันองค์กรหลายแห่งหันมาใช้ระบบตามสถาปัตยกรรมแบบไคลเอนท์เซิร์ฟเวอร์ ที่ทำให้สามารถสร้างความสมดุลย์ของภาระงานในการประมวลผลระหว่างอุปกรณ์ไคลเอนท์ และเซิร์ฟเวอร์
ด้วยสถาปัตยกรรมแบบนี้ ไคลเอนท์ทำหน้าที่ ในการแสดงผล () ในขณะที่เซิร์ฟเวอร์ ทำหน้าประมวลผลเชิงตรรกเพื่อเข้าถึงข้อมูล () และการจัดเก็บข้อมูล ()
นอกจากนี้ ในส่วนงานตรรกะของแอพพลิเคชั่น ยังอาจสามารถวางไว้ที่ไคลเอนท์ หรือเซิร์ฟเวอร์ ก็ได้ หรือวางไว้ทั้งสองฝั่ง
ทั้งนี้หากภาระงานส่วนใหญ่อยู่ที่ไคลเอนท์ จะเรียกว่า thick หรือ fat ไคล์เอนท์
ในปัจจุบัน ไคลเอนท์แบบธิน หรือบาง จะรับภาระงานส่วนน้อยของแอพพลิเคชั่น ซึ่งกำลังเป็นที่นิยมเนื่องมีภาระสูญเสียต่ำ และง่ายต่อการบำรุงรักษา
ตัวอย่างเช่น ระบบเว็บต่างๆ ถูกออกแบบให้ เว็บเบราเซอร์ทำหน้าที่แสดงผลเป็นหลัก และประมวลผลทางธุรกรรมเพียงเล็กน้อย การเข้าถึงข้อมูลทั้งหมด และการจัดเก็บข้อมูล เป็นภาระของเซิร์ฟเวอร์ทั้งสิ้น
สถาปัตยกรรมแบบไคลเอนท์เซิร์ฟเวอร์ (Client-Server Architectures)มีประโยชน์หลัก 4 ประการดังนี้
1. สามารถปรับเพิ่มลดได้ (Scalable)
หมายความว่า สถาปัตยกรรมแบบนี้ ทำให้สะดวกในการเพิ่มหรือลด พื้นที่ในการจัดเก็บข้อมูล และการประมวลผล ของเซิร์ฟเวอร์
หากเซิร์ฟเวอร์ตัวหนึ่งตัวใด มีภาระงานหนักมากเกินไป ก็จะสามารถเพิ่มเซิร์ฟเวอร์ตัวอื่น เข้าทดแทน หรือช่วยแบ่งงานได้ ซึ่งโดยปกติเซิร์ฟเวอร์ส่วนใหญ่ทำหน้าที่ประมวลผลทางด้าน แอพพลิเคชั่นลอจิก การเข้าถึงข้อมูล การจัดเก็บข้อมูล
2. ด้วยสถาปัตยกรรมไคลเอนท์เซิร์ฟเวอร์ ทำให้สามารถสนับสนุนรูปแบบการทำงานของไคลเอนท์เซิร์ฟเวอร์ที่หลากหลายรูปแบบ
ทำให้สามารถเชื่อมต่อคอมพิวเตอร์ที่ใช้ระบบปฏิบัติการที่แตกต่างกันให้ทำงานร่วมกันได้ ทำให้ไม่ผูกพันกับผู้ค้ารายหนึ่งรายใด
ผู้ใช้สามารถเลือกประเภทคอมพิวเตอร์ได้ตามต้องการ (สามารถผสมผสานการใช้งานทั้งวินโดวส์และแมคโอเอส ของแอปเปิ้ล)
โดย มิดเดิ้ลแวร์ หรือซอฟต์แวร์ตัวกลาง ซึ่งเป็นซอฟต์แวร์ที่ถูกออกแบบมาเพื่อแปลการสื่อสาร หรือทำให้ซอฟต์แวร์ของผู้ให้บริการต่างๆ สามารถสื่อสาร และทำงานร่วมกันได้
ซึ่งจำเป็นต้อง ติดตั้งมิดเดิ้ลแวร์ ไว้ทั้ง ไคล์เอนท์และเซิร์ฟเวอร์  โดยมิดเดิ้ลแวร์จะทำหน้าที่เป็นตัวกลางในการแปลข้อมูล หรือสารของแต่ละซอฟต์แวร์ ให้เป็นภาษามาตรฐาน เพื่อให้ทั้งสองฝ่ายเข้าใจ
3. สำหรับสถาปัตยกรรมโครงสร้างแบบธินไคลเอนท์ ที่ใช้มาตรฐานอินเตอร์เน็ต ทำให้แยกแยะการแสดงผล การประมวลผลของแอพพลิเคชั่น และการเข้าถึงข้อมูล ได้อย่างง่ายดาย และทำให้การออกแบบเป็นอิสระต่อกัน
ตัวอย่างเช่น การแสดงผลด้วย HTML XML ที่ทำให้เว็บเบราเซอร์สามารถแสดงผลจากข้อมูลเหล่านี้ให้เป็น สี ขนาดอักษร คำสั่ง การใช้คำเฉพาะ ปุ่มคำสั่ง การเลือกรายการ และคำสั่งอื่นๆ ได้ถูกต้อง
ด้วยคำสั่งง่ายๆ เพื่อให้เกิดการเชื่อมโยงในแต่ละส่วนของอินเตอร์เฟสเข้าด้วยกัน ที่ทำหน้าที่แตกต่างหลากหลายเข้าด้วยกัน
และด้วย HTML และ XML ทำให้การปรับเปลี่ยนอินเตอร์เฟส ไม่ส่งผลกระทบต่อส่วนอื่นๆ
และในแนวทางเดียวกัน การปรับเปลี่ยนตรรกะของแอพพลิเคชั่น ก็จะไม่ส่งผลกระทบต่ออินเตอร์เฟส เช่นเดียวกัน  ไม่ว่าจะเป็นการเก็บข้อมูล และคำสั่ง SQL
4. ประการสุดท้าย หากเซิร์ฟเวอร์ล่ม ก็จะไม่ส่งผลกระทบต่อไคลเอนท์เนื่องจาก เฉพาะ แอพพลิเคชั่นเท่านั้นที่ต้องการเซิร์ฟเวอร์เพื่อประมวลผล นอกจากนี้ยังสามารถเปลี่ยนเซิร์ฟเวอร์แบบทันทีทันใด เพื่อทำหน้าที่แทนได้
อย่างไรก็ตามสถาปัตยกรรมแบบนี้ยังคงมีข้อด้อย หรือข้อจำกัดอยู่บ้าง โดยเฉพาะอย่างยิ่งความสลับซับซ้อนของระบบ
สถาปัตยกรรมแบบนี้จำเป็นต้องมีซอฟต์แวร์สองส่วน คือ ซอฟต์แวร์ เพื่อทำงานสำหรับเซิร์ฟเวอร์ และสำหรับไคลเอนท์ ที่แตกต่างกัน
การพัฒนาซอฟต์แวร์จึงมีความสลับซับซ้อนมากกว่าซอฟต์แวร์แบบดั้งเดิม ที่รวมทุกส่วนเข้าด้วยกัน
นอกจากนี้การปรับปรุงซอฟต์แวร์ก็จะมีความยุ่งยากสลับซับซ้อนเช่นเดียวกัน โดยผู้พัฒนาและดูแล จำเป็นต้องปรับปรุงซอฟแวร์สำหรับไคลเอนท์และเซิร์ฟเวอร์ทุกเครื่อง

ประเภทของเอกสาร (Type of Documents)

ประเภทของเอกสาร (Type of Documents)
เอกสารอ้างอิง (reference documents)
คู่มือการปฏิบัติงาน (procedure manuals)
แบบฝึกสอน (tutorial)
เอกสารประกอบระบบสารสนเทศโดยปกติทั่วไป ประกอบด้วยเอกสารหลายแบบ สำหรับผู้ใช้ ดังนี้ เอกสารอ้างอิง (reference documents) คู่มือการปฏิบัติงาน (procedure manuals) แบบฝึกสอน (tutorial)

เอกสารอ้างอิง (reference documents)
ในบางครั้งเรียกว่า help system เป็นเอกสารที่ออกแบบและจัดทำขึ้นเพื่อใช้งานสำหรับผู้ใช้ระบบต้องการเรียนรู้การใช้งานฟังก์ชั่นต่างๆ ของระบบ  เช่น การอัพเดทฟิลด์ข้อมูล การเพิ่มเรคคอร์ดใหม่ เป็นต้น
โดยทั่วไป ผู้คนจะอ่านข้อมูลอ้างอิงเหล่านี้ก็ต่อเมื่อพวกเขาได้ทดลองใช้งานระบบแล้ว แต่ไม่สำเร็จ
การเขียนเอกสารอ้างอิงจำเป็นต้องให้ความระมัดระวังสูง เนื่องจากผู้อ่านมักจะกำลังมีอารมย์ขุ่นมัว อันเนื่องมาจากประสบกับความล้มเหลวในการใช้งาน

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

แบบฝึกสอน (tutorial)
เป็นเอกสารที่ทำหน้าที่สอนผู้ใช้ถึงการใช้งานองค์ประกอบหลักๆ ของระบบ เช่น การใช้งานระบบเบื้องต้น
ทำให้เป็นเอกสารที่มีขนาดใหญ่เช่นเดียวกัน และต้องถูกออกแบบให้อ่านแบบลำดับ เพื่อสามารถใช้ในการอ้างอิง และสามารถอ่านเพื่อการเรียนรู้ได้ด้วยตนเอง

เอกสารสำหรับผู้ใช้ ไม่ต้องอธิบายถึงกระบวนการในการพัฒนาระบบ ไม่ต้องอธิบายกระบวนการในการพัฒนาอินเตอร์เฟส
สำหรับนักพัฒนามือใหม่ ควรให้ความสำคัญกับการออกแบบโครงสร้างของเอกสารให้ดี เพื่อให้ผู้อ่านสามารถเข้าใจได้ง่าย


การประมวลผลกลุ่มเมฆ หรือคลาวด์คอมพิวติ้ง (Cloud Computing)

การประมวลผลกลุ่มเมฆ หรือคลาวด์คอมพิวติ้ง (Cloud Computing)
ด้วยการประมวลผลแบบคลาวด์ทำให้องค์กรไม่จำเป็นต้องเป็นเจ้าของ ระบบคอมพิวเตอร์ของตนเอง ทำให้ไม่ต้องบริหารจัดการ ดูแลระบบคอมพิวเตอร์ อีกด้วย
ด้วยปัจจุบันบริการการประมวลผลแบบคลาวด์ ที่มีจำนวนเพิ่มมากขึ้น ทำให้ความสามารถในการประมวลผล ที่ต้องใช้โครงสร้างพื้นฐานต่างๆ ในการประมวลผล แอพพลิเคชั่น โปรเซสทางธุรกิจเพื่อการทำงานร่วมกัน สามารถส่งมอบถึงผู้ใช้ได้ในรูปแบบการบริการผ่านอินเตอร์เน็ต ไปยังทุกหนทุกแห่งตามต้องการ
คำว่ากลุ่มเมฆ หรือคลาวด์ ในการประมวลผลแบบคลาวด์นั้น หมายถึง การผสมผสาน กลุ่มของฮาร์ดแวร์ เครือข่าย หน่วยจัดเก็บข้อมูล การบริการ และ อินเตอร์เฟส และส่งมอบการผสมผสานสิ่งเหล่านี้ ไปยังผู้ใช้ในรูปแบบการบริการการประมวลผล (computing as a service: CaaS)
การบริการแบบคลาวด์ประกอบด้วย การส่งมอบซอฟต์แวร์ โครงสร้างหรือปัจจัยพื้นฐาน และส่วนจัดเก็บข้อมูล ผ่านอินเตอร์เน็ต (ทั้งแยกส่วนและแบบผสมผสานรวมกันเป็นแพลทฟอร์ม) ขึ้นอยู่กับความต้องการของผู้ใช้
การประมวลผลแบบคลาวด์สามารถติดตั้งใช้งาน ในสามรูปแบบ คลาวด์ส่วนบุคคล (private cloud),คลาวด์สาธารณะ (public cloud), และ ไฮบริดคลาวด์ (hybrid clouds)
โดยคลาวด์สาธารณะ จะให้บริการแบบ "as a service" บนอินเตอร์เน็ต ด้วยการควบคุมเพียงเล็กน้อย หรือไม่มีการควบคุมเลย ภายใต้เทคโนโลยีสนับสนุนขั้นพื้นฐาน
ส่วนคลาวด์แบบส่วนบุคคล จะรองรับกิจกรรมและหน้าที่ หรือฟังก์ชั่น แบบ "as a service" เช่นเดียวกัน แต่จะติดตั้งในอินทราเน็ตขององค์กร หรือบนศูนย์ข้อมูล (data center)
ในขณะที่ไฮบริดจ์คลาวด์ จะผสมผสานประสิทธิภาพทั้งของคลาวด์สาธารณะและคลาวด์ส่วนบุคคลเข้าด้วยกัน
ในสถาณการณ์จำลอง กิจกรรมและงานต่างๆ จะถูกดำเนินการแบบสาธารณะหรือส่วนบุคคลได้ตามต้องการ
ในขณะนี้ ยังอยู่ในขั้นเริ่มต้นของการพัฒนา โดยมีเป้าหมายที่จะเพิ่มความสะดวกต่างๆ ด้วยรูปแบบของการประมวลผลแบบคลาวด์
เบื้องต้น เมื่อนำระบบคลาวด์มาใช้ ทรัพยากรจะถูกจัดสรรค์แบบไดนามิก เพิ่มหรือลด ขึ้นอยู่กับความต้องการของผู้ใช้
ด้วยความสามารถที่ยืดหยุ่นเช่นนี้ ทำให้การใช้งานคลาวด์สามารถขยายหรือลด แปรผันตามจุดสูงสุดของการใช้งานในแต่ละช่วงเวลาได้อย่างมีประสิทธิภาพ
แอพพลิเคชั่นในคลาวด์สามารถขยายตามจำนวนผู้ใช้ และการใช้งาน เมื่อความต้องการใช้งานเปลี่ยนแปลง
ถัดไปคือ ลูกค้าของคลาวด์สามารถใช้ทรัพยากรบนคลาวด์ได้ตามนิยม
ผู้ให้บริการคลาวด์ทำหน้าที่จัดสรรการบริการตามความต้องการ ทั้งการประมวลผล การจัดเก็บข้อมูล ซอฟต์แวร์ โปรเซส รวมทั้งทรัพยากรต่างๆ
หลังจากการใช้ทรัพยากรต่างๆ แล้ว ก็จะคืนทรัพยากรเหล่านั้นให้แก่ระบบเมื่อไม่ต้องการใช้งานต่อไป
ประการที่สาม โดยปกติการบริการแบบคลาวด์ เป็นไปตามมาตรฐาน APIs (Application Program Interfaces)
นั่นหมายความว่า การบริการต่างๆ ต้องเป็นไปตามมาตรฐานที่ โปรแกรมหรือแหล่งข้อมูลต้องสามารถสื่อสารกับระบบ โปรแกรม อื่นๆ ได้นั่นเอง
ด้วยความสามารถเหล่านี้ ทำให้ลูกค้าได้รับความสะดวกสะบาย สามารถเชื่อมต่อบริการคลาวด์ต่างๆ เข้าด้วยกัน
และประการสุดท้าย ด้วยรูปแบบการประมวลผลแบบคลาวด์ ทำให้ลูกค้า มีค่าใช้จ่ายเฉพาะเท่าที่ตนเองใช้เท่านั้น ลดความสูญเปล่าการใช้งานทรัพยากรได้เป็นอย่างดี
การใช้งานคลาวด์ลูกค้าจึงชำระการใช้งานทรัพยากรที่ใช้ เหมือนการใช้ไฟฟ้าในครัวเรือนคือใช้เท่าไร จ่ายเท่านั้น ซึ่งยุติธรรมต่อผู้บริโภค
ด้วยความสามารถนี้ทำให้คลาวด์เป็นประโยชน์อย่างมากในการบริหารจัดการทางด้านการเงิน
ผู้ให้บริการคลาวด์ได้นำการจำลองเสมือนจริง (Virtualization) มาใช้เป็นเทคโนโลยีหลัก
โดยในมุมมองของลูกค้า หมายถึง ความพยายามที่จะเอ้าท์ซอสต์ ทางด้านเทคโนโลยีสารสนเทศ แอพพลิเคชั่น และทักษะ ในรูปแบบจ่ายตามที่ใช้ (pay per use)
ด้วยแนวคิดของการประมวลผลแบบคลาวด์ จึงเป็นความฝันขององค์กรทั้งขนาดเล็ก ขนาดกลาง และใหญ่
และด้วยรูปแบบเช่นนี้ พลังของระบบเสมือนจริง จึงได้ถูกนำไปใช้ให้เกิดประโยชน์และมูลค่าทางธุรกิจ
อย่างไรก็ตาม แม้ว่าประโยชน์ของคลาวด์จะมีมากมาย (ยืดหยุ่น ลดต้นทุน ความเป็นอิสระทางด้านอุปกรณ์ ประสิทธิภาพ และอื่นๆ ) แต่มันก็ยังต้องได้รับการสนับสนุน และองค์กรยังคงต้องเรียนรู้ที่จะนำมาใช้ให้เกิดประโยชน์สูงสุดต่อไป
ดังเช่น อะมาซอน บริษัทยักษ์ใหญ่ทางด้านอีคอมเมอร์ซ ได้เพิ่มบทบาทในการให้บริการคลาวด์ เกิดความผิดพลาดขึ้น ทำให้ส่งผลกระทบอย่างมากต่อวงการธุรกิจ ที่นำคลาวด์ของอะมาซอนมาใช้งาน
ด้วยเหตุนี้องค์กรธุรกิจ จึงต้องให้ความสำคัญกับการใช้คลาวด์เป็นปัจจัยพื้นฐานในการทำธุรกิจ เพื่อไม่ให้เกิดความผิดพลาด หรือผิดพลาดน้อยที่สุด


การจำลองเสมือนจริง (Visualization) วิช่วลไลซ์เซชั่น

Visualization หมายถึงการสร้างอุปกรณ์เสมือนหรือทรัพยากรเสมือน เช่นเซิร์ฟเวอร์หรืออุปกรณ์จัดเก็บข้อมูล ดังที่เราคุ้นเคยกันในการแบ่งพาร์ติชั่นของฮาร์ดดิสก์ในคอมพิวเตอร์ ที่ทำให้เราเห็นว่าคอมพิวเตอร์มีฮาร์ดดิสก์สองลูก ทั้งที่เราติดตั้งฮาร์ดดิสก์ไว้เพียงหนึ่งเดียว ปัจจุบ้นเราได้ยินคำต่างๆ มากมายเช่น เซิร์ฟเวอร์เสมือน (server virtualization), ที่จัดเก็บข้อมูลเสมือน (storage virtualization), เครือข่ายเสมือน (network virtualization) และคำว่าเสมือนหรือเวอร์ช่วลไลซ์ในบริบทอื่นๆ อีกเป็นจำนวนมาก การทำเซิร์ฟเวอร์เสมือนจริงเป็นการแบ่งพาร์ทิชั่นทางกายภาพของเซิร์ฟเวอร์ให้เป็นเซิร์ฟเวอร์เสมือนที่มีขนาดเล็กได้หลายเครื่อง โดยเซิร์ฟเวอร์เสมือนจริงภายใต้สภาพแวดล้อมเสมือนเหล่านี้ อาจเรียกว่าเสมือนจริง/เวอร์ช่วล หรือ เซิร์ฟเวอร์ส่วนตัวก็ได้ ความสามารถเหล่านี้ทำให้เราสามารถเอาชนะข้อจำกัดเดิมๆ ที่มีอยู่ในสถาปัตยกรรมแบบที่ใช้เซิร์ฟเวอร์เป็นฐาน (server-based architectures) ที่ต้องทำงานเป็นเอกเทศ มีขนาดใหญ่ ราคาแพง ปัจจุบันเซิร์ฟเวอร์หนึ่งเครื่องสามารถถูกแบ่งออกเป็นเซิร์ฟเวอร์เสมือนจริงหลายๆ เครื่อง และทำงานเป็นอิสระจากกัน โดยที่มีกายภาพอยู่ในเครื่องเดียวกัน นอกจากนี้เซิร์ฟเวอร์เสมือนแต่ละเครื่องยังสามารถทำงานด้วยระบบปฏิบัติการของตนเอง สามารถรีบูทเครื่องได้อย่างอิสระ นั่นหมายถึงการทำงาน หรือการดาวน์ของเครื่องเซิร์ฟเวอร์เสมือนแต่ละเครื่อง จะไม่ส่งผลกระทบกับเซิร์ฟเวอร์เสมือนเครื่องอื่นๆ แม้ว่าในทางกายภาพจะอยู่บนเครื่องเดียวกันก็ตาม ทำให้เซิรฟเวอร์เสมือนเหล่านี้ไม่จำเป็นต้องมีฮาร์ดแวร์เพื่อรองรับการทำงานมาก เหมือนกับเซิร์ฟเวอร์ทั่วไป ทำให้ลดต้นทุนได้มาก และยังทำให้ลดต้นทุนในการบริหารจัดการลงได้อีกด้วย จากผลสำรวจของ Gartner พบว่า ธุรกิจขนาดกลางกว่าร้อยละ 75 จะหันมาใช้เซิร์ฟเวอร์เสมือนจริงในการดำเนินธุรกิจ ในปี 2012 นั่นหมายถึงองค์กรส่วนใหญ่พยายามที่จะลดต้นทุน เพิ่มประสิทธิภาพ และเพิ่มความสามารถพร้อมใช้งาน และการใช้เซิร์ฟเวอร์เสมือนสามารถทำให้องค์กรบรรลุเป้าหมายได้ นอกจากนี้หน่วยจัดเก็บข้อมูลเสมือนจริง (Storage virtualization) ที่สามารถควบรวมหน่วยจัดเก็บข้อมูลบนเครือข่ายที่อยู่แยกกัน ต่างสถานที่กัน รวมเข้าด้วยกันเป็นหน่วยเดียวกัน หน่วยจัดเก็บข้อมูลแบบเครือข่าย storage area network (SAN) จึงถูกนำมาใช้เป็น หน่วยจัดเก็บข้อมูลเสมือนจริง เพื่อสร้างเครือข่ายย่อยความเร็วสูง ที่สามารถแบ่งสรรหน่วยจัดเก็บข้อมูลได้เป็นอย่างดี ด้วยสภาพแวดล้อมที่สามารถ สำรอง จัดเก็บ และกู้คืน ข้อมูล ได้อย่างสะดวก ง่ายดายและรวดเร็ว