Darkness0710
Articles3
Tags0
Categories2
Tản mạn chuyện dự án 01

Tản mạn chuyện dự án 01

Giới thiệu bối cảnh

Đây là seri câu chuyện về quãng thời gian dài tôi gắn bó với ngành lập trình.
Câu chuyện này có thể là câu chuyện của bản thân tôi, cũng có thể là thuật lại câu chuyện của một người khác.
Thế nên tôi quyết định đặt tên cho nhân vật trong câu chuyện là Z.
Z là một chàng trai trẻ mới tốt nghiệp đại học và đang là thực tập viên cho công ty S.

Câu chuyện đầu đời về chức năng register

Caption

Sau khi Z gia nhập công ty S, Z được ra nhập một team dự án, tôi tạm gọi là dự án X.
Chức năng đầu tiên Z được giao là hoàn thiện chức năng register user (Tạo mới tài khoản người dùng).
Với một chức năng khá là đơn giản như vậy, Z dễ dàng hoàn thành công việc được giao trong vòng 4 tiếng và mở truyện “cô giáo thảo” lên đọc.
Hóa ra khi đi làm dự án thực tế cũng không khó như tưởng tượng :D

Chiếc bug đầu tiên

Caption

Chỉ trong vòng 30 phút sau khi chức năng được deploy trên môi trường dev thì Z đã bị bà chị tester sang gõ đầu.
Tạm thời tôi gọi tên bà chị tester khó tính này là “Nhung”.
Z đã bị Nhung blame và nói rằng tại sao lại cho phép 2 user có cùng địa chỉ email vậy?

Fix Bug

Z đã rất bất ngờ vì chưa thấy chị nào hung dữ như bà chị này có mỗi cái bug mà cũng mắng cho được?
Ngay lập tức Z bắt tay vào fix bug, bổ sung validate cho trường hợp nếu email trùng trong database thì không thể tạo được tài khoản đó và tiếp tục đọc truyện “cô giáo thảo”.

Lại Bug

Đời không như là mơ, tưởng mọi thứ đã êm đẹp thì Z lại tiếp tục nhận thêm 1 bug mới.
Nhung lại tiếp tục blame Z: “Đã không thể tạo 2 email trùng nhau trong hệ thống nhưng tại sao 2 email trùng nhau nhưng in hoa khác nhau vẫn tạo được, sao trong database lại cho phép in hoa email thế kia?”

Lại Fix Bug

Z nhận ra mình đã mắc 2 sai lầm.
Sai lầm thứ nhất là chưa downcase về chữ thường khi insert vào database.
Sai lầm thứ hai là khi kiểm tra email tồn tại trong database, thì cũng phải downcase email đó rồi mới kiểm tra?

Happy ending hay Bad ending?

Z nhanh chóng fix cái bug trên và nghĩ rằng lần này sẽ không thể lủng cái bug nào được nữa.
Không có gì bất ngờ chức năng đó đã được release production và có thể là happy ending cho chức năng register.

Bug production

Sau khi chức năng được release một thời gian, khách hàng thông báo tới đội dev có 2 email trùng nhau trong hệ thống.
Sau khi kiểm tra lại thì cả đội dev lẫn đội tester đều nhận ra code không hề có vấn đề gì?
Vậy tại sao hệ thống lại có thể có 2 email trùng nhau được?

Explain bug

Sau khi duyệt toàn bộ log hệ thống tại thời điểm đó, thì Z nhận ra rằng đồng thời điểm đó có 2 email trùng nhau được insert vào database.
Tại sao lại như vậy khi trong code đã validate, mà code validate không hề sai.
Quay lại vấn đề, cả Z lẫn Nhung đều đang không cover được trường hợp tạo 2 email giống nhau đồng thời.
Khi 2 user đồng thời sử dụng chung 1 email khi đăng ký, 2 request đồng thời được gửi đến server.
Cả 2 request đều được server phản hồi là chưa có email này trong database, và đồng thời được insert vào database.

Giải quyết vấn đề và bài học rút ra

Khi unique bất kì input nào chúng ta phải tạo giá trị cột unique cả trong database.
Việc chỉ validate bằng code là chưa đủ.
Dev cần cover các request song song, và tester cũng phải test các case liên quan request song song.

×