Phát triển phần mềm yêu cầu mọi người làm việc cùng nhau như một tổ. Bên trong tổ có một số vai trò và trách nhiệm được xác định rõ.

Chẳng hạn: Người quản lí dự án, người lãnh đạo tổ, người quản lí cấu hình phần mềm; chuyên viên đảm bảo chất lượng. Tuy nhiên, người phát triển và người kiểm thử thường có vấn đề xung đột với nhau và người quản lí thường không biết cách giải quyết. Ở một tổ hiệu quả, người kiểm thử và người phát triển bổ sung cho nhau, từng người cung cấp các cảnh quan và kĩ năng mà người kia có thể không có. Sai lầm chung là coi người kiểm thử như người mới vào nghề và người phát triển là cao cấp hơn, do vậy làm nảy sinh nhiều vấn đề giữa hai vai trò này. Thực ra, người kiểm thử tốt có nhiều kĩ năng có thể giúp cho người phát triển về cách họ xây dựng phần mềm.

Ngày nay, phần lớn các chương trình đào tạo đều hội tụ vào kĩ năng lập trình. Sinh viên dành nhiều năm vào ngôn ngữ lập trình và cách gỡ lỗi mã riêng của họ cho nên họ tin kiểm thử chỉ là để tìm lỗi và không gì khác. Vì hầu hết các chương trình đào tạo đều không dạy về kiểm thử phần mềm hay chỉ cho sinh viên một tổng quan về kiểm thử, nhiều người phát triển không biết kiểm thử có thể khó thế nào. Kiểm thử yêu cầu kiên nhẫn và linh hoạt với hội tụ vào chi tiết và hiểu biết bức tranh lớn. Điều này tương phản với người phát triển, người được yêu cầu là chuyên viên trong khu vực kĩ thuật đặc thù được phân công cho họ. Người phát triển bao giờ cũng có thời gian để làm việc của họ nhưng người kiểm thử bao giờ cũng có khả năng học mọi thứ nhanh chóng trên bất kì cái gì họ kiểm thử. Họ thường có ít thời gian để học sản phẩm hay tính năng mới nhưng đằng nào cũng phải làm nó. Họ phải học điều người phát triển làm và so sánh với yêu cầu và tạo ra các trường hợp kiểm thử rồi thực hiện mọi kiểm thử trong thời gian sẵn có theo lịch biểu. Người kiểm thử cũng hiểu tâm trí của người dùng và cách họ dùng phần mềm trong môi trường của họ thay vì cách người phát triển có thể muốn họ dùng. Về căn bản người kiểm thử chuyên nghiệp phải biết nhiều hơn và làm nhiều hơn người phát triển.

Tất nhiên, người kiểm thử bị thất vọng khi làm việc với người phát triển người coi kiểm thử là dễ dàng. Vài năm trước, một người phát triển đã bình luận trong cuộc họp tổ rằng kiểm thử là dễ như “ăn bánh”. Tôi có thể thấy rằng nhiều người kiểm thử đã sẵn sàng phản ứng cho nên tôi nói: “Trong trường hợp đó, tôi muốn bạn để hai tuần làm việc kiểm thử vì bạn có thể làm việc tốt hơn tổ kiểm thử.” Người phát triển đã thường bị phụ thuộc vào tổ kiểm thử làm kiểm thử đã học được bài học có giá trị khi mọi người kiểm thử được bảo không giúp gì cho anh ta. Anh ta vật lộn cả ngày mà không hoàn thành được cái gì và đến cuối anh ta phải tới và thú nhận rằng anh ta sai. Sau đó, tôi để ý một số khác biệt giữa thái độ của người kiểm thử và người phát triển. Tất nhiên, có những người phát triển giỏi có thể cũng kiểm thử tốt, và có nhiều người kiểm thử có thể viết mã rất tốt nhưng nếu bạn nhìn vào hầu hết các công ti phần mềm, bạn sẽ thấy rằng họ thuê nhiều người kiểm thử hơn là người phát triển.

—-English version—-

Developers and Testers

Software development requires people to work together as a team. Within the team there are some well-defined roles and responsibilities. For example: Project manager, Team leaders, Software configuration manager; Quality assurance specialist. However, Developers and Testers often have conflicting issues with each other and managers usually do not know how to solve. On an effective team, testers and developers complement one another, each providing perspectives and skills that the other may lack. A common mistake is to consider testers as entry level person and developers as more senior, thus encourage more issues between these two roles. In fact, good testers have many skills that can help developers to improve the way they build software.

Today, most training programs are focusing on programming skills. Students spend several years learning programming languages and how to debug their own code so they believe testing is just about finding defects and nothing else. Since most training programs do not teach software testing or just give students an overview of testing, many developers do not know how difficult testing can be. Testing requires patience and flexibility with focus on detail and an understanding of the big picture. This contrasts with developers, who are required to be specialists in particular technical areas assigned to them. Developers always have time to do their work but testers always have to be able to learn thing quickly on anything that they test. They often have little time to learn a new product or feature but must do it anyway. They must learn what developers do and compare with the requirements and create test cases then perform all tests in the time available on the schedule. Testers also must understand the mind of users and how they use the software in their environment instead of the way developers may like them to. Basically a professional testers must know more and do much more than developers.

Of course, testers are frustrated working with developers who think testing is easy. Few years ago, one developer commented on the team meeting that testing is easy as “eating a cake”. I can see that several testers were ready to react so I said: “In that case, I would like you to spend two weeks in testing since you can do better job than the testing team.” The developer who had been used to depend on the test team to do testing learned a valuable lesson as all testers were told not to help him. He struggled for days without complete anything and in the end he had to come in and admitted that he was wrong. Afterward, I noticed some differences between the attitudes of testers and developers. Of course, there are good developers who can also test well, and there are many testers who can write very good code but if you look at most software company, you will see that they hire more testers than developers.