Trước nghỉ lễ Tết, nhóm dự án có 1 cái hẹn release cho một phần mềm. Các tính năng thì đã xong, nhưng cần khách hàng thử trước khi up lên App store. Giữa lúc đó, đột ngột xuất hiện 1 bug: khách hàng thực hiện chức năng chính của app bị crash. Chính vì nó là chức năng chính nên tình hình trở nên căng thẳng. Tình hình càng trở nên tồi tệ khi tester là mình không thể tái hiện được bug này mặc dù đã có video khách hàng có quay lại cảnh crash và gửi cho team. Quên không nhắc, hôm đó là 28 Tết. T__T
Background: Tính năng nhập thông tin rồi share lên fb và twitter, giống kiểu post rồi share trên instagram
Chi tiết sự cố:
15h43: Khách hàng báo là có hiện tượng crash app, mình và cả team ngồi xem cái video và cố gắng phân tích xem khách hàng làm như thế nào mà crash vì tính năng ấy bao lâu nay không có vấn đề gì (tính năng chính mà hỏng thì … hiu hiu)
10p sau: Bọn mình phát hiện được 1 điểm có thể gây crash app đó là nếu chưa cài app fb mà dùng chức năng share fb thì bị crash. Mình test thử trên 2 thiết bị ip5 và ip6+ (2 version ios khác nhau) thấy đúng như vậy nên mừng quýnh, nói chắc chắn là lỗi này rồi.
16h15: Lỗi được xử lý xong, cả team mừng bảo năm nay không mất Tết rồi. Bản build mới được đẩy lên deploygate, khách cài app và báo lỗi ấy vẫn tồn tại. Đen vl. Team giải thích: khách nên delete hẳn cái app cũ rồi mới cài bản mới + và phải down app fb về trước –> khách thông báo lại đã làm i chang mà vẫn lỗi. Nhọ tập 2.
17h00: Cả team đều cố gắng tái tạo bug mà không được đến nỗi mình còn phải nói “crash hộ bố phát” nhưng chả có cái crash nào xảy ra và thêm 1 thông tin nữa là trên file log không thấy có báo crash từ màn hình chức năng đó.
Kết thúc ngày làm việc hôm đó, mình về quê nghỉ Tết nhưng phải nói là lòng lúc nào cũng não nề, thấy mình vô dụng, cảm giác còn hơn bị dev chê “tester mà test không ra bug” (mình đã từng bị nói như thế). Mình rầu ruột, theo dõi từng hoạt động giao tiếp giữa manager bên mình và khách hàng. Hoạt động trao đổi, build lại test, lấy crash log file cuối cùng đã có kết quả, anh manager của team đã tìm được nguyên nhân. Chuỗi substring trước nhận độ dài là 5, nay bị sửa thành 10 nên khi khách nhập giá trị có độ dài nhỏ hơn 10 thì gây ra lỗi.
Fix bug xong, mình cũng cảm thấy nhẹ nhàng, chắc cả team ai đọc được tin này cũng sẽ ăn ngon ngủ yên mấy ngày Tết. Mình nghiêm túc xem xét lại thì thấy có mấy điểm mà có thể là bài học đắt giá cho mình.
1. Mình đã không nhập được chính xác những khách nhập. (Mình không biết tiếng Nhật nên ko tái hiện được mấy chữ Nhật khách nhập và mình toàn chọn luôn chuỗi giá trị được hệ thống suggest ra, chuỗi này luôn lớn hơn 10) —> sơ suất 1
2. Mình đã biết là crash app thường vì giá trị null nhưng chưa xem xét hết đến các trường hợp gây ra null, cứ nghĩ tính năng nay chả có ai đụng vào, vẫn chạy ngon lành bao nhiêu tháng rồi —> sơ suất 2
3. Chức năng này là chức năng chính của app, đáng nhẽ ra phải được xây dựng 1 bộ regression testing nhưng do hạn chế về mặt kỹ thuật mà mình ko xây dựng được. Bên cạnh đó, mình lại tập trung cho việc test các yêu cầu mới mà ko chạy regression thường xuyên. —> sơ suất 3
4. Mình không nghĩ được hết các trường hợp. —> hạn chế về tư duy.
Vào nghề đã được gần 6 tháng, cũng 1 vài lần xảy ra những sự cố, nhưng lần này tính chất và mức độ cao hơn rất nhiều. Bài học lần này cũng giúp mình nhìn nhận lại bản thân và có 1 số góp ý đến các bạn mới vào nghề.
- Về tư duy:
Tính năng đã có từ lâu, trước đây vẫn chạy ngon lành nhưng không có nghĩa là ngày mai nó vẫn chạy ngon. Cực kỳ cơ bản mà mình quên. 🙁
Cẩn thận, phân tích từng điểm một, không nhảy cóc. - Về kỹ thuật:
Lỗi crash app vì null value diễn ra rất thường xuyên, hãy nhớ kỹ và đừng để nó biến mất khỏi đầu trong những lúc quan trọng.
Nắm thật vững hệ thống, nếu có thể thì hiểu từng chỗ nhập vào vì đấy là chỗ tạo ra những bug kinh khủng.
Mình hy vọng các bạn nhận được 1 cái gì đấy từ kinh nghiệm này của mình. 🙂
Nice!!
haha. Đọc bài của bạn mà cảm giác như mình ở trong đó ý =))
Mình nghĩ là còn nhiều bạn có cảm giác này. 😀
Hnay biết thêm được crash trên app thường do null value. Thank bạn nhé 😀
Hi bạn,
Crash app thì nhiều nguyên nhân lắm, null chỉ là 1 trong số đó thôi, nhưng mà hầu như mình cũng ko tác động được gì nhiều nên là chỉ biết vậy thôi, ko tìm hiểu sâu hơn. hehe
Nhưng chốt lại app của b bị crash là do xử lý chuỗi từ 5 thành 10 chứ k phải do null value mà
Khi giá trị đầu vào không thoả mãn thì object sẽ lấy default là null thôi bạn.