12/08/2018, 15:01

So sánh giữa kiểm tra phần cứng và kiểm thử phần mềm (Hardware Verification and Software Testing) - (Part2)

1 - Mục đích bài viết Mặc dù có sự khác biệt lớn giữa những phương pháp và cách thức được thực hiện trong 2 lĩnh vực kiểm tra phần cứng và kiểm thử phần mềm, vẫn có nhiều ví dụ về những kĩ thuật và những phương pháp đã được phát triển cho lĩnh vực này và sau đó ứng dụng thành công trong lĩnh ...

1 - Mục đích bài viết

Mặc dù có sự khác biệt lớn giữa những phương pháp và cách thức được thực hiện trong 2 lĩnh vực kiểm tra phần cứng và kiểm thử phần mềm, vẫn có nhiều ví dụ về những kĩ thuật và những phương pháp đã được phát triển cho lĩnh vực này và sau đó ứng dụng thành công trong lĩnh vực khác. Trên thực tế, một số kĩ thuật đã đi hết một vòng tròn đầy đủ của nó, bao gồm bắt đầu được ứng dụng ở một lĩnh vực, sau đó được chuyển qua ứng dụng tiếp ở lĩnh vực kia và cuối cùng trở lại ứng dụng ở lĩnh vực gốc ban đầu. Trong phần này, chúng ta sẽ miêu tả một vài kĩ thuật như vậy và những đặc điểm đã được ứng dụng thành công từ lĩnh vực này sang lĩnh vực khác. Chúng ta cũng sẽ thảo luận về những vấn đề chung trong đó sự hợp tác giữa kiểm tra phần cứng và kiểm thử phần mềm có xu hướng phát triển mạnh trong tương lai.

Hình dưới đây là sự pha trộn giữa quá trình phát triển phần cứng và phần mềm

1.1 - Kĩ thuật về sự bao phủ

Sự bao phủ là một ví dụ về một kĩ thuật đã được phát triển và ứng dụng giữa cả kiểm tra phần cứng và kiểm thử phần mềm. Nói đơn giản thì ý tưởng chính của kĩ thuật phân tích sự bao phủ là tạo ra một danh sách những nội dung cần kiểm tra một các đầy đủ và đảm bảo được tính bao quát, sau đó đảm bảo rằng từng nội dung trong danh sách đó đều đã được thực hiện trong quá trình kiểm tra.

Kĩ thuật này có thể giúp trong việc nâng cao chất lượng quá trình kiểm thử, và chỉ ra những điểm yếu trong việc thiết kế và thực thi của một kế hoạch kiểm thử đã được đưa ra. Mô hình thực hiện kĩ thuật bao phủ có thể chia làm 2 loại: Bao phủ mã nguồn và bao phủ chức năng. Những mô hình của việc bao phủ mã nguồn chủ yếu tập trung vào việc thực thi của mã nguồn, trong khi mô hình bao phủ chức năng tập trung vào các chức năng của nó.

Mô hình bao phủ mã nguồn là mô hình lâu đời nhất được ứng dụng trong cả lĩnh vực kiểm tra phần cứng và kiểm thử phần mềm. Trong những công cụ ứng dụng mô hình bao phủ mã nguồn, một nội dung kiểm tra được tạo một cách tự động cho bất kỳ chức năng mới nào đó của chương trình khi chúng được thêm vào và sau đó người lập trình sẽ cố gắng kiểm soát tất cả những nội dung này. Những công cụ hỗ trợ thực hiện mô hình bao phủ mã nguồn cho phần cứng và phần mềm này đã được phát triển và sử dụng tại IBM vào những thập niên 60 thế kỉ trước. Sau này, những kỹ thuật và những công cụ hỗ trợ mô hình bao phủ mã nguồn đã ngày càng phát triển và trở nên phổ biến, được sử dụng rộng rãi trong ngành công nghiệp phần mềm. Trong những năm gần đây, với sự phát triển của những ngôn ngữ mô tả phần cứng, những công cụ bao phủ mã nguồn cho những ngôn ngữ lập trình phần cứng ngày càng trở nên phổ biến hơn và hướng đến phát triển thành một mô hình bao phủ mới, được gọi là mô hình bao phủ trạng thái máy (hay còn được biết đến với thuật ngữ “State-Machine” Coverage).

