STATIC TESTING VÀ DYNAMIC TESTING

Cũng khá lâu rồi mình mới lại ngồi viết một nội dung để có thể chia sẻ cùng các bạn. Hôm nay, chúng ta hãy cùng nhau tìm hiểu về hai phương pháp kiểm thử là kiểm thử tĩnh (Static Testing) và kiểm thử động (Dynamic Testing) nhé!

STATIC TESTING VÀ DYNAMIC TESTING

Khi nói đến việc đảm bảo chất lượng phần mềm, hai khái niệm không thể thiếu là kiểm thử tĩnh (Static Testing) và kiểm thử động (Dynamic Testing). Mỗi phương pháp đều đóng vai trò quan trọng trong việc phát hiện lỗi và đảm bảo hệ thống hoạt động như mong đợi, nhưng chúng lại có cách tiếp cận và ứng dụng hoàn toàn khác biệt.

Kiểm thử tĩnh (Static Testing)

Khái niệm

Theo ISTQB Syllabus, kiểm thử tĩnh (Static Testing) được định nghĩa như sau:

Kiểm thử tĩnh là một hình thức kiểm thử không cần thực thi mã nguồn. Nó được sử dụng để phát hiện lỗi trong các sản phẩm công việc như tài yêu cầu kỹ thuật (requirement), tài liệu thiết kế (documents), mã nguồn (Source code), kế hoạch kiểm tra (Test plan), kịch bản thử nghiệm (test script) và các trường hợp thử nghiệm (test case) thông qua việc xem xét (review) hoặc phân tích chúng.

Kiểm thử tĩnh được bắt đầu sớm hơn trong vòng đời phát triển, do đó nó còn được gọi là thử nghiệm xác minh (verification testing)

Lợi ích của kiểm thử tĩnh

  • Phát hiện lỗi sớm

Kiểm thử tĩnh giúp phát hiện lỗi ngay từ giai đoạn đầu của vòng đời phát triển phần mềm, trước khi mã được thực thi. Điều này giúp giảm chi phí và thời gian sửa lỗi.

  • Giảm chi phí kiểm thử

Sửa lỗi trong giai đoạn đầu thường ít tốn kém hơn so với sửa lỗi sau khi triển khai hoặc trong giai đoạn kiểm thử động.

  • Cải thiện chất lượng sản phẩm

Phát hiện các vấn đề như mâu thuẫn trong yêu cầu, lỗi thiết kế, hoặc vi phạm coding standards giúp đảm bảo tài liệu và mã nguồn rõ ràng, chính xác và dễ bảo trì.

  • Tăng cường giao tiếp và hiểu biết

Các hoạt động như review tài liệu và mã nguồn tạo cơ hội để các thành viên trong nhóm trao đổi, cải thiện hiểu biết về yêu cầu và thiết kế hệ thống.

  • Đánh giá tính tuân thủ tiêu chuẩn

Phân tích tĩnh giúp đảm bảo mã nguồn và tài liệu tuân thủ các chuẩn mực đã đề ra (coding standards, thiết kế hệ thống, bảo mật).

  • Phát hiện lỗi không thể tìm thấy qua kiểm thử động

Một số lỗi như thiếu tài liệu, lỗi logic, hoặc vi phạm chuẩn mực thường khó phát hiện qua kiểm thử động nhưng lại dễ nhận ra qua kiểm thử tĩnh.

  • Hỗ trợ cải thiện bảo mật:

Phân tích tĩnh có thể giúp phát hiện các lỗ hổng bảo mật tiềm ẩn trong mã nguồn, từ đó tăng cường an toàn cho sản phẩm.

  • Tiết kiệm thời gian cho kiểm thử động

Việc giảm bớt lỗi trong giai đoạn tĩnh giúp kiểm thử động trở nên hiệu quả hơn, giảm số lượng vòng lặp sửa lỗi và tái kiểm thử.

Các kỹ thuật thường sử dụng trong kiểm thử tĩnh

Vì kỹ thuật kiểm thử tĩnh thường được thực hiện thủ công, trong đó các thành viên trong nhóm kiểm tra các tài liệu hoặc mã nguồn để tìm ra lỗi, thiếu sót hoặc điểm không nhất quán nên thường sẽ áp dụng các kỹ thuật như Inspection, Walk-through, Technical reviews, Informal reviews

A diagram of static testing

