“UML” ภาษาที่ System Analysis ใช้คุยกับ Programmer

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

การพัฒนาซอฟต์แวร์เชิงธุรกิจ โปรแกรมเมอร์จะทำงานประสานกับฝ่ายวิเคราะห์และออกแบบระบบ และฝ่ายทดสอบระบบก่อนส่งมอบให้ผู้ใช้งานจริง ปัจจุบันการพัฒนาซอฟต์แวร์ด้วยหลักการเชิงวัตถุ (Object Orientation) มีหลักการสำคัญ คือ จับต้องได้ (Object), มีการจัดกลุ่มความคิดที่คล้ายกันเป็นหน่วยเดียวกันเพื่ออ้างถึงด้วยชื่อเดียวกัน เข้าใจง่ายๆ ก็คือการรวมโอเปอร์เรชั่นและแอตทริบิวต์เข้าเป็นหน่วยเดียวกัน (Encapsulation), เป็นแม่พิมพ์หรือคลาส (Class) , อินสแทนซ์ (Instance), แอตทริบิวต์ (Attribute), โอเปอร์เรชั่น (Operation) หรือเมธอด (Method), ลายเซ็น (Signature), ข้อความ (Message), อินเทอร์เฟซ (Interface), การสืบทอดคุณสมบัติ (Inheritance), ความสัมพันธ์ระหว่างคลาสหรือออบเจ็กต์ (Relationship), การเปลี่ยนรูป (Polymorphism) หลักการเชิงวัตถุนี้เป็นเทคโนโลยีที่แพร่หลายและมีโปรแกรมภาษาที่สนับสนุนการทำงานด้วยหลักการนี้หลายภาษา เช่น Java, C++, Delphi, Visual Basic เป็นต้น แต่ก็ยังต้องอาศัยการวิเคราะห์และออกแบบด้วยจึงจะได้ซอฟต์แวร์ที่มีความสมบูร์ในทุกๆ ด้าน

UML หรือชื่อเต็ม Unified Modeling Language เริ่มต้นในปี 1994 ในนามของ Unified Method จนเกิดโมเดลสำเร็จและเป็นที่แพร่หลายในปี 1995 โดย Grady Booch, James Rumbaugh และ Ivar Jacobson และถูกพัฒนาต่อมาเรื่อยๆ จากรุ่น 1.1 ในปี 1997 จนปัจจุบันอยู่ที่รุ่น 2.0

ข้อดีของ UML

  • เป็นภาษารูปภาพมาตรฐาน (Standard Visual Modeling Language) หรือภาษาสากล สามารถใช้ในการแลกเปลี่ยนโมเดลได้อย่างสื่อความหมาย
  • นำเสนอและสนับสนุนหลักการเชิงวัตถุได้ครบถ้วนชัดเจน ทำให้โปรแกรมเมอร์สามารถเข้าใจปัญหาและหาวิธีแก้ได้อย่างรวดเร็วและง่ายยิ่งขึ้น
  • ไม่ผูกติดกับภาษาโปรแกรมภาษาใดๆ
  • ง่ายต่อการทำความเข้าใจ
  • ลดภาระ เวลา และค่าใช้จ่ายการพัฒนาระบบเนื่องจากสามารถถูกแปลงเป็นภาษาที่ใช้ในการสร้างระบบขึ้นจริงได้อย่างอัติโนมัติ
  • สนับสนุนการขยายปรับปรุงระบบ การแก้ไขหรือเพิ่มเติมสามารถทำกับโมเดลก่อนลงมือแก้ไขจริง
  • สามารถบันทึกความคิดของนักพัฒนาหรือโปรแกรมเมอร์ในลักษณะของเอกสาร

องค์ประกอบของ UML

