วงการ Tech เรียกได้ว่าเป็นวงการที่มี Barrier ขนาดใหญ่ ที่ทำให้หลายๆ คนไม่กล้าเข้ามา ไม่ว่าจะเป็น Process การทำงานที่ซับซ้อน หรือ Keyword มากมายที่ได้ยินก็งงได้ว่าพูดถึงอะไร แม้แต่คนที่อยู่ในวงการ Tech เองที่ไม่ได้ทำในตำแหน่ง Developer หลายๆ ครั้งก็ยังไม่ได้เข้าใจกระบวนการหรือคำศัพท์หลายๆ ส่วนเลย ผมในฐานะที่ทำงานเป็น Developer เลยอยากจะช่วยทำให้ใครที่กำลังอยากจะเข้าสู่วงการ Tech หรืออาจจะอยู่แล้ว แต่ยังไม่เข้าใจภาพการทำงานของ Developer ผ่านการทำความเข้าใจ SDLC หรือ Software Development Life Cycle ตั้งแต่ Requirement Analysis, Software Design, Software Development, Software Testing, Software Deployment จนถึง Software Maintenance เพื่อให้ทุกคนได้เห็นภาพรวมของงานการพัฒนา Software รวมถึงพอเห็นภาพว่า Keyword ต่างๆ ที่อาจจะเคยเห็นมาบ้าง มันอยู่ส่วนไหนในกระบวนการ

Software Development Life Cycle (SDLC)

Software Development Life Cycle (SDLC) เป็นกระบวนการที่ใช้ในอุตสาหกรรมซอฟต์แวร์ในการออกแบบ พัฒนา และทดสอบซอฟต์แวร์ที่มีคุณภาพสูง โดยมุ่งหวังให้ได้ซอฟต์แวร์ที่มีคุณภาพตรงตามหรือเกินความคาดหวังของลูกค้าและเสร็จสิ้นตามกำหนดเวลาและงบประมาณ

ขั้นตอนต่างๆ ใน SDLC:

  1. Requirement Analysis: การวิเคราะห์ความต้องการ
  2. Design: การออกแบบ
  3. Development: การพัฒนา
  4. Testing: การทดสอบ
  5. Deployment: การนำไปใช้งาน
  6. Maintenance: การบำรุงรักษา

1. ขั้นตอนการวิเคราะห์ความต้องการ (Requirement Analysis):

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

2. ขั้นตอนการออกแบบซอฟต์แวร์ (Software Design):

ขั้นตอนนี้เป็นการวางแผนและออกแบบ Software จาก Requirement ที่ได้รับ โดยสามารถจำแนกการออกแบบแต่ละส่วนได้ดังนี้

  • ออกแบบสถาปัตยกรรมของระบบ (System Architecture Design)
    • สามารถจำแนกการออกสถาปัตยกรรมของระบบได้เป็น 2 แบบ
      • Monolith
      • Microservice

ซึ่งการออกแบบแต่ละระบบมีจะมีการเลือกใช้งานที่ต่างกัน ตามแต่ลักษณะของบริษัท ลองไปอ่านกันต่อได้ว่า Microservices vs Monolithic บริษัทคุณเหมาะกับอะไร?

  • โดยการออกแบบมีวิธีการคิด 2 แบบคือ
    • Business Capability คือแบ่งแยกบริการตามความสามารถทางธุรกิจ (Business Capabilities) 
    • Domain-Driven Design (DDD) คือ ออกแบบซอฟต์แวร์ให้สอดคล้องกับความซับซ้อนและความต้องการทางธุรกิจ

