Tải bản đầy đủ (.doc) (12 trang)

báo cáo BÀI TẬP NHÓM MÔN PHƯƠNG PHÁP VÀ CÔNG CỤ ĐÁNH GIÁ PHẦN MỀM

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 (662.84 KB, 12 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
  
BÀI TẬP NHÓM MÔN
PHƯƠNG PHÁP VÀ CÔNG CỤ ĐÁNH GIÁ PHẦN MỀM
Giảng viên hướng dẫn: Thầy Huỳnh Quyết Thắng
Nhóm thực hiện: Nhóm 09 – CNPM K52

Hà nội, 11/ 2011
Nguyễn Thị Lan 20071649
Nguyễn Thị Hoài Phương 20072270
Hà Huy Khánh 20071536
Bùi Thị Hiền Lương 20071864
Vũ Thành Trung 20073068















Contents




 !"#$%!&'()*+', /0'12345
*0*6**27
 !8#9:!;)*<&!54=>*?>*?!3@=AB/A>3*CB2D
2%6E*F36?G*>!3*H
 !I#JK'!234E*L(*!#"
 !"#@M34N<O 62'P?3!!3<5Q% 6<R
32B2DS3*8
 !8#9%+&!3TE*!<O 6#U
Nhóm 09 – CNPM K52 Page 















Câu 16: Đề xuất một định nghĩa phép đo độ cố kết – Cohesion có thể đo cho một ngôn ngữ
lập trình bậc cao cụ thể như C hay Pascal.
Trả lời:
 Cohesion: là thuật ngữ đo mức độ quan hệ giữa hai thành phần phần mềm.
 Các loại cohesion – theo Yourdon và Constantine:

- Functional: một thành phần của modul này gọi đến duy nhất một thành phần của
modul kia.
- Sequential: một thành phần của modul này gọi đến nhiều hơn một thành phần của
modul kia.
- Communicational: một thành phần của modul này và một thành phần của modul kia
dùng chung biến.
- Procedural: một thành phần của modul này và một thành phần của modul kia dùng
chung một thủ tục duy nhất.
Nhóm 09 – CNPM K52 Page 7
V<!2W
V<!2W
V<!2
V<!2
B!C
B!C
B!C
B!C
B!C
B!C
V<!2W
V<!2W
V<!2
V<!2
B!C
B!C
B!C
B!C
V<!2W
V<!2W
V<!2

V<!2
B!C
B!C
B!C
B!C
X*3*52
V<!2W
V<!2W
V<!2
V<!2
B!C
B!C
B!C
B!C
>!C
















- Temporal: một thành phần của modul này và một thành phần của modul kia dùng
chung biến trung gian trong một khoảng thời gian nhất định.
- Logical: một thành phần của modul này và một thành phần của modul kia gọi đến
nhiều thủ tục và các thủ tục này có liên kết với nhau.
- Coincidental: một thành phần của modul này và một thành phần của modul kia gọi
đến nhiều thủ tục và các thủ tục này không có liên kết với nhau.
 Cohesion cho mã nguồn C:
Ta có thể áp dụng đo bất cứ loại cohesion kể trên cho mã nguồn C. Các modul là các file
mã nguồn .cpp và các function là các hàm trong các file mã nguồn đó.
Câu 17: Nêu ý nghĩa dấu bình phương tích fan-in và fan-out trong công thức tính IFC –
Information Flow Complexity của Henry-Kafura.
Trả lời:
 Fan-in: Xét fan-in của modul M. fan-in(M) là số lượng dữ liệu từ các modul khác truyền
cho M làm đầu vào và dữ liệu bên trong M.
 Fan-out: Xét fan-out của modul M. fan-out(M) là số lượng dữ liệu kết quả được M truyền
ra ngoài.
 Công thức độ phức tạp luồng thông tin cho một modul:
IFC=length(M)*(fan-in(M)*fan-out(M))^2
Nhóm 09 – CNPM K52 Page H
V<!2W
V<!2W
V<!2
V<!2
B!C
B!C
B!C
B!C
>!C
>!C
















Ví dụ:
 Dấu bình phương có ý nghĩa cho thấy rằng độ phức tạp luồng thông tin của modul tăng
rất nhanh khi có nhiều hơn 1 luồng thông tin vào ra modul.
Nhóm 09 – CNPM K52 Page Y
















Câu 18: Tính độ đo Coupling cho chương trình C của đồ thị sau:
Công thức tính coupling giữa hai modul x và y là:
Trong đó: c là coupling
i là chỉ số của
i
R
giữa x và y, n là số liên kết trong giữa x và y.
n: là số liên kết giữa x và y.
Dựa vào các nhãn gán cho các cung giữa các nút ta có.
C(M1,M3) = 3+ 1/(1+1) = 3.5
C(M1,M2) = [2+ 2/(2+1)]*2= 5.2
C(M2,M4) = 5+ 1/(1+1) + 3+ 2/(2+1) = 9.2
Nhóm 09 – CNPM K52 Page "
















Câu 26: Chứng minh đoạn chương trình đơn giản dưới đây là một D-structured bằng cách
xây dựng Control Flow Graph.
Trả lời:
Control Flow Graph của đồ thị trên như sau:
: start
: Input list
: check list empty
: output “list empty”
: sum:=0
: read next list entry a
: sum:=sum+a
Nhóm 09 – CNPM K52 Page 8


7






H
Y
"
8
















: check end of list
: output sum
: stop

Y N

Y N
Nhóm 09 – CNPM K52 Page I
"
8
I



U


Y
7

H
I
U

















Câu 27: Nhận xét về cấu trúc của thuật toán dưới đây:
Trả lời:
Chúng ta đã biết cách đo luồng thông tin như thế nào và đã phần nào cảm nhận được cái cách
mà dữ liệu tương tác với một hệ thống hay một modul. Tuy nhiên vẫn còn một số vấn đề về việc
đo đạc trên dữ liệu thực và cấu trúc của chúng. Ở phần này chúng ta sẽ làm quen với các phép đo
cấu trúc dữ liệu.
Thông thường việc đo đạc dữ liệu sẽ không phức tạp vì với các luồng điều khiển và luồng dữ liệu
đã có chúng ta có thể đo cả dữ liệu cục bộ và dữ liệu toàn cục. Có thể đo lượng cấu trúc trong
mỗi thành phần dữ liệu. Elliot đã sử dụng lý thuyết đồ thì để phân tích và đo các thuộc tính của
cấu trúc dữ liệu. Anh ấy coi các loại dữ liệu như: số nguyên, ký tự, và biến Boolean như dữ liệu

nguyên thủy và sau đó xem xét các phép tính mà theo đó tạo nên độ phức tạp cho cấu trúc dữ
liệu. Phép đo cấu trúc dữ liệu có thể được định nghĩa phân cấp theo loại dữ liệu và phép tính trên
loại dữ liệu đó. Vanden Berg cũng sử dụng lý thuyết tương tự để đo độ phức tạp của các hàm
trong ngôn ngữ lập trình hướng chức năng.
Để đo lượng dữ liệu của hệ thống chúng ta đếm tổng số biến trong chương trình. Cũng tương tự
như phép đo Halstead:
Nhóm 09 – CNPM K52 Page U















Chúng ta có thể sử dụng
2
µ
như là phép đo dữ liệu hoặc
2
N
như là phép đo các phép toán.
Bohem cũng nhấn mạnh vấn đề đo đạc lượng dữ liệu trong mô hình COCOMO mà ông ấy đã

xây dựng. Ông định nghĩa một phép toán:
nDSIogramSizeI
srCharacterzeInBytesODatabaseSi
PD
Pr
/ =
Trong đó DSI là số lượng chỉ dẫn mã nguồn. Sử dụng phép đo này ông đã thu được một phép đo
đơn giản với thang đo ordinal, gọi là DATA. Định nghĩa của phép đo này và hệ quả tác động
tương ứng lên chi phí dưới bảng sau:
Ví dụ: dựa vào bảng trên ta có thể thấy rằng, nếu độ phức tạp của dữ liệu được xếp vào loại
“very high” thì chi phí cho hệ thống sẽ tăng lên khoảng 16% nhưng mặt khác nếu độ phức tạp
giảm xuống còn “low” thì chi phí chỉ còn 94%.
Tuy nhiên thì độ phức tạp về cấu trúc dữ liệu lại không phản ánh được độ phức tạp về luồng điều
khiển.
Ví dụ: xét 2 chương trình có chức năng tương tự nhau dưới đây. Lưu ý là mã nguồn được viết
theo hai cách hoàn toàn khác nhau.
Nhóm 09 – CNPM K52 Page 
















Chương trình A có độ phức tạp về cấu trúc luồng điều khiển cao( số vòng lặp là 7). Trong khi B
chỉ gồm một chuỗi tuần tự rất đơn giản( số vòng lặp chỉ là 1). Điểm khác nhau chính giữa 2
thành phần chính là ở độ phức tạp luồng điều khiển trong A đã được chuyển thành cấu trúc dữ
liệu trong B. Trong khi dữ liệu của A chỉ là số nguyên thì dữ liệu của B yêu cầu là một mảng 11
phần tử và mỗi phần tử là một chuỗi ký tự và một biến số nguyên. Để đo độ phức tạp của 2
đoạn mã nguồn trên, chúng ta sẽ gán giá trị 1 cho biến số nguyên, giá trị nhân 2 cho một chuỗi
string, giá trị nhân 2 cho một phép tính trên mảng. Trong trường hợp này A có một thành phần
Nhóm 09 – CNPM K52 Page 















dữ liệu được gán giá trị 1, B có 2 thành phần dữ liệu một cũng được gán là 1 và 1 được gán là 44.
Độ phức tạp dữ liệu của B rất lớn nhưng trên thực tế luồng điều khiển của nó thì lại rất đơn giản.
Đồ thị luồng điều khiển của hệ thống đề bài ra như sau:
N
Y

N
Y
: start
: apply substance A
: temperature above maximum threshold
: end
: apply substance B
: pressure above maximum threshold
Nhóm 09 – CNPM K52 Page 
"


Y
7
H


7
H
Y
"

×