Vì sao một developer thường khó có thể là một good tester ?

Bài viết này của tôi nhắm đến hai đối tượng. Thứ nhất là các developer và vẫn đang thực hiện công việc develop. Họ thường hay thắc mắc, trước khi bàn giao sản phẩm cho tester, họ đã kiểm tra qua sản phẩm rồi mà sao vẫn để xảy ra nhiều bug như thế. Thứ hai là các developer gốc nhưng vì một lý do nào đó đang chuyển sang công việc test, ví dụ như dự án thiếu tester hoặc muốn chuyển sang nghề tester. Các bạn thường tự hỏi vì sao mình không tìm được nhiều bug tỉ mỉ giống như các tester chính hiệu.

Tôi xin được đưa ra một số điều mà tôi đã đúc rút được.

1. Developer thường có “Parental feelings” (Cảm xúc của cha mẹ) đối với code mà họ viết ra

Các developer luôn có một cảm xúc liên kết riêng với code (sản phẩm) họ viết ra. Các bạn nghe có vẻ ngớ ngẩn nhưng thực tế là thật khó để developer phản đối lại với chính cái họ tạo ra.

Ví dụ như tôi biết là con tôi không hoàn hảo nhưng tôi chắc chắn là nếu có ai đó đến và chỉ trích những đứa con của tôi thì dù gì chăng nữa tôi vẫn thấy không dễ chịu một chút nào.(Vì trên tất cả, chúng vẫn là hoàn hảo...)

2. Developer thường tập trung vào “Positive Paths” (Những case đúng)

Công việc phát triển phần mềm dựa vào lấy những kịch bản theo hướng tích cực và đưa những kịch bản đó vào sản phẩm. Toàn bộ cố gắng của họ là tập trung vào làm thế nào để mọi thứ chạy đúng, hiệu quả và hiệu quả v.v Việc thay đổi tư duy của các developer để không chỉ chăm chăm vào những kịch bản tích cực mà suy xét cả những trường hợp tiêu cực: lường trước với code như thế thì có khả năng trường hợp nào chạy sai, xử lý không đúng hoặc hiện tượng gì sẽ phát sinh khi người dùng thao tác sai hoặc thao tác "dị dị" ... việc này thực sự rất khó có thể làm được trong một thời gian ngắn.

3. Developer thường làm việc theo nguyên tắc đơn giản hóa những scenario phức tạp

Một trong những điều cơ bản mà các tester làm khi thực hiện test là tìm kiếm những scenario phức tạp. Họ sẽ cố gắng làm thật nhiều thao tác một cách liên tục hoặc thực hiện một chuỗi các thao tác càng ngày càng phức tạp hơn nữa... để phá hệ thống và tìm ra bug. Vì thế tester sẽ lấy những cái đơn giản và tìm cách làm phức tạp chúng dần lên để tìm bug. Ngoài ra tester thực hiện kiểm thử phần mềm dựa trên requirement của khách hàng (spec của sản phẩm) + quan điểm của người sử dụng sản phẩm. Vì thế từ requirement đơn giản, đôi khi không đầy đủ, tester sẽ phải nghĩ ra tất cả các trường hợp mà end-user có thể thao tác để kiểm thử, xem developer đã có xử lý cho những trường hợp đó chưa.

Tuy nhiên các developer lại được đào tạo để dù requirement của khách hàng có phức tạp hay nhiều xử lý cỡ nào thì họ cũng sẽ chia nhỏ chúng ra thành những thành phần nhỏ nhất có thể mà sẽ cho phép họ có thể viết code và cho code đó chạy được. Họ chỉ bám chặt vào requirement, code theo requirement đó và cố gắng để cho code chạy được.

4. Developer khó có thể phát hiện ra những cái nhỏ nhặt trong một bức tranh lớn

Một trong những điều làm nên một tester tốt là phát triển khả năng, giác quan phán đoán, nhận ra cái gì là không phù hợp trong 1 bức tranh. Tester luôn có một ý niệm rằng chỗ nào cũng có bug, chỉ là chưa tìm thấy mà thôi. Chỉ cần một vài thao tác, tester sẽ có thể phát giác ngay... phần này có vẻ chưa ổn, chỗ này có vẻ chưa hợp lý. Và ngay khi có suy nghĩ mường tượng như thế, họ sẽ cố thực hiện thêm nhiều thao tác khác... để tìm ra chính xác chỗ không ổn của sản phẩm là gì.

Một developer có lần đã nói với tôi rằng, một tester tốt có thể ngửi thấy bug, và điều đó nghe cũng hợp lý.

5. Thiếu tầm nhìn của người sử dụng cuối cùng và tầm nhìn của người dùng thực tế

