Tải bản đầy đủ (.pdf) (64 trang)

Bài giảng Kiểm thử và đảm bảo chất lượng phần mềm: Chương 3

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (748.58 KB, 64 trang )

KIỂM THỬ VÀ ĐẢM BẢO CHẤT LƯỢNG PHẦN MỀM

Chương 3

KỸ THUẬT KIỂM THỬ

1 Các nguyên lý

2 Vòng đời

3 Kỹ thuật kiểm thử

4 Kiểm thử chức năng

5. Kiểm thử cấu trúc

6 Quản lý chất lượng

1


Kỹ thuật kiểm thử
1

2

3

4

5



6

Kiểm thử phần mềm

Nội dung
Tổng quan về lỗi phần mềm
Thực hành kiểm thử
Kiểm thử tĩnh
Tổng quan về thiết kế trường hợp kiểm thử

2


Lỗi phần mềm (Bug)
Một lỗi phần mềm là sự không trùng khớp
giữa chương trình và đặc tả của nó, nếu đặc
tả phần mềm tồn tại và được cho là đúng. Đặc
tả sai  phần mềm sai
Một lồi phần mềm hiện diện khi chương trình
không làm cái mà người sử dụng đầu cuối
mong muốn nó làm.
3


Cá c nhó m lỗ i phầ n mề m phô ̉
biêLỗ́ingiao diện người dùng - User interface errors
1)

2)


Lỗi xử lý - Error handling

3)

Lỗi liên quan tới ranh giới/biên - Boundary-related errors

4)

Lỗi tính toán - Calculation errors

5)

Lỗi các trạng thái đầu và sau - Initial and later states

6)

Lỗi luồn kiểm soát - Control flow errors

7)

Lỗi trong xử lý hoặc dịch dữ liệu - Errors in handling or interpreting data

8)

Tranh đoạt điều khiển - Race conditions

9)

Điều kiện tải - Load conditions


10)

Phần cứng – Hardware

11)

Kiểm soát phiên bản và mã nguồn – Source and version control

12)

Tài liệu – Document

13)

Các lỗi kiểm thử – Testing errors

4


1) User interface errors
Có nhiều cách để làm cho chương trình làm việc một cách khó khăn,
người ta quy chúng vào một nhóm lỗi có tên là “Lỗi giao diện người
dùng”
Lỗi giao diện người dùng chia thành nhiều nhóm nhỏ
­ Functionality: chương trình không làm những thứ như nó nên làm, hoăc la
̣ ̀m 
môt ca
̣ ́ch khô s
̉ ở hay không hoàn chinh.

̉
­ Communication: Làm thế nào đê ti
̉ ̀m ra cách sử dung ch
̣
ương trình? Nó có 
chính xác không? Có gì đó nhầm lẫn, sai lêch không?
̣
­ Command structure: Có dễ bi lac trong ch
̣ ̣
ương trình không? Có lênh na
̣
̀o dễ bi ̣
nhầm lẫn không? Có lỗi nào làm ban la
̣ ̃ng phí thời gian không? Vì sao?
­ Missing commands: chương trình thiếu lênh, c
̣
ứng nhắc và khó điều chinh đê
̉
̀ 
phù hợp với từng đối tượng người sử dung. VD phi
̣
́m tắt
­ Performance:chương trình chay bi châm h
̣
̣
̣
ơn mong đợi người dùng
­ Output: không có đu thông tin đâ
̉
̀u ra mong muốn. VD người sử dung muô

̣
́n xuất 
đầu ra qua thiết bi đâ
̣ ̀u cuối, têp, ma
̣
́y in.
5


2) Error handling
Không lường trước hết các sai sót của chương trình
và bảo vệ chương trình trước các sai sót này.
Thiếu thông báo lỗi hoặc điều kiện sinh ra lỗi.
Giải quyết lỗi được phát hiện không hợp lý
Vd trong việc bảo vệ chống lại dữ liệu bị corrupt, kiểm
tra dữ liệu đầu vào người dùng, kiểm soát phiên bản,
bỏ qua lỗi tràn bộ nhớ, so sánh dữ liệu, không phục
lỗi, phục hồi khi có lỗi phần cứng
6


3) Boundary­related errors
Bất kỳ thành phần nào của chương trình được mô tả có sự xuất hiện
của miền giá trị: từ nhiều hơn đến ít hơn, từ lớn nhất tới nhỏ nhất, từ
sớm nhất tới muộn nhất, đầu tiên tới cuối cùng, ngắn nhất tới dài
nhất đều cần kiểm tra ranh giới miền giá trị. Chương trình thường
chạy đúng và ổn định với các giá trị nằm trong miền xác định và hay
bị gặp lỗi/ sự cố tại các giá trị nằm ngoài biên của miền xác định
Tìm kiếm lỗi ranh giới: vịng lặp, khơng gian bộ nhớ, thời gian, xử lý
sai các trường hợp nằm ngồi ranh giới