ใครที่สนใจเรื่องวิธีคิดในการออกแบบระบบ Software ลองไปอ่าน Software Architecture Design ที่นิยมใช้พัฒนาระบบซอฟต์แวร์ขนาดใหญ่ กันได้

  • ออกแบบฐานข้อมูล (Database Design)
    • หาก Digital Product หรือ Software ต้องมีการเก็บบันทึกข้อมูล ฐานข้อมูลหรือ Database ย่อมเป็นสิ่งจำเป็นที่จะต้องออกแบบและเลือกรูปแบบที่เหมาะสมกับงาน โดยสามารถแบ่งรูปแบบของ Databse ได้ 2 แบบคือ
      • Relational Database เก็บข้อมูลในรูปแบบตาราง
      • Non-Relational Database ไม่ใช้โครงสร้างแบบตาราง
      • ออกแบบ UI/UX (UI/UX Design)
        • หาก Digital Product มีส่วนติดต่อผู้ใช้หรือ UI การออกแบบ UI/UX ก็เป็นสิ่งสำคัญที่ต้องทำ
      • วางแผนและออกแบบการทดสอบ (Testing Plan & Design)
        • ส่วนที่สำคัญอีกหนึ่งส่วนคือการทดสอบ Software ก่อนส่งมอบ

       

      3. ขั้นตอนการพัฒนาซอฟต์แวร์ (Software Development):

      ในขั้นตอนการพัฒนา software ขึ้นมา สิ่งที่เป็นพื้นฐานที่สุดที่ทำให้ Software สามารถทำงานได้ตาม Requirement คือการเขียนโปรแกรมนั่นเอง โดยองค์ประกอบของการพัฒนา Software มีดังนี้

      ภาษาโปรแกรม Programming language

      การเขียนโปรแกรม คือ การเขียนชุดคำสั่งเพื่อให้คอมพิวเตอร์รู้ว่าเราต้องการให้ Software ทำงานอย่างไร โดยชุดคำสั่งเหล่านั้นเปรียบเสมือนภาษาที่เราใช้สื่อสารกันกับคนอื่น แต่ต่างกันตรงเราใช้สื่อสารกับคอมพิวเตอร์ เรียกว่า ภาษาโปรแกรม หรือ Programming Language

      โดยภาษา Programing นั้นมีหลากหลายภาษามาก สามารถลองทำความเข้าใจ หรือถ้าอยากเริ่มเขียนโปรแกรม ภาษาไหนที่เหมาะกับเรา? ลองไปอ่านกันได้

      Framework และ Library

      หากจะพัฒนาทุกอย่างขึ้นเองตั้งแต่ต้นอาจจะใช้เวลานานมากกว่า Product จะออกได้ ในโลกการพัฒนา Software จึงมี Framework และ Library เป็นเครื่องมือที่ช่วยให้การพัฒนาโปรแกรมง่ายขึ้น แต่ทั้งสองมีความแตกต่างกันในด้านวิธีการใช้งานและขอบเขตของการทำงาน

      • Framework เป็นชุดของโค้ดที่ถูกออกแบบมาเพื่อเป็นโครงสร้างพื้นฐานในการพัฒนาแอปพลิเคชัน โดยมีรูปแบบและกฎเกณฑ์ที่ชัดเจน ซึ่งนักพัฒนาต้องปฏิบัติตาม
      • Library เป็นชุดของฟังก์ชันหรือคลาสที่นักพัฒนาสามารถเรียกใช้เพื่อทำงานเฉพาะเจาะจง โดยไม่ต้องปฏิบัติตามโครงสร้างหรือกฎเกณฑ์ที่เข้มงวด

      Tech Stack

      คือชุดของเทคโนโลยี เครื่องมือ software และ framework ต่างๆ ที่ใช้ในการพัฒนาแอปพลิเคชันหรือระบบ Tech Stack มักจะแบ่งออกเป็นสองส่วนหลักคือ Frontend (ฝั่งผู้ใช้) และ Backend (ฝั่งเซิร์ฟเวอร์) โดยแต่ละส่วนมีเครื่องมือและเทคโนโลยีเฉพาะตัวที่ใช้ร่วมกัน

      Frontend 

      ส่วนของแอปพลิเคชันที่ผู้ใช้มองเห็นและโต้ตอบโดยตรง มักถูกเรียกว่า “ฝั่งผู้ใช้” หรือ “Client-Side” ซึ่งรวมถึงองค์ประกอบของการออกแบบและการสร้าง User Interface

      การพัฒนา Frontend

      ในการพัฒนาส่วนของ Frontend นั้น สามารถจำแนกประเภทของแอพพลิเคชันได้ดังนี้

      1. การพัฒนา Web Application

      Web Application คือซอฟต์แวร์หรือแอปพลิเคชันที่ทำงานผ่านเว็บเบราว์เซอร์และสามารถเข้าถึงได้ผ่านเครือข่ายอินเทอร์เน็ต

      องค์ประกอบหลักของ Web Application

      • HTML (HyperText Markup Language): ใช้สำหรับสร้างโครงสร้างของหน้าเว็บ
      • CSS (Cascading Style Sheets): ใช้สำหรับการจัดรูปแบบและการออกแบบหน้าเว็บ
      • JavaScript: ใช้สำหรับการเพิ่มฟังก์ชันการทำงานและการโต้ตอบบนหน้าเว็บ
      • Frontend Frameworks/Libraries: เช่น React, Angular, Vue.js ช่วยในการพัฒนา UI สามารถพัฒนาได้สะดวก และได้ผลงานที่มีคุณภาพมากขึ้น

      แนวทางในการพัฒนา Web Application

      • Single Page Application (SPA), Server-Side Rendering (SSR)
      2. การพัฒนา Mobile Application

      การพัฒนา Mobile Application สามารถทำได้ดังนี้

      การพัฒนาแบบ Native (Native Mobile Development)

      การพัฒนาแอปพลิเคชันสำหรับระบบปฏิบัติการเฉพาะ เช่น iOS หรือ Android จะใช้ภาษาโปรแกรมและเครื่องมือที่รองรับโดยระบบปฏิบัติการนั้น ๆ

      • iOS: ใช้ภาษา Swift หรือ Objective-C และเครื่องมือ Xcode
      • Android: ใช้ภาษา Kotlin หรือ Java และเครื่องมือ Android Studio
      3. การพัฒนาแบบ Cross-Platform (Cross-Platform Mobile Development)

      การพัฒนาแอปพลิเคชันที่สามารถทำงานได้บนหลายระบบปฏิบัติการ เช่น iOS และ Android โดยใช้ชุดโค้ดเดียวกัน

      • Flutter: ใช้ภาษา Dart
      • React Native: ใช้ภาษา JavaScript
      • Xamarin: ใช้ภาษา C#

      ใครที่อยากรู้ว่า Front End ต้องทำงานอะไรบ้าง หน้าที่นี้ทำอะไร เรารวมทุกเรื่องของสายอาชีพ และทักษะสำคัญของ Front End Developer ไว้แล้ว

      Backend

      ส่วนของแอปพลิเคชันที่ทำงานอยู่เบื้องหลังและไม่สามารถมองเห็นหรือโต้ตอบโดยตรงจากผู้ใช้ มักถูกเรียกว่า “ฝั่งเซิร์ฟเวอร์” หรือ “Server-Side” ซึ่งรวมถึงการจัดการฐานข้อมูล การประมวลผลตรรกะของแอปพลิเคชัน และการประมวลผลคำขอจากผู้ใช้

      การพัฒนา Backend

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

      API คืออะไร

      API (Application Programming Interface) คือชุดของกฎเกณฑ์และโปรโตคอลที่ช่วยให้อุปกรณ์ซอฟต์แวร์สองชิ้นหรือมากกว่าสามารถสื่อสารและแลกเปลี่ยนข้อมูลกันได้ ตัวอย่างการใช้งาน เช่น แอปพลิเคชันมือถือใช้ API ดึงข้อมูลจากฐานข้อมูลหรือเซิร์ฟเวอร์ เช่น ข้อมูลผู้ใช้ รายการสินค้า เพื่อนำมาแสดงในหน้า UI

      ใครที่อยากรู้ว่า Back End ต้องทำงานอะไรบ้าง หน้าที่นี้ทำอะไร เรารวมทุกเรื่องของสายอาชีพ และทักษะสำคัญ

       

      4. ขั้นตอนการทดสอบซอฟต์แวร์ (Software Testing):

      ขั้นตอนนี้เป็นกระบวนการสำคัญในการพัฒนาซอฟต์แวร์ โดยมีจุดประสงค์เพื่อค้นหาและแก้ไขข้อบกพร่อง (Bugs) และความผิดพลาด (Errors) ในซอฟต์แวร์ก่อนที่จะนำไปใช้งานจริง การทดสอบซอฟต์แวร์ช่วยให้มั่นใจได้ว่าซอฟต์แวร์ทำงานได้ตามที่คาดหวังและเป็นไปตามข้อกำหนดที่กำหนดไว้

      ประเภทของ Software Testing

      1. Functional Testing เป็นการทดสอบที่เน้นการตรวจสอบฟังก์ชันการทำงานของซอฟต์แวร์ว่าตรงตามข้อกำหนดและความต้องการที่กำหนดไว้หรือไม่ โดยการทดสอบนี้จะตรวจสอบว่าฟังก์ชันแต่ละส่วนทำงานได้ถูกต้องและเป็นไปตาม requirement โดยสามารถแบ่งแยกย่อยการทดสอบได้อีกหลายแบบ เช่น Unit Testing, Integration Testing, System Testing, Acceptance Testing
      2. Non-Functional Testing เป็นการทดสอบที่เน้นการตรวจสอบคุณสมบัติที่ไม่เกี่ยวข้องกับฟังก์ชันการทำงานโดยตรง เช่น ประสิทธิภาพ การรักษาความปลอดภัย การใช้งานง่าย และความน่าเชื่อถือ โดยสามารถแบ่งแยกย่อยการทดสอบได้เป็น Performance Testing, Security Testing, Usability Testing, Compatibility Testing
      3. Maintenance Testing เป็นการทดสอบที่ทำหลังจากที่ซอฟต์แวร์ถูกปรับปรุง แก้ไข หรืออัปเดต เพื่อให้แน่ใจว่าการเปลี่ยนแปลงหรือการบำรุงรักษาไม่ส่งผลกระทบต่อการทำงานของระบบ

      5. ขั้นตอนการติดตั้งและนำซอฟต์แวร์ไปใช้งาน (Software Deployment):

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

       

      ขั้นตอนสำคัญในกระบวนการ Software Deployment

      • การเตรียมสภาพแวดล้อม (Environment Setup) จัดเตรียมและตั้งค่าเซิร์ฟเวอร์ ฐานข้อมูล และทรัพยากรอื่นๆ ที่จำเป็นสำหรับการรันซอฟต์แวร์
      • การติดตั้งและการตั้งค่า (Installation and Configuration) ดำเนินการติดตั้งซอฟต์แวร์และการตั้งค่าที่จำเป็นเพื่อให้ซอฟต์แวร์ทำงานได้ตามที่ต้องการ
      • การย้ายข้อมูล (Data Migration) หากจำเป็นต้องมีการย้ายข้อมูล เช่น การย้ายจากระบบเก่าไปยังระบบใหม่ จำเป็นต้องวางแผนดำเนินการย้ายข้อมูลอย่างรอบคอบเพื่อไม่ให้เกิดการสูญหายของข้อมูล
      • การตรวจสอบและการทดสอบ (Verification and Testing) ทำการตรวจสอบและทดสอบซอฟต์แวร์เพื่อให้แน่ใจว่าซอฟต์แวร์ทำงานได้อย่างถูกต้องและไม่มีปัญหาในอนาคต รวมถึงการทำ Load Test และ Security Test
      • กลยุทธ์ในการติดตั้ง (Deployment Strategies) เลือกรูปแบบการ deploy ที่เหมาะสมกับความต้องการ เช่น Blue-Green Deployment, Canary Release, Rolling Updates เพื่อให้การ deploy มีประสิทธิภาพและลดความเสี่ยงในการหยุดทำงาน

        ในทีมพัฒนา software ที่มีขนาดใหญ่ อาจจะมีการแบ่งหน้าที่ความรับผิดชอบที่เฉพาะเจาะจงมากขึ้น โดยแบ่งออกเป็น Development Team และ Operation Team

        • Development Team มีหน้าที่พัฒนาและทดสอบโค้ด จัดเตรียมเอกสาร และสร้าง CI/CD Pipeline เพื่อให้การปรับใช้เป็นไปอย่างมีประสิทธิภาพ
        • Operation Team มีหน้าที่จัดเตรียมสภาพแวดล้อม, ดูแล infrastructure, deploy software, ตรวจสอบระบบ และแก้ไขปัญหา

        การทำงานร่วมกันระหว่างสองทีมนี้เป็นสิ่งสำคัญในการทำให้กระบวนการ deploy ซอฟต์แวร์เป็นไปอย่างราบรื่นและมีประสิทธิภาพ จึงมีแนวคิดและแนวปฏิบัติที่จะช่วยปรับปรุงให้ Development Team และ Operation Team สามารถทำงานร่วมกันได้มีประสิทธิภาพมากขึ้น เพิ่มความเร็วในการพัฒนา การ deploy และ การบำรุงรักษาซอฟต์แวร์ แนวคิดดังกล่าวคือ DevOps

        6. ขั้นตอนการดูแลซอฟต์แวร์ (Software Maintenance):

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

        การเก็บ logging 

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

        การเก็บ Analytics

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

        1. การเก็บรวบรวมข้อมูล Data Gathering 
        2. การวิเคราะห์ข้อมูล Data Analysis
        3. การแสดงผลข้อมูลที่วิเคราะห์ออกมา Data Visualization

        Code Refactor

        ในโลกแห่งความเป็นจริง โค๊ดที่ Development Team พัฒนาขึ้นมา เมื่อผ่านการเวลา ผ่านนักพัฒนาหลายๆคนไป แต่ละคนมีสไตล์การเขียนโค้ดที่แตกต่างกัน ทำให้โค้ดไม่สอดคล้องกัน หรือโค๊ดมีความซับซ้อนมากขึ้นเรื่อยๆ ดังนั้นการหมั่นค่อยบำรุงรักษา หรือจัดระเบียบใหม่จึงเป็นสิ่งที่ควรทำ

        Code Refactor เป็นกระบวนการหนึ่งใน software development เพื่อที่จะทำให้โค๊ดที่มีอยู่เดิมดีขึ้น ไม่ว่าจะเป็นเรื่องของโครงสร้าง, การออกแบบ หรือความอ่านง่ายของโค๊ด โดยทั้งหมดนี้เป็นส่วนสำคัญของการ maintenance

        และนี่ก็คือ 6 ขั้นตอนการพัฒนา Software สำหรับใครที่อยากรู้ลึกขึ้นอีก หรืออยากให้อธิบายเยอะขึ้นกว่านี้ในแต่ละขั้นตอน เพื่อที่จะได้เข้าใจมากยิ่งขึ้น มาเรียนกันได้ในคอร์ส Tech Jumpstart for Non-Techies คอร์สที่จะพาผู้ที่อยากเข้าใจเรื่องเทคๆ ได้เข้าใจกระบวนการทุกอย่าง แบบเข้าใจง่ายๆ ภาษาคนไม่ใช่ Dev

        ในคอร์สนี้เราจะพาคุณไปเห็นกระบวนการ Software Development Life Cycle ที่ละเอียดขึ้นกว่านี้ รวมถึงพาไปเข้าใจคำศัพท์อีกมากมายที่เราอาจจะได้ Mention ถึงในบทความไปบ้างแต่ยังไม่ได้เขียนอธิบายไว้ ลองไปเรียนกันดูครับ

         

        Rawipol Wajanavisit
        Technical Lead, NocNoc.com | Ex-Android Developer, Siri Ventures

          More in:Product

          Comments are closed.