Description automatically generated

  Informal Review (Xem xét không chính thức):

  • Thực hiện không có cấu trúc cụ thể, thường mang tính chất thảo luận hoặc trao đổi giữa các thành viên.
  • Dễ thực hiện nhưng ít chính xác hơn các kỹ thuật khác.

  Walkthrough (Duyệt qua):

  • Tác giả trình bày tài liệu hoặc mã nguồn cho nhóm để nhận phản hồi.
  • Mục tiêu là nâng cao hiểu biết và phát hiện lỗi tiềm ẩn.

  Technical Review (Đánh giá kỹ thuật):

  • Thực hiện bởi các chuyên gia kỹ thuật để đánh giá tính khả thi và tuân thủ tiêu chuẩn.

  Inspection (Kiểm tra chính thức):

  • Một quy trình chính thức với các bước cụ thể, gồm lập kế hoạch, kiểm tra, ghi nhận lỗi, và theo dõi.
  • Thường được sử dụng trong các dự án lớn để đảm bảo chất lượng cao.

Kiểm thử động (Dynamic Testing)

Khái niệm

Theo ISTQB Syllabus, Kiểm thử động (Dynamic Testing) được định nghĩa như sau:

Kiểm thử động là hoạt động kiểm thử liên quan đến việc thực thi phần mềm của một thành phần hoặc hệ thống để đánh giá một hoặc nhiều đặc tính của nó. 

Khi code được thực thi, thì đầu vào được truyền một giá trị, kết quả hoặc đầu ra của việc thực hiện được so sánh với kết quả dự kiến ban đầu đã đưa ra. Với việc này chúng ta có thể quan sát được các hành vi chức năng của phần mềm, giám sát hệ thống bộ nhớ, thời gian phản hồi của CPU, hiệu suất của hệ thống. 

Thử nghiệm động còn được gọi là thử nghiệm xác nhận (Validation Testing), đánh giá sản phẩm.

Lợi ích của kiểm thử động

  • Đảm bảo phần mềm hoạt động đúng như yêu cầu

Kiểm thử động giúp xác minh rằng phần mềm đáp ứng đầy đủ các yêu cầu chức năng và phi chức năng đã được đặt ra. Đảm bảo các tính năng chính của hệ thống hoạt động chính xác trong môi trường thực tế

  • Phát hiện lỗi trong quá trình thực thi

Kiểm thử động có thể phát hiện các lỗi chỉ xuất hiện khi mã được thực thi như Lỗi logic, lỗi tương tác giữa các thành phần hệ thống, lỗi liên quan đến quản lý tài nguyên (như tràn bộ nhớ, rò rỉ tài nguyên).

  • Đánh giá hành vi thực tế của phần mềm

Cung cấp thông tin thực tế về cách phần mềm hoạt động trong các điều kiện khác nhau, bao gồm: Đầu vào hợp lệ và không hợp lệ, khả năng chịu tải (Load Testing và Stress Testing).

  • Kiểm tra hiệu suất và độ tin cậy

Giúp đánh giá hiệu suất (Performance) của hệ thống như toccs độ xử lý, độ ổn định, khả năng mở rộng.

  • Cải thiện trải nghiệm người dung:

Kiểm tra giao diện người dùng (UI Testing) và trải nghiệm tổng thể để đảm bảo tính thân thiện, dễ sử dụng và đáp ứng mong đợi của người dùng cuối.

  • Phát hiện lỗi không tìm thấy trong kiểm thử tĩnh

Một số lỗi chỉ xuất hiện khi phần mềm được thực thi, chẳng hạn: Lỗi runtime, Lỗi hiệu năng, lỗi liên quan đến tích hợp và tương thích.

  • Hỗ trợ kiểm thử hồi quy (Regression Testing):

Đảm bảo rằng các thay đổi hoặc nâng cấp không ảnh hưởng đến các chức năng hiện có của hệ thống.

  • Đánh giá tính bảo mật trong môi trường thực tế

Phát hiện các lỗ hổng bảo mật thông qua kiểm thử động, như kiểm thử thâm nhập (Penetration Testing) hoặc giả lập các cuộc tấn công thực tế.

  • Tăng độ tin cậy cho sản phẩm trước khi phát hành

Kiểm thử động giúp giảm nguy cơ lỗi nghiêm trọng xảy ra trong quá trình sử dụng thực tế, đảm bảo rằng sản phẩm được phát hành ổn định và đáng tin cậy.

Các kỹ thuật thường sử dụng trong kiểm thử động

Thử nghiệm động gồm hai loại: Kiểm tra chức năng và Kiểm tra phi chức năng. Do đó trong kiểm thử động, chúng ta thường sẽ áp dụng các kỹ thuật như Unit Testing, Integration Testing, System Testing, Acceptance Testing.

A diagram of a system testing

