Reverse Lab 1

อ่าน ERP ที่ยังมีชีวิต: จากหน้าเว็บกลับไปหาความหมาย

ฝึกอ่านระบบโดยไม่เริ่มจากการตัดสินว่า code เก่าผิด แต่เริ่มจากผู้ใช้กำลังทำงานอะไรและหลักฐานใดพิสูจน์ได้

โจทย์กรณีศึกษา

ระบบมีตาราง User, Module, ModuleGroup, UserModule, UserLog และ AddressEmp แต่ไม่มี foreign key และตัวพิมพ์เล็ก–ใหญ่ของรหัสพนักงานไม่สม่ำเสมอ ผู้เรียนต้องสร้างแผนที่สิทธิ์และเมนูโดยไม่ทำให้ประวัติหาย

คำถามนำ
  • User.UserID เป็น account identity หรือ employee identity?
  • UserModule.Authority=1..6 หมายถึง CRUD ตรง ๆ หรือเป็นระดับข้อมูลลับด้วย?
  • ทำไม UserLog.ModuleID ยาว 4 แต่ Module.ModuleID ยาว 10?
  • คนลาออกแต่มีประวัติใช้งานควรถูกลบหรือยังคงเป็น historical actor?

วิธีทำ Evidence Ledger

ClaimEvidenceระดับความมั่นใจการตัดสินใจ
รหัสผู้ใช้เชื่อมพนักงานตัวอย่าง SR036/BP015 ปรากฏทั้งสองตารางสูง แต่ case ต่างกันสร้าง normalized key และเก็บ legacy value
Authority 4–6 คือ Super UserUI เดิมแยกหัวข้อข้อมูลลับสูงห้ามลดเหลือ CRUD 3 ระดับ
เมนูเรียงตามฝ่ายModuleGroupID และพฤติกรรม top menuสูงรักษา order by ID

Lab: Trace หนึ่ง feature ให้ครบ

  1. เลือกหน้า “กำหนดสิทธิผู้ใช้ระบบ” และบันทึก input/output ที่ผู้ใช้เห็น
  2. ค้นหา route และ SQL ทุกจุดที่อ่าน/เขียน UserModule
  3. สร้าง data-flow diagram ตั้งแต่ checkbox ถึง row ที่เปลี่ยน
  4. ทดสอบ authority ทั้ง 6 ค่า รวม user ที่ไม่มี AddressEmp
  5. ออกแบบ schema ใหม่โดยเก็บ legacy_user_id, legacy_module_id และ audit
  6. เขียน reconciliation query: จำนวนสิทธิ์เดิมต้องเท่าจำนวนสิทธิ์ใหม่รวม orphan
ห้ามทำ
ห้าม join แบบเดาแล้วทิ้ง row ที่ไม่ match ห้าม hash password ซ้ำโดยไม่ทราบ encoding chain และห้ามตีความผู้ใช้หมดอายุว่าเป็นพนักงานลาออกเสมอ

ผลส่งมอบ