Sự dịch chuyển dễ dàng của những kĩ thuật bao phủ mã nguồn từ phần cứng sang phần mềm và tiếp tục trở lại ứng dụng đối với phần cứng đã được thực hiện nhờ vào 2 yếu tố. Yếu tố đầu tiên là cả phần cứng và phần mềm đều được viết trên các ngôn ngữ cấp cao, có kiểu diễn đạt tương đồng nhau, do đó sự bao phủ mã nguồn cũng được thực hiện vô hình chung theo cùng một cách. Yếu tố thứ hai là do những công cụ hỗ trợ kỹ thuật bao phủ mã nguồn là dễ dàng sử dụng và dễ dàng tích hợp vào một môi trường test đang có sẵn.

Khác với mô hình bao phủ mã nguồn, mô hình bao phủ chức năng hướng nhiều hơn đến các chức năng lớn bên trong ứng dụng và đưa ra những bài kiểm tra cho các chức năng đó.

Hình dưới đây là Visual Studio 2012 - Code Coverage
1.2 - Kĩ thuật kiểm duyệt mã nguồn và kiểm duyệt Specification

Sự kiểm duyệt kĩ lưỡng mã nguồn cũng như specification của hệ thống phần cứng hay phần mềm là một kĩ thuật tiếp theo mà cả phần cứng và phần mềm đều sử dụng. Sự kiểm duyệt này thường dựa trên những quy luật đã được định nghĩa từ trước cho tất cả các thành phần cũng như cho tất cả những dòng code đã được viết ra. Do đó, kĩ thuật này là đặc biệt quan trọng trong việc phát hiện ra bug và được thực hiện chính ở mức unit test. Trong nhiều trường hợp, những khiết tật được tìm ra dựa trên kĩ thuật này rất khó được tìm ra trong quá trình mô phỏng. Kĩ thuật kiểm duyệt mã nguồn này là tương tự với cả phần cứng và phần mềm, kể cả khi danh sách những quy luật được sử dụng để kiểm duyệt là khác nhau.

Đối với quá trình kiểm duyệt spec cũng có đôi chút sự khác nhau giữa phần cứng và phần mềm. Phần cứng thường sẽ yêu cầu spec rõ ràng hơn và do đó spec của phần cứng sẽ cần được kiểm duyệt một cách sâu sắc và kỹ lưỡng trước khi chuyển qua bước phát triển mã nguồn. Đối với phần mềm, đây cũng được coi là một vấn đề có thể áp dụng nhưng thường không được coi trọng.

1.3 - Kĩ thuật kiểm định mô hình (Model Checking)

Kiểm định mô hình (Model Checking) hiện nay được sử dụng rộng rãi trong kiểm định các hệ thống phần mềm và các hệ thống phần cứng, cụ thể là các hệ thống điều khiển điện tử. Model Checking là một nhóm các kỹ thuật kiểm định tự động một cách hình thức một mô hình với một đặc tả các tính năng của mô hình đó. Mô hình của một hệ thống bao gồm tập hợp có giới hạn các trạng thái và tập hợp các chuyển tiếp giữa trạng thái đó. Thông thường, một đặc tả hoặc một tính năng của hệ thống được viết dưới dạng công thức logic và thường được diễn tả bằng một ngôn ngữ logic thời gian (temporal logic) nào đó. Ý tưởng cơ bản là chứng minh xem một mô hình có thỏa mãn các tính năng đã mô tả trước đó về nó hay không bằng cách duyệt toàn bộ không gian trạng thái của hệ thống đó. Nếu mô hình đó không thỏa mãn một tính năng nào đó, thuật toán cần phải đưa ra một phản ví dụ (counterexample).

Theo như phân tích ở trên thì kĩ thuật này phù hợp hơn với việc kiểm tra phần cứng do những thiết kế phần cứng thường được định nghĩa rõ ràng thành các trạng thái, mô hình hoạt động cụ thể. Đối với phần mềm, chúng ta sẽ khó khăn hơn trong việc trích xuất chúng ra thành những trạng thái hoạt động nhỏ, cái mà là đầu vào bắt buộc đối với kĩ thuật kiểm định mô hình này. Do đó, đối với phần mềm, kĩ thuật này chủ yếu được sử dụng để kiểm tra specifications.

Hình dưới đây là sơ đồ mô tả chi tiết kỹ thuật kiểm định mô hình

Mình xin tạm dừng tại đây, chúng ta còn một số kĩ thuật khác cần đưa ra phân tích sâu hơn như Kĩ thuật phân tích khuyết tật, Kĩ thuật kiểm thử đồng thời, Kĩ thuật sinh ra những bài kiểm tra tự động, Kĩ thuật sử dụng những hành vi. Mình sẽ tiếp tục ở phần 3 của bài viết. Cảm ơn mọi người đã dành thời gian đọc bài viết của mình.

0