Tuesday, September 11, 2012

Chapter 4 Software Project Management


กิจกรรมที่ผู้จัดการโครงการต้องทำ คือ

  • เขียนแบบเสนอโครงการ
  • วางแผนและการตารางการทำงาน
  • ประเมินต้นทุน ของการพัฒนาระบบ
  • ติดตามและประเมินผล
  • จัดสรรบุคลากรและประเมิน
  • รายงานนำเสนอทุกๆช่วงรายงาน


Project Planning

 การวางแผนโปรเจคต้องจัดการบริหารตลอดทั้งโครงการ สำคัญที่สุดคือ เวลา และเครื่องมือที่นิยมนำมาวางแผน คือ Microsoft Project
  • Quality Plan แผนคุณภาพของโครงการได้ตามที่วางแผนหรือไม่
  • Validation Plan แผนใช้ในการตรวจสอบของความสมบูรณ์ของความต้องการและขั้นตอนการทำงาน
  • Configuration Management Plan แผนการจัดการขั้นตอนโครงการ และสภาพแวดล้อม
  • Maintenance Plan แผนบำรุงรักษาโครงการ วางแผนการบำรุงรักษาในอนาคต
  • Staff Development Plan แผนการอบรมและประเมินบุคลากร


Project Plan Structure 

โครงสร้างสำคัญของโครงการ ประกอบด้วย
  • บทนำ
  • ลักษณะโครงสร้างองค์กร
  • วิเคราะห์ความเสี่ยง
  • ความต้องการของฮาร์ดแวร์ และซอฟต์แวร์
  • แบ่งงานเป็นขั้นย่อยๆ
  • ตารางการทำงานของโครงการ
  • ติดตามและรายงาน

Thursday, September 6, 2012

Chapter 3 Systems Engineering


Topics Covered


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



คุณสมบัติของระบบ

 คือน้ำหนักความสำคัญของระบบ ดูความผิดพลาด ลำดับความสำคัญก่อนหลัง วัดความน่าเชื่อถือของระบบ ความสามารถในการใช้งาน มี 2 ประเภท ดังนี้
  1. คุณสมบัติที่เกี่ยวข้องกับการทำงานโดยตรง เช่น คีย์บอร์ด เป็นต้น
  2. คุณสมบัติที่ไม่เกี่ยวข้องกับการทำงาน เช่น ความน่าเชื่อถือ ความปลอดภัย เป็นต้น



Intruder Alarm System

 ระบบสัญญาณเตือนภัย มีComponent ประกอบด้วย
  1. Sensor รับขข้อมูลจากภายนอก เข้าสู่ระบบ ได้แก่ Movement Sensor
  2. Actuator เปลี่ยนสภาพแวดล้อม เปลี่ยนสัญญาณ ได้แก่ Siren
  3. Communication การติดต่อสื่อสาร ได้แก่ Telephone
  4. Co-ordination โปรแกรมหลักในการทำงาน และประสานงานให้ระบบอื่นทำงาน ได้แก่ Alarm Controller
  5. Interface การติดต่อผู้ใช้ รับและเสนอข้อมูล ได้แก่ Voice Synthesizer

The System Engineering Process 

กระบวนการวิศวกรรมระบบ นิยมใช้ Waterfall V-Model พัฒนาแบบคู่ขนานกันไป


Requirement Definition เก็บความต้องการของระบบจากผู้ใช้

-Functional Requirement มีฟังก์ชั่นการทำงานอะไรบ้างที่เกี่ยวข้องกับระบบ เช่น ตรวจสอบสิทธิ์
-Non-Functional Requirement มีฟังก์ชั่นการทำงานที่ไม่เกี่ยวข้องกับระบบ
-Unacceptable System การไม่ต้องการให้สิ่งนั้นเกิดขึ้นกับระบบ ถ้าเกิดข้อผิดพลาดจะแก้ไขอย่างไร เช่น การล้มของระบบ
ปัญหา ความต้องการเปลี่ยนโดยที่ระบบยังพัฒนาไม่เสร็จ เทคโนโลยีเปลียนทั้งซอฟต์แวร์และฮาร์ดแวร์ การเกิดปัญหาหลังการติดตั้ง




