kiến thức Testing & Checking

toi5

Senior Member
Tôi thấy box này ít có nói gì nhiều về testing, nên tạo topic này để share và discuss

## FAQs
  1. Topic này về gì?
    Đa số vozers trong khu này là dev front-end, back-end hay fullstack các kiểu. Ít có vozers nào về tests nói chung và automation nói riêng nên tui mạo muội tiên phong về vấn đề này
  2. Tóm lại là lại nói về automation tests à?
    Không. Topic này nói những thứ có đi lệch với những cái automation tests các fence đã học trong trường, hay đi làm ít ai chỉ, hay freshers mà bắt làm automation tests như cái máy, etc. Topic này kiểu resources tóm gọn lại cho các fence bước đầu vào con đường tests và automation tests mang lại value cho product của mình
  3. Ủa mắc gì làm?
    Làm vì để chia sẻ kiến thức, trao dồi kĩ năng. Ko focus quá vào tests chung chung
## Test?
Tiếng việt thì test là kiểm thử (ok that's fine xD). Theo style hiện đại ngày nay thì test được phân tách rõ ràng thành 2 phần: Testing và Checking
  • Testing: Sử dụng tools, methods, approaches để test system nó work như thế nào, nó cần improve gì, nó có những lỗi tìm ẩn hay ko, nó có những vấn đề bất cập nào, nó cần dc test để cung cấp thông tin mình cần biết thế nào etc... Cái này gọi là testing
  • Checking: Đơn giản chỉ là có output sẵn, mình cần check lại xem với input thế này thì output có đúng ko. Làm sao cung cấp dc inpput? => Input đến từ việc apply những thuật toán, những thứ mình ĐÃ BIẾT, những thứ mình có sẵn để produce ra 1 input mà mình expect với input này mình sẽ có dc output.
Hiện tại đa số chúng ta đang sử dụng checking cho việc "test" dựa trên luồng data và info chúng ta có trong tay. Data này đến từ requirements, các cuộc meetings với devs, và 1 phần đến từ "Testing" ở trên mà chúng ta vô tình đã apply . Vậy tiếp theo làm sao để làm Testing cho hiệu quả?

## Information
Information , nôm na gọi là thông tin ta có được ảnh hưởng tới việc testing và checking.Vì sao? Vì testing và checking là 1 process ko thể xa lìa. Testing giúp kiếm ra thứ để checking và checking để validate lại xem nó có đúng ko. Thứ chúng ta kiếm ra là information, mà information này muốn kiếm ra dc ko phải dễ.
1638174833633.png


Chúng ta, tức QAs aka culi hay DEVs hay PO/PM mọi thành phần trong team sẽ là 1 phần giúp có dc thứ để checking. Còn bản thân mình thì phải kiếm information này bằng công sức , vậy làm sao để có? Đây là 1 câu hỏi mà tôi cũng hỏi nhiều người khi interview là làm sao em test dc những thứ mà em ko biết và mặc định ứng viên bay vào kêu kiếm doc và test luôn tại chỗ mà ko rõ mình cần làm gì trước

Refer: https://danashby.co.uk/2016/03/08/i...6k1xi6YSxe8DyYMhk8e9Eica5UZWgBwqp55FqECqsoUBY

## Testing & Checking
Ok chúng ta tới đây nhiều fence xem Testing = Ad-hoc/Exploraty Test. Điều này đúng 1 phần vì ching mục đích nhưng sai cách tiếp cận. Nếu các fence là fan lâu năm của "thánh" James Batch thì chắc có nghe qua test model là Rapid Software Testing

## Rapid Software Testing
Topic này ko đề cập nhiều tới model này, nếu muốn refer có thể check qua : https://www.satisfice.com/download/a-rapid-software-testing-framework. Đây là 1 model ko mới, nhưng nó đề cập sâu tới việc sử dụng "input" để produce ra "output" cần verify . Đây là 1 dạng testing mình đã đề cập ở trên

Mô hình khái quát như sau

1638159801133.png


## Testing Inputs
Inputs ở đây ko phải là những inputs về data, parameters, variables ... cho 1 feature nào đó. Inputs là những cái cần thiết để fence bắt đầu việc Testing. Tôi hay interview khi hỏi 1 thằng candidate là cho feature này làm sao em test thì họ trả lời ngay lập tức theo khuôn mẫu là đọc documents, hỏi dev, hỏi PO/PMs blah blah.
Cái này đúng như trong context của cái RST này là chưa đúng và thiếu. Inputs để xác định việc checking và checking từ đó mới sinh ra nên apply testing thế nào.

Vậy nên để có inputs cho việc checking hiệu quả dựa vào :
  • Project
  • Quality Criterias
  • Product
Refer: https://www.satisfice.com/download/heuristic-test-strategy-model

Mục đích của testing là gì? Tại sao tôi phải làm? Làm để làm gì? Là những câu hỏi phải ra khi dc giao validate 1 cái gì đó.

## Testing outputs
Outputs của testing đến từ việc apply tools, methods, appoaches và orcles. Và tất nhiên ko thể thiếu 3 cái inputs ở trên. Việc apply testing kiểu này mang lại hiệu quả nhưng tốn thời gian và sẽ rất khó khăn với ai mới vào nghề, vậy giải pháp là gì ?
  • Xác định mục tiêu : Tao cần test gì, tại sao phải test, nếu ko test thì có được ko ?
  • Xác định rủi ro: ok tao đã xác định xong mục tiêu, vậy những rủi ro có thể xảy ra là gì? Rủi ro nào tao nên care, rủi ro nào team tao nên care, rủi ro nào customer hay client nên care?
  • Xác định cách tìm information cho việc testing: Việc testing mà ko có document hay tools để track lại là ko hiệu quả. Refer bài này để biết thêm. Information này giúp cho việc checking sau này của bạn.
  • Xác định nên xài oracles nào: Tuỳ target, tuỳ rũi ro, tuỳ cách tiếp cận để kiếm information mà refer xem nên apply
  • Khi nào nên dừng test? Khi bạn đã xác định rõ được đã kiếm đủ information và validate dc information mình cần check là đúng
Những steps trên là apply cho việc kiếm information và check nó, ko liên quan tới việc regression tests hay release testing etc hay những loại test khác trong product. Tất nhiên fence có thể based trên đó mà áp dụng tuỳ tình cảnh phù hợp

Những bài sau sẽ nói thêm về automation tests
 
cảm ơn bác, mấy lần mình vào các thread kia hỏi về test nhưng cũng ko đc ai rep, mình cũng đang tính đầu năm tới đi học test, mong bác phát triển thread để mọi người vào thảo luận còn mình hóng ké chút :D
 
Đi pv cứ bị hỏi câu là "em có viết unit test không? Em có làm với unit test bao giờ chưa"
Cái này em toàn tự test bằng cơm mấy cái func do mình viết. Nên thực sự ko biết trả lời sao cho ghi điểm.
Bác chủ thớt chia sẻ chút về unit test đc không ạ
 
Đi pv cứ bị hỏi câu là "em có viết unit test không? Em có làm với unit test bao giờ chưa"
Cái này em toàn tự test bằng cơm mấy cái func do mình viết. Nên thực sự ko biết trả lời sao cho ghi điểm.
Bác chủ thớt chia sẻ chút về unit test đc không ạ
Unit Test thì có hẳn 1 bài này khá hay: https://martinfowler.com/bliki/UnitTest.html

Theo mình unit mình gọi là 1 code element, nó có thể là one class, method hay 1 group classes/methods mà mình . Việc làm unit test phải tự hỏi l value nó mang lại là gì, tại sao cần làm unit test

=> Lúc này lật cái bàn qua mô hình kim tự tháp cổ điển bên testing
1638326812868.png


Khi bắt đầu test 1 cái gì luôn quan niệm là test này tui có thể làm ở layer khác ko, ví dụ đang làm E2E tests mà có 1 vài cái test nếu thấy unit test được thì prefer unit test, ko prefer E2E tests nhiều vì đơn giản: E2E test lâu, hay bị flaky (lúc pass, lúc failed etc ). Bản thân thằng Google cũng có 1 bài dài nói về cái này : https://testing.googleblog.com/2020/11/fixing-test-hourglass.html

Unit Test hiệu quả là phải cân đo đong đếm dc, cái này dev gọi là code coverage, bên cty mình xài https://www.eclemma.org/jacoco/.
Và nó chỉ thực sự hiệu quả khi việc unit test nhanh và mang lại kết quả consistent . Unit Test test logic của cái code, test xem có những issues nào mà mình PHÁT HIỆN dc càng sớm càng tốt chứ ko phải chờ tới khi build -> QA vào test thì phát hiện ra issue trong khi chỉ cần xài unit test là detect dc rồi.
 
Các bác cho mình hỏi các cty có quan tâm nhiều chuyện mình học test ở trường hay trung tâm nào ra ko ạ. Mình tính học test bên fsoft nhưng hiện tại đang học khóa ITbasic bên đó thì thấy tốc độ dạy khá nhanh, đến phần ngôn ngữ lập trình thì nhiều chỗ khá khó hiểu đối với mình nên cũng lăn tăn về việc học tiếp khóa test bên đó

Gửi từ Samsung SM-N960F bằng vozFApp
 
Anh chủ thớt cho em hỏi:
+ Có cách nào làm smart CI cho UI automation test không ạ ?
Kiểu: có thể detect ra những page/model change bên frontend của 01 pull request.
Từ đấy mapping sang UI test case tương ứng.
Và chỉ chạy từng ấy test case thay vì toàn bộ.
 
Anh chủ thớt cho em hỏi:
+ Có cách nào làm smart CI cho UI automation test không ạ ?
Kiểu: có thể detect ra những page/model change bên frontend của 01 pull request.
Từ đấy mapping sang UI test case tương ứng.
Và chỉ chạy từng ấy test case thay vì toàn bộ.

Cái này phạm trù khá là lớn rùi, nó gọi là Test Impact Analysis: https://martinfowler.com/articles/rise-test-impact-analysis.html. Hiện tại khó làm dc cái này lắm :))
 
@toi5 anh có thể giới thiệu em ít sách/course về automation testing được không ạ ?
Em đang muốn học thêm để nâng cao trình.
 
Back
Top