Các thuật ngữ đảm bảo chất lượng (QA) và kiểm soát chất lượng (QC) thường được sử dụng thay thế cho nhau. Mặc dù cả hai đều được liên kết chặt chẽ với nhau, là một phần của quản lý chất lượng, đôi khi chúng khó phân biệt và không giống nhau.
Trong khi QA tập trung vào việc ngăn ngừa lỗi, QC lại tập trung vào việc xác định lỗi. QA và QC thực chất là gì? Phân biệt QA với QC như thế nào? Hãy cùng ONETECH tìm hiểu về QA, QC cũng như những kỹ năng yêu cầu cần có ở một Tester nhé!
ONETECH là công ty phần mềm có trụ sở tại TP. Hồ Chí Minh, Việt Nam và Tokyo, Nhật Bản. ONETECH với thế mạnh và kinh nghiệm nhiều năm phát triển outsource và offshore cho các công ty Nhật Bản. Trong quá trình phát triển ra nước ngoài (オフショア開発), đặc biệt cho các khách hàng tại Nhật vốn yêu cầu rất khắt khe về chất lượng và đảm bảo yêu cầu cũng như thời gian giao hàng. Do vậy đội ngũ QA và QC của chúng tôi là những thành viên tài năng và rất quan trọng trong mỗi dự án, việc này giúp đảm bảo sự hài lòng cao nhất từ phía đối tác.
Quản lý chất lượng (Quality Management) là gì?
QA và QC đều là một phần của quản lý chất lượng (Quality Management) và không chỉ được sử dụng trong phát triển phần mềm mà còn được sử dụng trong các ngành công nghiệp khác.
Ví dụ, trong sản xuất thực phẩm, mục tiêu chính của QA là đảm bảo quá trình được thực hiện và ngăn ngừa bất kỳ khiếm khuyết nào trong quá trình sản xuất chính. Mặt khác, QC nhằm phát hiện một số nguy cơ có thể xảy ra do sự phát triển của vi sinh vật, ô nhiễm hóa học hoặc vật lý.
Cả hai khía cạnh liên kết với nhau sẽ cải thiện và đảm bảo sản phẩm thực phẩm an toàn.
QA và QC là gì?
QA (Quality Assurance) là người chịu trách nhiệm đảm bảo chất lượng sản phẩm thông qua đưa ra quy trình làm việc giữa các bên liên quan. QA không trực tiếp kiểm tra chất lượng phần mềm như QC.
QC (Quality Control) là người chịu trách nhiệm thực hiện các công việc kiểm soát chất lượng phần mềm. Thông thường, có hai vị trí QC. Đó là manual QC (không đòi hỏi kỹ năng lập trình) và automation QC (đòi hỏi kỹ năng lập trình).
Tester có phải là QA hay QC không?
Tester Là người thực hiện kiểm tra những sản phẩm (phần mềm hay ứng dụng) mà các lập trình viên đã làm ra, tìm các trường hợp còn thiếu sót hay lỗi so với yêu cầu sản phẩm. Tester có thể coi là người thực hiện và là một phần của QC.
Như vậy, xét về vai trò và vị trí thì QA > QC >Tester. Một QA có thể bao gồm và quản lý công việc của QC nếu cần thiết, tương tự một QC sẽ bao gồm quản lý công việc của Tester.
Sự khác biệt giữa QA và QC
QA và QC là những quy trình quan trọng nhất trong phát triển phần mềm. Cả hai đều có cùng mục đích, nhưng cách tiếp cận khác nhau. Dưới đây là một số khác biệt quan trọng nhất giữa QA, QC.
Với nhiều dự án quy mô nhỏ thì vài trò này đôi khi chỉ là một người, thậm chí người này kiêm nhiệm cả việc làm tester. Tuy nhiên với các dự án lớn hoặc rất lớn (phát triển hệ thống ngân hàng, hệ thống SAP ERP, SAP Migration (SAP移行) ứng dụng thương mại điện tử…) thì vai trò của QA và QC là cực kỳ quan trọng và có sự phân chia rõ ràng các chức năng và nhiệm vụ của họ.
Thời lượng
Sự khác biệt quan trọng đầu tiên giữa QA và QC là thời lượng. QA được thực hiện ở giai đoạn thiết kế trong khi QC được thực hiện ở giai đoạn cuối cùng khi kết quả được tạo ra. Vì vậy, đảm bảo chất lượng (QA) phải được hoàn thành trước kiểm soát chất lượng (QC).
Trọng tâm
QA tập trung vào các kỹ thuật hướng theo quy trình, cách phần mềm được tạo ra hay chuyển giao. Quá trình này phải tuân theo các tiêu chuẩn và kỹ thuật nhất định đối với các yêu cầu của khách hàng.
QC là một kỹ thuật định hướng sản phẩm (product-oriented) vì vậy nó tập trung vào sản phẩm cuối cùng và đảm bảo rằng các tiêu chuẩn được tuân thủ trong khi thử nghiệm sản phẩm.
Mục tiêu
Mục tiêu của QA trong phát triển phần mềm là ngăn ngừa các khiếm khuyết (bug) trong khi QC chịu trách nhiệm phát hiện lỗi. Kiểm định (Valification) là một ví dụ điển hình về mục tiêu của QA và thẩm định (Validation) là mục tiêu của QC.
Nhiệm vụ
Nhiệm vụ của QA
Đối với quá trình QA, các nhóm khác nhau tham gia vào việc ngăn ngừa một số khiếm khuyết nhất định. QA chịu trách nhiệm về toàn bộ vòng đời phát triển phần mềm. Nhiệm vụ của QA sẽ chủ yếu bao gồm các việc như:
Đề xuất, đưa ra các quy trình phát triển sản phẩm phù hợp với từng yêu cầu cụ thể của các dự án;
Đưa ra các tài liệu biểu mẫu hướng dẫn để đảm bảo chất lượng của sản phẩm cho tất cả các bộ phận trong nhóm phát triển sản phẩm;
Kiểm tra, đánh giá việc thực hiện quy trình của các bộ phận trong nhóm có đúng quy trình QA đề ra hay không;
Điều chỉnh, thay đổi quy trình phù hợp và nhắc nhở các đội ngũ phát triển sản phẩm tuân thủ theo
Nhiệm vụ của QC
Đối với quy trình QC, nhóm kiểm thử sẽ chịu hoàn toàn trách nhiệm trong vòng đời kiểm thử phần mềm. Một số nhiệm vụ chủ yếu của bộ phận QC là:
Tìm hiểu hệ thống, phân tích tài liệu mô tả về hệ thống và thiết kế test case,và thực hiện việc test phần mềm trước khi giao cho khách hàng;
Lên kế hoạch kiểm thử (thường do QC Leader thực hiện);
Viết Script cho automation test (nếu có áp dụng kiểm thử tự động);
Sử dụng các test tool để tạo và thực hiện các test case/script chi tiết;
Phối hợp với nhóm lập trình trong việc fix bug và báo cáo chi tiết cho Project Manager hoặc các bên liên quan khác tuỳ dự án.
Nhiệm vụ của Tester
Nhiệm vụ của Testing là tìm xem sản phẩm còn lỗi nào hay không, những lỗi mà phạm vi QC không bao phủ hết. Theo một cách dí dỏm thì công việc chính của “Kiểm thử” là lục tung hết các ngóc ngách để tìm càng nhiều lỗi càng tốt.
Trong testing, tester thường đóng vai trò người dùng cuối để dùng sản phẩm và tìm lỗi trên sản phẩm, đánh giá những rủi ro tiềm ẩn có thể ảnh hưởng đến chất lượng sản phẩm mà các bên liên quan có thể không lường trước được hay không được nêu ra trong yêu cầu sản phẩm.
Testing và QC nhìn có vẻ hao hao giống nhau nhưng vẫn có khác biệt đặc trưng cơ bản. QC nhìn chung có khuynh hướng “confirm” (nghĩa là sản phẩm có làm đúng theo yêu cầu hay không, còn Testing nhìn chung có khuynh hướng khám phá để “break”, để tìm lỗi (nghĩa là tìm xem sản phẩm chạy sai như thế nào).
Công cụ
Các công cụ thường được sử dụng trong QA bao gồm phân tích chi phí – lợi ích (cost-benefit analysis), biểu đồ kiểm soát (control charts), sơ đồ nguyên nhân và kết quả (cause and effect diagrams) và thiết kế các thí nghiệm (design of experiments).
Các công cụ được sử dụng để QC là đánh giá chất lượng. Phổ biến nhất là xem xét quản lý và kỹ thuật (management and technical reviews), kiểm tra hay inspection (đánh giá mã – code review) và kiểm thử (testing).
Kiểm thử phần mềm – tập hợp con của QC
Kiểm thử phần mềm (Software Testing) có thể được coi như một tập hợp con cụ thể của Kiểm soát chất lượng (QC). Chúng ta có thể coi kiểm thử là một phần không thể thiếu của QC vì nó giúp chứng minh rằng sản phẩm có thể chạy theo một cách suôn sẻ.
Có một số cấp độ kiểm tra nhưng quan trọng nhất là kiểm thử hệ thống (system testing) và kiểm thử chấp nhận người dùng (user acceptance testing).
Kiểm thử hệ thống (Software Testing) | Kiểm thử chấp nhận người dùng (UAT) |
Kiểm thử hệ thống được thực hiện bởi những người kiểm thử có chuyên môn cao, những người phải xác minh sự tuân thủ của phần mềm với các yêu cầu chức năng và kỹ thuật cũng như tiêu chuẩn chất lượng. | Kiểm thử chấp nhận của người dùng là bước cuối cùng để nhóm thử nghiệm quyết định xem sản phẩm đã sẵn sàng để sản xuất hay chưa. Cấp độ này tập trung vào các vấn đề về chất lượng hệ thống, nội dung, giao diện người dùng và hiệu suất. |
Một cấp độ khác của kiểm thử phần mềm là kiểm thử hồi quy (regression testing), được thực hiện sau khi cập nhật hoặc sửa lỗi.
Mục đích chính của kiểm thử hồi quy là có tác động chính xác đến các chức năng hiện có, tính ổn định và tính toàn vẹn.
Quy trình thực tế
Sau đây chúng ta sẽ tìm hiểu về QA và QC cũng như software testing thông qua một quy trình trong thực tế.
Khi bắt đầu một dự án mới, tất cả các team có thể gặp khó khăn, ví dụ như làm việc với công nghệ hoàn toàn mới.
Điều này sẽ đòi hỏi một kế hoạch để các thành viên trong nhóm được đào tạo về công nghệ mới bằng cách thu thập các tài liệu thiết kế, các yêu cầu kỹ thuật và chức năng.
Khi dự án tiến triển, QA kiểm tra xem dự án có thể có rủi ro phát triển ở đâu và đảm bảo rằng đúng người tham gia vào đúng thời điểm.
Team nên chuẩn bị một chiến lược thử nghiệm sẽ bao gồm tất cả các rủi ro có thể xảy ra trong sản phẩm cuối cùng. Trước khi bắt đầu QC, điều rất quan trọng là quy trình này phải ngăn chặn càng nhiều khiếm khuyết càng tốt.
Sau khi QA kết thúc, QC sẽ bắt đầu với việc kiểm tra và thử nghiệm. Kiểm tra yêu cầu kiểm tra các tài liệu thiết kế và đặc điểm kỹ thuật, chiến lược kiểm tra và mã.
Testing, như một phần của quy trình QC thường yêu cầu thẩm vấn (interrogation), hệ thống (system) và thử nghiệm chấp nhận của người dùng (UAT). Bất kỳ khiếm khuyết nào được phát hiện trong quá trình thử nghiệm phải được báo cáo lại và giải quyết đúng cách.
Sau khi giải quyết các vấn đề được nêu ra, một loạt các phép kiểm thử hồi quy (regression testing) và sanity test được yêu cầu để đảm bảo sản phẩm chất lượng cuối cùng.
Những kỹ năng cần có của Tester
Các chuyên gia kiểm thử phần mềm (QA/QC) phải là người có khả năng phân tích, định hướng chi tiết và có khả năng tổ chức. Các khả năng này nhằm để khắc phục sự cố chính xác và ghi lại các phát hiện trong khi làm việc trên nhiều dự án cùng một lúc.
Tester phải có khả năng cài đặt và gỡ cài đặt các ứng dụng, vận hành các giao thức thử nghiệm và viết các chương trình, kế hoạch kiểm thử phần mềm. Ngoài chuyên môn về ứng dụng phần mềm, Tester phải thông thạo phần cứng máy tính và có khả năng đọc sơ đồ kỹ thuật, cũng như ngồi lâu trong một thời gian, thực hiện các công việc lặp đi lặp lại.
Mặc dù người kiểm tra dành nhiều thời gian để làm việc độc lập, kỹ năng giao tiếp và giao tiếp giữa các cá nhân cũng rất cần thiết để tương tác với các thành viên của nhóm phát triển.
Sau đây, ONETECH sẽ giới thiệu một số kỹ năng yêu cầu ở một Tester.
Kỹ năng phân tích
Một người kiểm thử phần mềm giỏi phải có kỹ năng phân tích nhạy bén. Kỹ năng phân tích sẽ giúp Tester phân chia một hệ thống phần mềm phức tạp thành các đơn vị nhỏ hơn để hiểu rõ hơn và tạo ra các trường hợp thử nghiệm tương ứng.
Kỹ năng Kỹ thuật
Tại ONETECH, một Tester giỏi phải có kỹ năng kỹ thuật (technical skills) vững vàng. Điều này sẽ bao gồm mức độ thành thạo cao trong các công cụ như MS Office, OpenOffice, v.v., các công cụ kiểm tra như QTP, Loadrunner, v.v. và dĩ nhiên là hiểu sâu về ứng dụng đang được kiểm tra.
Những kỹ năng này có thể đạt được thông qua đào tạo và thực hành liên quan. Ngoài ra, đó là một lợi thế bổ sung nếu Tester có một số kỹ năng lập trình nhưng đó không phải là điều bắt buộc.
Kỹ năng giao tiếp
Một Tester giỏi phải có kỹ năng giao tiếp bằng lời nói và văn bản tốt. Các tạo tác thử nghiệm (như các trường hợp / kế hoạch kiểm thử, chiến lược kiểm thử, báo cáo lỗi, v.v.) được tạo bởi người kiểm thử phần mềm phải dễ đọc và dễ hiểu. Kỹ năng giao tiếp với các developers (trong trường hợp có lỗi hoặc bất kỳ vấn đề nào khác) sẽ đòi hỏi sự khéo léo.
Kỹ năng tổ chức
Kiểm thử đôi khi có thể là một công việc nhiều khó khăn, đặc biệt là trong quá trình phát hành mã. Tester phải có khả năng quản lý hiệu quả khối lượng công việc, có năng suất cao, thể hiện kỹ năng tổ chức và quản lý thời gian tối ưu.
Thái độ
Để trở thành một người kiểm thử phần mềm giỏi, bạn phải có một thái độ cầu tiến. Đó là thái độ “kiểm thử để phá vỡ”, định hướng chi tiết, sẵn sàng học hỏi và đề xuất cải tiến quy trình.
Trong ngành phần mềm, công nghệ phát triển với tốc độ chóng mặt và một người kiểm thử phần mềm giỏi nên nâng cấp kỹ năng kỹ thuật của mình với sự thay đổi của công nghệ. Thái độ của bạn phải có mức độ độc lập nhất định. Khi bạn là người nắm quyền làm chủ nhiệm vụ được giao, bạn hoàn thành nó mà không đòi hỏi quá nhiều sự giám sát trực tiếp.
Kết luận
Công việc của người kiểm thử phần mềm là phát hiện và cố gắng ngăn chặn bất kỳ lỗi nào được tạo ra trong quá trình phát triển.
Sự hiểu biết rõ ràng giữa các khía cạnh QA và QC của tất cả mọi người tham gia vào dự án có thể giảm thiểu các khiếm khuyết và tạo ra một kế hoạch quản lý hiệu quả, đảm bảo sản phẩm chất lượng cao và duy trì niềm tin của khách hàng.
Hy vọng qua bài viết trên, ONETECH đã cung cấp cho bạn những thông tin hữu ích liên quan đến QA,QC và cách phân biệt hai khái niệm này. Ngoài ra, chúng tôi mong rằng bạn cũng nắm được một số kỹ năng yêu cầu cần có ở một Tester.