Software Modeling & System Design (UML)
guidelines ระบุชัดว่าต้อง วาดด้วยมือให้สะอาด — รู้จัก lifeline, execution box, provided/required interface และ alt/opt frame
UML คืออะไร
- Unified Modeling Language — ภาษาภาพมาตรฐานสำหรับระบุ มองเห็น สร้าง และจัดทำเอกสารของระบบซอฟต์แวร์
- เป็น "พิมพ์เขียว" ของงานวิศวกรรมซอฟต์แวร์
- วาดก่อนเขียนโค้ด เพื่อ map ว่าข้อมูลวิ่งจากปุ่มถึงฐานข้อมูลอย่างไร
Structural vs Behavioral
| ประเภท | บอกอะไร | ตัวอย่าง |
|---|---|---|
| Structural | โครงสร้างคงที่ของระบบ | Class Diagram, Object Diagram, Component Diagram |
| Behavioral | พฤติกรรมเคลื่อนไหวของระบบ | Use Case, Sequence, Activity Diagram |
Use Case Diagram
บอกว่าใครใช้ระบบทำอะไรได้บ้าง และขอบเขตของระบบอยู่ตรงไหน
Actor = คน/องค์กร/ระบบภายนอก · วงรี = use case · กล่องใหญ่ = ขอบเขตระบบ · เส้น = association
| องค์ประกอบ | รูปร่าง | ความหมาย |
|---|---|---|
| Actor | รูปคนแท่ง | ผู้ใช้ระบบ อาจเป็นคน องค์กร หรือระบบภายนอก — ต้องอยู่นอกระบบและผลิตหรือใช้ข้อมูล |
| Use case | วงรีแนวนอน | สิ่งที่ผู้ใช้ทำกับระบบได้ |
| System boundary | กล่องสี่เหลี่ยม | ขอบเขตระบบ ทุกอย่างนอกกล่องถือว่าอยู่นอกขอบเขต |
| Association | เส้นตรง | เชื่อม actor กับ use case ที่เกี่ยวข้อง |
| Package | รูปโฟลเดอร์ | จัดกลุ่มองค์ประกอบเข้าด้วยกัน |
«include» vs «extend» — ข้อสอบถามแน่
| «include» | «extend» | |
|---|---|---|
| ความหมาย | use case หลัก ต้องเรียกใช้เสมอ | ทำงาน เฉพาะบางเงื่อนไข (ทางเลือก) |
| บังคับไหม | บังคับ 100% | ไม่บังคับ |
| ทิศลูกศร | จาก use case หลัก → ไป use case ย่อย | จาก use case เสริม → ไป use case หลัก |
| ตัวอย่าง | Checkout «include» Login (ไม่ล็อกอินก็ซื้อไม่ได้) | Checkout «extend» Apply Discount Code (ใส่โค้ดส่วนลดหรือไม่ก็ได้) |
Activity Diagram
แสดง flow ของการควบคุม การตัดสินใจ และงานที่ทำขนานกัน — ทีละขั้นตั้งแต่ต้นจนจบ
วงกลมทึบ = จุดเริ่ม · สี่เหลี่ยมมุมมน = action · สี่เหลี่ยมข้าวหลามตัด = decision · วงกลมมีขอบ = จุดจบ
| สัญลักษณ์ | ความหมาย |
|---|---|
| Initial Node | วงกลมทึบ = จุดเริ่มต้น |
| Action / Activity | สี่เหลี่ยมมุมมน = งานที่ต้องทำ |
| Control Flow | ลูกศรบอกลำดับการทำงาน |
| Decision Node | สี่เหลี่ยมข้าวหลามตัด = แตกเงื่อนไข |
| Fork / Join | แท่งทึบหนา = แตก (fork) หรือรวม (join) งานที่ทำขนานกัน |
| Final Node | วงกลมมีวงล้อม = จุดจบ |
| Swimlane | คอลัมน์แนวตั้ง/นอน แบ่งกิจกรรมตามผู้รับผิดชอบ |
Sequence Diagram
บอกว่า object คุยกันอย่างไร เรียงตามเวลาจากบนลงล่าง ใช้ map ลำดับการเรียก API
เส้นทึบหัวลูกศรเต็ม = synchronous call · เส้นประ = return message · แท่งบน lifeline = activation
องค์ประกอบ Sequence Diagram
| องค์ประกอบ | รูปร่าง | ความหมาย |
|---|---|---|
| Participant (Actor/Object) | สี่เหลี่ยมด้านบนสุด | ใครหรืออะไรที่กำลังโต้ตอบ เช่น User, System, Database |
| Lifeline | เส้นประแนวตั้ง | การมีอยู่ของ object ตลอดช่วงเวลา |
| Message | ลูกศรแนวนอน | การสื่อสาร — synchronous, asynchronous หรือ return |
| Activation Box | สี่เหลี่ยมผอมบน lifeline | ช่วงที่ object นั้นกำลังทำงานอยู่จริง |
| Fragment | กรอบสี่เหลี่ยมมีป้ายมุมบนซ้าย | logic ซับซ้อน เช่น alt, opt, loop |
alt / opt / loop
| Fragment | เทียบกับโค้ด | ใช้เมื่อไร |
|---|---|---|
| alt | if / else | มีทางเลือกตั้งแต่ 2 ทางขึ้นไป เช่น login สำเร็จ / ล้มเหลว |
| opt | if เดี่ยว ๆ | ทำหรือไม่ทำก็ได้ เช่น ใส่โค้ดส่วนลด |
| loop | for / while | ทำซ้ำ เช่น วนแสดงสินค้าทีละชิ้น |
Component Diagram
เป็น structural diagram แสดงว่าระบบประกอบด้วยส่วนอะไร แต่ละส่วนให้บริการหรือต้องการบริการอะไร
ถ้าถูกถามให้ระบุ interface: ลูกบอล = provided (ผู้ให้) · ซ็อกเก็ต = required (ผู้ขอ)
ตัวอย่างที่ต้องวาดได้ (จากสไลด์)
| สถานการณ์ | ไดอะแกรมที่เหมาะ | เหตุผล |
|---|---|---|
| ผู้ใช้ทั่วไปกับสมาชิกทำอะไรได้บ้าง | Use Case | บอกขอบเขตและสิทธิ์ของแต่ละ actor |
| ขั้นตอนการสมัครสมาชิก | Activity | มีเงื่อนไขและทางแยกหลายทาง |
| ขั้นตอนการ login | Sequence | เน้นลำดับการคุยกันระหว่าง client, server, DB |
| โหลดสินค้ามาแสดงบนหน้าเว็บ | Sequence | ป้ายลูกศร: requestProducts(), fetch(), return JSON, renderProducts() |
| ค้นหา/กรองสินค้า | Activity | User Action → Capture Input → Filter Array → Update DOM |
| ตรรกะ checkout | Logic Map / Decision Tree | ตรวจหลายเงื่อนไขต่อกันเป็นชั้น |
แนวข้อสอบอัตนัย
โจทย์: จงวาด/อธิบาย sequence diagram ของการ login พร้อมระบุ lifeline, activation box และ alt fragment และอธิบายว่าเกิดอะไรขึ้นเมื่อรหัสผ่านไม่ถูกต้อง
โครงคำตอบ
- Participants — Client (Browser), API Gateway / Server, Database
- ลำดับข้อความ —
POST /login {credentials}(ระบุว่าเข้ารหัสด้วย HTTPS) →findUser(email)→ DB คืน hash →bcrypt.compare()ภายใน server →jwt.sign(payload, secret)→ ตอบกลับ{token}→ client เก็บ token - alt fragment — สาขาแรก [รหัสถูก] ตอบ 200 พร้อม token · สาขาที่สอง [รหัสผิดหรือไม่พบผู้ใช้] ตอบ 401 พร้อมข้อความกลาง ๆ ว่า "Invalid email or password"
- เหตุผลเชิงความปลอดภัย — ใช้ข้อความเดียวกันทั้งสองกรณีเพื่อกัน user enumeration ไม่ให้ผู้โจมตีรู้ว่าอีเมลนี้มีอยู่จริงในระบบ