System Design การออกแบบระบบโดยรวมทั้งหมด


  • Partition Requirement การแบ่งความต้องการ วิเคราะห์และแบ่งโครงสร้างด้วยวิธีที่เหมาะสม
  • Identify sub-system กำหนดระบบย่อย นำระบบใหญ่มาแบ่งเป็นระบบย่อยๆที่เหมาะสม
  • Assign requirement to sub-systems กำหนดความต้องการในแต่ล่ะระบบย่อย ต้องสอดคล้องกับความต้องการของระบบทั้งหมด กำหนดส่วนประสานของระบบย่อย ให้สามารถผสานกันได้
  • Specify sub-systems functionality กำนหดหน้าที่การทำงานของระบบย่อย
  • Define sub-systems interfaces การทำให้แต่ละระบบย่อยให้สามารถสื่อสารกับระบบย่อยๆกันอย่างไร

ปัญหา เป็นเรื่องยากที่จะแบ่งความต้องการ ซอฟต์แวร์จะสามารถแก้ปัญหาดีกว่า ฮาร์ดแวร์ และแพตฟอร์มไม่ตรงกัน


Sub-System Development การพัฒนาระบบย่อยๆ 

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




System Integration นำระบบย่อยๆมารวมกัน และพัฒนาร่วมกัน 

โดยนำระบบที่มีความสำคัญมาผสมผสานกันก่อน เพื่อป้องกันการล้มของระบบ



System Installation ติดตั้งระบบการใช้งานาน

ปัญหา สภาพแวดล้อมและทางกายภาพไม่ตรงกับที่คิดไว้ การต่อต้านจากผู้ใช้ การวางแผนฝึกอบรมให้ผู้ใช้ ไม่ใช้ระบบตามที่ออกแบบมา การเริ่มใช้งานของะบบใหม่กับระบบอื่น
System Evolution ปรับปรุงระบบหลังการใช้งานไประยะหนึ่ง หรือUpdate Version
ปัญหา เกิดความต้องการใหม่ ความต้องการเปลี่ยน เกิดต้นทุนเพิ่มขึ้นในการพัฒนา
System Decommissioning การปลดระวางหรืเลิกใช้งาน ระบบเดิมต้องทำการเชื่อมต่อกับระะบใหม่ให้ได้ก่อนที่จะปลดละวาง โดยมีการสำรองข้อมูลไว้เพื่อป้องกันการผิดพลาด

Monday, September 3, 2012

Chapter 2 Software Process


กระบวนการซอฟต์แวร์ (Software Process)


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

กิจกรรมพื้นฐานทั้งหมด 4 กิจกรรม ที่ใช้กับกระบวนการผลิตซอฟต์แวร์


1. software specification

นิยามหน้าที่ต่างๆที่ต้องมีในซอฟต์แวร์ และระบุข้อจำกัดต่างๆ ที่เกี่ยวข้องกับกระบวนพัฒนาซอฟต์แวร์ เช่น กฎหมาย , อัตราภาษี , กฎระเบียบต่างๆที่เกี่ยวในการพัฒนาซอฟต์แวร์ 

2. Software Design and Implementation

กิจกรรมนี้ทำการสร้าง / พัฒนาซอฟต์แวร์ให้ตรงกับข้อกำหนด (specification) 

3. software validation

กิจกรรมนี้ทำการตรวจสอบความถูกต้องของซอฟต์แวร์ เพื่อให้เกิดความมั่นใจ ว่าซอฟต์แวร์ที่ผลิตขึ้นได้ตรงกับความต้องการของลูกค้า 

4. software evolution

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


Waterfall model



ขั้นตอนแบบน้ำตก
  • การวิเคราะห์ความต้องการและความหมาย
  • ออกแบบระบบซอฟแวร์
  • การดำเนินงานและการทดสอบ
  • บูรณาการและการทดสอบระบบ
  • การดำเนินงานและการบำรุงรักษา
ข้อเสียเปรียบหลักของน้ำตกจำลองเป็นความยากลำบากของการเปลี่ยนแปลงรองรับหลังจากกระบวนการเป็นชิ้น ระยะหนึ่งจะต้องมีสมบูรณ์ก่อนที่จะย้ายไปยังขั้นตอนต่อไป


Evolutionary development




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


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


Spiral model of the software process




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

Saturday, September 1, 2012

Chapter 1 Introducation to Software Engineering

วิศวกรรมซอฟต์แวร์ คืออะไร

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

ความแตกต่างระหว่างวิทยาการคอมพิวเตอร์และวิศวกรรมซอฟต์แวร์