1. สัญลักษณ์ทั่วไป (Things) คือสัญลักษณ์พื้นฐานที่ใช้ในการสร้างไดอะแกรมต่างๆ โดยแบ่งเป็นหมวดย่อยๆ ดังนี

  • หมวดโครงสร้าง (Structural) ได้แก่ ยูสเคส คลาส อินเทอร์เฟซ คอมโพเนนต์ คอลแลบอเรชั่น และโหนด
  • หมวดพฤติกรรม (Behavioral) หรือส่วนที่เป็นไดนามิกของยูเอ็มแอล ได้แก่ อินเตอร์แอ็กชั่น สเตตแมชชี
  • หมวดจัดกลุ่ม (Grouping) ใช้ในการรวบรวมองค์ประกอบต่างๆ ในโมเดลให้เหมาะสม ได้แก่ แพ็กเกจ
  • หมวดคำอธิบายประกอบ (Annotational) ได้แก่ โน้ต

2. ความสัมพันธ์ (Relationships) มี 3 ชนิด

  • ความสัมพันธ์แบบพึ่งพา (Dependency Relationship)
  • ความสัมพันธ์แบบเกี่ยวพันธ์ (Association Relationship)
  • ความสัมพันธ์แบบเจเนอรัลไลเซชั่น (Generalization Relationship) ได้แก่ ความสัมพันธ์แบบสืบทอดคุณสมบัติ (Inheritance)

3. ไดอะแกรมต่างๆ (Diagram) ประกอบด้วย 8 ไดอะแกรม

  • ยูสเคสไดอะแกรม (Use Case Diagram) ใช้ในการโมเดลฟังก์ชันการทำงานของระบบ
  • คลาสไดอะแกรม (Class Diagram) ใช้ในการโมเดลคลาสต่างๆ ที่จำเป็นในระบบ
  • แอ็กทิวิตี้ไดอะแกรม (Activity Diagram) ใช้หลักการเดียวกับโฟลว์ชาร์ต (Flowchart)
  • สเตตชาร์ตไดอะแกรม (Statechart Diagram) ใช้สำหรับแสดงสถานะของออบเจ็กต์ระหว่างทำงาน
  • คอลแลบอเรชั่นไดอะแกรม (Collaboration Diagram) ใช้แสดงการทำงานร่วมกันของออบเจ็กต์ในระบบ
  • ซีเควนซ์ไดอะแกรม (Sequence Diagram) ใช้ในการโมเดลกิจกรรมต่างๆ ที่เกิดขึ้นกับออบเจ็กต์ในระบบ
  • คอมโพเนนต์ไดอะแกรม (Component Diagram) ใช้สร้างโมเดลของคอมโพเนนต์ในระบบ
  • ดีพลอยเมนต์ไดอะแกรม (Deployment Diagram) ใช้แสดงการติดตั้งใช้งานส่วนประกอบต่างๆ ของระบบ

ปัจจุบันมีเครื่องมือประเภท Visual Modeling Tool ที่ใช้ในการสร้างยูเอ็มแอลไดอะแกรมมากมาย เช่น Rational Rose, Together เป็นต้น

อ้างอิงข้อมูลจาก : หนังสือ “UML ภาษามาตรฐานเพื่อผู้พัฒนาซอฟต์แวร์”

ความสงสัยของกบในกะลากับคำว่า “Cloud Computing”

  

ล่วงเข้าหน้าฝน หันหน้าเข้าปรึกษาอาจารย์กูเกิ้ล (Google) เพื่อหาคำตอบให้กับตัวเอง จะได้ออกนอกกะลาใบใหญ่สักที หลังจากเก็บความสงสัยไว้นานมากแล้ว ในประเด็นหนึ่งซึ่งสะดุดหู เมื่อครั้งได้ฟังท่านวิทยากรบรรยาย คำ ๆ นั้นก็คือ  “Cloud Computing (คลาวด์คอมพิวติ้ง) หรือ การประมวลผลแบบกลุ่มเมฆ

Cloud Computing กับคำนิยาม

คำว่า Cloud Computing มีผู้ได้ให้คำนิยามไว้หลากหลาย เช่น

