# 92: Khi coder và tester hợp tác lại với nhau

Điều kỳ diệu nào đó sẽ xảy ra khi người lập trình và kiểm thử phần mềm bắt đầu hợp tác với nhau.Ta sẽ dành ít thời gian để gửi lỗi qua lại thông qua hệ thống quản lí lỗi. Ta cũng không cần phải tốn nhiều thời gian cố gắng tìm ra đây là lỗi hay tính năng mới, và ta sẽ có nhiều thời gian phát triển phần mềm tốt hơn để đáp ứng nhu cầu của khách hàng. Bạn sẽ có nhiều cơ hội để hợp tác, thậm chí trước khi việc viết code bắt đầu.

Người kiểm thử phần mềm có thể giúp khách hàng viết và tự động hóa các bộ acceptance tests bằng cách sử dụng ngôn ngữ trong lĩnh vực của họ như là Fit (Framework for Integrated Test). Khi những bài tests này được gửi đến lập trình viên trước khi họ bắt đầu viết code, cả nhóm sẽ luyện tập Acceptance Test Driven Development (ATDD). Người lập trình sẽ viết những thứ cố định để chạy tests, và họ code để hoàn thành bài tests đó. Những bài tests này dần trở thành một phần của bộ hồi quy. Khi việc hợp tác này diễn ra, những bài kiểm tra chức năng sẽ được hoàn thành sớm, việc này cho phép thời gian để thử nghiệm thăm dò ở các điều kiện khác hoặc thông qua quá trình làm việc ở tình huống nói chung.

Chúng ta có thể tiến xa thêm một bước nữa. Là một người kiểm thử, tôi có thể cung cấp hầu hết các ý tưởng của bài tests trước khi lập trình viên bắt đầu code một tính năng mới. Khi tôi hỏi ý kiến của họ, họ hầu như lúc nào cũng đưa tôi những thông tin có ích cho các bộ tests tiếp theo được tốt hơn, hoặc giúp tôi tránh dành thời gian quá nhiều cho các bộ tests không cần thiết. Chúng tôi thường ngăn chặn được các lỗi vì các tests thể hiện rõ ý tưởng ban đầu. Ví dụ, trong một dự án tôi tham gia, những bộ Fit tests tôi gửi cho lập trình viên đã cho thấy kết quả mong đợi của một truy vấn để phản hồi cho cuộc tìm kiếm wildcard. Người lập trình đã hoàn toàn xong dự định code các từ khóa hoàn chỉnh. Chúng tôi đã có khả năng nói chuyện với khách hàng và giải thích chính xác trước khi bắt đầu code. Bằng cách hợp tác, chúng tôi đã ngăn được cái lỗi cũng như tiết kiệm được thời gian.

Lập trình viên cũng có thể hợp tác với người kiểm thử phầm mềm để tạo sự tự động hóa thành công. Họ hiểu good coding practices và có thể giúp người kiểm thử phần mềm thiết lập bộ tests tự động hóa mạnh mẽ để hoạt động cho cả nhóm. Tôi thường thấy những dự án test tự động hóa thất bại bởi vì chúng được thiết kế sơ sài. Bộ tests cố gắng kiểm tra quá nhiều hoặc người kiềm thử vẫn không hiểu rõ về công nghệ để tạo ra bộ tests có thể hoạt động độc lập. Người kiểm thử phần mềm thường là những người làm chậm trễ tiến độ công việc, vì vậy cho lập trình viên làm việc với họ trong các nhiệm vụ như tự động hóa rất hợp lí. Làm việc với họ, ta sẽ biết được những gì có thể kiểm tra sớm nhất, có lẽ bằng cách cung cấp một công cụ đơn giản, sẽ cho người lập trình các phản hồi khác giúp họ code tốt hơn sau này.

Chừng nào người kiểm thử phần mềm ngừng nghĩ rằng công việc duy nhất của họ là phá vỡ phần mềm và tìm lỗi trong mã code của người lập trình, lập trình viên ngừng nghĩ rằng không nên làm phiền những người kiểm thử, việc hợp tác sẽ cởi mở hơn. Khi lập trình viên nhận ra rằng họ cần có trách nhiệm nâng cao chất lượng code của họ, khả năng kiểm tra của code là tự nhiên, cả nhóm có thể cùng nhau tự động hóa các bộ tests quy hồi. Sự kỳ diệu khi làm việc nhóm sẽ bắt đầu.