Xin chào anh em trong cộng đồng Automation test, em là Hà một tester làm việc trong lĩnh vực embedded, với 2 năm kinh nghiệm làm việc, em muốn được chia sẽ những kiến thức ít ỏi mà mình thu nhặt được trong quá trình làm việc và tìm tòi trên enternet rất mong là nó sẽ hữu ích cho các bạn mới muốn tìm hiểu về quy trình phát triển phần mềm trong embedded. Ngoài ra mong được sự đánh giá và sửa chửa của các anh em đã có kinh nghiệm ạ.
Embedded system – Hệ thống nhúng Thuật ngữ chỉ phần mềm được tích hợp vào các thiết bị phần cứng giúp thực hiện các chức năng tự động hóa đảm bảo các yêu cầu an toàn, tính năng sử dụng và bảo mật. Lĩnh vực được áp dụng rộng rãi vào các ngành Automotive, Aerospace, healthcare, Railway….
Cũng như các lĩnh vực khác Kiểm thử phần mềm nhúng cũng qua các công đoạn và mỗi
công đoạn có những mục tiêu và tính chất riêng. Em lấy ví dụ về một mô hình phát triển phần mềm V-model để mô tả về các bước trong phát triển phần mềm nhúng và testing trong đó.

Nhánh Implementation (nhánh bên trái):
- Công đoạn SW Requirement, engineer sẽ thu thập thông tin yêu cầu của SW từ tầng cao hơn (Embedded system có nhiều tầng phức tạp) như System requirement là các yêu cầu của cả hệ thống (bao gồm Hardware+Software+Mechanics…) → khai triển Software requirement (Yêu cầu của riêng software).
- Công đoạn SW Architecture, yêu cầu engineer có hiểu biết sâu về hệ thống, từ SW requirement → SW được thiết kế chia nhỏ thành các Component khối, mỗi khối thực hiện một hoặc một vài chức năng nhất định, mỗi khối liên kết với nhau qua các Interface xem như các Input/Output, interface này ở quy mô hệ thống có thể là interface với tester,với người dùng hoặc các thiết bị khác cho đến interface giữa các component như các hàm và biến…
- Công đoạn SW Component, từ thiết kế tổng quát Engineer sẽ thực hiện thiết kế chi tiết bên trong mỗi Component dưới dạng mô hình, mỗi component bên trong có các hàm, struct, biến,… cấu thành.
- Coding: thực hiện tính toán logic các dòng code trong hàm, define struct, biến,… mỗi engineer sẽ đảm nhiệm một hoặc một vài component nhất định Nhánh bên phải: Verification & validation, nhánh này để kiểm định chất lượng của các công đoạn bên trái.
Nhánh bên phải (Test):
- SW Unit (Integration) testing: Thực hiện kiểm trử trên quy mô Hàm, công đoạn này có thể được thực hiện bởi chính Developer hoặc Tester.

Ví dụ như Component trên, ta có thể Stub Input1, Func3() để xem các hàm Func1() và Func2() có thực hiện các tính toán đúng như mong muốn không, nếu như muốn kiểm tra mỗi Func2() ta có thể stub luôn Func1(). Chi tiết được mô tả bên dưới.

Mục tiêu:
1.Trong level testing này ta thực hiện kiểm thử từng dòng code về mặt logic theo design requirement.
- Đối tượng là các Hàm riêng lẻ (SW Unit test) và sự tương tác của các hàm, biến trong Component (SW Unit Integration test).
- Kiểm tra các lỗi cú pháp, lỗi đặt tên biến ( Biến phải đặt tên theo đúng format như yêu cầu dự án), tràng dữ liệu, Runtime error, Data race…
Môi trường:
Các Function sẽ được build và chạy trên hệ điều hành của PC, Các Hàm hay các biến sẽ được gọi ra theo yêu cầu của test case.
- SW Component (Integration) testing: Thực hiện kiểm thử theo quy mô Component công đoạn này thực hiện bởi tester nhằm đảm bảo Component hoạt động đúng như chức năng của nó.

Một Software system bao gồm các component chạy tuần tự trong một vòng lặp vô hạn, ta có thể stub Comp1 để kiểm tra riêng lẻ Comp2 có thực hiện chức năng như mong đợi không hoặc chỉ stub Input1 và kiểm tra sự tương tác giữa Comp1 và Comp2. Chi tiết mô tả bên dưới.

Các Component được thực hiện tuần tự 1 cách tự động nên sau khi set giá trị đầu vào ta cần phải đợi 1 khoảng thời gian để Component tới lược được thực thi.
Mục tiêu:
- Kiểm tra chức năng của các Component và sự tương tác giữa chúng qua cácinterface.
- Kiểm tra Các Component được gọi 1 cách theo thứ tự, theo chu kỳ thời gian.
Môi trường:
SW sẽ được build thành file .exe và chạy trên hệ điều hành máy tính để giảm chi phí mà vẫn thỏa mãng mục tiêu đưa ra.
-SW System test: Thực hiện kiểm thử trên quy mô Hệ thống, kiểm tra các chức năng của 1 SW system dựa trên SW requirement.

Để thực hiện việc kiểm thử các chức năng của toàn bộ hệ thống ta sẽ stub từ các tín hiệu liên quan đến Hardware bên ngoài rồi kiểm tra các chức năng một cách Black box như mô tả bên dưới.

Các cổng IO sẽ được giả lập thay thế cho tín hiệu thật, từ đó kiểm tra yêu cầu của SW thông qua các tín hiệu giả lập này.
Mục tiêu:
- Kiểm tra chức năng software một cách black box theo SW requirement
- Kiểm tra sự tương tác của software với tín hiệu ngoài.
Môi trường:
Software sẽ được build và nạp cho bộ điều khiển, để đảm bảo SW tương thích ngoài ra còn có thể kiểm tra tính năng thông qua các tín hiệu vật lý bên ngoài, hoặc các vùng nhớ trên bộ điều khiển đã bị stub ở hệ điều hành PC. Ngoài SW System test còn có Hardware System test khi mà có đủ các lớp hardware thật không qua giả lập.
Bài viết mang tính chất giới thiệu nên mong mọi người đóng góp ý kiến để lần sau em sẽ cố gắng tìm hiểu và chia sẻ thêm ạ, xin cám ơn ^_^.