”การประมวลผลที่อิงกับความต้องการของผู้ใช้ โดยผู้ใช้สามารถระบุความต้องการไปยังซอฟต์แวร์ของระบบ Cloud Computing จากนั้นซอฟต์แวร์จะร้องขอให้ ระบบ จัดสรรทรัพยากรและบริการให้ตรงกับความต้องการของผู้ใช้ โดยระบบสามารถเพิ่มหรือลดจำนวนทรัพยากรให้พอเหมาะกับความต้องการของผู้ใช้โดยที่ผู้ใช้ไม่ต้องทราบการทำงานเบื้องหลังว่าเป็นอย่างไร” โดย JavaBoom Collection

หรือ คำนิยามจากวิกิพีเดีย ที่ว่า “Cloud Computing อ้างถึงทรัพยากรสำหรับการคำนวณผลที่ถูกเข้าถึง ซึ่งโดยทั่วไปถูกเป็นเจ้าของและถูกดำเนินการโดยผู้ให้บริการบุคคลที่ 3 (third-party provider) ซึ่งได้รวบรวมพื้นฐานที่จำเป็นทั่วไปเข้าไว้ด้วยกันในตำแหน่งที่ตั้งของศูนย์คอมพิวเตอร์ (Data Center)  โดยผู้บริโภคบริการ cloud computing เสียค่าใช้จ่ายเพื่อความสามารถการคำนวณหรือการประมวลผลตามที่ต้องการ และไม่จำเป็นต้องรู้หรือเข้าใจในเทคโนโลยีที่สำคัญซึ่งซ่อนอยู่ อันที่ถูกใช้เพื่อเพิ่มประสิทธิภาพของเครื่องแม่ข่าย (server)  อย่างไรก็ตามมีตัวเลือกสำหรับผู้พัฒนาที่ต้องรู้และต้องคำนึงถึงในเทคโนโลยีสำคัญซึ่งซ่อนอยู่ในส่วนของการบริการแพล็ตฟอร์ม (platform services)

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

มาถึงตรงนี้คงพอจะเห็นภาพของ Cloud Computing บ้างแล้ว จึงขอกล่าวถึงคำที่เกี่ยวข้องอื่น ๆ อีก เช่น

  • Cloud Provider สำหรับคำนี้คงไม่ต้องอธิบายมาก เพราะหมายถึงผู้ให้บริการระบบ Cloud นั่นเอง 
  • Cloud Storage คือสถานที่เก็บทรัพยากรสำหรับระบบ Cloud

ความแตกต่างระหว่าง Cloud Computing กับ Hosting ประเภทต่างๆ เช่น  Application Hosting หรือพื้นที่ให้บริการโปรแกรมประยุกต์, Web Hosting หรือพื้นที่ให้บริการเว็บไซต์, File Hosting หรือพื้นที่ให้บริการจัดเก็บไฟล์ข้อมูลนั้น อยู่ตรงที่ Cloud Storage มีอิสระในการปรับขีดความสามารถ สมรรถนะ และขนาดทรัพยากรได้ตามภาระงาน เนื่องจากไม่มีข้อจำกัดในการขยายทรัพยากรสำหรับผู้ให้บริการ เพราะมีความร่วมมือกับผู้ให้บริการบุคคลที่สามที่เป็นผู้จัดหาและจัดสรรทรัพยากรอยู่แล้ว ดังนั้นไม่ว่าจำนวนโปรแกรมจะใช้ทรัพยากรในการประมวลผลมากขึ้นเท่าไร หรือต้องใช้พื้นที่ในการเก็บข้อมูลเพิ่มขึ้นอีกเท่าไหร่ ผู้ใช้บริการ และผู้ให้บริการ Cloud ไม่จำเป็นต้องกังวลในข้อจำกัดนี้ อย่างไรก็ตามเรื่องค่าใช้จ่ายนั้นจะขึ้นกับการจ่ายตามที่ใช้จริง (pay-per-use) และอาจมีเรื่องอื่นๆ อีกขึ้นอยู่กับข้อตกลงของแต่ละเจ้าที่ให้บริการ โดยปัจจุบันมีผู้ให้บริการอยู่มากมาย เช่น Google Apps, Google App Engine, IBM Blue Cloud, Amazon EC2 เป็นต้น

