ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Ngô Thị Nga
CÁC KỸ THUẬT GỠ LỖI TRONG VIỆC PHÁT
TRIỂN HỆ THỐNG NHÚNG VỚI NGÔN NGỮ C
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI - 2010
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Ngô Thị Nga
CÁC KỸ THUẬT GỠ LỖI TRONG VIỆC PHÁT
TRIỂN HỆ THỐNG NHÚNG VỚI NGÔN NGỮ C
KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
Cán bộ hướng dẫn: TS. Đặng Văn Hưng
Cán bộ đồng hướng dẫn: ThS. Vũ Quang Dũng
HÀ NỘI - 2010
LỜI CẢM ƠN
Em xin chân thành cảm ơn Bộ môn Công nghệ phần mềm, Khoa Công nghệ
thông tin, Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội đã tạo điều kiện
thuận lợi cho em trong quá trình học tập, rèn luyện và thực hiện đề tài khóa luận tốt
nghiệp. Em xin gửi lời cảm ơn chân thành đến tất cả thầy cô trong trường đã giúp
đỡ, dìu dắt em từ những ngày đầu tiên nhập trường.
Em xin gửi lời cảm ơn sâu sắc nhất đến TS. Đặng Văn Hưng, TS. Trần Thị
Minh Châu, ThS. Vũ Quang Dũng, những thầy cô đã cho em định hướng, tận tình
chỉ bảo, hướng dẫn và giúp đỡ em trong quá trình tìm hiểu về hệ thống nhúng, cùng
các kiến thức cần thiết khác để em hoàn thành khóa luận.
Em xin gửi những lời cảm ơn, những tình cảm thương yêu tới gia đình, và
người thân. Những người luôn bên em, động viên em cả về tinh thần và vật chất
trong thời gian qua.
1.3. Mục tiêu của khóa luận 2
1.4. Cấu trúc của khóa luận 2
CHƯƠNG 2: TỔNG QUAN 3
2.1. Hệ thống nhúng 3
2.1.1. Hệ thống nhúng là gì? 3
2.1.2. Các thiết bị phần cứng thông thường 3
2.1.3. Đặc trưng của hệ thống nhúng 6
2.1.4. Ví dụ về hệ thống nhúng 8
2.2. Sự lựa chọn ngôn ngữ lập trình cho hệ thống nhúng 8
CHƯƠNG 3: CÁC KỸ THUẬT GỠ LỖI 10
3.1. Gỡ lỗi 10
3.1.1. Gỡ lỗi trong quá trình phát triển hệ thống nhúng 10
3.1.2. Định nghĩa gỡ lỗi 11
3.1.3. Tầm quan trọng của việc gỡ lỗi 12
3.1.4. Mục đích của quá trình gỡ lỗi 12
3.2. Kiểm thử trên máy chủ 13
3.2.1. Kỹ thuật cơ bản 13
3.2.2. Gọi các thường trình ngắt 15
3.2.3. Gọi thường trình ngắt định thời 15
3.2.4. Các tệp kịch bản và tệp kết xuất 15
3.2.5. Những phản đối, hạn chế và nhược điểm 16
3.3. Bộ mô phỏng 17
3.4. Sử dụng macro assert 20
3.5. Sử dụng các công cụ trong phòng thí nghiệm 21
3.5.1. Máy hiện sóng 22
3.5.2. Bộ phân tích logic (Logic Analyzer) 24
3.5.2.1. Bộ phân tích logic theo chế độ thời gian 26
3.5.2.2. Bộ phân tích logic theo chế độ trạng thái 26
3.5.3. Bộ mô phỏng trong mạch 28
CHƯƠNG 4: CÔNG CỤ GỠ LỖI 31
Hình 4.2. Giao diện IDE
Hình 4.3. Giao diện của Debugger
Hình 5.1. Kết quả chạy chương trình Led
Hình 5.2. Kết quả chạy chương trình Hello world
DANH MỤC BẢNG BIỂU
Bảng 2.1. Họ vi xử lý ARM
Bảng 3.1. Hàm NDEBUG
Bảng 4.1. Các chức năng của MicroVision IDE
Bảng 4.2. Các chức năng của MicroVision Debugger
Bảng 5.1. Chương trình Led.c
Bảng 5.2. Chương trình Hello.c
v
DANH SÁCH CÁC THUẬT NGỮ VÀ KHÁI NIỆM
Thuật ngữ Khái niệm
AGSI Advanced Simulation Interface – Giao diện mô phỏng nâng cao.
ARM Advanced RISC Machine – Máy có bộ lệnh RISC mở rộng.
AVR Đây là cấu trúc RISC 8 – bit của công ty Atmel.
Big - Endian Bộ nhớ lưu các ký tự quan trọng nhất ở các bit địa chỉ thấp nhất.
Cross–compiler Biên dịch chéo.
Debugger Bộ gỡ lỗi.
DWARF Đây là một định dạng tập tin gỡ lỗi được dùng trong nhiều trình
biên dịch.
ELF Executable and Linkable Format hay Extensible Linking Format –
Tệp tin lưu dưới dạng thực thi và liên kết.
Ground Điện áp bằng 0, tình trạng nối đất.
ICE In – circuit Emulator – Bộ mô phỏng trong mạch.
IDE Intergrated Development Environment – Môi trường phát triển
tích hợp.
ISS Instruction Set Simulator – Bộ mô phỏng tập lệnh.
LED Light Emitting Diode – Đèn hai cực quang phát xạ.
Các hệ thống nhúng ngày càng phát triển, các phần mềm để điều khiển cho các
thiết bị cũng ngày càng đa dạng. Vì vậy, các nhà sản xuất cần đảm bảo cho các thiết bị
của mình đến được tay người dùng với độ ổn định, hiệu quả và ít lỗi nhất có thể. Quá
trình gỡ lỗi sẽ đảm bảo cho sản phẩm có chất lượng tốt nhất.
Hiện nay, có rất nhiều công cụ gỡ lỗi cho hệ thống nhúng, các kỹ sư lập trình cần
phải chọn cho mình được một công cụ gỡ lỗi phù hợp với thiết bị của mình để đạt hiệu
quả gỡ lỗi cao nhất.
1.2. Đề tài, đối tượng nghiên cứu và phương pháp nghiên cứu
Đề tài của khóa luận là “Các kỹ thuật gỡ lỗi trong việc phát triển hệ thống nhúng
với ngôn ngữ C”. Khóa luận mong muốn cung cấp cho các kỹ sư lập trình phần mềm
nhúng một cái nhìn tổng quát về hệ thống, các kỹ thuật gỡ lỗi, công cụ gỡ lỗi.
Đối tượng nghiên cứu chính trong đề tài là vi điều khiển LPC2148 của công ty
Philips. Đây là một vi điều khiển được thiết kế dựa trên cấu trúc của vi xử lý ARM đã
được sử dụng rộng rãi trong nhiều thiết bị, sản phẩm.
Khóa luận tập trung tìm hiểu về lý thuyết hệ thống nhúng, các kỹ thuật gỡ lỗi,
sau đó áp dụng các kiến thức đó vào thực hiện việc gỡ lỗi cho phần mềm nhúng. Khóa
luận tập trung nghiên cứu kỹ thuật gỡ lỗi bằng phương pháp mô phỏng. Phương pháp
này có ưu điểm là phổ biến, có nhiều công cụ, dễ sử dụng, được sự hỗ trợ lớn về mặt
kiến thức và chuyên môn từ các nhà sản xuất và cộng đồng người sử dụng, có thể áp
dụng phương pháp mô phỏng này khi phần cứng còn đang được phát triển, hay phần
cứng không có sẵn.
1
1.3. Mục tiêu của khóa luận
Để đạt được các vấn đề đã nêu ra, khoá luận sẽ lần lượt trình bày những kiến
thức cần thiết để giải quyết yêu cầu trên.
Khóa luận sẽ tập trung vào một số các vấn đề sau:
• Tìm hiểu khái quát về hệ thống nhúng, các đặc điểm của hệ thống và việc lựa
chọn các ngôn ngữ lập trình cho hệ thống.
• Tìm hiểu các kỹ thuật gỡ lỗi cơ bản cho hệ thống nhúng.
• Tìm hiểu công cụ gỡ lỗi µVision, các chức năng, ưu nhược điểm của chương
khác cho khái niệm hệ thống nhúng. Dưới đây là một khái niệm được đưa ra trong từ
điển Các hệ thống nhúng:
“Hệ thống nhúng là một sự kết hợp giữa phần cứng và phần mềm của máy tính
và có thể có thêm các thiết bị cơ khí hay các bộ phận khác, nó được thiết kế để thực
hiện một chức năng cụ thể”. [2]
Trong vài trường hợp, hệ thống nhúng có thể chỉ là một phần nhỏ trong một hệ
thống lớn như trong các thiết bị điều khiển xe hơi. Bởi những thiết kế của hệ thống
nhúng là để phục vụ cho một vài chức năng cụ thể đã được định trước như là bộ phận
hẹn giờ trong lò vi sóng, hệ thống điều khiển đèn giao thông, nên nó khác với các
máy tính cá nhân thông thường – hệ thống có thể thực hiện nhiều nhiệm vụ khác nhau
do người dùng cài đặt. [1]
2.1.2. Các thiết bị phần cứng thông thường
Bất kỳ một hệ thống thông thường nào cũng đều có các thành phần cấu thành nên
nó. Một hệ thống nhúng thông thường sẽ gồm có một số thành phần như hình 2.1 sau:
Hình 2.1. Hệ thống nhúng thông thường
3
Mỗi hệ thống đều cần có vi xử lý để điều khiển các thông tin và dữ liệu trong hệ
thống. Trong các thiết bị gia dụng như lò vi sóng, nồi cơm điện, hay chiếc điện thoại
cũng có ít nhất một bộ vi xử lý. Các vi xử lý được chia làm hai loại: bộ vi xử lý chính
dùng để điều khiển các thiết bị trung tâm, và các vi xử lý phụ được thêm vào để mở
rộng các tập lệnh của vi xử lý chính, quản lý bộ nhớ, các đường truyền, và các thiết bị
nhập xuất. Trong các thiết bị nhúng, vi xử lý chính thường là các vi điều khiển, để phù
hợp với các phần mềm, các chương trình rất nhỏ ẩn chứa bên trong những thiết bị. Các
vi xử lý giống như bộ não của con người, nếu không có nó thì các thiết bị không thể
hoạt động được. Chính vì thế, vi xử lý đóng vai trò trung tâm, quan trọng nhất trong
thiết bị.
Thiết bị nhúng được ứng dụng rộng rãi trong nhiều lĩnh vưc, nó cũng tiêu thụ
nhiều nhất số vi xử lý được sản xuất ra hàng năm. Các họ vi xử lý được phát triển và
ứng dụng rộng rãi là 8051 của Intel, họ AVR của Atmel, họ ARM của công ty ARM,
trong các họ này thì các thiết bị được xây dựng trên nền tảng thiết kế của ARM là phổ
Điện thoại di động:
Sony Ericsson (K, W
series),Siemens và
Benq (đời x65 và đời
mới hơn)
Cortex
Cortex-A8
NEON, Jazelle
RCT, Thumb-2
Texas Instruments
OMAP3
Cortex-R4 600 DMIPS
Broadcom là một hãng
sử dụng
Cortex-M3
120 DMIPS/
100MHz
Họ vi điều khiển
Luminary Micro
XScale
PXA27x
800 MIPS/ 624
MHz
HTC Universal,
Zaurus SL-C1000
PXA900 Blackberry 8700
IXP460/IXP
465
Một hệ thống nhúng cần sử dụng bộ nhớ cho hai mục đích: để lưu trữ chương
trình và lưu trữ dữ liệu. Không giống như một hệ thống máy tính cá nhân – các chương
bị này.
Ngoài ra thì hệ thống nhúng còn có thể có thêm các bộ phận như là: các cổng nối
tiếp, các cổng kết nối mạng internet, các phần cứng tương tác với bộ cảm biến,
2.1.3. Đặc trưng của hệ thống nhúng
Mỗi hệ thống nhúng đều có những đặc trưng khác nhau, để thỏa mãn được những
yêu cầu khác nhau. Vì các hệ thống nhúng thường nhỏ và chỉ có một số thiết bị cần
thiết - nó không giống như các máy vi tính thông thường, nên khi làm việc với các hệ
thống nhúng ta gặp rất nhiều khó khăn:
6
• Công suất: Hệ thống cần điều khiển được một lượng lớn dữ liệu trong một
khoảng thời gian rất ngắn.
• Tính đáp ứng: Hệ thống cần lặp lại các sự kiện một cách nhanh chóng. Ví dụ:
việc nhấp nháy của các điôt phát quang là trong một chu kỳ ngắn, lặp lại liên
tục.
• Khả năng kiểm thử: Kiểm thử cho một hệ thống nhúng có thể là một việc rất
khó khăn.
• Khả năng gỡ lỗi: Làm thế nào để ta tìm ra các lỗi trong chương trình của hệ
thống nhúng với thiết kế đặc trưng là không bàn phím, không màn hình? Làm
sao để biết được một phần mềm nào đó đang làm gì trong thiết bị nhúng quả là
một việc không dễ dàng gì. Ở đây chúng ta cần đến các thiết bị, các chương
trình phần mềm riêng biệt để gỡ lỗi cho nó.
• Độ tin cậy: Hệ thống nhúng phải có thể tự điều khiển được trong bất kỳ tình
huống nào mà không có sự can thiệp của con người. Với các hệ thống lái xe tự
động, hệ thống cần quyết định tất cả những việc cần làm, như chạy ở tốc độ bao
nhiêu, đi hướng nào. Hệ thống gần như phải chạy tốt trong mọi trường hợp có
thể tính toán trước của nhà sản xuất với độ ổn định cao.
• Không gian bộ nhớ: Bộ nhớ của hệ thống nhúng thường bị giới hạn, chúng ta
cần phải làm cho các phần mềm và dữ liệu chứa vừa vặn trong không gian nhớ
đó. Các thanh ghi địa chỉ thường chỉ là loại 8 bit, hay 16 bit, nên việc cung cấp
không gian nhớ là rất hạn chế. Vì vậy một nhiệm vụ khó khăn đặt ra cho các kỹ
hay có khả năng điều khiển bằng màn hình chạm (touch-screen) dùng để nhập liệu,
màn hình để hiển thị các thông tin, bộ nhớ trong từ vài KB đến vài trăm MB, có thể hỗ
trợ bộ nhớ mở rộng, và tiêu thụ ít điện năng, các máy điện thoại thường dùng pin sạc.
Hầu hết các máy điện thoại di động đều thực hiện được các chức năng thông
thường như là nghe, gọi, nhắn tin, tra danh bạ, báo thức, ghi chú, hiển thị ngày tháng,
chơi các chương trình điện tử đơn giản. Với những máy điện thoại di động cao cấp, ta
còn có thể nghe nhạc, truy cập mạng internet, quay phim, chụp ảnh, đọc sách, và thậm
chí có các các hệ điều hành hỗ trợ cho người sử dụng thực hiện các tác vụ yêu cầu.
Giá thành một chiếc điện thoại cũng không quá cao, mà độ tin cậy và độ ổn định
của điện thoại di động là khá cao.
2.2. Sự lựa chọn ngôn ngữ lập trình cho hệ thống nhúng
Đối với một dự án phần mềm nhúng việc chọn ngôn ngữ lập trình cho nó là rất
8
quan trọng. Ngôn ngữ lập trình này phải đáp ứng được cho việc thiết kế các hệ thống
với chỉ vài byte, KB đến vài trăm MB bộ nhớ, và hỗ trợ tốt cho nhóm phát triển với số
lượng nhà lập trình từ một vài người đến hàng trăm người. Ngôn ngữ này cũng phải
được dịch ra các mã máy để nạp vào thiết bị một cách dễ dàng.
Hiện nay, ngôn ngữ được sử dụng phổ biến nhất là C. Ngôn ngữ C có rất nhiều
ưu điểm hỗ trợ cho việc phát triển các hệ thống nhúng. Nó là một ngôn ngữ dễ học, dễ
dùng, khả chuyển và có thể chạy trên hầu hết các hệ điều hành. Các đoạn mã viết bằng
ngôn ngữ C cũng nhỏ, gọn, dễ biên dịch và gỡ lỗi hơn.
Một trong những tính năng nổi bật để làm cho C trở thành một ngôn ngữ thích
hợp cho việc lập trình: C là “ngôn ngữ trung gian”. Nó vừa hỗ trợ cho người lập trình
có thể can thiệp sâu vào phần cứng máy tính, cũng vừa là một ngôn ngữ lập trình bậc
cao với cấu trúc và các tập lệnh dễ hiểu.
Ngoài ngôn ngữ C, chúng ta có thể lập trình cho hệ thống nhúng bằng một số
ngôn ngữ như Assembly, Ada, C++, Java, Nhưng việc lập trình trên các ngôn ngữ
này gặp một số khó khăn. Assembly có ưu điểm là can thiệp sâu vào phần cứng, mã
lệnh viết ra có thể thực thi trực tiếp, nhược điểm của nó là khó học, khó sử dụng. C++
là một ngôn ngữ lập trình bậc cao, hướng đối tượng nên cũng khó cho người lập trình
kết, định địa chỉ bộ nhớ cho các tệp tin chương trình thành một tệp tin thực thi dạng
mã nhị phân để hệ thống có thể hiểu được, quá trình này gọi là sinh mã. Các máy đích
có kiến trúc khác nhau thì chương trình thực thi trong nó sẽ khác nhau, vì vậy các tệp
tin thực thi dạng mã nhị phân này thường phải tuân theo một số định dạng nhất định
như là hex hay elf… là những định dạng phổ biến mà nhiều hệ thống hiểu được.
Giai đoạn nạp mã và gỡ lỗi là giai đoạn mà chúng ta nạp tệp tin thực thi đã được
sinh ra ở trên vào trong máy đích, và tìm các lỗi có trong chương trình. Thời gian này
là để chúng ta tìm các lỗi khi chương trình chạy trên phần cứng, các lỗi này có thể là
những lỗi do không tương thích giữa phần cứng và phần mềm, hay những lỗi thời gian
phản ứng chậm hơn so với quy định, Đây là một giai đoạn quan trọng trong quá trình
phát triển phần mềm vì nó giúp đảm bảo chất lượng cho phần mềm. Phần sau của khóa
luận sẽ trình bày cụ thể về công việc gỡ lỗi cho hệ thống nhúng.
Sau khi tìm ra được lỗi thì các kỹ sư lập trình bắt đầu sửa các lỗi trong chương
trình của mình, để đảm bảo cho chương trình của mình chạy tốt.
Quá trình sinh mã, nạp mã, gỡ lỗi và sửa lỗi được tiến hành lặp đi lặp lại, để đảm
bảo cho sản phẩm khi đi tới người tiêu dùng là ít lỗi nhất, và ổn định nhất có thể.
3.1.2. Định nghĩa gỡ lỗi
Không có một hệ thống nào hoàn hảo cả, hầu như các hệ thống đều có lỗi, chỉ
khác nhau ở tỷ lệ lỗi nhiều hay ít. Việc kiểm thử và gỡ lỗi giúp chúng ta giảm thiểu
được các lỗi, để có thể đưa tới cho khách hàng những sản phẩm ít lỗi hơn.
Gỡ lỗi là quá trình loại bỏ các lỗi ra khỏi chương trình, các lỗi từ bản đặc tả tới
lỗi trong khi phát triển mã lệnh. Gỡ lỗi là hành động sửa lại các lỗi sau khi viết và bắt
đầu kiểm thử hệ thống. Gỡ lỗi thường là phần tốn công sức nhất trong quá trình phát
triển hệ thống. [2]
11
3.1.3. Tầm quan trọng của việc gỡ lỗi
Việc gỡ lỗi cho phần mềm nói chung và phần mềm nhúng nói riêng là một khâu
quan trọng nhằm đảm bảo chất lượng của phần mềm vì những lý do sau:
Thứ nhất, việc gỡ lỗi thường gặp khó khăn và tốn thời gian hơn so với các phần
mềm ứng dụng thông thường. Bởi đôi khi phần cứng và phần mềm của hệ thống nhúng
và kiểm thử nó trở lên khó khăn hơn. Với các phần mềm được phát triển lặp lại,
từ phiên bản 1, phiên bản 2, đến phiên bản 3, có những lỗi mà chúng ta đã
phát hiện, đã sửa được từ phiên bản 1, và không thấy xuất hiện ở phiên bản 2,
nhưng đến phiên bản 3 ta lại thấy. Vì vậy, việc kiểm thử nhắc lại trong quá trình
phát triển dùng lại là rất quan trọng. Nó đảm bảo chất lượng của sản phẩm khi
đưa tới khách hàng.
Nhưng: Tương tự với những khó khăn khi thực thi tất cả mã lệnh, thường thì
việc thiết kế các ca kiểm thử nhắc lại trên môi trường đích là khó khăn.
• Giữ lại “biên bản kiểm tra” các kết quả kiểm thử: Chúng ta thường khó biết
được các hệ thống của chúng ta làm việc như thế nào, chúng gửi nhận dữ liệu,
tín hiệu ra sao. Các biên bản kiểm tra sẽ cho chúng ta thấy chúng thật sự làm
việc như thế nào.
Nhưng: Các hệ thống nhúng hầu như không có ổ đĩa cứng để lưu lại dấu vết
kiểm tra, cùng các thông tin, nên việc giữ lại các dấu vết kiểm tra là khó khăn.
3.2. Kiểm thử trên máy chủ
Đối với các phần mềm nhúng, có nhiều lý do để phát triển phần mềm trên một hệ
thống máy chủ và sau đó mới đưa phần mềm vào hệ thống đích để chạy. Các hệ thống
chúng ta sản xuất có thể giống như một chiếc máy điện báo, không có màn hình,
không có bàn phím, không có ổ đĩa, hay thậm chí không có đèn để chúng ta biết rằng
nó đang hoạt động. Vậy giải pháp ở đây là phát triển phần mềm trên một hệ thống máy
- nơi có các công cụ để viết lệnh, biên dịch, gỡ lỗi - máy chủ, và sau đó nạp nó vào hệ
thống máy đích để nó có thể thực hiện được các chức năng yêu cầu.
3.2.1. Kỹ thuật cơ bản
Hình 3.1 mô phỏng cho chúng ta thấy phương pháp cơ bản để kiểm thử phần
mềm nhúng trên máy chủ:
13
Hình 3.2. Hệ thống kiểm thử
Phần bên trái của hình vẽ tương ứng với hệ thống đích, nó được chia thành ba
thành phần: các mã độc lập với phần cứng, các mã phụ thuộc phần cứng và phần cứng.
Phần bên phải của hình vẽ tương ứng với hệ thống kiểm thử, hệ thống này gồm
hiện xong một số lệnh. Nếu mã nền kiểm thử bị mất quyền kiểm soát việc gọi các
thường trình ngắt định thời thì sẽ gây ra các lỗi gián đoạn.
Vì vậy, mã nền kiểm thử nên gọi thường trình ngắt định thời một cách trực tiếp.
Điều này sẽ giúp cho chúng ta có thể nhìn thấy các hoạt động của hệ thống từng giây,
từng phút, nó có thể sẽ gây ra một số phiền phức, nhưng bù lại chúng ta có thể tránh
được các lỗi nghiêm trọng. Nó cũng cho phép chúng ta kiểm thử các đoạn mã mà sẽ
chỉ được gọi sau các lệnh khác bằng cách gọi các thường trình ngắt định thời. [4]
3.2.4. Các tệp kịch bản và tệp kết xuất
Chúng ta thường phải viết các lệnh để gọi các thường trình ngắt lặp lại liên tục
khi thực hiện việc kiểm thử. Nhưng có một cách dễ dàng hơn để làm việc này, đó là
viết các tệp kịch bản (script file), nền kiểm thử chỉ cần đọc tệp kịch bản, thực thi các
lệnh trong tệp và ghi kết quả thực hiện ra các tệp tin. Các tệp kịch bản này thường
được viết ngắn gọn, đơn giản.
Khi viết các tệp kịch bản, ta cần lưu ý một số điểm sau [4]:
• Các lệnh nên được viết đơn giản với các đoạn mã lệnh ngắn. Một bộ phân tích
cú pháp cho các tệp kịch bản được viết khá dễ dàng với ngôn ngữ C.
• Các kỹ sư lập trình nên sử dụng các ghi chú, để cho cấu trúc tệp tin được rõ
15
ràng, dễ hiểu, và chúng ta có thể biết rằng tệp kịch bản thực thi những lệnh nào,
các phần nào đang được kiểm thử. Việc viết các tệp tin và các ghi chú cũng nên
tuân theo các chuẩn chung để tất cả mọi người làm việc trong dự án có thể hiểu
và thực hiện nó. Các ghi chú thường được bắt đầu bằng ký hiệu #.
• Dữ liệu nhập vào có thể là ở dạng mã ASCII hoặc ở các định dạng khác. Nhiều
hệ thống nhúng nhận các dữ liệu dạng nhị phân, hệ thống cần có cách để có thể
đọc được các dữ liệu, định dạng và hiển thị được các dữ liệu kiểu nhị phân.
Việc đọc các tệp kịch bản và kết xuất thông tin ra các tệp tin làm cho công việc
kiểm thử lặp lại được thực hiện dễ dàng hơn.
3.2.5. Những phản đối, hạn chế và nhược điểm
Các kỹ sư phần mềm thường phản đối việc kiểm thử các đoạn mã hệ thống nhúng
trên máy chủ vì một số lý do sau đây: