Thiết kế tình huống kiểmthử cho phần mềm SSD

Một phần của tài liệu Các kỹ thuật kiểm thử phần mềm nhúng và ứng dụng (Trang 48 - 52)

Chương 2 có trình bày các kỹ thuật thiết kế kiểm thử trong đó có kỹ thuật kiểm thử điều khiển luồng. Kiểm thử điều khiển luồng là một kỹ thuật thiết kế kiểm thửchủ yếu sử dụng trong kiểm thửđơn vị (Unit Test). Vì vậy tôi đã dùng kỹ thuật này để thiết kế các test case trong kiểm thử đơn vị cho phần mềm SSD.

Dựa theo kỹ thuật kiểm thử điều khiển luồng cùng tài liệu về mạch MKL46Z256 (tài liệu số 3 trong phần tài liệu tham khảo) tôi đã viết được “Tài liệu thiết kế chi tiết” của từng hàm. Chi tiết xin xem phần phụ lục A

Tôi sẽ trình bày chi tiết về việc thiết kế các tình huống kiểm thử cho hàm FlashEraseSector() – một hàm trong phần mềm điều khiển chuẩn SSD. Chức năng của hàm này là cho phép xoá tất cả địa chỉ của một hoặc nhiều sector trong bộ nhớ P-Flash và hàm này sẽ trả về lỗi nếu vùng được chọn để xoá ở trạng thái được bảo vệ (Protected).

Nhìn vào sơ đồ khối của hàm ta FlashEraseSector hình 3.6để xác định các đường đi kiểm thử dựa theo độ bao phủ cạnh. Tức là tôi sẽ tìm các đường đi bao phủ được các cạnh của hàm này ít nhất một lần.

BEGIN Call the FlashCommandSequence Check if target address is aligned? No END Return with returnCode Prepare passing parameters for FlashCommandSquence

for sector erase

FlashEraseSector()

Check if end address is within

valid range

No

Return code to state ‘invalid address’

Return code to state ‘invalid range’ Set Return code to

‘OK’ Check if size > 0 Check if return code is "OK" Yes Yes Yes No Check if size is aligned on sector size

Return code to state ‘invalid size’ Yes

Yes

No

Updated size and target address

No Check

if target address is within valid range

Yes

Return code to state ‘invalid range’ No

Đường đi số 1: Begin -> Set returnCode -> Check target address is valid range?-No -> Return error invalid range -> return returnCode -> End

Đường đi số 2: Begin -> Set returnCode -> Check target address is valid

range?-Yes -> Check target address is aligned?- No ->Return error invalid address - > return returnCode -> End

Đường đi số 3: Begin -> Set returnCode ->Check target address is valid

range?-Yes -> Check target address is aligned? -Yes -> Check size is aligned?- No -> Return error invalid size -> return returnCode -> End

Đường đi số 4: Begin -> Set returnCode -> Check target address is valid

range?-Yes -> Check target address is aligned? - Yes -> Check size is aligned?- Yes - > Check end address is valid range? - No -> Return error invalid range -> return returnCode -> End

Đường đi số 5: Begin -> Set returnCode -> Check target address is valid

range?-Yes -> Check target address is aligned? -Yes -> Check size is aligned?- Yes -> Check end address is valid range? - Yes -> Check size > 0? – No -> Return returnCode -> End

Đường đi số 6: Begin -> Set returnCode -> Check target address is valid (adsbygoogle = window.adsbygoogle || []).push({});

range?-Yes -> Check target address is aligned? -Yes -> Check size is aligned?- Yes -> Check end address is valid range? - Yes -> Check size > 0? - Yes -> Prepare passing parameters -> Call FlashCommandSequence -> Check returnCode is OK? - Yes -> Updated size and target address -> Check size>0? - Repeat or Not Repeat -> Return returnCode -> End

Đường đi số 7: Begin -> Set returnCode -> Check target address is valid

range?-Yes -> Check target address is aligned? -Yes -> Check size is aligned?- Yes -> Check end address is valid range? - Yes -> Check size>0?- Yes ->Prepare passing parameters -> Call FlashCommandSequence -> Check returnCode is OK? - No -> Return returnCode -> End

Sau khi đã xác định được các đường đi kiểm thử tôi tiến hành định rõ các tình huống kiểm thử từ các đường đi này. Ứng với 7 đường đi ở trên tôi có 7 trường hợp kiểm thử. Hàm FlashEraseSector() có prototype như sau:

UINT32 FlashEraseSector(PFLASH_SSD_CONFIG PSSDConfig, \ UINT32 destination, \

UINT32 size, \

pFLASHCOMMANDSEQUENCE FlashCommandSequence)

Để xác định các tham số đầu vào ta cần xác định các thông số: 1. Struct FLASH_SSD_CONFIG flashSSDConfig =

{

FTFx_REG_BASE, /* Địa chỉ bắt đầu của vùng thanh ghi : 0x40020000*/ PFLASH_BLOCK_BASE,/* Địa chỉ bắt đầu của PFlash: 0x00000000*/ PBLOCK_SIZE, /* Kích thước của PFlash: 0x00040000 – 256KB*/

NULL_CALLBACK /* Con trỏ null_callback */ };

