1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đánh giá chất lượng thiết kế phần mềm kỹ nghệ phần mềm

21 619 24

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 203,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trong quy trình phát triển phần mềm, theo [5] thiết kế phần mềm là bước được coi là “Nơi chất lượng phần mềm được nuôi dưỡng trong quá trình phát triển, cung cấp cách biểu diễn phần mềm

Trang 1

MỤC LỤC

A MỞ ĐẦU

I LÝ DO CHỌN ĐỀ TÀI

Ngày nay, hàng triệu máy tính được ra đời cùng các hệ phần mềm để phục

vụ các hoạt động cho cá nhân, tập thể, cơ quan, quốc gia Dường như con người chúng ta ngày càng phụ thuộc hơn vào máy tính, vào các hệ phần mềm

Mà yêu cầu của khách hàng về phần mềm không phải lúc nào cũng giống nhau, yêu cầu đó ngày càng cao hơn Khi tham khảo qua truyền hình, qua internet tôi thấy, hiện nay có hàng loạt phần mềm Việt Nam ra đời Nhưng đặt câu hỏi tại sao, trong những phần mềm đó, có bao nhiêu phần mềm lớn, phần mềm đáp ứng mọi nhu cầu của khách hàng ? Phải chăng vấn đề chất lượng của một phần mềm vẫn chưa được chú trọng một cách thích đáng ?

Trong quy trình phát triển phần mềm, theo [5] thiết kế phần mềm là bước được coi là “Nơi chất lượng phần mềm được nuôi dưỡng trong quá trình phát triển, cung cấp cách biểu diễn phần mềm có thể xác nhận về chất lượng, là cách duy nhất mà chúng ta có thể chuyển hóa một cách chính xác các yêu cầu của khách hàng thành sản phẩm hay hệ thống phần mềm cuối cùng” Còn theo [3] thì

“Trong ba giai đoạn: thiết kế, cài đặt và bảo trì thì thiết kế là giai đoạn quan trọng nhất, chịu trách nhiệm đến 80% đối với sự thành công của một sản phẩm Cài đặt là việc thực thi những gì đã thiết kế Nếu trong quá trình cài đặt có xuất

Trang 2

hiện vấn đề thì phải quay lại sửa bản thiết kế Quá trình thiết kế tốt là cơ sở để quản lý và giảm chi phí cho công việc bảo trì phần mềm sau này”.

Vậy, thiết kết phần mềm là bước đầu tiên để đảm bảo chất lượng phần mềm Nhưng hiện nay các tài liệu liên quan đến chất lượng thiết kế phần mềm vẫn còn mang tính chất lý thuyết chung chung, chưa dễ hiểu, rõ ràng Mặt khác, qua tìm hiểu trên internet và qua các kết quả thiết kế phần mềm của các sinh viên khoa tin học, khóa học 2007-2010 trường ĐHSP Huế tôi thấy còn gặp nhiều sai sót để đạt một thiết kế phần mềm tốt Vấn đề đánh giá chất lượng thiết kế phần mềm vẫn còn mơ hồ đối với người làm thiết kế phần mềm

Chính vì thế mà tôi lựa chọn đề tài :

” ĐÁNH GIÁ CHẤT LƯỢNG THIẾT KẾ PHẦN MỀM”

II MỤC ĐÍCH NGHIÊN CỨU

Mục đích của đề tài là sau khi đọc xong đề tài này, bạn và tôi sẽ hiểu rõ về thiết kế phần mềm sao cho có chất lượng, thông qua phần phân tích kèm theo các

ví dụ cụ thể Và qua đề tài người đọc cũng biết được một số giải pháp để thiết

kế phần mềm sao cho có chất lượng Từ đó những người làm việc về thiết kế phần mềm có thể ứng dụng các giải pháp đó để tạo ra những bản thiết kế phần mềm có chất lượng, hoặc những người khác có thể đánh giá chất lượng thiết kế của một phần mềm nào đó một cách chính xác hơn

III ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU

Đề tài này liên quan đến chất lượng và các giải pháp để có bản thiết kế tốt,

