ทำไม "โค้ดที่รันผ่าน" จึงยังไม่พอสำหรับ Sprint 1
5 หัวข้อหลักในสัปดาห์ที่ 7
| ลำดับ | หัวข้อการเรียนรู้ | ผลลัพธ์ที่คาดหวังกับ Grocery POS |
|---|---|---|
| 01 | Core Module Development | ออกแบบ Walking Skeleton ของฐานข้อมูล Auth และคลังสินค้า |
| 02 | Clean Code & SOLID | แยกความรับผิดชอบ Controller / Service / Repository ลดโค้ดซ้ำซ้อน |
| 03 | Peer Code Review | ตรวจหาจุดบกพร่อง Edge Case และความปลอดภัยก่อนรวมโค้ด |
| 04 | Pull Request Workflow | ใช้ PR Template เชื่อม Issue และผ่าน CI Gate ก่อน Merge |
| 05 | Advisor Feedback Integration | แปลงคำแนะนำอาจารย์เป็น Task พร้อมหลักฐาน Commit/PR ยืนยัน |
อาจารย์ที่ปรึกษาประเมินจากวินัยรายสัปดาห์ ประวัติ Git และคุณภาพ PR ระหว่าง Sprint
Walking Skeleton และสถาปัตยกรรมฐานข้อมูล Grocery POS
ตามแนวคิด User Story Mapping ทีมควรเริ่มจาก Walking Skeleton — ชุดโมดูลเล็กที่สุดที่ทำงานเชื่อมต่อกันได้ครบวงจร (Database → Backend API → Authentication → Core CRUD) แล้วจึงขยายสู่ Sprint 2 (หน้าจอคิดเงิน POS) และ Sprint 3 (แจ้งเตือนสต็อกใกล้หมด)
การแตก User Story เป็น Task และวินัยบน GitHub Board
Don't Let the Sun Set on Bad Code: Refactoring ด้วย SOLID
1 คลาส 1 เหตุผลที่ต้องเปลี่ยน
แยก PriceCalculator (คำนวณราคารวม/ภาษี) ออกจาก InventoryRepository (คิวรีฐานข้อมูล) และ ReceiptFormatter
ขยายได้โดยไม่แก้โค้ดเดิม
เพิ่มโปรโมชันสมาชิกหรือส่วนลดตามฤดูกาลผ่าน Strategy Interface โดยไม่ต้องแก้เงื่อนไข if-else ยาวในคลาสคิดเงิน
แยกสิทธิ์และสัญญาให้ชัด
แคชเชียร์เรียกใช้เฉพาะเมธอดขายผ่าน IPosCheckout ไม่ถูกบังคับพึ่งเมธอดจัดการคลังของผู้ดูแลระบบ
พึ่ง Abstraction ไม่ผูก DB ตรง
Service ระดับสูงพึ่ง IStockStore ทำให้สลับ MySQL/PostgreSQL หรือใช้ Mock ทดสอบ Unit Test ได้ทันที
จุดเสี่ยงทางเทคนิค ของระบบ Grocery POS ใน Sprint 1
4 ข้อบังคับด้านความปลอดภัยและข้อมูล
| หัวข้อ | ความเสี่ยงที่พบประจำ | วิธีป้องกันใน Sprint 1 |
|---|---|---|
| Authentication | เก็บรหัสผ่าน Plaintext หรือส่ง password_hash กลับใน API |
ใช้ bcrypt/argon2 และตัดฟิลด์ลับออกใน DTO response |
| Authorization | เช็กสิทธิ์แค่หน้า UI แต่ไม่ตรวจ role_enum บน API |
บังคับ Role Middleware ทุก Endpoint (Cashier vs Manager) |
| SQL Injection | ต่อสตริง SQL ด้วย + เมื่อค้นหาบาร์โค้ดสินค้า |
ใช้ Parameterized Query / ORM Prepared Statements เท่านั้น |
| Concurrency | ตัดสต็อกพร้อมกัน 2 เครื่องจนสินค้าเหลือติดลบ | ใช้ DB Transaction + Atomic Update (WHERE stock_qty >= qty) |
“เมื่อ Acceptance Test ของ User Story ใดผ่านแล้ว ให้บันทึกเป็นชุดทดสอบอัตโนมัติประจำระบบ และห้ามปล่อยให้พังซ้ำใน Commit ถัดไป”
- จำนวนสินค้าเป็น 0 หรือติดลบ (
qty <= 0) - บาร์โค้ดซ้ำ / ไม่พบสินค้าในคลัง
- การปัดเศษทศนิยมเงินตรา (หลีกเลี่ยง floating-point drift)
Collective Code Ownership: ศิลปะการตรวจโค้ดเพื่อนร่วมทีม
คำแนะนำการรีวิว
ลองสวมบทบาทเป็น Peer Reviewer ของทีม เลือกบรรทัดที่มีความเสี่ยงด้านความปลอดภัย Clean Code หรือ Edge Case แล้วกด ตรวจคำตอบ
6 ขั้นตอน Pull Request จาก Branch สู่ Main อย่างปลอดภัย
วงจรมาตรฐานของ 1 Pull Request
| ขั้น | กิจกรรม | เครื่องมือบน GitHub |
|---|---|---|
| 01 | แตก Branch จาก main ตาม Task |
feat/auth-login, fix/stock-lock |
| 02 | Commit ย่อยพร้อมข้อความชัดเจน + เขียน Test | Git commit history |
| 03 | เปิด PR ด้วย Template และผูก Issue | ?template=feature_pr_template.md |
| 04 | ตั้ง Reviewers & ย้ายการ์ดไป Awaiting Review | Sidebar: Development + Reviewers |
| 05 | ผ่าน CI (Build + Test + Lint) และ Peer Approve | GitHub Actions / Review Comments |
| 06 | Merge PR และปิด Issue อัตโนมัติ → Done | github-project-automation |
ตัวจำลอง PR Gate Checker
ตรวจสอบความพร้อมก่อนกด Merge PR ของทีมในสัปดาห์ที่ 7:
เปลี่ยนคำแนะนำอาจารย์ที่ปรึกษา เป็น Actionable Backlog
ทวนความเข้าใจข้อเสนอแนะของอาจารย์ด้วยคำพูดของทีม (หลักการสัมภาษณ์ AUN-QA) เพื่อยืนยันว่าเข้าใจปัญหาตรงกันก่อนแก้ไข
แตกความเห็นเป็น Issue พร้อมติด Label (advisor-feedback, refactor, bug) และกำหนด Assignee
ปิดงานด้วยหลักฐานจริง: ลิงก์ PR ที่แก้แล้ว ผลการรัน Test และเดโมในคาบถัดไป (ตอบโจทย์ PDCA Check → Act)
บันทึกข้อเสนอแนะเข้าสู่ Sprint Backlog
| ประเด็น | ประเภท | ผู้รับผิดชอบ / หลักฐาน | สถานะ |
|---|
เชื่อมโยงงาน Sprint 1 กับเกณฑ์ประเมินสถาปัตยกรรมและโค้ด (25 คะแนน)
เกณฑ์ประเมินคุณภาพซอฟต์แวร์และสถาปัตยกรรม
| ระดับคะแนน | เกณฑ์พิจารณาหลัก |
|---|---|
| ดีเยี่ยม (22–25) | ออกแบบ Architecture, API, DB Schema ถูกต้องตามหลักวิศวกรรม เขียนโค้ดตาม Clean Code มี Unit/Integration Test ครอบคลุม และมี Git Commit สม่ำเสมอ |
| ดี (18–21) | โครงสร้างสถาปัตยกรรมและฐานข้อมูลถูกต้อง เชื่อมต่อ Front/Back ได้ดี โค้ดอ่านง่าย ผ่านการทดสอบในฟังก์ชันหลัก |
| พอใช้ (14–17) | สถาปัตยกรรมมีข้อผิดพลาดบางจุด โครงสร้างโค้ดขาดความเป็นระเบียบ หรือผลการทดสอบไม่ครอบคลุม |
| ปรับปรุง (0–13) | โครงสร้างไม่ถูกต้อง ไม่ตรงหลักวิศวกรรม ไม่มีเอกสาร/ผลการทดสอบ หรือไม่มีประวัติการทำงานบน Git |
ตรวจสุขภาพโค้ดของทีมก่อนจบสัปดาห์ที่ 7
5 ภารกิจก่อนเข้า Sprint 2 และส่งออกบันทึกความก้าวหน้า
Checklist สิ่งที่ต้องทำให้เสร็จภายในสัปดาห์นี้
| ข้อ | งานที่ต้องส่งมอบ | หลักฐานบน GitHub / รายงาน |
|---|---|---|
| 01 | Freeze โครงสร้าง DB Schema (Users, Products, Inventory) | ไฟล์ SQL Migration + ER Diagram ใน Repo |
| 02 | ตั้งค่า .github/PULL_REQUEST_TEMPLATE/ |
ไฟล์ feature_pr_template.md และ bugfix_pr_template.md |
| 03 | ทุก Task ต้องผ่าน Peer Review อย่างน้อย 1 Approve | PR History ที่มี Review Comment จริง |
| 04 | รัน Automated Test ผ่านกรณี Edge Case หลักของ Auth & Stock | ผล Test Log / CI Badge สีเขียว |
| 05 | บันทึก Advisor Feedback Log และเตรียมเดโมหน้าจอขาย Sprint 2 | ตาราง Advisor Feedback + Sprint 1 Retrospective |
ส่งออกสรุปผลประจำสัปดาห์
ดาวน์โหลดผล Self-Audit และ Advisor Feedback Log ของกลุ่มเป็นไฟล์ CSV เพื่อนำไปแนบในรายงานสัปดาห์ที่ 7
เรียบเรียงจากเอกสารประกอบรายวิชา 1145 204 Sophomore Project (POS Student Deliverables & Rubric), Agile Principles, Patterns, and Practices in C#, Lean Software Development, The Scrum Guide, Using GitHub Projects for Agile (McMaster Research Software), และแนวทางประกันคุณภาพ AUN-QA