software engineering
วิชาการ # cstu20 เอกสารอานประกอบสไลดชุดที่ 2 ( 01Software_Process.ppt) http://course.cs.tu.ac.th Introduction to software engineering
เปนกลุมของวิธีการทํางานหลาย ๆ แบบตาง ๆ กัน ซึ่งกลุมการทํางานตาง ๆ เหลานั้น อาจจะแบงออกไดเปน 4 กลุมใหญ ๆ ดังนี้ 1. Specifying กําหนดความตองการของลูกคาที่อยากใหระบบเปน 2. Designing การออกแบบระบบโดยใช model หรืออื่น ๆ เพื่อใหระบบตรงกับความตองการของลูกคา 3. Implementing การเปลีย่ น design ใหเปน code มาเปน programming และ debugging เมื่อเสร็จ ขั้นตอนนี้จะได software product 1 อัน 4. Testing การทดสอบ software product ที่ไดจากขั้นตอนที่แลว วาตรงตามความตองการของลูกคาเพียงใด ตองไดรับการแกไขหรือไม
Software process
ประกอบดวย 4 ขั้นตอนหลัก ดังนี้ 1. Specification การกําหนดความตองการของลูกคา 2. Design ออกแบบระบบ 3. Validation ทดสอบความถูกตองของระบบ 4. Evolution พัฒนาหลังจากที่ระบบเสร็จสิน ้ แลว หากมีความตองการจากลูกคา ขอสังเกต implementing จะเชื่อมอยูระหวางขั้นตอน design และขั้นตอน validation ไมสามารถแยกออก จากกันไดชัดเจน เพราะในบางครั้งการ design ตองทําไปพรอม ๆ กับการ programming และในทํานอง เดียวกันบางครั้งก็มีการทดสอบระบบไปพรอม ๆ กับ programming ดวย Software process
คือ โมเดลที่ใชแสดงการทํางานของระบบในมุมมองตาง ๆ ขึ้นอยูกับวาเรา ตองการ และสนใจระบบในมุมมองใด ( อานรายละเอียดไดในชีตชุดที่แลว )
Software process model
1. waterfall model
จะแยกขั้นตอนตาง ๆ ออกจากกันอยางชัดเจน เชน requirement specification , software design , implementation , testing และอื่น ๆ ( การแยกขั้นตอนไมจําเปนจะตองเหมือนกันทุก ครั้งขึ้นอยูกับวา software engineer ตองการใชขั้นตอนใดบางในการพัฒนา software ) ลักษณะเดนของ waterfall model คือ เมื่อสิ้นสุดการทํางานใน ขั้นตอนใด ขั้นตอนหนึ่งแลวจะไมมีการกลับไปทําขั้นตอนนั้นอีก 2. Evolutionary development model นี้มีการซอนกันของขั้นตอน specification , development และ validation ลักษณะเดนของการพัฒนาแบบนี้ คือ จะมีการสราง system ในขั้นตอนแรก อยางรวดเร็ว เพื่อใหเห็นภาพคราว ๆ หลังจากนั้น ลูกคาจะเปนคนบอกวาตองการใหพัฒนาไปในทิศทางใด ซึ่งใน บางครั้งการพัฒนาโดยใช model นี้จะสงผลให system มี structure ที่ดี เนื่องจากไมไดมกี ารออกแบบไวกอน แตใชวิธีคอย ๆ เปลี่ยนไปเรื่อย ๆ ( ซึ่งเปน model ที่เราใชในการพัฒนา assign มาตลอด ) 3. formal system development การพัฒนาแบบนี้จะเนนขั้นตอน specification ในขั้นตอนนี้จะมี การเปลี่ยนแปลงความตองการของลูกคาใหเปนสมการทางคณิตศาสตรที่แนนอน และมีความผิดพลาดนอย หลังจาก นั้นจึงเปลี่ยนเปน code ในขั้นตอนของการ implementing จุดเดนของการพัฒนาแบบนี้คือ มีความแมนยําสูง มีความผิดพลาดนอยมาก มักจะใชในการพัฒนาระบบที่ไมอาจจะเกิดความผิดพลาดไดเลย เชน การพัฒนา software ควบคุมการทํางานของหัวใจเทียม 4. Reuse – base development
การพัฒนาแบบนี้จะเปนการใช component ( สวนประกอบยอย ๆ ของโปรแกรม ) มาประกอบกัน เปน system ใหญ ในการออกแบบ component แตละอันจะมีการ design เพื่อใหใชประโยชนตอไปไดในอนาคต การพัฒนาในรูปแบบนี้กําลังจะกลายเปนหัวใจสําคัญใน software engineering ยุคใหม อยางไรก็ตาม ในปจจุบันนี้ความรูในเรื่องนี้ยังมีไมมากพอที่จะกําหนดเปนทฤษฎีไดอยาง ตายตัว
waterfall model
Requirement definition
design
Implementing and unit testing
1
Integration and testing
Operation and maintenance
เมื่อวิเคราะหจาก diagram จะสังเกตวา water model จะไมมีการยอนกลับไปยังขั้นตอนที่เสร็จเรียบรอยแลว ( ตามลูกศรสีฟา ) แตเมื่อระบบเสร็จสิ้น อาจจะมีความตองการเปลีย่ นแปลง( evolution ) ในตอนนี้เราสามารถ กลับไปเริ่มพัฒนาที่ขั้นตอนใดขั้นตอนหนึ่งได เชน ตองมีการ design ใหม เราจะกลับไป ตามลูกศรหมายเลข 1 เพื่อไปยังขั้นตอน design หลังจากนั้น process จะดําเนินตาม water model จนจบการทํางานที่ operation and maintenance อีกครั้ง อยางไรก็ตามในการใชงานจริง ๆ แตละขั้นตอนมักจะมีสวนที่เหลื่อมล้ํากันอยู ตัวอยางเชน เมื่อถึงขั้นตอนของการ implementing หรือการ programming อาจจะพบวาการ design มีปญหา จึงตองกลับไปแกตัว design กอน ปญหาของ waterfall model คือ มีการแบงขั้นตอนออกเปนสวน ๆ มากเกินไป ทําใหยอนกลับไปไดยาก หากมี ความตองการเปลี่ยนแปลงจากลูกคา ดังนั้น model นี้จึงเหมาะกับการพัฒนา software product ที่มีความ เขาใจใน requirement เปนอยางดี เพื่อจะไดไมตองกลับไปแกไขในขั้นตอนแรก ๆ
2. Evolutionary development design + implementation )
มีการซอนกันของขัน้ ตอน specification , development (
และ validation
Specification
Outline description
Development
Validation
Initial version
Intermediate version
Final version
จะเห็นวาจะเริ่มตนดวยการสราง initial version ขึ้นมากอน แลวใหลูกคาดู ( สี่เหลี่ยมใหญ ที่ 3 ขั้นตอนหลักซอน กันอยูเปนขั้นตอนที่ลูกคาจะมีสวนรวมในการพัฒนา ) หลังจากนั้นจะทําการไปในทิศทางทีล่ ูกคาตองการ และมีการ ทดสอบอยูเรื่อย ๆ ผลลัพธที่ไดจากการทดสอบทีไ่ ดจากการพัฒนาเรียกวา intermediate version ( จะเห็นวาเกิด intermediate version ขึ้นหลายอัน เนื่องจากลูกคาอาจจะมีการปรับปรุงหรือเปลี่ยนแปลงความตองการใน ระหวางการพัฒนา ) เมื่อลูกคาพอใจกับระบบที่ไดรับการพัฒนาแลว การทดสอบสุดทายจะไดผลลัพธเปน final version และสงลูกคาตอไป
แบงออกเปน 2 แบบ 1. Exploratory development เปน evolutionary แบบตรง ๆ คือจะพัฒนาไปพรอม ๆ กับลูกคาเพื่อ คนหาความตองการของลูกคา และพัฒนา final system ออกมา การเริ่มตนของการพัฒนาแบบนี้จะเริ่มจากสวนที่ ุ กอน แลวคอย ๆ เพิ่มองคประกอบตาง ๆที่ลูกคาตองการเขาไป software engineer เขาใจตรงกับลูกคาที่สด Evolutionary development
2. Throw – away prototyping ขอแตกตางของแบบ phototype
กับแบบ exploratory คือแบบ phototype จะเริ่มตนจากความไมคอยเขาใจใน requirement ของลูกคา จึงสรางระบบแบบหยาบ ๆ เรียกวา phototype ขึ้นมากอนแลวสงใหลูกคาดูและ comment กลับมา แลวจึงทําการปรับปรุงระบบใหเปนไปตาม ความตองการของลูกคาจนกวาจะได final version ตามตองการ เหมาะกับการพัฒนาระบบที่มี requirement ที่เขาใจยาก
ตัวอยางของการพัฒนาดวยวิธี Exploratory development คือการพัฒนาระบบ AI ซึ่งเราพยายามจะทําให computer สามารถคิดไดเหมือนคน แตในปจจุบันเรายังไมสามารถที่จะระบุ specification ที่แนนอนในเรื่องนี้ ได จําเปนจะตองมีการพัฒนาและทดสอบ จนกวาจะตรงกับความตองการ ปญหาของ evolutionary 1. ไมมีความชัดเจนวาในปจจุบันพัฒนาอยูในขั้นตอนไหน คือ specification development และ validation ซอนทับกันอยู ทําใหระบุไมไดวาขั้นตอนที่ทํางานอยูปจจุบันคือขั้นตอนใด 2.ระบบจะมี structure ที่ไมดี เพราะขาดการออกแบบไวกอน แตใชวิธีคอย ๆ เพิ่มไปเรื่อย ๆ ทําใหในบางครั้ง program อาจจะมีการใชงาน resource มากเกินความจําเปน 3. ทีมงานในการพัฒนาจําเปนจะตองมีความสามารถมากเปนพิเศษ มีความเชี่ยวชาญในแตละดานที่รับผิดชอบสูง เพราะเมื่อลูกคาแสดงความตองการจะตองสามารถพัฒนาเปนไปตามทีล่ ูกคาตองการไดในทันที หากขาดสวนนี้ไป เวลาที่ใชในการพัฒนาระบบ จะมากเกินความจําเปน จากปญหาทีก่ ลาวมา ทําใหการพัฒนาดวยวิธีนี้ไมเหมาะกับการพัฒนาที่มีระบบขนาดใหญ โดยมากจะใชในการพัฒนา ระบบที่มีอายุการใชงานสั้น ๆ หรือระบบที่เปนสวนประกอบของระบบสวนใหญ ๆ