EP.2 จะผลิต Software ที่มีคุณภาพต้องเข้าใจ Systems development life cycle(SDLC) เป็นพื้นฐาน จริงหรือ ???

J_Reborn
2 min readApr 20, 2021

ในโลกที่ทุกอย่างกำลังหันเข้าไปสู่การใช้ Software ในการช่วยทำกิจกรรมต่างๆ ไม่ว่าจะเป็นการทำธุรกิจ การใช้ชีวิตประจำวัน การดำเนินกิจกรรมต่างๆ ก็จะต้องมี Software เข้ามาเป็นพื้นฐานทำให้มูลค่าในตลาดการผลิต Software เพิ่มสูงขึ้นมากในทุกปีๆ และผมเคยได้ยินคนพูดว่าโปรแกรมเมอร์จะตกงานเพราะ AI จะสามารถเข้ามาแทนที่ได้โดยเขียนโปรแกรมทดแทนแต่ในโลกของความเป็นจริงในตลาด Software ประเทศไทยโปรแกรมเมอร์กลับขาดแคลนเป็นที่แย่งชิงคนเก่งกันในตลาด หาคนมาเขียนโปรแกรมกันแทบไม่ทัน บริษัทใหญ่ๆ ที่มีเงินทุนก็อัพค่าตัวจนสูงลิบลิ่วแต่ resources ที่ได้มากลับผลิตงานได้ไม่คุ้มกับมูลค่าที่จ่ายไป ทำไมผมถึงเกริ่นนำแบบนี้เพราะจากประการณ์การทำงานในวงการ Software มากว่า 13 ปี คนที่เข้ามาทำงานในธุรกิจที่ต้องเป็นทีมที่จะผลิต Software กลับไม่ค่อยอยากจะทำความเข้าใจพื้นฐานของวงจร Software ให้ดีเสียก่อนจึงไม่สามารถผลิด Software ที่มีคุณภาพและตรงกับความต้องการของลูกค้าได้ ศาสตร์พื้นฐานที่ผมกล่าวถึงนั้นก็คือ Systems development life cycle หรือ SDLC นั้นเองแล้ว SDLC คืออะไรละ ???