có thể đáp ứng mọi nhu cầu của khách hàng Và tất nhiên nó cũng liên quan đến bất kì một bản thiết kế phần mềm nào đó mà bạn bắt gặp

IV PHƯƠNG PHÁP NGHIÊN CỨU

Với đề tài này, tôi dựa trên các tài liệu liên quan mà các nhà đánh giá thiết

kế phần mềm đã đúc kết qua sách, qua các file *doc, *pdf hay các bài giảng của các nhà tìm hiểu, nghiên cứu về chất lượng thiết kế phần mềm ở trên các trang web Đồng thời tôi dựa vào các kiến thức đã được học tập về phần mềm, về

Trang 3

kế phần mềm sưu tầm được để hiểu thêm về thiết kế phần mềm Nếu những phần nào chưa rõ thì tôi nhờ các bạn viết phần mềm đó giải thích giùm.Và tât nhiên tôi đã nhận được sự hướng dẫn từ thầy giáo hướng dẫn để từ đó xác định được

đề tài này nên viết những gì, làm những gì

Trang 4

B PHẦN NỘI DUNG

I THẾ NÀO LÀ THIẾT KẾ CÓ CHẤT LƯỢNG ?

Qua tham khảo các tài liệu, tôi thấy hiện tại chưa có một tiêu chuẩn chính xác nào để xác định thế nào là thiết kế tốt Tiêu chuẩn đó còn phụ thuộc vào ứng dụng và yêu cầu của mỗi dự án Một thiết kế tốt có thể xem là một thiết kế đáp ứng mọi yêu cầu về phần mềm của khách hàng

Thiết kế phần mềm được coi là tốt nếu nó sản sinh ra một chương trình tối ưu; thiết kế càng chặt chẽ, gọn gàng và nhẹ càng tốt Đồng thời thiết kế dể bảo dưỡng thích nghi, bổ sung cải tiến, dể đọc, dể hiểu, các thành phần của thiết kế phải gắn kết với nhau theo một quan hệ logic chặt chẽ giữa các thành phần của thiết kế được ghép nối một cách dể dàng

Để xem một thiết kế có là tốt hay không, người ta tiến hành thiết lập một số

độ đo chất lượng thiết kế:

-Độ kết dính thành phần trong module

-Mức ghép nối giữa các module

-Tính hiểu được

-Tính thích nghi được

Ta đi tìm hiểu cụ thể từng độ đo

II ĐỘ ĐO CHẤT LƯỢNG THIẾT KẾ

1 Thế nào là độ kết dính thành phần trong module (cohesion) ?

Theo [1], [3], [5] sự kết dính của 1 thành phần trong module là độ đo về tính gắn kết chặt chẽ với nhau giữa các bộ phận trong module đó Muốn vậy, một thành phần phải thực hiện một chức năng logic hay một thực thể logic, và tất

cả các bộ phận của nó đều phải tham gia vào việc thực hiện này Nếu một phần không trực tiếp tham gia vào việc thực hiện chức năng logic đó thì mức độ kết dính của nó là thấp

Ví dụ: Độ kết dính của một lớp (Coupling Between Object classes) tính bằng số lớp mà lớp đó kết dính với Một lớp gọi là có tính kết dính với lớp khác

Trang 5

Gape-Jones (1980) đưa ra 7 mức kết dính theo thứ tự tăng dần sau đây:-Kết dính gom góp :

Class NhanSu

{ …

Void nhap()

{

cout <<”nhap hoten: ” ; gets(hoten);

cout <<”nhap ngay sinh: ” ; gets(ngaysinh);

cout << ”nhap dia chi nha: ”; gets(diachi)

}

}

Rõ ràng, độ kết dính dạng này của nó rời rạc và xấu nhất

b Kết dính lôgic (logical cohesion)

Các thành phần làm chức năng logic tương tự Ví dụ như các hàm xử lí lỗi chung, cập nhật…

Cụ thể hơn, tôi xin đưa ra một đoạn chương trình viết bằng c++:

thêm n NhanSu vào hệ thống trong chương trình quản lý nhân sự trường Đại học