2. „destination‟: /* Địa chỉ vùng PFlash mà người dùng muốn xóa */ 3. „size‟: /*kích thước vùng PFlash mà người dùng muốn xóa */

4. Call FlashCommandSequence: Thực hiện ghi chuỗi lệnh xuống Flash

Các thông số về flashSSDConfig, FlashCommandSequence là cố định nên tôi chỉ cần xác định đầu vào cho các tham số „destination‟ and „size‟ tương ứng với từng trường hợp kiểm thử.

Trƣờng hợp 1: FlashEraseSector() sẽ trả về lỗi nếu địa chỉ vùng PFlash được

truyền vào không hợp lệ tức là không nằm trong vùng PFlash.

Dữ liệu đầu vào:

'destination' = PFLASH_OUT_OF_RANGE (ví dụ: 0x00040004)

'size' =FTFx_PSECTOR_SIZE (0x400)

Dữ liệu đầu ra mong đợi: Trả về lỗi FTFx_ERR_RANGE

Trƣờng hợp 2: FlashEraseSector() sẽ trả về lỗi nếu địa chỉ vùng PFlash được

truyền vào không align theo sector size. Tức là địa chỉ đó không chia hết cho 0x400– kích thước của 1 sector.

Dữ liệu đầu vào:

'destination' = PFLASH_START_ADDR + 2*FTFx_PSECTOR_SIZE + 1 (ví dụ: 0x00000801 hoặc 0x00000802,…)

'size' = FTFx_PSECTOR_SIZE (0x400)

Dữ liệu đầu ra mong đợi: Trả về lỗi FTFx_ERR_ADDR

Trƣờng hợp 3: FlashEraseSector() sẽ trả về lỗi nếu kích thước vùng PFlash mà

người dùng muốn xóa được truyền vào không align theo sector size. Tức là kích thước (size) đó không chia hết cho 0x400 – kích thước của 1 sector.

Dữ liệu đầu vào:

'destination' = PFLASH_START_ADDR + 2*FTFx_PSECTOR_SIZE (adsbygoogle = window.adsbygoogle || []).push({});

'size' = FTFx_PSECTOR_SIZE + 1 (0x401) Dữ liệu đầu ra mong đợi: Trả về lỗi FTFx_ERR_SIZE

Trƣờng hợp 4: FlashEraseSector() sẽ trả về lỗi nếu kích thước vùng PFlash mà

người dùng muốn xóa được truyền vào là không hợp lệ. Tức là kích thước đó cộng với „destination‟ vượt quá giới hạn của vùng PFlash (kích thước vùng PFlash là 256KB – 0x40000)

Dữ liệu đầu vào:

'destination' = PFLASH_START_ADDR

'size' = PBLOCK_SIZE + FTFx_PSECTOR_SIZE (0x40400) Dữ liệu đầu ra mong đợi: Trả về lỗi FTFx_ERR_ RANGE

Trƣờng hợp 5: FlashEraseSector() sẽ trả về FTFx_OK nếu người dùng muốn

xóa vùng PFlash với kích thước = 0. Tức là truyền vào size = 0

'destination' = PFLASH_START_ADDR

'size' = 0x0

Dữ liệu đầu ra mong đợi: Trả về FTFx_OK

Trƣờng hợp 6: FlashEraseSector() sẽ trả về FTFx_OK nếu tất cả các tham số

truyền vào là hợp lệ và vùng PFlash mà người dùng muốn xóa ở trạng thái không bị bảo vệ - unprotected.

Dữ liệu đầu vào:

'destination' = PFLASH_START_ADDR + 2*FTFx_PSECTOR_SIZE

'size' = FTFx_PSECTOR_SIZE Dữ liệu đầu ra mong đợi: Trả về FTFx_OK

Trƣờng hợp 7: FlashEraseSector() sẽ trả về lỗi nếu vùng PFlash mà người

dùng muốn xóa ở trạng thái bảo vệ - protected.

Dữ liệu đầu vào:

'destination' = PFLASH_START_ADDR + 2*FTFx_PSECTOR_SIZE

'size' = 3*FTFx_PSECTOR_SIZE

Thiết lập trạng thái bảo vệ cho 1 số sector có thể dùng hàm PflashSetProtection()

Dữ liệu đầu ra mong đợi: Trả về lỗi FTFx_ERR_PVIOL

Vậy là tôi đã thiết kế được 7 trường hợp kiểm thử cho hàm FlashEraseSector, xác định được thông số đầu vào và dữ liệu đầu ra mong đợi cho từng trường hợp của hàm FlashEraseSector. Áp dụng như trên tôi tiến hành thiết kế các trường hợp kiểm thử cho các hàm khác của phần mềm SSD chi tiết các trường hợp kiểm thử của từng hàm xin xem phần phụ lục B. Trong đó hàm FlashCommandSequence() được các hàm khác gọi tới nên không cần xây dựng tập test case riêng cho hàm này nữa. Hai hàm PFlashGetProtection(), PflashSetProtection() được gộp chung trong một bộ test case.

Một phần của tài liệu Các kỹ thuật kiểm thử phần mềm nhúng và ứng dụng (Trang 48 - 52)