ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN THỊ THEN
NGHIÊN CỨU TÍNH KHẢ KIỂM THỬ
CỦA ỨNG DỤNG TRÊN NỀN WEB
LUẬN VĂN THẠC SỸ NGÀNH CÔNG NGHỆ THÔNG TIN
Hà Nội - 2014
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƢỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN THỊ THEN
NGHIÊN CỨU TÍNH KHẢ KIỂM THỬ
CỦA ỨNG DỤNG TRÊN NỀN WEB
Ngành:
Công nghệ Thông tin
Chuyên ngành: Kỹ thuật Phần mềm
Mã số:
60480103
LUẬN VĂN THẠC SỸ NGÀNH CÔNG NGHỆ THÔNG TIN
NGƢỜI HƢỚNG DẪN KHOA HỌC: TS. Đặng Văn Hƣng
Hà Nội - 2014
i
LỜI CAM ĐOAN
Tôi xin cam đoan luận văn này là công trình nghiên cứu của cá nhân tôi,
dƣới sự hƣớng dẫn trực tiếp từ phía TS. Đặng Văn Hƣng. Các số liệu, nội dung
tham khảo đƣợc trích dẫn có nguồn gốc rõ ràng, tuân thủ tôn trọng quyền tác giả.
Kết quả cuối cùng đạt đƣợc của luận văn là thành quả của quá trình nghiên cứu của
bản thân, chƣa từng đƣợc công bố dƣới bất kỳ hình thức nào.
Tôi xin chịu trách nhiệm về nghiên cứu trong luận văn.
Tác giả
Trần Thị Then
ii
LỜI CẢM ƠN
Để hoàn thành đề tài luận văn này , bên ca ̣nh sƣ̣ chủ đô ̣ng cố gắ ng của bản
thân, tôi đã nhâ ̣n đƣơ ̣c sƣ̣ ủng hô ̣ và giúp đỡ nhiê ̣t tiǹ h tƣ̀ các tâ ̣p thể , cá nhân trong
và ngoài trƣờng.
Qua đây, cho phép tôi đƣơ ̣c bày tỏ lòng cảm ơn sâu sắ c tới thầ y giáo hƣớng
dẫn, TS. Đặng Văn Hƣng, giảng viên bộ môn Công nghệ phần mềm trƣờng Đại học
công nghê ̣ – Đa ̣i ho ̣c Quố c gia Hà Nô ̣i, ngƣời đã trƣ̣c tiế p đô ̣ng viên, đinh
̣ hƣớng và
hƣớng dẫn tâ ̣n tin
̀ h trong quá triǹ h ho ̣c tâ ̣p và hoàn thành đề tài luận văn này.
Đồng kính gửi lời cảm ơn đến tập thể các thầy , cô giáo trong trƣờng Đa ̣i ho ̣c
công nghê ̣ – Đa ̣i ho ̣c Quố c gia Hà Nô ̣i đã trau dồ i kiế n thƣ́c cho tôi , điề u đó là nề n
tảng quí báu góp phần to lớn trong quá triǹ h vâ ̣n du ̣ng vào hoàn thiê ̣n luâ ̣n văn.
Cuố i cùng, tôi xin đƣơ ̣c gƣ̉i lòng biế t ơn sâu sắ c đế n gia điǹ h , bạn bè, đồ ng
nghiê ̣p đã ta ̣o điề u kiê ̣n về vâ ̣t chấ t cũng nhƣ tinh thầ n , luôn sát cánh bên tôi , đô ̣ng
viên giúp tôi yên tâm học tập và kết thúc khóa học.
Xin chân thành cảm ơn!
Tác giả
Trần Thị Then
iii
MỤC LỤC
LỜI CAM ĐOAN ............................................................................................. i
LỜI CẢM ƠN .................................................................................................. ii
DANH MỤC CÁC KÝ HIỆU , THUẬT NGỮ, CHỮ VIẾT TẮT ................. v
DANH MỤC CÁC BẢNG ............................................................................. vi
DANH MỤC CÁC HÌNH VẼ ....................................................................... vii
PHẦN MỞ ĐẦU.............................................................................................. 1
Tính cấp thiết và mục tiêu của đề tài ............................................................ 1
Phƣơng pháp nghiên cƣ́u .............................................................................. 1
Bố cục của luận văn ...................................................................................... 2
CHƢƠNG 1. TỔNG QUAN ........................................................................... 3
1.1 Tầm quan trọng của tính khả kiểm thử ................................................ 3
1.2 Khái niệm tính khả kiểm thử................................................................ 4
1.3 Các khái niệm liên quan tính khả kiểm thử ......................................... 6
1.4 Một số yếu tố ảnh hƣớng đến tính khả kiểm thử ................................. 9
1.5 Một số độ đo tính khả kiểm thử ......................................................... 12
1.5.1 Độ đo cấu trúc và hành vi............................................................. 12
1.5.2 Độ đo luồng dữ liệu ...................................................................... 13
1.6 Kết chƣơng ......................................................................................... 14
iv
CHƢƠNG 2. KỸ THUẬT LÀM TĂNG TÍNH KHẢ KIỂM THỬ.............. 15
2.1 Tính khả kiểm thử của tài liệu đặc tả ................................................. 15
2.2 Tính khả kiểm thử của thiết kế kiến trúc ........................................... 18
2.3 Tính khả kiểm thử của thiết kế chi tiết............................................... 22
2.4 Kiểm thử xây dựng sẵn ...................................................................... 22
2.5 Khung và công cụ hỗ trợ kiểm thử..................................................... 23
2.6 Tổng kết.............................................................................................. 27
sCHƢƠNG 3. TÍNH KHẢ KIỂM THỬ CỦA ỨNG DỤNG TRÊN NỀN
WEB ......................................................................................................................... 28
3.1 Đặc trƣng chính của các ứng dụng trên nền web ............................... 28
3.2 Tính khả kiểm thử của các ứng dụng trên nền web ........................... 31
3.2.1 Khía cạnh là một phần mềm......................................................... 31
3.2.2 Tính khả kiểm thử cho phần máy chủ .......................................... 32
3.2.3 Tính khả kiểm thử cho phần trình duyệt ...................................... 35
KẾT LUẬN .................................................................................................... 44
TÀI LIỆU THAM KHẢO ............................................................................. 45
v
DANH MỤC CÁC KÝ HIỆU , THUẬT NGỮ, CHỮ VIẾT TẮT
STT
1
CHỮ VIẾT TẮT, THUẬT
NGỮ, KÝ HIỆU
Artifact
GIẢI NGHĨA
Khi phát triển một phần mềm chúng ta không chỉ
tạo ra phần chƣơng trình mà thƣờng tạo ra nhiều
sản phẩm trung gian khác nhƣ các tài liệu đặc tả
yêu cầu, tài liệu thiết kế, mã nguồn và chƣơng
trình phần mềm. Tiếng Anh dùng từ artifact để
chỉ chung các sản phẩm này
2
SOAP
Simple Object Access Protocol – Giao thức truy
cập đối tƣợng đơn giản
3
Use case
Ca sử dụng
4
SRS
Software Requirements Specification – Đặc tả
yêu cầu phần mềm
5
BDD
Behavior Driven Development – Phát triển
hƣớng hành vi
6
BIT
Built – in test – Kiểm thử xây dựng sẵn, đi kèm
với cài đặt phần mềm
vi
DANH MỤC CÁC BẢNG
Bảng 1 Kịch bản thuộc tính chất lƣợng dạng bảng ................................................. 19
Bảng 2 Một số công cụ và khung kiểm thử ............................................................ 26
Bảng 3 Url có ngữ nghĩa ......................................................................................... 33
vii
DANH MỤC CÁC HÌNH VẼ
Hình 1 Ví dụ về một file log ..................................................................................... 8
Hình 2 Chạy javac ở chế độ thƣờng và chế độ verbose ............................................ 9
Hình 3 Sáu yếu tố ảnh hƣởng đến tính khả kiểm thử.............................................. 10
Hình 4 Một kịch bản thuộc tính chất lƣợng cho tính khả kiểm thử ........................ 18
Hình 5 Các chiến thuật khả kiểm thử ...................................................................... 20
Hình 6 Kiến trúc của mô-đun với mã tự kiểm tra [13] ........................................... 23
Hình 7 Công cụ hỗ trợ lấy thông tin về ứng dụng .................................................. 24
Hình 8 Kiến trúc chung của ứng dụng web............................................................. 29
Hình 9 Mô hình tổng quát của các ứng dụng trên nền web .................................... 31
Hình 10 Ví dụ url .................................................................................................... 33
Hình 11 Màn hình SOAP UI ................................................................................... 35
Hình 12 WebDriver ................................................................................................. 36
Hình 13 Ví dụ sử dụng Selenium với Java ............................................................. 36
Hình 14 Một đoạn mã HTML của trang web asp.net ............................................. 38
Hình 15 Một đoạn mã HTML của trang web ruby-lang ......................................... 39
viii
1
PHẦN MỞ ĐẦU
Tính cấp thiết và mục tiêu của đề tài
Sự phát triển và lan tỏa rộng rãi của Internet trên toàn cầu những năm gần
đây là cơ sở đánh dấu cho sự bùng nổ mạnh mẽ của các ứng dụng đƣợc viết trên
nền web. Các ứng dụng này có sự tăng mạnh về số lƣợng cũng nhƣ doanh thu.
Do đó để có sự canh tranh cao, các công ty phần mềm đang không ngừng tìm
cách cải tiến chất lƣợng ứng dụng, giảm chi phí, đồng thời đẩy nhanh tốc độ xây
dựng ứng dụng.
Làm việc trong một đơn vị xây dựng phần mềm trong gần năm năm, tôi
đã tham gia vào không ít dự án với vai trò là kỹ sƣ kiểm thử, trƣởng nhóm kiểm
thử và nhận thấy nỗ lực kiểm thử và sửa lỗi của các dự án quá lớn (chiếm tới
60-70% nỗ lực cả dự án). Và các nỗ lực này tập trung nhiều nhất ở hai giai đoạn
kiểm thử là kiểm thử chức năng và kiểm thử hồi quy.
Ngoài nỗ lực kiểm thử lớn, tác giả còn nhận thấy có nhiều lỗi tiềm ẩn mà
trong quá trình kiểm thử rất khó hoặc gần nhƣ không có khả năng tìm ra. Thông
qua đề tài này, tôi mong muốn tìm ra phƣơng pháp để việc kiểm thử dễ dàng
thực hiện hơn, tránh đƣợc các lỗi tiềm ẩn nhằm giảm bớt các thiệt hại do lỗi
không đƣợc phát hiện gây ra, đồng thời là cơ sở để giảm nỗ lực, chi phí cho việc
kiểm thử.
Phương pháp nghiên cứu
Để đề tài đạt đƣợc kết quả nhƣ mục tiêu đặt ra, trong luận văn tôi đã đề
xuất và áp dụng các phƣơng pháp nghiên cứu nhƣ sau:
- Nghiên cứu tài liệu: Nghiên cứu các khái niệm về tính khả kiểm thử và tập
trung vào các kỹ thuật làm tăng tính khả kiểm thử. Đây là mảng kiến thức
mà các nghiên cứu trên thế giới vẫn còn hạn chế, các khái niệm còn chƣa
2
có sự thống nhất do đó đòi hỏi nhiều kiến thức nền tảng để lựa chọn thông
tin cho phù hợp với mục tiêu đặt ra ban đầu.
- Phân tích và áp dụng: Qua việc phân tích các đặc thù của ứng dụng web
tôi đƣa ra một số chú ý để tăng tính khả kiểm thử cho lớp ứng dụng này.
Các đề xuất này đƣợc trao đổi với các đồng nghiệp để nhận đƣợc góp ý từ
đội phát triển phần mềm, gồm cả lập trình viên, kiểm thử viên.
Bố cục của luận văn
Phần còn lại của luận văn đƣợc trình bày theo các phần chính sau:
Chƣơng 1: Tổng quan. Chƣơng này trình bày một số kiến thức cơ
sở về tính khả kiểm thử nhƣ các khái niệm, các yếu tố ảnh hƣởng
đến tính khả kiểm thử, lợi ích khi chúng ta chú ý đến tính khả kiểm
thử.
Chƣơng 2: Kỹ thuật làm tăng tính khả kiểm thử. Chƣơng này
trình bày một số khái niệm về tính khả kiểm thử thông qua các độ
đo cấu trúc thiết kế và chƣơng trình. Chƣơng này cũng trình bày
một số kỹ thuật điển hình nhằm tăng tính khả kiểm thử của một hệ
thống phần mềm nói chung.
Chƣơng 3: Tính khả kiểm thử của ứng dụng trên nền web.
Chƣơng này phân tích đặc điểm của ứng dụng web và đề xuất một
số điểm quan trọng cần chú ý để tăng tính khả kiểm thử của các
ứng dụng web nói chung.
Kết luận: Tổng hợp các kết quả đạt đƣợc, tồn tại và hƣớng mở
rộng của đề tài.
3
CHƢƠNG 1. TỔNG QUAN
Trong chƣơng này, chúng ta sẽ xem xét các khái niệm cơ bản nhất khi nói
về tính khả kiểm thử [1]. Bao gồm các khái niệm, tầm quan trọng, các yếu tố tác
động đến tính khả kiểm thử. Mục tiêu là để cho ngƣời đọc có cái nhìn tổng quan
nhất về tính khả kiểm thử.
1.1 Tầm quan trọng của tính khả kiểm thử
Tính khả kiểm của phần mềm là một trong những khái niệm quan trọng
trong thiết kế và kiểm thử chƣơng trình và các thành phần phần mềm. Xây dựng
các chƣơng trình và các thành phần với tính khả kiểm thử cao luôn luôn làm
đơn giản hóa việc thực hiện kiểm thử, giảm chi phí kiểm thử và tăng chất lƣợng
phần mềm. Chi phí kiểm thử đang chiếm khoảng 50% chi phí sản xuất một phần
mềm. Tăng tính khả kiểm thử là điều kiện cần thiết để giảm tận gốc chi phí
kiểm thử phần mềm nói riêng và chi phí sản xuất phần mềm nói chung.
Một số chuyên gia kiểm thử và phát triển phần mềm đã chỉ ra tầm quan
trọng của tính khả kiểm thử và thiết kế, đặc biệt là đối với các hệ thống lớn:
Trong quá trình phân tích thiết kế một hệ thống, chúng ta không
chỉ cần quan tâm đến tính khả thi (có thể xây dựng đƣợc) mà còn
phải chú ý đến tính khả kiểm thử của chúng.
Bỏ qua việc thiết kế để có khả năng kiểm thử cao trong các hệ
thống lớn có thể làm giảm hiệu quả kiểm thử rất nhiều [2].
Tầm quan trọng của tính khả kiểm thử phần mềm đối với một hệ thống
phần mềm nào đó tỷ lệ thuận với:
Kích thƣớc và độ phức tạp của hệ thống
4
Các rủi ro đối với cuộc sống và kinh doanh nếu có lỗi không đƣợc
phát hiện
Tần suất của các hoạt động kiểm thử
Vòng đời của hệ thống (giả sử rằng kiểm thử hồi quy và bảo trì là
nhiệm vụ thƣờng xuyên)
Tính khả kiểm thử rất quan trọng đối với kiểm thử viên và lập trình viên
vì nó giúp họ kiểm soát đƣợc nỗ lực kiểm thử. Khách hàng cũng sẽ đƣợc lợi ích
nếu chất lƣợng sản phẩm cao hơn và tốc độ sửa lỗi nhanh hơn. Những tính chất
của tính khả kiểm thử nhƣ: xây dựng mã nguồn phục vụ kiểm thử tự động, báo
cáo lỗi tự động, và khả năng chuẩn đoán lỗi bên trong (built-in diagnostic) sẽ
cung cấp thông tin nhanh hơn, tốt hơn về nguyên nhân lỗi và do đó giúp đẩy
nhanh tiến độ sửa lỗi.
Sau khi đã ƣớc lƣợng, tính toán đƣợc tính khả kiểm thử của một hệ thống,
ta có thể đƣa ra các thông tin hữu ích cho kiểm thử viên, lập trình viên và quản
trị dự án nhằm mục đích:
Tập trung vào các thành phần có tính khả kiểm thấp – xem xét mã
nguồn, phân tích hình thức, tiêu chuẩn kiểm thử cao hơn
Thay đổi các thành phần có tính khả kiểm thấp để tăng tính khả
kiểm
Tự tin hơn với các thành phần có tính khả kiểm cao
Phân tích rủi ro đối với các thành phần có tính khả kiểm thấp để
xác định các rủi ro của hệ thống cũng nhƣ tìm ra nguyên nhân gốc
1.2 Khái niệm tính khả kiểm thử
Khi phát triển một phần mềm chúng ta không chỉ tạo ra phần chƣơng
trình mà thƣờng tạo ra nhiều sản phẩm trung gian khác nhƣ các tài liệu đặc tả
yêu cầu, tài liệu thiết kế, mã nguồn và chƣơng trình phần mềm. Tiếng Anh dùng
từ artifact để chỉ chung các sản phẩm này. Tính khả kiểm thử là các đặc tính của
các artifact mà các đặc tính này ảnh hƣởng đến sự dễ dàng đạt đƣợc các mục
5
tiêu kiểm thử. Nó đƣợc định nghĩa là “mức độ mà một artifact phần mềm tạo
điều kiện cho việc kiểm thử” [3].
Định nghĩa này cho ta thấy:
Không chỉ mã nguồn hay bản chạy chƣơng trình ảnh hƣởng đến
kiểm thử mà là toàn bộ các artifact tạo ra trong quá trình phát triển
phần mềm đều có vài trò quan trọng.
Liệu một artifact có tạo điều kiện cho việc kiểm thử hay không chỉ
có thể đƣợc xác định trong ngữ cảnh kiểm thử, ví dụ, với mục tiêu,
nguồn lực, kỹ thuật và công cụ kiểm thử.
Chúng ta xem một ví dụ để hiểu rõ hơn khái niệm tính khả kiểm thử này.
Một artifact mô tả một giao diện phần mềm sẽ hỗ trợ việc kiểm thử hộp đen và
nó không hỗ trợ kiểm thử hộp trắng vì giao diện không nêu cấu trúc của cài đặt
(implementation) của giao diện đó. Nếu mục tiêu kiểm thử không phải là đạt
đƣợc một mức độ bao phủ kiểm thử hộp trắng, ví dụ bao phủ 100% dòng lệnh,
thì mô tả giao diện không có ảnh hƣởng gì nhiều đến việc đạt mục tiêu.
Ngoài định nghĩa về tính khả kiểm thử trên có một số định nghĩa khác về
tính khả kiếm thử. Theo [4], tính khả kiểm thử là sự dễ dàng và chi phí tƣơng
đối để tìm ra lỗi phần mềm.
Theo thuật ngữ của IEEE [5], tính khả kiểm thử gồm:
“mức độ dễ dàng thiết lập các tiêu chuẩn kiểm thử và thực thi kiểm
thử của một hệ thống hay một thành phần hệ thống để xác định
xem các tiêu chuẩn đó có đƣợc thỏa mãn không.”
“mức độ cho phép thiết lập các tiêu chuẩn kiểm thử và thực thi
kiểm thử đối với một yêu cầu để xác định xem các tiêu chuẩn đó có
đƣợc thỏa mãn không”.
Theo chuẩn ISO về chất lƣợng sản phẩm phần mềm [6], tính khả kiểm
thử là tập các thuộc tính có liên quan đến nỗ lực cần thiết để thẩm định
(validate) một phần mềm đã sửa đổi.
6
Nhƣ vậy chúng ta có thể thấy, về cơ bản, tính khả kiểm thử đều đƣợc hiểu
là mức độ dễ dàng để thực hiện việc kiểm thử hay mức độ dễ dàng để tìm ra lỗi
của hệ thống phần mềm. Các việc kiểm thử không chỉ áp dụng cho chƣơng trình
phần mềm mà còn cả các sản phẩm trung gian nhƣ tài liệu yêu cầu, thiết kế, v.v.
Tuy nhiên, các định nghĩa vẫn có những chi tiết khác nhau về định nghĩa một hệ
thống thế nào là có tính khả kiểm thử cao. Trong chƣơng sau, chúng ta sẽ
nghiên cứu cụ thể hơn về một trong những cách để đo đạc một cách định lƣợng
tính khả kiểm thử của một hệ thống.
1.3 Các khái niệm liên quan tính khả kiểm thử
Khả năng kiểm soát và khả năng quan sát là hai khái niệm mấu chốt của
tính khả kiểm thử [4]. Để kiểm thử một thành phần, ta cần phải kiểm soát đƣợc
đầu vào và quan sát đƣợc đầu ra. Khả năng kiểm soát là khả năng điều khiển dễ
dàng đầu vào để chuyển phần mềm đến một trạng thái cụ thể nào đó. Còn khả
năng quan sát liên quan đến mức độ dễ dàng trong việc quan sát kết quả đầu ra
và các thay đổi về trạng thái của phần mềm. Nếu không có đƣợc hai khả năng
này, việc cải tiến khả năng kiểm thử hệ thống là rất khó thực hiện. Hay nói cách
khác, một thành phần của phần mềm đƣợc gọi là khả kiểm thử nếu nó có hai
thuộc tính này.
Khả năng kiểm soát là khả năng điều khiển các thành phần của phần
mềm đến các trạng thái mong muốn thông qua các giá trị đầu vào. Giá trị đầu
vào có thể là các biến của hàm/phƣơng thức, lấy từ tƣơng tác của ngƣời dùng
thông qua giao diện phần mềm hoặc các tƣơng tác bên trong/bên ngoài của ứng
dụng, đƣợc lƣu trữ, thao tác trong các biến và có khả năng thay đổi tùy vào
phạm vi của biến.
Trạng thái phần mềm là một tập các biến và các giá trị tƣơng ứng tại một
thời điểm nhất định. Trong một mô-đun hay một đơn vị chƣơng trình, có thể có
vô số các trạng thái này, tuy nhiên chỉ một tập nhỏ các kết hợp là có ý nghĩa và
đƣợc quan tâm. Ví dụ phần mềm thao tác trên tài khoản ngân hàng: khi chủ tài
khoản rút tiền, phần mềm sẽ đánh dấu trạng thái tài khoản đó là „đang hoạt
động‟ khi hoàn tất giao dịch. Nếu là thẻ tín dụng, sự thay đổi trạng thái tài
7
khoản chỉ đƣợc chủ thẻ để ý khi tài khoản không còn đủ tiền so với số tiền
khách rút. Tài khoản khi đó có thể đƣợc đánh dấu là rút quá (overdrawn). Khả
năng thao tác trên các đầu vào và quan sát trạng thái dễ dàng sẽ giúp đội phát
triển có thể tạo ra một bộ kiểm thử tự động hiệu quả.
Khả năng quan sát là khả năng nhìn đƣợc phản ứng của hệ thống đối
với các đầu vào và theo dõi đƣợc các thay đổi trạng thái của phần mềm. Thƣờng
thì ta có thể thấy đầu ra của hệ thống, tuy nhiên, có nhiều phản ứng hay trạng
thái trung gian có thể không đúng và ta thƣờng không nhìn thấy. Ba điều kiện
cần để một lỗi xuất hiện là: (1) chạy mã nguồn có lỗi; (2) mã nguồn lỗi đó dẫn
đến 1 trạng thái dữ liệu sai; (3) trạng thái sai này đƣợc nhìn thấy. Khả năng
quan sát là sự dễ dàng để của hệ thống giúp chúng ta xem đƣợc cả các trạng thái
trung gian mà bình thƣờng không quan sát đƣợc.
Thực hiện các phƣơng pháp để tăng khả năng quan sát các trạng thái sẽ
giúp phát hiện các lỗi tiềm ẩn của chƣơng trình. Khả năng quan sát do đó có liên
quan đến thể hiện của kết quả kiểm thử phần mềm. Có thể tăng cƣờng khả năng
quan sát của phần mềm bằng nhiều cách: ghi log, truy vết, chèn mã (code
instrumentation), thăm dò và chèn các câu lệnh in ra màn hình vào mã nguồn.
Ví dụ khi lập trình chúng ta ghi ra các file log một số cột mốc của hệ thống, nhƣ
bắt đầu một hàm, kết thúc một hàm, hoặc một sự kiện nào đó, thì khi xem lại
các file log này để giúp quan sát bên trong hệ thống thì chúng ta đã tăng khả
năng quan sát của phần mềm. Hình 1 là một ví dụ về log hệ thống cho thấy các
thông tin chi tiết về hoạt động của hệ điều hành.
8
Hình 1 Ví dụ về một file log
Một ví dụ khác về khả năng quan sát là một số phần mềm có chế độ chạy đặc
biệt (verbose mode) để in ra chi tiết quá trình chạy cho ngƣời sử dụng quan sát.
Ví dụ với chƣơng trình HelloWorld.java khi dịch ở chế độ thƣờng thì trên màn
hình không có thông báo gì nếu dịch thành công. Còn khi dịch với tham số verbose thì kết quả trên màn hình nhƣ trong Hình 1 (đã lƣợc bớt thông tin).
9
C:\Users\thentt>javac HelloWorld.java
C:\Users\thentt>javac -verbose HelloWorld.java
[parsing started RegularFileObject[HelloWorld.java]]
[parsing completed 26ms]
[search path for source files: .]
[search path for class files: C:\Program
Files\Java\jdk1.8.0_11\jre\lib\resources.jar,C:\Program
Files\Java\jdk1.8.0_11\jre\lib\rt.jar, ....]
[loading ZipFileIndexFileObject[C:\Program
Files\Java\jdk1.8.0_11\lib\ct.sym(METAINF/sym/rt.jar/java/lang/Object.class)]]...
[checking HelloWorld]
[loading ZipFileIndexFileObject[C:\Program
Files\Java\jdk1.8.0_11\lib\ct.sym(METAINF/sym/rt.jar/java/io/Flushable.class)]]...
[wrote RegularFileObject[HelloWorld.class]]
[total 280ms]
Hình 2 Chạy javac ở chế
độ thường
và chế độ verbose
Hình
1
Ở ví dụ này chúng ta có thể thấy khi chạy với tham số verbose, chƣơng
trình dịch in rất nhiều thông tin chi tiết từng bƣớc hoạt động bên trong của
chƣơng trình dịch, giúp ta quan sát đƣợc các thông tin.
1.4 Một số yếu tố ảnh hướng đến tính khả kiểm thử
Theo [4] có sáu yếu tố chính ảnh hƣởng đến tính khả kiểm thử của một
phần mềm. Sáu yếu tố tƣơng ứng với các bƣớc chính trong quy trình phát triển
phần mềm cơ bản gồm1:
1
http://robertvbinder.com/software-testability-part-2-controllability-and-observability/
10
Hình 3 Sáu yếu tố ảnh hưởng đến tính khả kiểm thử
Yếu tố về tài liệu mô tả: Hành vi và kiến trúc phần mềm có thể đƣợc tài
liệu hóa dƣới dạng các đặc tả yêu cầu, cách nhìn kiến trúc, mô hình thiết kế chi
tiết và các giả thuật toán. Sự rõ ràng và ngắn gọn của tài liệu này có thể hỗ trợ
tính khả kiểm thử. Một số đặc điểm của tài liệu làm tăng khả năng kiểm thử bao
gồm: các yêu cầu đƣợc mô tả rõ ràng, không mơ hồ, có tính khả thi khi sinh ca
kiểm thử từ yêu cầu, thiết kế chi tiết triệt để, khả năng lƣu vết khi cài đặt và
phân chia chức năng một cách tách bạch.
Yếu tố về cài đặt: Phần mềm đƣợc cài đặt với nhiều ngôn ngữ lập trình
và mô hình khác nhau. Các tính năng có sẵn trong những ngôn ngữ và mô hình
này làm cho việc kiểm thử khó khăn hơn hay dễ dàng hơn phụ thuộc vào cách
chúng đƣợc sử dụng. Ví dụ, trong các hệ thống hƣớng đối tƣợng, thừa thế là
một đặc tính có thể gây khó khăn cho việc kiểm thử nếu cây thừa kế có nhiều
mức vì các lớp ở mức thấp hơn cần phải hoạt động giống với các lớp ở mức cao
hơn.
Yếu tố về kiểm thử kèm theo: Mã nguồn đƣợc viết thêm các lệnh để
kiểm tra tính chất của dữ liệu nhằm giảm bớt công việc kiểm thử. Nó giúp hệ
thống có khả năng tự kiểm tra và những kiểm tra này không là các tính năng
đƣợc mô tả trong đặc tả của phần mềm. Ví dụ, các lệnh assert trong các ngôn
ngữ lập trình hiện đại nhằm giúp viết các lệnh kiểm tra này dễ dàng hơn.