เปรียบเทียบข้อดี ข้อเสีย ของ Cloud Computing

 

ข้อดี

ข้อเสีย

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

2.ลดความเสี่ยงจากการเริ่มต้นหรือทดลองโครงการ

3.มีความยืดหยุ่นในการเพิ่มหรือลดระบบตามความต้องการ

4.ได้เครื่องแม่ข่ายที่มีประสิทธิภาพ มีระบบสำรองข้อมูลที่ดี มีเครือข่ายความเร็วสูง

5.มีผู้เชี่ยวชาญดูแลระบบและพร้อมให้บริการช่วยเหลือ 24 ชั่วโมง

1.เนื่องจากเป็นการใช้ทรัพยากรที่มาจากหลายที่หลายแห่งทำให้อาจมีปัญหาในเรื่องของความต่อเนื่องและความเร็วในการเข้าทรัพยากรมากกว่าการใช้บริการ Host ที่ Local หรืออยู่ภายในองค์การของเราเอง

2.ยังไม่มีการรับประกันในการทำงานอย่างต่อเนื่องของระบบและความปลอดภัยของข้อมูล

3.ความไม่มีมาตรฐานของแพลทฟอร์ม ทำให้ลูกค้ามีข้อจำกัดสำหรับตัวเลือกในการพัฒนาหรือติดตั้งระบบ

Cloud Computing กับความปลอดภัย (Security)

ในประเด็นเรื่องความปลอดภัยนั้น อันที่จริงในเชิงเทคนิคลูกค้าหรือผู้ใช้บริการสามารถทำได้ในระดับหนึ่ง เช่น การทำ Virtualization โดยลูกค้ามีสิทธิ์เต็มที่ในลักษณะของผู้ดูแลระบบเพื่อการกำหนดความปลอดภัยให้กับเครื่อง หรือ Virtual Machine ของตน, การใช้ระบบแจ้งเตือนเมื่อมีผู้ดูแลระบบพยายามดูข้อมูลของลูกค้า และการ Monitoring ทั้งห้อง data center จนถึงขั้น capture หน้าจอ admin

แต่ทั้งนี้ยังคงมีจุดอ่อนสำคัญที่ผู้ใช้บริการควรตระหนักถึง นั่นคือ เมื่อเป็นการจ้างให้บุคคลภายนอกเข้ามาดูแลระบบของเรา เราจะมั่นใจได้อย่างไรว่าคนนั้นจะไม่แอบเก็บข้อมูลไปใช้เพื่อประโยชน์ของตนเองหรือเปิดเผยข้อมูลแก่บุคคลอื่น ยิ่งถ้าเป็นหน่วยงานที่เกี่ยวข้องกับความมั่นคงของประเทศ ข้อมูลยิ่งเป็นสิ่งที่สำคัญมากๆ หรือถ้าเป็นองค์กรทางด้านการเงิน ถึงแม้เราจะมีระบบตรวจสอบ หรือ audit เพื่อติดตามว่าใครทำอะไร ตรงไหน แต่เมื่อเกิดเหตุและจับได้ก็คงทำได้แค่ลงโทษตามกฎบริษัทหรือดำเนินคดีตามกฎหมาย แต่ความเสียหายได้เกิดขึ้นแล้ว อย่างไรก็ตามไม่ว่าจะเป็นการจัดจ้างบุคคลภายนอก (outsourcing) หรือ ใช้บุคลากรภายใน เหตุการณ์เช่นนี้ก็สามารถเกิดขึ้นได้ ดังนั้นเราต่างต้องอาศัยความเชื่อใจและใช้จรรยาบรรณในการประกอบอาชีพ สิ่งที่ผู้ให้บริการ Cloud หรือ Cloud Provider ทำให้ได้ ก็คือ การรับประกันสัญญา หรือกำหนดมาตรฐานการดูแลระบบ และยึดมั่นในมาตรฐานนั้น นอกจากนี้ควรมีการควบคุมการเปิดให้บริการของ Cloud Provider นั่นคือ มีการกำหนดว่าบริษัทที่จะเป็น Cloud Provider ได้ อาจต้องได้รับการรับรอง หรือมี certification อะไรรับรองบ้าง ต้องมี ISO ควบคุม และต้องมีเทคโนโลยีความปลอดภัยอะไรเสนอต่อลูกค้า (Cloud Consumer) บ้าง เป็นต้น

   