VD
­ Sớ lượng sinh viên tới thiêu cua 1 l
̉
̉
ớp tín chi la
̉ ̀ 15 tới đa là 40 sinh viên
­ Dung lượng bơ nh
̣ ớ chiếm dung cua ch
̣
̉
ương trình khi thực thi tối thiêu la
̉ ̀ 2MB 
tối đa là 50MB
7
­ …


4) Calculation errors
Hiểu sai cơng thức
Sai số tính tốn
Tính toán sai do sai thuật toán
Sử dụng sai công thức
Sử dụng sai kiểu dữ liệu cho công thức tính
toán

8


5) Initial and later states
Nhiều chương trình chỉ sai ở lần chạy đầu tiên, ở

những lần chạy sau các thông tin khởi tạo đã được
lưu trữ lại nên việc chạy chương trình không gặp lại
lỡi này nữa.
Tìm kiếm lỗi: thiết lập chỉ mục dữ liệu bằng khơng,
khởi tạo biến kiểm sốt vịng lặp, khởi tạo lại 1 con
trỏ, …
VD Lỗi do lần đầu chạy file chưa được khởi tạo,
9


6) Control flow errors
Luồng kiểm soát của một chương trình miêu tả cái mà chương
trình sẽ làm tiếp theo trong những hoàn cảnh cụ thể. Lỗi luồng
kiểm soát xẩy ra khi chương trình thực hiện sai việc làm tiếp
theo.
Lỗi này thường xuất hiện do giả định trạng thái trả ra sai, xử lý
ngoại lệ dựa trên cách thoát, tràn trên tràn dưới bộ đệm, thất bại
trong việc chặn và bỏ chặn ngắt, các so sánh, lỗi kiểu dữ liệu,
thiếu hoặc sai các mặc định - default
Vd Lỗi luồng kiểm soát xẩy ra do câu lệnh rẽ nhánh.

10


7) Errors in handling or interpreting data
Một modun có thể truyền dữ liệu tới modun
hoặc chương trình khác. Một tập dữ liệu có
thể được truyền đi và nhận lại nhiều lần.
Trong quá trình này tập dữ liệu có thể bị
corrupt (hỏng) hoặc dịch sai. Những thay đổi

cuối cùng tới dữ liệu có thể bị mất hoặc thất
lạc tới một vài phần khác của hệ thống.
11


8) Race conditions
Khi làm việc với dữ liệu chia sẻ, dù ở dạng tệp, cơ sở dữ liệu, các kết
nối mạng, bộ nhớ dùng chung hay ở những dạng khác của truyền
thông liên tiến trình, có một số lỗi dễ tạo ra làm tổn thương tới tính
bảo mật của hệ thớng, đặc biệt là trong các hệ thớng đa xử lý.
Ví dụ, nếu bạn mở một tệp và sau đó đọc nó, mặc dù ứng dụng của
bạn khơng làm gì giữa hai hoạt động, vài quy trình khác có thể thay
thế tệp sau khi tệp đã được mở và trước khi được đọc. Nếu hai tiến
trình khác nhau (trong cùng hoặc khác ứng dụng) đang ghi lên chung
một tệp, sẽ khơng có cách nào để biết cái nào ghi trước, cái nào sẽ
ghi đè lên dữ liệu được ghi bởi tiến trình kia. Tình huống này gây ra
lỗ hổng về bảo mật
12


9) Load conditions
Chương trình có thể hoạt động sai khi bị quá tải, nó có thể
bị lỗi khi chạy trong một thời gian quá dài hoặc thực thi
quá trọng tải cho phép, chiếm dụng quá vùng nhớ cho
phép, thất bại khi cố chia sẻ vùng nhớ hoặc thời gian sử
dụng CPU với chương trình khác hoặc giữa hai tiến trình
con của nó.
Ghi nhớ rằng tất cả mọi chương trình đều có giới hạn. Vấn
đề là nó có đáp ứng được các giới hạn đã đề ra hoặc cách
xử lý thất bại khi vượt quá giới hạn cho phép

13


10) Hardware
Vd chương trình gửi dữ liệu tới các thiết bị
rồì lờ đi các mã lỗi phản hồi lại, và cố gắng sử
dụng thiết bị phần cứng đang bận hoặc không
tồn tại gây ra lỗi về phần cứng.
Hoặc trong trường hợp khác, nếu phần cứng
hỏng, phần mềm cũng bị hỏng nếu nó không
nhận ra và khôi phục lại từ phần cứng hỏng.
14