Do tính chất của công việc, hầu hết các developer chỉ tập trung vào một thành phần hoặc một tính năng trong sản phẩm, mà vẫn giữ một ý tưởng rất mơ hồ về người dùng thực tế sẽ làm việc/sử dụng như thế nào với sản phẩm cuối cùng của họ.

Các tester có tầm nhìn rộng hơn về sản phẩm, họ được yêu cầu cần phải hiểu và sử dụng tất cả mọi kỹ thuật để có thể bắt chước mô phỏng cách người sử dụng cuối cùng sẽ làm việc trong thế giới thực.

6. Ít có kinh nghiệm với những lỗi thường gặp và những cạm bẫy ứng dụng

Cùng với thời gian và kinh nghiệm, tester biết được nhiều lỗi phổ biến hay xảy ra và những cạm bẫy của ứng dụng. Khi một developer code càng nhiều dòng code thì anh ta cũng sẽ gặp càng nhiều bug và cạm bẫy. Tuy nhiên các tester thường tích lũy được nhiều kinh nghiệm hơn và cũng nhớ sâu sắc, ấn tượng hơn.

Đối với một tester có kinh nghiệm, ngay khi nhìn thấy sản phẩm, họ sẽ ngay lập tức nghĩ tới những lỗi hay phát sinh và những "failure" (thất bại) anh ta thường gặp và bắt đầu test các trường hợp đó.

7. Bị ám ảnh bởi những dòng code và nỗi sợ fix bug

Bản thân developer hiểu thông biết thạo về kỹ thuật, khi nhìn vào sản phẩm mà giống với cái mình đã làm thì họ có thể hình dung ngay sản phẩm đó code như thế nào. Chính vì vậy khi thấy có hiện tượng ABC thì họ có thể tự lý giải vì sao nó lại xảy ra hiện tượng như thế, vì sao nó lại xử lý như thế... là vì nó đã được code như thế. Vì thế họ rất dễ bị bỏ sót. Mặt khác đôi khi họ có nhìn ra một số cái nhỏ nhỏ, tuy nhiên khi tính đến việc nếu sửa thì sẽ sửa như thế nào, lỗi này bé tí không đáng để sửa... vì sửa sẽ mất nhiều effort hoặc sẽ gây ra lỗi khác... Với lối suy nghĩ triền miên như thế nên họ dần rơi vào trạng thái bỏ qua nhiều thứ, vì đã trót bỏ qua những cái khác rồi.

Đối với một tester thì lại ngược lại. Họ không cần hiểu code và họ không cần biết effort cần phải sửa là như thế nào. Đối với họ, đã là bug thì bắt buộc phải sửa, chỉ là bug nặng thì ưu tiên sửa trước, bug nhẹ thì có thể sửa sau, nhưng trước sau vẫn phải sửa.

Tuy nhiên tôi cũng đã từng làm việc trong một dự án, do thiếu tester nên các bạn developer được chuyển sang để thực hiện công việc test. Trong trường hợp này các bạn không test chính sản phẩm mình code ra nên sẽ tránh được “Parental feelings” (Cảm xúc của cha mẹ). Các bạn cũng loại bỏ được đắn đo có cần sửa hay không khi sẽ mất nhiều effort cho 1 lỗi quá nhỏ... vì người sửa ở đây là khách hàng chứ không phải họ. Và bản thân khách hàng sẽ còn quyết định việc có sửa hay không. Ngoài ra do lợi thế biết nhiều về kỹ thuật, đôi khi cũng biết được "vết xe đổ" mà các developer hay bị nên khi thực hiện test, các bạn thường tập trung vào đó và phát hiện ra rất nhiều lỗi logic hay lỗi hệ thống nguy hiểm, làm stop service hoặc làm chết chương trình v.v mà bản thân một tester đơn thuần thường khó phát hiện ra được.

Vì vậy lời khuyên của tôi dành cho các bạn developer muốn chuyển sang nghề tester là:

  1. Hãy đứng ở vị trí của người sử dụng để thực hiện càng nhiều thao tác càng tốt, thao tác bình thường, thao tác bất thường v..v Hãy bỏ qua ám ảnh bởi những dòng code, hãy bỏ qua nỗi sợ bị fix bug, để cố gắng phát hiện ra càng nhiều bug càng tốt.
  2. Luôn suy nghĩ sản phẩm chắc chắn phải có bug và phải tìm ra bug để fix. Thực hiện test là để chứng minh sản phẩm đang có bug, chứ không phải test để pass.
  3. Tham khảo các tài liệu Test view point hoặc checklist đã được tổng hợp lại bởi các đàn anh tester trước.
  4. Đọc bug mà các tester khác hoặc khách hàng đã log, để xem cách họ phát hiện ra bug như thế nào. Tìm hiểu vì sao họ tìm ra bug, mà mình không tìm ra được. Note lại những trường hợp, thao tác mà mình đã bị sót, không để ý đến.

Chúc các bạn thành công.