Description automatically generated

  Unit Testing: 

  • Thử nghiệm từng mô-đun của các developer .
  • Với kỹ thuật này, sẽ phù hợp cho kiểm tra source code.

  Integration Testing: 

  • Kiểm tra việc thực hiện liên kết giữa các mô-đun khác nhau, phù hợp với việc của Tester.

  System Testing: 

  • Thử nghiệm thực hiện trên toàn bộ hệ thống. 
  • Với thử nghiệm này, hệ thống được thực hiện liên kết xuyên suốt tất cả các chức năng, kiểm tra sự hoạt động thông suốt, chính xác.

   Acceptance Testing: 

  • Thử nghiệm được thực hiện từ quan điểm của người dùng cuối. 
  • Với thử nghiệm này, thì ứng dụng đã được đưa tới người sử dụng

Sự khác nhau giữa kiểm thử tĩnh (Static Testing) và kiểm thử động (Dynamic Testing)

Dưới đây là sự khác nhau giữa kiểm thử tĩnh (static testing) và kiểm thử động (dynamic testing) 

Tiêu chíKiểm thử tĩnh (Static Testing)Kiểm thử động (Dynamic Testing)
Định nghĩaKiểm thử mà không yêu cầu thực thi mã nguồn.Kiểm thử yêu cầu thực thi mã nguồn hoặc hệ thống.
Phương pháp thực hiện– Xem xét, đánh giá tài liệu, mã nguồn, hoặc thiết kế.
– Sử dụng công cụ phân tích tĩnh.
– Static Testing chính là kiểm thử hộp trắng (White-box Testing )
– Thực thi chương trình với các đầu vào để kiểm tra hành vi và kết quả.
– Dynamic Testing chính là kiểm thử hộp đen (Black-box Testing)
Mục tiêu– Phát hiện lỗi trong giai đoạn sớm nhất thông qua phân tích hoặc review.
– Đảm bảo tính chính xác của tài liệu và mã nguồn.
– Tìm thấy defect trực tiếp trong tài liệu
– Xác minh hệ thống hoạt động theo yêu cầu và phát hiện lỗi trong quá trình chạy.
– Xác định cái failures mà gây ra defect khi phần mềm nó chạy
Thời điểm áp dụngGiai đoạn đầu của vòng đời phát triển phần mềm (yêu cầu, thiết kế, viết mã).Giai đoạn kiểm thử và sau phát triển (kiểm thử đơn vị, tích hợp, hệ thống).
Công cụ hỗ trợCông cụ phân tích tĩnh như: SonarQube, Checkmarx, PMD, FindBugs.Công cụ kiểm thử tự động và thủ công như: Selenium, JUnit, TestNG.
Phát hiện loại lỗi– Lỗi logic, lỗi thiết kế, vi phạm coding standards.
– Lỗi thiếu sót hoặc không rõ ràng trong tài liệu.
– Lỗi runtime như lỗi logic, lỗi tích hợp, lỗi giao diện, lỗi hiệu năng.
Ví dụ hoạt động– Xem xét tài liệu yêu cầu hoặc thiết kế.
– Phân tích mã nguồn bằng công cụ tĩnh.
– Chạy kiểm thử chức năng, hiệu năng, hoặc bảo mật trên phần mềm.
Đặc điểm chính– Tốn ít tài nguyên hơn vì không cần thực thi chương trình.
– Dễ dàng thực hiện trong giai đoạn phát triển sớm.
– Cung cấp thông tin thực tế về hành vi của hệ thống.
– Yêu cầu tài nguyên để chạy kiểm thử.
Kết quả– Báo cáo lỗi trong tài liệu, mã nguồn, hoặc thiết kế trước khi triển khai.– Báo cáo lỗi sau khi phần mềm được thực thi, phản ánh trạng thái hoạt động thực tế.

Trên đây mình đã trình bày toàn bộ những hiểu biết của mình về kiểm thử tĩnh (Static Testing) và kiểm thử động (Dynamic Testing), hi vọng bài viết sẽ giúp ích đối với các bạn.

Cảm ơn vì đã dành thời gian đọc bài của mình!

無料相談・お問い合わせ
insightscanXのお問い合わせもこちらからお願いします。
2025年1月からフリートライアル募集中
ご相談やお見積もりは全て 無料 で対応いたします。

    「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
    入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
    無料相談・お問い合わせ
    insightscanXのお問い合わせもこちらからお願いします。
    2025年1月からフリートライアル募集中
    ご相談やお見積もりは全て 無料 で対応いたします。

      「個人情報保護方針」をお読みいただき同意いただける場合は「送信」ボタンを押して下さい。
      入力していただいたメールアドレス宛に自動返信メールを送信していますので、お手数ですがそちらをご確認ください。
      無料相談
      お問い合わせ