...1 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...2 Câu 17: Nêu ý nghĩa dấu bình phương tích fan
Trang 1
BÀI TẬP NHÓM MÔN PHƯƠNG PHÁP VÀ CÔNG CỤ ĐÁNH GIÁ PHẦN MỀM
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 20071864
Vũ Thành Trung 20073068
Trang 2 1 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 2 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 4 Câu 18: Tính độ đo Coupling cho chương trình C của đồ thị sau: 6 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 7 Câu 27: Nhận xét về cấu trúc của thuật toán dưới đây: 9
Trang 3Câ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 3
Function
Variable
function
Trang 4- 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
function
function
Trang 5Ví 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 5
Trang 6Câ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 R i 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
Trang 7Câ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 7
1
2
3
4
5
6
7
Trang 8: check end of list
: output sum
: stop
Y N
Y N
6
7
8 1
0 0
9
1
2
5
3
4
8
9 1 0
Trang 9Câ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 9
Trang 10Chúng ta có thể sử dụng 2 như là phép đo dữ liệu hoặc N2 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:
nDSI ogramSizeI
s rCharacter zeInBytesO
DatabaseSi P
D
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
Trang 11Chươ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 11
Trang 12dữ 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
6
1
2
5 3
4
1 2 3
4
5 6