อ้างอิงข้อมูลจาก :

  • JavaBoom Collection 
  • Wikipedia
  • I-DIN NINTH CO.,LTD.
  • Whatis.com

“Chrome” น้องใหม่บราวเซอร์จากค่าย Google

            เมื่อไม่นานมานี้ได้มีโอกาสวางงานเพื่ออกไปร่วมสัมมนาในหัวข้อแนวโน้มและทิศทางของการจัดการเทคโนโลยีสารสนเทศและการสื่อสารซึ่งแนวโน้มในอันดับต้นๆ ไม่ว่าจะเป็นSoftware as a service(SaaS), Service Oriented Architecture(SOA) หรือ กระแส OpenSource ซึ่งยังคงมาแรงในปัจจุบันโดยเฉพาะในหน่วยราชการหลายแห่งที่ได้เริ่มนำมาใช้กันบ้างแล้ว จะเป็นเรื่อง Software ในฐานะผู้ใช้งานเทคโนโลยีคนหนึ่งเห็นว่า ไม่ว่าแนวโน้มของ IT จะไปในทิศทางใด  แนวโน้มของ IT ในเอเชียในปัจจุบันกระแสตื่นตัว Open Source ทำให้เกิดทางเลือกและนวัตกรรมใหม่ ที่เป็นประโยชน์ต่อผู้บริโภค   ทำให้นึกถึงโปรแกรมน้องใหม่จากค่าย Google ที่เปิดตัวไปเมื่อราวๆ กลางปี 2551 ที่รู้จักกันในนาม Chrome ซึ่งเป็นโปรแกรมเว็บบราวเซอร์ที่เกิดขึ้นเพื่อตอบสนองความต้องการพื้นฐานของนักคอมพิวเตอร์อย่างเราๆ คือ ต้องโหลดข้อมูลเร็ว ต้องปลอดภัย ใช้งานง่าย เป็นต้น

  

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

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

Chrome เป็นเว็บบราวเซอร์ที่มี Task Manager สามารถดูได้ว่าแต่ละเว็บที่เราเปิดอยู่นั้น เว็บใดใช้หน่วยความจำหรือโหลดข้อมูลมากน้อยเท่าใด ซึ่งมีรูปแบบคล้ายการทำงานของ Task Manager ใน Operating System ทำให้ Chrome เป็นเว็บบราวเซอร์ที่น่าสนใจยิ่งขึ้นไปอีก นอกจากความสามารถที่กล่าวไปแล้วนั้น Interface ของ Chrome ยังดูเรียบง่ายสบายตาด้วยสีโทนฟ้าอ่อน สำหรับผู้ที่คุ้นเคยกับเว็บบราวเซอร์จากค่ายไมโครซอฟต์ถ้าคิดจะเปลี่ยนใจมาใช้ก็ไม่น่าจะมีปัญหา เพราะ Chrome ถูกออกแบบมาให้ใช้งานง่ายไม่ซับซ้อน หากต้องการทดลองใช้สามารถดาวน์โหลดโปรแกรมได้ที่ http://www.google.com/chrome