Inspectดูแลระบบ PHP / Laravel เดิม
แพ็กเกจนี้คืออะไร
แพ็กนี้ไม่ได้แก้โค้ดสักบรรทัด แต่เป็นแพ็กที่ทำให้ทุกอย่างหลังจากนี้ตีราคาได้จริง ผมอ่านระบบเดิมทั้งก้อน เขียนแผนผังออกมาให้เห็นว่ามีอะไรอยู่ตรงไหน ชี้จุดเสี่ยงกับช่องโหว่ที่เจอ แล้วบอกตรงๆ ว่าควรต่อยอดหรือควรรื้อ พร้อมเหตุผลที่ตรวจสอบได้
เหตุผลที่ต้องมีขั้นนี้เป็นเรื่องของราคาล้วนๆ ราคางานต่อยอดขึ้นกับสภาพโค้ดเดิมทั้งหมด ใครก็ตามที่ตีราคาโดยยังไม่เห็นโค้ด ต้องเผื่อความเสี่ยงไว้ในตัวเลข ซึ่งแปลว่าคุณจ่ายส่วนเผื่อนั้นไปฟรีๆ ถ้าโค้ดของคุณสภาพดี การตรวจก่อนจึงทำให้ราคาที่เสนอตรงกับงานจริง และถ้าคุณจ้างทำต่อ ผมหักค่าตรวจนี้ออกจากงานถัดไปเต็มจำนวน
สิ่งที่คุณได้กลับไปคือรายงานที่เอาไปให้คนอื่นอ่านต่อได้ ไม่ใช่ของที่ใช้ได้เฉพาะกับผม ถ้าอ่านแล้วตัดสินใจจ้างเจ้าอื่นก็ใช้ได้เหมือนกัน
ลองดูของจริง
| ระบบ | ระบบรับออเดอร์ภายใน · Laravel 6 · PHP 7.2 |
|---|---|
| ขนาด | ไฟล์ PHP 412 ไฟล์ · ตาราง 38 ตาราง |
| ตรวจเมื่อ | 5 ส.ค. 2569 · ใช้เวลา 4 วัน |
| ข้อสรุป | ต่อยอดคุ้มกว่ารื้อ |
01 รายงานตรวจสภาพโค้ด
โครงสร้างระบบยังอ่านรู้เรื่องและตรรกะทางธุรกิจในนั้นถูกต้อง สิ่งที่ทำให้ไม่มีใครกล้าแตะคือไม่มีชุดทดสอบเลยแม้แต่ตัวเดียว ไม่ใช่เพราะโค้ดแย่ ผมจึงไม่แนะนำให้รื้อ การรื้อคือการทิ้งตรรกะที่ใช้มาหกปีแล้วเริ่มนับบั๊กใหม่จากศูนย์ สิ่งที่ควรทำมีสามข้อตามลำดับนี้
- ทำทันทีอัปเกรด PHP ขึ้นเวอร์ชันที่ยังได้รับการดูแล เพราะ 7.2 หมดการดูแลตั้งแต่ปี 2020 ช่องโหว่ที่ประกาศหลังจากนั้นปิดไม่ได้เลย
- ก่อนแก้อะไรเขียนชุดทดสอบคลุมการออกใบเสร็จและตัดสต็อกก่อน สองส่วนนี้พังแล้วขายของไม่ได้ทั้งวัน
- เมื่อสะดวกแก้คิวรีหน้ารายงานที่ดึงทั้งตารางมานับในโปรแกรม ทำให้ช้า 31 วินาที
02 สิ่งที่เจอ เรียงตามความสำคัญ
ไม่มีชุดทดสอบเลยทั้งระบบ
ทั้งโปรเจกต์ ไม่มีโฟลเดอร์ tests/วิกฤตไม่มีอะไรบอกได้ว่าแก้แล้วพังตรงไหน คนถัดไปที่มาแก้จึงต้องเดา และเป็นเหตุผลที่ทีมคุณไม่กล้าแตะมาสองปี
วิธีแก้เขียนเทสต์คลุมเส้นทางที่ห้ามพังก่อนเป็นอันดับแรก คือออกใบเสร็จ ตัดสต็อก และคำนวณส่วนลด
PHP 7.2 หมดการดูแลตั้งแต่ปี 2020
composer.json บรรทัด 14สูงช่องโหว่ที่ถูกประกาศหลังจากนั้นไม่มีแพตช์ให้ และรายการช่องโหว่เป็นข้อมูลสาธารณะที่ใครก็อ่านได้
วิธีแก้อัปทีละขั้นเป็น 7.4 แล้ว 8.1 พร้อมเทสต์ยืนยันในแต่ละขั้น ไม่กระโดดทีเดียว
รหัสผ่านฐานข้อมูลเขียนอยู่ในโค้ด
config/database.php บรรทัด 42สูงใครที่เข้าถึง repo ได้ จะเห็นรหัสผ่านฐานข้อมูลจริงทันที รวมถึงคนที่เคยเข้าถึงในอดีตด้วย
วิธีแก้ย้ายไปไฟล์ตั้งค่าที่ไม่เข้า repo แล้วเปลี่ยนรหัสผ่านชุดเดิมทั้งหมด เพราะถือว่ารั่วไปแล้ว
ในรายงานฉบับเต็มมีอีก 14 ข้อ พร้อมตัวเลขเวลาและราคาของงานที่คุณอยากทำต่อ
นี่คือเอกสารตัวอย่างที่ย่อมาจากของจริง ตัวเลขและชื่อระบบเป็นของสมมติ แต่รูปแบบ หัวข้อ และวิธีเขียนเป็นแบบเดียวกับที่ส่งให้ลูกค้าจริงทุกประการ
สิ่งที่คุณจะได้ ทั้งหมด
รายการนี้คือขอบเขตงานทั้งหมดของแพ็กเกจนี้ ไม่มีข้อไหนซ่อนไว้ในสัญญา
- อ่านโครงสร้างระบบเดิมทั้งหมด แล้วเขียนแผนผังให้
- ชี้จุดเสี่ยง หนี้ทางเทคนิค และช่องโหว่ที่เจอ
- บอกตรงๆ ว่าควรต่อยอดหรือควรรื้อ พร้อมเหตุผล
- ประเมินราคางานที่คุณอยากทำต่อ จากของจริงที่เห็นแล้ว
- ถ้าจ้างทำต่อ หักค่าตรวจนี้ออกจากงานถัดไปเต็มจำนวน
- การรื้อเขียนใหม่ทั้งระบบด้วยเทคโนโลยีอื่น ถ้าตรวจแล้วเห็นว่าควรรื้อจริง ผมจะบอกตรงๆ และเสนอเป็นงานสร้างใหม่แยกต่างหาก ไม่ยัดเข้ามาในงานดูแล
- งาน WordPress ปลั๊กอินและธีม เป็นคนละสายกับ Laravel ตอนนี้ผมยังไม่รับ
- การกู้ระบบที่ถูกแฮ็กไปแล้ว ต้องประเมินเป็นรายกรณีก่อน เพราะขอบเขตความเสียหายต่างกันมาก
- ค่าเซิร์ฟเวอร์และบริการภายนอกที่ระบบใช้ จ่ายตรงกับผู้ให้บริการ ผมแจ้งราคาให้ก่อนเสมอ
คำถามที่พบบ่อยของแพ็กเกจนี้
รายงานที่ได้ หน้าตาเป็นยังไง
เป็นเอกสารที่คนไม่ใช่โปรแกรมเมอร์อ่านรู้เรื่อง เริ่มจากสรุปหนึ่งหน้าว่าระบบสภาพเป็นยังไงและควรทำอะไรต่อ แล้วค่อยลงรายละเอียดเป็นข้อๆ พร้อมชี้ไฟล์จริงที่มีปัญหา จัดอันดับความสำคัญไว้ให้ และมีตัวเลขเวลากับราคาของงานที่คุณอยากทำต่อ กดดูตัวอย่างฉบับเต็มได้จากหน้านี้เลย
ถ้าตรวจแล้วบอกว่าไม่ควรจ้างต่อล่ะ
ก็จบแค่นั้นครับ และผมถือว่างานนี้สำเร็จแล้ว คุณจ่าย ฿6,900 เพื่อไม่ต้องจ่ายอีกหลายแสนกับของที่ไม่ควรทำ รายงานยังเป็นของคุณและเอาไปให้เจ้าอื่นอ่านต่อได้ ผมไม่ล็อกอะไรไว้กับตัวเอง
จะรู้ได้ยังไงว่าไม่ได้เชียร์ให้รื้อเพื่อจะได้งานใหญ่
ข้อนี้ตรวจสอบได้จากตัวรายงานครับ ผมต้องเขียนเหตุผลกำกับทุกข้อว่าทำไมถึงสรุปแบบนั้น พร้อมชี้ไฟล์จริง ถ้าเหตุผลอ่อน คุณจับได้เอง และผมเขียนไว้ในรายงานเสมอว่าทางเลือกที่ถูกที่สุดคืออะไร ถึงแม้ทางนั้นจะแปลว่าผมได้งานน้อยลง
ใช้เวลาจริง 4 วันเลยไหม
ใช่ครับ สี่วันนับจากวันที่ผมเข้าถึงโค้ดได้ ไม่ใช่นับจากวันที่คุยกันครั้งแรก ถ้าระบบใหญ่กว่าปกติมากจนเกินกรอบนี้ ผมแจ้งก่อนเริ่มพร้อมตัวเลขใหม่ ไม่ใช่เงียบไปแล้วส่งช้า
ประสบการณ์ Laravel มากี่ปี
ผมตอบตรงๆ ว่าสแตกหลักของผมคือ TypeScript กับ Python ส่วน Laravel ผมพิสูจน์ด้วยของที่ตรวจสอบได้แทนการนับปี ระบบตัดเกรดโรงเรียน GradeLens เขียนด้วย Laravel เปิดโค้ดให้อ่านทั้งระบบพร้อมชุดทดสอบ และกดเข้าไปใช้งานจริงได้จากหน้าผลงาน ถ้าอ่านโค้ดแล้วเห็นว่ายังไม่ถึงมาตรฐานของคุณ ผมยินดีให้ตัดสินจากตรงนั้น การนับปีไม่ได้บอกอะไรอยู่แล้วถ้าอ่านโค้ดกันได้