Systems development life cycle(SDLC) คือ กระบวนการหรือขั้นตอนที่จะมาลงรายละเอียดการพัฒนา Software ใน 1 Project ว่าจะต้องมีขั้นตอนอะไรบ้างและแต่ละขั้นตอนจะได้ผลลัพธ์ออกมาอย่างไรซึ่งบริษัทส่วนใหญ่มักจะละเลยกระบวนการเหล่านี้และทำให้เกิดปัญหาตามหลังมากับ USER แล้วก็จะมีคำพูดออกมาจากปากทีมงานว่า อ้าว เห้ย…ไม่เหมือนที่คุยกันไว้หนี้หว่า สุดท้ายต้องรื้อโปรแกรมทำใหม่เสียเวลา เปลื้องแรง เปลื้อง Manday งานไม่จบยื้ดเยื้อ คนก็ burn out เพราะเบื่อ USER ที่ขอปรับนู่นเปลี่ยนนี้แต่สุดท้ายจะโทษ USER ฝ่ายเดียวก็คงไม่ถูกคนรับงานมาก็มีส่วนผิดด้วยที่ไม่ยอมเคลีย scope และรายละเอียดงานให้ชัดเจนซึ่งถ้าเข้าใจ SDLC และนำมาปรับใช้ปัญหาเหล่านี้ก็จะลดน้อยลงแล้ว SDLC ประกอบไปด้วยอะไรมังมาดูกัน

  1. Requirement analysis วิเคราะห์ความต้องการของ USERและตบให้เข้าที่ก่อนไหม ? เพราะ USER ส่วนใหญ่จะไม่เข้าใจว่าตัวเองต้องการโปรแกรมอะไรกันแน่ก็จะฟุ้งไปเรื่อยเดียวเพิ่มอันนั้นเดียวนึกอันนี้ออก แล้วจะทำให้ได้กลุ่ม Requirement ที่ชัดเจนมานั้นต้องทำยังไงละ ? เคล็ดลับก็คือออ ตั้งคำถามให้ตรงจุด เช่น วัตถุประสงค์ของโปรแกรมที่ USER อยากได้คืออะไร มีกี่ฟีเจอร์ แต่ละฟีเจอร์ประกอบไปด้วยรายละเอียดอะไรมัง ข้อไหน USER ตอบไม่ได้ให้ตัดออกหรือขอรายละเอียดเพิ่มเติมให้เขาสรุปกับผู้รู้มา เพื่อตี scope งานใน 1 Project ให้ชัดเจนไม่งั้นก็โดนลากยาววววว
  2. Planning and estimate manday เมื่อได้ scope ที่ค่อนข้างตบ scope มาระดับนึงแล้วก็ต้องมาทำการประเมิน Manday ของทีม (ทีมประกอบไปด้วยใครมังอ่านได้ที่ ทำไม Project Management จึงสำคัญถึงสำคัญมากในการพัฒนา Software !!! ) ก็จะได้แผนงานคราวๆ ออกมาเพื่อไปคุยต่อได้ว่าต้องใช้เวลาพัฒนาโปรแกรมเท่าไหร่ ค่าใช้จ่ายเป็นยังไง จะต้องใช้คนเท่าไหร่
  3. Software design such as system design and architectural design ขั้นตอนนี้โคตรสำคัญแต่กลับเป็นขั้นตอนที่หลายๆ บริษัทมักจะมองข้ามไปเพราะ เวลาน้อยมังละ ความเชี่ยวชาญในการออกแบบระบบยังน้อยมังละ ขี้เกียจ design ระบบก่อนเขียนมังละ เลยทำให้พอลง Coding แล้วเกิดปัญหาที่โคตรยุบยับตามมา ผมจะอธิบายง่ายๆ เลยถ้าเราไม่ทำการ system design และ architectural design ก็เหมือนผู้รับเหมามาสร้างบ้านพอไปฟังลูกค้ามาว่าอยากได้บ้านแบบนั้นแบบนี้เสร็จก็ลงมือก่อสร้างแต่ไม่มีแบบแปลน ไม่มีรายละเอียดการก่อสร้างในแต่ส่วนที่ชัดเจน คุณคิดดูว่าช่างแบบนี้จะสร้างบ้านที่ดีและแข็งแรงออกมาได้ยังไง ??? แล้วไอ้ system design และ architectural design ในมุมมองของผมประกอบไปด้วยอะไรมัง ก็โคตรง่ายและเบสิคมากเวลาที่ผมคุมทีมก็จะต้องมี sequence diagram, er diagram, infrastructure design ก่อนเพื่อให้เข้าใจว่าเรากำลังพัฒนาระบบมาได้อย่างถูกทางและเข้าใจตรงกัน(UX/UI design จะเริ่มพร้อมกับขั้นตอนนี้ parallel กันไปเลย)
  4. Software development เมื่อผ่านขั้นตอนที่ 3 มาได้ขั้นตอนต่อมาก็เอามาเริ่มลงมือกันเลย ถ้าทำขั้นตอน Software design ไว้ดีส่วนนี้ก็จะเริ่มงานและดำเนินการไปได้อย่างราบรื่นจะมีแค่ Requirement นิดๆ หน่อยๆ ที่ตอนยังไม่ลง Coding จะไม่เห็นภาพก็ค่อยมาเก็บและเคลียไปแต่ถ้าทำขั้น 1,2,3 มาไม่ดีก็ถึงคราวลำบากก็ตอนนี้และตูเจอประจำถ้ามารับงานต่อจากคนอื่น -…-
  5. Testing การทำเทสที่โคตรจะสำคัญที่ใครหลายคนมองข้าม ตำแหน่ง Tester เป็นอีก 1 ตำแหน่งที่หลายบริษัทมักมองข้ามและไม่อยากจะจ่ายเพราะให้ dev หรือ PM เทสเอาแต่ที่ไหนได้งาน Software มีอะไรจุกจิกและรายละเอียดค่อนข้างเยอะที่จะต้องหาคนที่มีสกิลขี้สงสัย ตั้งคำถามเก่งตรงจุด เพื่อให้งานที่ออกมามีการรตรวจสอบได้ครบถ้วนตาม Requirement ที่ USER อยากได้ขั้นตอนนี้ก็จะต้องออกแบบเอกสารและเช็คลิสที่เรียกว่า Test script หรือ Test case เพื่อให้ได้ scenario ทั้งหมดออกมาเหมือนเป็นการทำ QC ก่อนจะปล่อยงานไปให้ USER ได้ทดลองใช้งาน
  6. Deployment เมื่อผ่านการทำ QC แล้วก็ถึงขั้นตอนการส่งให้ USER ได้ทำการตรวจของ ก็ต้อง Deploy ระบบไปที่ตัว Server UAT เพื่อให้ USER เข้ามาลองใช้ระบบและทำการ feedback กลับมาเพื่อทำการปรับแก้ให้เหมาะสมเพื่อทำกาส่งมอบงานให้ได้แล้วต่อไปก็จะ Deploy code ทั้งหมดขึ้น Server Production
  7. Maintenance service คือ การบริการดูแลและบำรุงรักษาระบบหลังจบการพัฒนาเมื่อเกิดปัญหากับระบบหรือเรียกง่ายๆ ว่าบริการหลังการขาย Maintenance Service Agreement(MA) ในบริษัท Software ที่มีลูกค้าเยอะๆ ก็มักจะได้กำไรจากการกินค่า MA รายปีเพราะส่วนใหญ่เมื่อระบบ Go-live ไปแล้วก็มักจะไม่ค่อยมีปัญหาอะไรนอกจาก USER Error หรือเจอเคสที่ไม่ได้คุยกันตั้งแต่ตอนรับ Requirement

ตัว SDLC ก็ยังมีการแบ่งเป็นอีกหลาย Model ขึ้นอยู่กับความถนัดและความเหมาะสมในเนื้องานต่าๆ ไม่ว่าจะเป็น Water Fall, Agile, Scrum และอื่นๆ อีกมากมาย ที่ผมเขียนมาก็เป็นเพียงพื้นฐานเบื้องต้นที่คนจะทำ Software รู้ไว้ก็จะเป็นประโยชน์ทำให้ทำ Software ออกมาได้มีคุณภาพ ไว้เจอกันบทความหน้า บะบายยย ^0^

--

--