Kết dính gom góp

Trang 6

Private Sub sua_Click (ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles sua.Click

If DataGridView1.CurrentRow Is Nothing Then Exit Sub ‘trước tiên,

kiểm tra xem chưa có dữ liệu trong bảng DataGridView1(hiện tại)

thì không thực hiện sửa gì cả (thoát)

Dim frm As New hoso

For (i=0; i<n; i++)

Cout<<”bạn nhập dữ liệu cho giáoviên, sinhviên hay ngườigiúpviệc

thứ”<<i +1;

Cout << ”1 Nếu la giao vien \n”;

Cout << ”2 Nếu la Sinh Viên \n”;

Cout <<”3 Nếu la Người giúp việc \n”;

-> Các câu lệnh ở 3 trường hợp đều thực hiện tương tự nhau

-> có sự Kết dính lôgic

Hay một ví dụ khác trong phần thiết kế Nút sửa dữ liệu ở bảng

Cap_Nhat_Ho_So viết bằng ngôn ngữVb.net, Phần mềm quản lý tin 3b

[8’]

Trang 7

For (i=0; i<n; i++){ …

{case 1: {GiaoVien p;

NS[i]=&p ; NS[i]-nhap() }

}

Loop While frm.Visible = True ‘trong khi bảng frm còn

mở thì tiếp tục thì

DataGridView1 tiếp tục thực hiện.

Dim h As New DataSet khai báo 1

QRY("select * from db_hoso where maso='" & frm.MS & "'", h,

"hoso")

DataGridView1.CurrentRow.Cells("maso").Value = h.Tables("hoso").Rows(0)("maso")

DataGridView1.CurrentRow.Cells("hoten").Value = h.Tables("hoso").Rows(0)("hoten") ‘ cập nhật dữ liệu với mã

số, họ tên mới khi khách hàng đồng ý lưu frm.Dispose() ‘ đóng bảng frm

End Sub

Ở đây các câu lệnh đưa ra để kiểm tra các trường hợp để có thể sửa dữ liệu hay không Cụ thể các lệnh được giải thích rõ ở trên Các lệnh if và do - loop while ở trên đều có chức năng là kiểm tra các điều kiện để sửa dữ liệu hay không Vì vậy ở đây có sự kết dính logic

Qua đây ta cũng thấy mức kết dính này được đánh giá chất lượng thiết kế của nó vẫn tốt

c Kết dính thời điểm (temporal cohesion).

Các thành phần hoạt động cùng thời điểm

Ở ví dụ thêm nhân sự tôi đưa ra trên, các câu lệnh trong trường hợp

chon = 1 sau:

Trang 8

NhanSu(const char *s, const char *s1, const char *s2)

{ hoten= new char[strlen(s) + 1];

Khi nhập họ tên nhân sự, có thể có họ tên dài ngắn khác nhau Do vậy ta không nên cấp phát sẵn ô nhớ chứa độ dài họ tên Bởi như thế là không cần thiết, tốn ô nhớ Ta nên cấp phát bộ nhớ động Và khi đó các thành phần cùng khởi tạo

và cùng kết thúc ở hàm hủy tử ~ nhansu ( ) và con trỏ hoten sẽ được cấp phát đúng bằng độ dài của họ tên +1 ô nhớ null Những thành phần này gọi là có kết dính thời điểm

Theo [4] thì mức ghép nối này cũng được đánh giá chất lượng là vẫn tốt

Trang 9

thực hiện để nhằm tính điểm thi cho thi sinh Phần thiết kế này theo tôi cũng có

sự kết dính thủ tục

Theo [4] mức dính này được nâng lên một mức cao hơn, được đánh giá là tốt

e Kết dính truyền thông(communicational cohesion)

Tất cả các phần tử của thành phần cùng thao tác trên cùng một dữ liệu vào

và đưa ra cùng 1 dữ liệu ra

Tôi xin đưa ra ví dụ : Khi thống kê điểm tuyển sinh Đại học ta cần đưa ra toàn bộ dữ liệu, hay đưa ra người có điểm thủ khoa, điểm trung bình mà các thí sinh đạt được trong năm nay, lọc ra danh sách các em thi đậu …

Hay ở các lệnh thực hiện các nút thêm, sửa, xóa dữ liệu trong bảng cap_nhat_ho_so của [8’] đều cùng thao tác trên cùng 1 dữ liệu trong bảng hoso

f Kết dính tuần tự (sequential cohesion).

Trong một thành phần, cái ra của thành phần này là cái vào của thành phần kia

Tôi thấy trong phần mềm quản lý Tin 3B [8’] Đây là đoạn code đọc filePrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles Button1.Click

Dim frm As New ChonHoso

Trang 10

g Kết dính chức năng (functional cohesion)

Mỗi phần của thành phần đều là cần thiết để thực hiện 1 chức năng nào nó Các thành phần đó là kết quả của phân rã chức năng

Trang 11

Chẳng hạn khi cập nhật dữ liệu cần có các phần : Đọc dữ liệu về, thêm dữ liệu, xóa dữ liệu, sửa dữ liệu Theo tôi, các phần đó kết dính chức năng để tạo tạo nên chức năng cập nhât dữ liệu

2 Thế nào là mức ghép nối giữa các module (coupling) ?

Ghép nối chỉ ra mức độ độc lập giữa các đơn vị thành phần (môđun) của một chương trình Hệ thống có ghép nối cao sẽ có độ liên kết mạnh giữa các thành phần, làm chúng phụ thuộc lẫn nhau nhiều hơn Hệ thống nối ghép lỏng lẻo làm cho các thành phần trở nên độc lập hay tương đối độc lập với nhau

Ta có thể vẽ hình đễ dễ hiểu hơn về sự kết dính và sự ghép nối theo [2] như sau :

Module dưới hơn Module dưới hơn

Theo [1], sự ghép nối của một modun với các modun khác thể hiện bằng số lượng mối liên kết phụ thuộc giữa nó với các modun khác, cũng như bản chất của các mối quan hệ đó Chẳng hạn, mối quan hệ đồng bộ (gọi chờ đáp đáp lại)

là chặt hơn mối quan hệ không đồng bộ (giửi thông báo đi) Kế thừa trong hệ thống đối tượng dẫn tới một dạng ghép nối chặt giữa các lớp có mối quan hệ kế thừa.việu tối thiểu hóa sự ghép nối không phải luôn luôn thực hiện được Page-Jones (1980) đã giới thiệu các mức ghép nối từ chặt chẽ đến lỏng lẻo như sau :-ghép nối chuẩn

Tính kết dính

Tính kết dính

Module trên hơn

Phân hoạch module tốt

- Kết dính: tối đa

- Ghép nối: tối thiểu

Trang 12

Một phép nối chuẩn là một phép gọi tới một module khác bằng tên.

Tôi xin đưa ra ví dụ trong chương trình QUANLY NHANSU (viết bằng ngôn ngữ c++), chương trình chính có gọi tới hàm nhập trong class NhanSu

:

Trang 13

Class HinhChuNhat{int x,y;

<< DienTich(hcn[i].x, hcn[i].y)

}

b Ghép nối dữ liệu (data coupling).

Các modun truyền thông với nhau bằng các phần tử dữ liệu hay thông tin điều khiển Không một module nào có thể biết được những gì xảy ra trong module khác

Như vậy, theo tôi việc truyền (nhận) dữ liệu qua tham số của hai hàm sau( viết bằng ngôn ngữ lập trình c++) như sau để hiển thị ra diện tích của n hình chữ nhật cũng là một ví dụ

Hàm HienThi sẽ truyền tham số cho hàm DienTich theo kiểu tham chiếu Với giá trị đó, các câu lệnh ở trong hàm HienThi dược thực hiện và đưa ra kết quả trong hàm HienThi và mọi thành phần (câu lệnh) trong hàm DienTich, hàm HienThi không hề hay biết

Có thể nói ghép nối dữ liệu được đánh giá là một loại ghép nối rất tốt trong thiết kế, theo [4] Tuy nhiên, theo [3] nếu sự ghép nối là sự liên hệ tới một dữ liệu xác định trong một module khác, không phải bởi một phép truyền tường minh qua một phép nối chuẩn thì lại là một ghép nối dữ liệu xấu

c Ghép nối nhãn (stamp coupling)

Các dữ liệu được giửi đi là những cấu trúc dữ liệu hay toàn bộ một bản ghi

Sự thay đổi trong cấu trúc dữ liệu sẽ tác động lên mọi module sử dụng nó, chúng phụ thuộc nhau nhiều hơn

Tôi thấy một ví vụ ở [8’’], Dữ liệu ở bảng cập nhật phòng bệnh cho phép đọc dữ liệu từ bảng DanhMucPhongBenh và đồng thời dữ liệu ở của nó mới cập

Trang 14

Private Sub Button2_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Loop While frm.Visible = True

Dim h As New DataSet

Query("SELECT maPB,tenPB,status FROM bv_PHONGBENH", h, "a") DG.DataSource = h.Tables("a")

End Sub

Procedure InHoSo

BeginHienThiTen(ten, i );

End;

nhật được giửi qua Bảng DanhMucPhongBenh Như ở nút sửa của bảng capnhatphongbenh :

Theo [4] thì mức ghép nối này cũng được đánh giá là loại ghép nối tốt

d Ghép nối điều khiển (control coupling)

Việc xảy ra khi các module trao đổi thông tin điều khiển

Khi tham khảo ví dụ trong [4], tôi đưa ra ví dụ như sau:

Ghép nối loại này thiết kế khó hiểu, khó sửa đổi, dễ nhầm

e Ghép nối chung (content coupling) Khi các module trao đổi dữ liệu thông qua biến tổng thể Khi đó lỗi từ vùng dữ liệu biến tổng thể có nguy cơ lan ra toàn hệ thống, từ đó khó có thể sử dụng lại các module

Procedure HienThiTen (In ten, i ); Begin

If i = 0 then write(‘bà ‘) Else write(‘ông ‘) ;

Writeln (ten ) ; End;

Trang 15

Loại này xảy ra khi một thành phần trực tiếp tham chiếu đến hoạt động của một thành phần khác Chẳng hạn ở các ngôn ngữ bậc thấp có sử dụng goto, lệnh cho phép thực hiện bước nhảy đến một nhãn nhất định trong chương trình

3 Tính hiểu được (Understandability):

Theo [1], tính hiểu được liên quan tới một số đặc trưng sau :

a Tính kết dính:

Ta có thể hiểu được một thành phần mà không cần tham khảo đến một thành phần khác Điều này tùy thuộc sự liên kết chặt chẽ giữa các phần tử của thành phần Chẳng hạn, tôi thấy trong đoạn:

Public Class Add_new_user

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Trang 16

MessageBox.Show("Mật khẩu và xác nhận lại mật khẩu phải trùng

nhau", "chú ý", MessageBoxButtons.OK, MessageBoxIcon.Warning)

Exit Sub

End If

If mhpwnvt(code.Text) <> "BB072496E32BA534B196192505E070F8" Then

MessageBox.Show("Mã bảo vệ không chính xác", "Không thể đăng kí", MessageBoxButtons.OK, MessageBoxIcon.Warning)

Exit Sub

End If

EXEC("INSERT INTO bv_users(username,password,decription)

VALUES('" & users.Text & "','" & mhpwnvt(Trim(pass.Text)) & "',N'" &

Private Sub Add_new_user_Load(ByVal sender As System.Object, ByVal e

As System.EventArgs) Handles MyBase.Load

Me.CenterToScreen()

End Sub

End Class

Theo [1], mọi tên được dùng trong thành phần đó đều phải có nghĩa Tên

có nghĩa là tên phản ánh các thực thể của thế giới thực được mô tả trong thành phần đó Chẳng hạn, tôi thấy ở đoạn code Class Add_new_user trên

Qua đặt tên class, tên biến theo tiếng anh tôi hiểu

Add_new_user : thêm người dùng mới

Ngày đăng: 18/10/2014, 11:07

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w