วิทยาการคอมพิวเตอร์ (Computer Science)
อยู่บนรากฐานของวิทยาศาสตร์ ซึ่งเน้นการทำความเข้าใจและค้นหาความจริงเกี่ยวกับความรู้ทางคอมพิวเตอร์ เพื่อสร้างแนวคิด/ทฤษฎีใหม่ หรือ ปฏิเสธแนวคิด/ทฤษฎีเดิม และขยายวงความรู้ให้กว้างขึ้นจากแนวคิด/ทฤษฎีที่มีอยู่

วิศวกรรมซอฟต์แวร์ (Software Engineering)
อยู่บนรากฐานของวิธีการทางวิศวกรรมศาสตร์ ซึ่งประยุกต์แนวคิด/ทฤษฎีทางวิทยาศาสตร์ คณิตศาสตร์และเทคโนโลยีขณะนั้นในการสร้างผลิตภัณฑ์ที่เป็นประโยชน์และปลอดภัยต่อสาธารณะ

ประเด็นความรับผิดชอบอย่างมืออาชีพ


1.วิศวกรรมซอฟต์แวร์จะต้องรักษาความลับของลูกค้าหรือนายจ้าง
2.วิศวกรรมซอฟต์แวร์ไม่ควรอวดวามสามารถที่ไม่เป็นจริง และไม่ควรรับงานที่ไม่ถนัด
3.วิศวกรรมซอฟต์แวร์ควรใช้ความถนัดทางด้านเทคนิก
4.วิศวกรรมซอฟต์แวร์ควรระมัดระวังไม่ให้ละเมิดกฎหมายท้องถิ่น

หน่วยงานที่กำหนดประมวลจริยธรรม Code of Ethics คือ ACM/IEEE ให้กับวิศวกรรมซอฟต์แวร์ มีข้กำหนด 8 ข้อดังนี้


1.PUBLIC วิศวกรรมซอฟต์แวร์จะต้องปฎิบัติหน้าที่โดยคำนึงถึงผลประโยชน์ส่วนรวมด้วย
2.CLIENT AND EMPLOYER วิศวกรรมซอฟต์แวร์จะต้องคำนึงถึงความต้องการของลูกค้าและนายจ้าง
3.PRODUCT วิศวกรรมซอฟต์แวร์จะต้องผลิตผลงานตามหลักสูงสุดของหลักวิชาการ
4.JUDGMENT วิศวกรรมซอฟต์แวร์จะต้องตัดสินใจอย่างอิสระ เป็นตัวของตัวของตัวเอง โดยยึดมั่นในหลักวิชาการ
5.MANAGEMENT วิศวกรรมซอฟต์แวร์จะต้องเผยแพร่การรักษาจริยธรรมนี้ ในฐานะผู้บริหาร หรือหัวหน้า
6.PROFESSION วิศวกรรมซอฟต์แวร์จะต้องยึดมั่นในคุณธรรม และรักษาชื่อเสียงในวิชาชีพโดยคำนึงถึงผลปรโยชน์ส่วนรวม
7.COLLEAGUES วิศวกรรมซอฟต์แวร์จะต้องให้ความเป็นธรรม และสนับสนุนเพื่อนร่วมงาน
8.SELF วิศวกรรมซอฟต์แวร์จะต้องพัฒนาตัวเองอยู่เสมอ

ความรับผิดชอบทางจริยธรรมของนักวิศวกรรมซอฟต์แวร์


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

คุณสมบัติของซอฟต์แวร์ที่ดี


1.Maintainability ต้องมีความสามารถในการบำรุงรักษา จะต้องมีการเปลี่ยนแปลงเพื่อตอบสนองต่อความต้องการของผู้ใช้ที่เปลี่ยนแปลงไป การเปลี่ยนแปลงจะต้องไม่ส่งผลกระทบต่อการทำงานของระบบ
2.Dependability ความสามารถในการพึ่งพา ความน่าเชื่อถือ ต้องผ่านการตรวจสอบในทุกฟังก์ชัน
3.Efficiency ความสามารถในด้านประสิทธิภาพ เช่น ประหยัดทรัพยากรของเครื่อง
4.Usability ความสามารภในการใช้งาน เช่น ความสะดวก ความปลอดภัย สามารถเรียนรู้การใช้งานได้เร็ว