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) - (Part1)
Bài đăng này đã không được cập nhật trong 3 năm
1- Mục đích bài viết
Quá trình kiểm thử là một trong những quá trình đắt đỏ nhất trong quá trình phát triển phần mềm. Theo thống kê của Microsoft và IBM, quá trình kiểm thử phần mềm chiếm khoảng 40-80% của quá trình phát triển nói chung khi so với khoảng 20% của quá trình phát triển mã nguồn (Coding). Do đó quá trình kiểm thử phần mềm thu hút rất nhiều sự quan tâm của công đồng phát triển và nhiểu kỹ thuật cũng như phương pháp mới ra đời, ví dụ như kỹ thuật phân tích tĩnh, kỹ thuật phân loại khuyết tật của phần mềm, …
Ngành công nghiệp phần cứng cũng đối mặt với những vấn đề tương tự. Sự phức tạp ngày càng tăng của những thiết kế và tổn thất khổng lồ khi sản phẩm nhận được bị lỗi khiến cho việc đầu tư vào việc kiểm tra chưc năng và phát triển những kỹ thuật cũng như phương pháp mới trong lĩnh vực này được đặt lên hàng đầu.
Mặc dù cộng đồng kiểm thử phần mềm và kiểm tra phần cứng chia sẻ cùng mục đích và cùng vấn đề cũng như thử thách, nhưng vẫn có những sự khác nhau về mặt triết lý trong việc thực hiện hai công việc này. Nguyên nhân chính dẫn đến việc phát triển hai triết lý riêng biệt là giới hạn tương tác giữa hai cộng đồng phát triển. Chúng ta có thể dễ dàng nhận thấy có rất ít sự chia sẻ trao đổi của hai cộng đồng này về vấn đề hay giải pháp, cũng như sử dụng chung các công cụ trong việc tìm ra lỗi và phân tích lỗi.
Mục đích của bài viết này hướng đến là phân tích và đánh giá sự giống nhau và khác nhau của việc kiểm tra phần cứng và kiểm thử phần mềm, từ đó chỉ ra điểm tương đồng giữa hai quá trình này, qua đó rút ra những kỹ thuật và những đặc điểm mà kiểm thử phần mềm có thể học hỏi, trao đổi từ quá trình kiểm tra phần cứng và ngược lại.
2- Sự khác nhau giữa kiểm tra phần cứng và kiểm thử phần mềm
Hình dưới đây thể hiện một biểu đồ nói về quá trình phát triển phần mềm và phần cứng, từ đó chúng ta có thể nhìn rõ sự giống và khác nhau giữa hai quá trình này. Đối với cả 2 quá trình, chúng ta đều thấy chúng bắt đầu từ việc xác định yêu cầu của khách hàng đối với hệ thống, bao gồm cả những yêu cầu mang tính chức năng (funtional) và những yêu cầu phi chức năng (non-funtional). Những yêu cầu này sau đó được sử dụng để tạo ra spec của hệ thống, cái mà toàn bộ quá trình phát triển sau này sẽ dựa trên đó.
- Với quá trình phát triển phần cứng, giai đoạn này là giai đoạn cực kỳ quan trọng , nguyên nhân chính do những yêu cầu không mang tính chức năng chiếm phần lớn và cần thời gian để phân tích chính xác yêu cầu từ khách hang từ đó đưa ra spec cụ thể.
- Ngược lại trong quá trình phát triển phần mềm, bước này chỉ là một phần nhỏ hoặc trong nhiều trường hợp thậm chí không tồn tại vì yêu cầu khách hàng đã tương đối rõ ràng
Bước tiếp theo là quá trình thiết kế mức cao của hệ thống, bao gồm kiến trúc hệ thống, những thành phần chính của nó và những giao tiếp giữa những thành phần đã được định nghĩa. Thiết kế mức cao được theo sau bởi thiết kế thức thấp, nơi mà mỗi thành phần trong thiết kế mức cao được chia nhỏ thành những khối nhỏ hơn . Mỗi khối này được thực thi trong từng giai đoạn phát triển mã nguồn. Đối với riêng quá trình phát triển phần cứng, việc phát triển mã nguồn thường được thực hiện bằng ngôn ngữ đặc thù của phần cứng như VHDL.
Khi tất cả những giai đoạn (pha) phát triển mã nguồn đều đã kết thúc, việc kiểm thử (kiểm tra chức năng) và việc tích hợp tất cả các chức năng vào hệ thống bắt đầu được thực hiện.
- Với quá trình phát triển phần mềm, đây là giai đoạn cuối cùng của quá trình phát triển. Tuy nhiên trước khi một hệ thống có thể trở thành sản phẩm nó phải đi qua bước test chấp nhận, cái mà sử dụng một bộ những bài test riêng biệt và được thực hiện bởi khách hàng. Sau khi sản phẩm được đưa ra thị trường, hệ thống sẽ đưa vào chế độ bảo hành, bao gồm việc fix bug và phát triển phiên bản mới.
- Với quá trình phát triển phần cứng, sau bước thiết kế logic và kiểm tra hệ thống hoàn thành, một vài giai đoạn được thêm vào để chuyển đổi những thiết kế về mặt chức năng phần cứng vào trong một nền tảng chip nhất định. Bước này sẽ thực hiện chuyển đổi những mô tả chức năng của hệ thống thành những logic bên trong mạch điện tử, và những dữ liệu cần thiết cho việc sản xuất chip. Cuối cùng, thiết kế sau khi được kiểm duyệt kỹ càng sẽ được gửi đến nhà máy để sản xuất. Tuy nhiên đây cũng chưa phải bước cuối cùng của quá trình sản xuất chip. Đầu tiên, những chip đã được sản xuất sẽ phải vượt qua một chuỗi những bài test để đảm bảo quá trình sản xuất đã làm việc đúng, và sau đó chúng sẽ được mang trở lại phòng thí nghiệm để tiếp tục trải qua một quá trình kiểm tra đắt đỏ và quan trọng khác để tìm ra tận gốc những khiếm khuyết mang tính chức năng hoặc không mang tính chức năng của phần cứng, cái mà đã vượt qua được quá trình kiểm tra tại nhà máy trước đó. Trong hầu hết các trường hợp, việc chỉnh sửa những lỗi tìm được ở quá trình này sẽ dẫn đến việc phải thay đổi lại thiết kế hoặc quy trình sản xuất, và quá trình sản xuất mới sau đó sẽ phải được cập nhật lại trước khi chip có thể được sản xuất hàng loạt và đưa ra thị trường.
Bảng trên đưa ra một sự so sánh giữa kiểm tra phần cứng và kiểm thử phần mềm dựa trên một vài đặc điểm cơ bản như kỹ năng đòi hỏi, mức độ sáng tạo được áp dụng, việc thẩm định những bài kiểm tra, những công cụ có thể được sử dụng, yêu cầu về chất lượng của quá trình kiểm tra. Chúng ta dễ dàng nhận thấy yêu cầu kỹ năng, chất lương quá trình kiểm tra và mức độ tự động hóa trong quá trình test phần cứng là cao hơn rất nhiều so với quá trình kiểm tra phần mềm. Nguyên nhân của điều này chủ yếu do đặc thù của phần cứng và đặc thù của ngôn ngữ lập trình nó như đã đề cập ở trên.
Đó là về tổng quan và những điểm khác nhau cơ bản của việc kiểm tra phần cứng và kiểm thử phần mềm chúng ta đang làm. Mình xin tạm dừng ở đây, hẹn các bạn ở bài tiếp theo mình sẽ mô tả sâu hơn về mặt kỹ thuật những điểm giống nhau và khác nhau giữa hai hình thức kiểm thử này, sau đó đúc kết lại những gì chúng ta có thể học hỏi và trao đổi từ công việc kiểm tra phần cứng.
All rights reserved