11) Source and version control
Cần kiểm soát phiên bản và toàn vẹn mã
nguồn, tránh trường hợp kiểm thử đi kiểm thử
lại một phần mã nguồn phiên bản cũ
QA đưa ra những quy định chặt chẽ về toàn
vẹn mã nguồn và kiểm soát phiên bản mã
nguồn
Có thể dùng công cụ hỗ trợ để kiểm soát, vd
GitHub, SVN,..

15


12) Document
Các tài liệu cũng là một phần của sản phẩm
phần mềm. Tài liệu nghèo nàn, kém chất

lượng có thể làm người sử dụng tin là sản
phẩm làm việc không chính xác

16


13) Testing errors
Các lỗi được tạo ra bởi kiểm thử viên là một
trong các lỗi phổ biến nhất được pha kiểm thử,
chẳng qua là do người kiểm thử không báo cáo
lại chi tiết các ca kiểm thử đó. Nhưng kiểm thử
viên nên ghi nhớ một số lỗi trong những lỗi bạn
mắc phải khi sử dụng chương trình hoặc việc
bạn gặp quá nhiều lỗi kiểm thử khi kiểm thử có
thể phản ánh các vấn đề trong giao diện người
sử dụng  đây có thể tiềm ẩn lỗi trong thiết kế.
Khi đó các lỗi của bạn chính là các dữ liệu kiểm
thử cho chương trình
17


Vòng đời của bug và nội dung bug
report
Khi có lỗi/ vấn đề được tìm thấy qua hoạt động kiểm thử, nó
cần được báo cáo lại một cách rõ ràng, dễ hiểu để người
khác có thể đọc và fix nó  viết bug report
Làm thế nào để viết bug report hiệu quả
- Mô tả làm thế nào để sinh ra vấn đề . Các lập trình viên bỏ
qua các báo cáo của các vấn đề mà bản thân họ không thể
nhìn thấy

- Phân tích lỗi để có thể miêu tả nó bên trong một số lượng
bước tối thiểu, bỏ qua các bước không cần thiết
- Viết một báo cáo hoàn chỉnh, dễ hiểu sao cho lập trình viên
không bị hiểu lầm hay bực mình
18
- Viết báo cáo ngay khi nhìn thấy.


Vò ng 
đờ i cua 
̉
bug

19


Nôi dung cua bug 
̣
̉
report
Program, release,
version: thông tin về
chương trình, phiên bản
code hay bản phát hành
(release)
Report type:
­
­
­
­

­
­

Coding error
Design issue
Suggestion
Decumentation
Hardware
Query

Severity - mức độ
nghiêm trọng của lỗi:
minorAttachment- tài liệu
đính kèm: print out,
memory dump, memo
describing,…

20


Cách tiếp cận gỡ lỗi
Bó buộc mạnh bạo
Lật ngược
Loại bỏnguyên nhân

21


Bó buộc mạnh bạo

Phương pháp thơng dụng nhất và kém hiệu quả nhất để cô lập
nguyên nhân của lỗi phần mềm.
Áp dụng phương pháp gỡ lỗi bó buộc mạnh bạo khi tất cả các
phương pháp khác đều thất bại.
Triết lý “cứ để máy tính tìm ra lỗi”, cho xổ ra nội dung bộ nhớ,
gọi tới chương trình lưu dấu vết khi chạy và nạp chương trình
với lệnh WRITE. Hy vọng tr tìm ra được nguyên nhân trong
lượng lớn thông tin đưa ra
VẤN ĐỀ: chương trình có lỗi nhưng kết quả cuối cùng có thể
khơng lỗi
Có thể lãng phí thời gian và cơng sức


Lật ngược
Cách tiếp cận khá thơng dụng có thể được
dùng trong những chương trình nhỏ.
Bắt đầu tại chỗ chúng được phát hiện ra, lật
ngược theo những chương trình gốc (một
cách thủ cơng) cho tới chỗ tìm ra ngun
nhân.
VẤN ĐỀ: chương trình gốc lớn, số con đường
lật ngược nhiều


Loại bỏ nguyên nhân
Quy nạp hay diễn dịch và đưa vào khái niệm về phân
hoạch nhị phân.
Dữ liệu có liên quan tới việc xuất hiện lỗi được tổ chức để
cô lập ra các nguyên nhân tiềm năng.
Một “giả thiết nguyên nhân” được nêu ra và dữ liệu trên

được dùng để chứng minh hay bác bỏ giả thiết đó.
Một cách khác, xây dựng ra một danh sách mọi nguyên
nhân đặc biệt có nhiều hứa hẹn thì dữ liệu sẽ được làm
mịn thêm để cố gắng cô lập ra lỗi


Kỹ thuật kiểm thử
1

2

3

4

5

6

Kiểm thử phần mềm

Nội dung
Tổng quan về lỗi phần mềm
Thực hành kiểm thử
Kiểm thử tĩnh
Tổng quan về thiết kế trường hợp kiểm thử

25



×