I. Giới
thiệu chung về Công nghệ phần mềm
1. Khái niệm phần mềm,
Công nghệ phần mềm, nguyên nhân ra đời của Công nghệ phần mềm?
a, khái niệm phần
mềm
- Phần
mềm máy tính là sản phẩm do kỹ sư phần mềm thiết kế và xây dựng, bao gồm các yếu
tố sau:
+ Các chương
trình máy tính (các tập lệnh) cung cấp các chức năng mong muốn cụ thể nào đó,
+ Các cấu trúc
dữ liệu trợ giúp chương trình thao tác với thông tin, và
+ Các tài liệu
mô tả hoạt động cũng như sử dụng chương trình.
- Phần mềm
là đối tượng logic, không giống như là phần cứng:
+ Việc phát triển phần mềm không theo cách thức truyền thống của
sản phẩm
+ Phần mềm không bị hỏng hóc theo thời gian
+ “Custom-built”
b, khái niệm công nghệ phần mềm
- Công nghệ phần mềm là một lĩnh vực nghiên cứu của tin học nhằm đưa ra các nguyên lý, phương pháp, công cụ, phương tiện
giúp cho việc thiết kế và cài đặt một sản phẩm phần mềm đạt được các yêu cầu
sau một cách tốt nhất:
+ Phải có tính đúng đắn và khoa học.
+ Dễ tiếp cận và cải tiến.
+ Phổ dụng.
+ Độc lập với các thiết bị.
- Công nghệ phần mềm là sự thiết lập và sử dụng các nguyên lý
kỹ thuật đúng đắn để xây dựng các phần mềm một cách kinh tế, tin cậy, và có thể
làm việc trên mọi máy tính
c,
nguyên nhân ra đời của Công nghệ phần mềm
Vào những năm 1950 khi mt
ra đời chính thức (k chỉ đc dùng trong các phòng thí nghiệm mà bắt
đầu ứng dụng trong các hđ xã hội) các pm đầu tiên cũng đc ra đời với
số lượng còn rất ít ỏi và chủ yếu phục vụ cho lĩnh vực tính toán
(đặc biệt trong quốc phòng).
Đến những năm 1960, trải qua 10 năm phát triển số
lượng các pm đã tăng lên rất nhiều và đc ứng dụng rất rộng rãi trong
nhiều lĩnh vực. Vào thời điểm này phát sinh 1 số vấn đề mà các
chuyên gia gọi là “cuộ khủng hoảng pm”. Cuộc khủng hoảng pm thể hiện
2 yếu tố chính:
- số lượng các pm tăng
vọt (do sự phát triển của phần cứng: tăng khả năng, giá thành hạ).
- có quá nhiều khuyết
điểm trong các pm đc dùng trong xã hội:
+ thực hiện k đúng yêu
cầu (tính toán sai, k ổn đinh, …)
+ thời gian bảo trì, nâng
cấp quá lâu, tốn chi phí cao, hiệu quả thấp.
+ khó sử dụng.
+ thực hiện chậm.
+ khó chuyển đổi dữ
liệu giữa các pm.
Để giải quyết vấn đề trên, 1 hội nghị đã đc triệu
tập để bàn về cách giải quyết. Hội nghị đã tiến hành xem xét, phân
tích và xác định nguyên nhân gây ra cuộc khủng hoảng pm. Kết luận như
sau:
- việc tăng vọt của số
lượng pm là điều hợp lý và điều này sẽ còn tiếp diễn.
- các khuyết điểm của pm
có nguồn gốc chính từ phương pháp, cách thức tiến hành xd pm:
+ cảm tính: mỗi ng theo 1
phương pháp riêng.
+ thô sơ, đơn giản: chỉ
tập trung vào việc lập trình mà ít quan tâm đến các công việc cần
làm khác trc khi lập trình (khảo sát hiện trạng, phân tích yêu cầu,
thiết kế, …)
+ thủ công: công cụ hỗ
trợ chính khi xd pm chỉ là trình biên dịch.
Với các kết luận như trên, hội nghị đã đề xuất
khai sinh 1 ngành hc mới: công nghệ pm với nhiệm vụ chính là nghiên
cứu về các phương pháp tiến hành xd pm.
2. Phân loại phần
mềm?
- Nhóm chương trình dịch: mỗi một ngôn ngữ có một chương trình dịch riêng.
- Nhóm các chương trình hệ thống (bao gồm cả các phần mềm hđh): Gồm có những chương trình soạn thảo vb,
các chương trình đồ hoạ, hệ điều hành, …
- Nhóm các tiện ích và trò chơi: chương trình xử lí bảng tính điện tử, chương trình tìm và diệt
virus, tất cả các trò chơi.
- Nhóm các hệ quản trị CSDL
- Nhóm các chương trình ứng dụng có tính hệ thống:
+ Nhóm các
chương trình xử lí dữ liệu đa năng: Chương trình hệ chuyên gia, hệ mô phỏng, hệ
tự động thiết kế, dạy học và tự học.
+ Chương trình
xử lí nhận dạng, phân tích, tổng hợp tiếng nói, hình ảnh.
+ Tất cả những
chương trình điều khiển qui trình công nghiệp.
- Nhóm các phần mềm thời gian thực
- Nhóm các phần mềm nhúng
- Nhóm các phần mềm thông minh
3. Nội dung của
Công nghệ phần mềm?
- Tìm
hiểu yêu cầu của bài toán
- Đặc
tả
- Thiết
kế và lập trình
- Kiểm thử
- Quản lý chất lượng
- Quản lý quy trình
4. Các giai đoạn
phát triển phần mềm?
- Tìm hiểu nhu cầu của khách hàng: Đây
là giai đoạn đầu tiên và không thể thiếu được trong việc xây dựng phần mềm cho
một hệ thống nào đó. Sản phẩm phần mềm mà nhóm phát triển tạo ra suy cho đến
cùng thì phải đáp ứng được (có thể không phải là toàn bộ) nhu cầu của khách
hàng.
- Xác định rõ các chức năng: Chia ra từng
khối lớn tương đối độc lập và giao cho từng nhóm người thực hiện. Mỗi nhóm người
phải chụ trách nhiệm từ việc thiết kế - sản xuất - thử nghiệm theo một nguyên tắc
nhất định và một ngôn ngữ cùng với cơ sở dữ liệu thống nhất. Sau đó ghép nối
các khối thành khối lớn
- Sửa chữa và thử nghiệm nếu thấy cần
thiết: Đây là giai đoạn mang tính nội bộ của nhóm phát triển phần mềm. Hệ thống
có thể được chia thành nhiều phần nhỏ (module) rời rạc nhau. Do vậy khi xây dựng
xong chúng ta cần phải thử nghiệm cho từng module đó. Sau đó tiến hành tích hợp
các module lại để tạo thành hệ thống hoàn chỉnh. Việc kiểm thử tích hợp phải được
tiến hành. Các thay đổi có thể được thêm vào; các ý kiến đóng góp của khách
hàng cũng được ghi nhận và đưa vào trong phần mềm tại giai đoạn cuối cùng này.
- Bàn giao sản phẩm cho khách hàng, tìm
hiểu ý kiến của khách hàng để quyết định nhân bản nếu nó tốt hoặc là để sửa đổi.
Đào tạo người sử dụng : Trong quá trình từ khi tìm hiểu nhu cầu của khách
hàng cho đến khi hoàn thiện, trong thời kỳ trước kia, trung bình mỗi người
trong một ngày chỉ làm được 5 hoặc 6 lệnh. Khi đó có thể nói “Lập trình phần mềm
hết sức nặng nhọc”. Chính vì vậy người ta phải cố gắng sử dụng những chương
trình con (modul) chương trình của những người đi trước tạo ra (thường để trong
thư viện) và đồng thời người ta cũng tạo ra các modul thêm vào thư viện để người
khai thác có thể dùng.
* Các giai đoạn phát triển phần mềm nhìn một cách tổng
quan hơn:
- gđ xác định (Definition phase):
Xác định nội dung sẽ thực hiện (what)
- gđ phát triển (Development
phase): Xác định cách thức phát triển (how)
- gđ hỗ trợ (support phase): Hỗ trợ thay đổi có thể xảy ra và bảo trì hệ
thống
5. Các mô hình của
quy trình phát triển phần mềm, ưu nhược điểm?
a, Mô
hình thác nước
Là mô hình trải qua 4 giai đoạn tuần tự, kết thúc giai đoạn này
chuyển qua giai đoạn sau :
+ Giai đoạn xác định các yêu cầu của bài toán và đề tài.
+ Giai đoạn thiết kế.
+ Giai đoạn thử nghiệm.
+ Giai đoạn tổng hợp.
- Ưu điểm: Được sử dụng quen thuộc từ trước đến nay.
- Nhược điểm: Nhiều khi đến giai đoạn tích hợp thường xảy ra nhiều vấn đề trục trặc trong vấn đề ghép nối
+ Giai đoạn xác định các yêu cầu của bài toán và đề tài.
+ Giai đoạn thiết kế.
+ Giai đoạn thử nghiệm.
+ Giai đoạn tổng hợp.
- Ưu điểm: Được sử dụng quen thuộc từ trước đến nay.
- Nhược điểm: Nhiều khi đến giai đoạn tích hợp thường xảy ra nhiều vấn đề trục trặc trong vấn đề ghép nối
b, Mô
hình thăm dò
Phát triển càng nhanh càng
tốt các chức năng chính sau đó cải tiến hoàn chỉnh dần cho đến khi thảo mãn tất
cả yêu cầu của người sử dụng.
- Hạn chế: Thích hợp với những pm qui mô vừa và nhỏ.
c, Mô
hình tạo nguyên mẫu (Prototyping)
Tương tự như mô hình thăm
dò, lựa chọn nhanh những chức năng chính để phát triển sau đó đưa cho người sử
dụng đóng góp ý kiến, đưa người dùng dùng thử cho đến khi đạt yêu cầu.
- Ưu điểm: Không có giai đoạn tích hợp, người dùng được tiếp cận với hệ thống ngay từ những giai đoạn đầu để bổ sung hoàn thiện phần mềm theo đúng yêu cầu
d, Mô hình biến đổi hình thức
- Ưu điểm: Không có giai đoạn tích hợp, người dùng được tiếp cận với hệ thống ngay từ những giai đoạn đầu để bổ sung hoàn thiện phần mềm theo đúng yêu cầu
d, Mô hình biến đổi hình thức
Là mô hình mà người ta đặc
tả hệ thống dưới dạng tổng thể, khái quát rồi cụ thể hoá, chi tiết hoá dần đến
khi có thể chuyển thẳng sang một ngôn ngữ lập trình cụ thể nào đó.
- Ưu điểm:
+ Có thể áp dụng chứng minh tính đúng đắn của đặc tả
+ Chứng minh chương trình đáp ứng được yêu cầu của đặc tả đã cho
+ Chi phí đặc tả cao, nhưng chi phí sau đó lại nhỏ hơn nhiều so
với phương pháp khác
+ Dễ theo dõi các bước nhỏ trong quá trình chuyển đổi
- Nhược điểm:
+ Việc đặc tả đòi hỏi trình độ trừu tượng cao
+Việc chứng minh sự đúng đắn là khó khăn
+ Phương pháp này là tương đối khó
e. Mô hình tập hợp các thành phần dùng lại được
e. Mô hình tập hợp các thành phần dùng lại được
Là mô hình thực hiện với
những phần mềm đã có sẵn được sử dụng từ trước đến nay. Có một số chức năng vẫn
được sử dụng tốt, một số chức năng đã trở lên lạc hậu. Người ta xây dựng phần mềm
mới bằng cách thu lượm tất cả các chức năng modul còn sử dụng được của phần mềm
trước và thêm vào những chức năng mới cho đến khi thỏa mãn yêu cầu.
- Ưu điểm: Tiết kiệm thời gian, công sức sản xuất ra những cái có rồi.
- Nhược điểm: Tuỳ từng trường hợp, hạn chế trong ngôn ngữ sử dụng.
- Ưu điểm: Tiết kiệm thời gian, công sức sản xuất ra những cái có rồi.
- Nhược điểm: Tuỳ từng trường hợp, hạn chế trong ngôn ngữ sử dụng.
6. Các CASE tools?
- Soạn thảo biểu đồ
- Công cụ phân tích mô
hình và kiểm tra
- Ngôn ngữ truy vấn
- Công cụ tạo và định
nghĩa báo cáo
- Công cụ định nghĩa
form
- Bộ dịch
- Công cụ tạo mã lệnh
tự động
II. Phân tích yêu cầu phần mềm và đặc tả hệ thống
1. Khái niệm yêu cầu
phần mềm, phân loại?
a,
Khái niệm yêu cầu phần mềm
- Yêu cầu hệ thống là các mô tả dịch
vụ được cung cấp bởi hệ thống và các ràng buộc khi vận hành (operational
constraints).
- Thể hiện nhu cầu của người sử dụng
đối với hệ thống.
b, phân loại yêu cầu
Có 2 loại yêu cầu chính:
* Yêu cầu
chức năng: các chức năng
của pm là các công việc khi đc thực hiện trên mt bằng pm. Yêu cầu chức
năng là danh sách các công việc sẽ đc thực hiện trên mt cùng với các
thông tin mô tả tương ứng. Đc chia thành 2 loại (theo ý nghĩa sd):
- Yêu cầu chức năng nghiệp vụ: các chức năng
của pm tương ứng với công việc có thật trong thế giới thực. Có 4
loại chức năng chính ứng với 4 loại nghiệp vụ thông dụng nhất trong
các lĩnh vực.
+ Chức năng lưu trữ: tương ứng với công việc ghi
chép thông tin trên sổ sách (theo các quy định cần kiểm tra khi ghi
chép).
+ Chức năng tra cứu: tương ứng với công việc tìm
kiếm và xem thông tin tương ứng, theo dõi hoạt động.
+ Chức năng tính toán: tương ứng với các công
việc tính toán (theo quy định công thức cho trước).
+ Chức năng kết xuất: tương ứng với các công
việc viết các báo cáo (theo biểu mẫu cho trước).
- Yêu cầu chức năng hệ thống: đó là các
chức năng phần mềm phải phát sinh thêm khi tiến hành công việc trên mt
thay vì trong thế giới thực, or các chức năng không tương ứng với bất
kỳ công việc nào hiện tại trong thế giới thực (có nhu cầu nhưng không
thể thực hiện bằng thủ công). Một số chức năng hệ thống thông dụng
như sau:
+ phân quyền sd giữa các loại ng dùng.
+ sao lưu (backup), phục hồi thông tin (restore).
+ định cấu hình thiết bị, ngày giờ làm việc,
…
+ mô phỏng hoạt động thế giới thực.
+ báo động nhắc nhở ng dùng.
* Yêu cầu
phi chức năng: các yc về chất
lượng pm. Các yc này đc phân thành các loại theo các tính chất liên
quan đến chất lượng pm như:
- tính tiến hóa: cho phép ng dùng thay đổi lại
mô tả liên quan đến 1 yc chức năng nào đó.
- tính tiện dụng: đây là các yc liên quan đến
hình thức giao diện của pm (hình thức trình bày trong quá trình sd
các chức năng).
- tính hiệu quả: yc này quy định thời gian thực
hiện các chức năng or giới hạn dung lượng lưu trữ (với số lượng cho
trước).
- tính tương thích: đây là các yc liên quan đến
việc chuyển đổi dữ liệu giữa pm đang xét và pm khác.
Ngoài ra còn có các ràng buộc trên việc thực
hiện các yc chức năng như:
+ ràng buộc về môi trg khai thác: yc về phần
cứng, chạy trên môi trg nào, …
+ tài liệu chương trình: tài liệu hướng dẫn sd,
tài liệu hướng dẫn cài đặt, …
+ công tác huấn luyện sd pm.
+ an toàn và bảo mật.
+ xử lý lỗi: dự kiến 1 số lỗi có thể xảy ra
-> ng xd pm sẽ quy định cách thức xử lý lỗi.
2. Các kỹ thuật đặc
tả yêu cầu phần mềm?
- Đặc tả bằng ngôn ngữ tự nhiên
- Đặc tả bằng
ngôn ngữ hướng cấu trúc
+ Sử dụng ngôn ngữ hướng cấu trúc sẽ yêu
cầu người viết đặc tả tuân theo những mẫu được định nghĩa trước. Tất cả các yêu
cầu đều được viết theo chuẩn và các thuật ngữ được sử dụng có thể bị hạn chế.
+ Ưu điểm của phương pháp này là đạt được
mức độ diễn tả cao nhất của ngôn ngữ tự nhiên nhưng mức độ đồng nhất lại bị lạm
dụng trong các đặc tả.
- Đặc tả dựa
vào biểu mẫu
+ Định nghĩa các chức năng hoặc thực thể,
mô tả đầu vào và nơi xuất phát của nó, mô tả đầu ra và nơi nó sẽ đến.
+ Chỉ rõ những thực thể cần thiết, các điều
kiện trước và sau (nếu thích hợp), các ảnh hưởng của chức năng.
- Biểu đồ
trình tự
+ Biểu đồ trình tự biểu diễn trình tự các
sự kiện xảy ra khi người sử dụng tương tác với hệ thống.
+ Nếu ta đọc biểu đồ này từ đầu đến cuối
thì ta sẽ thấy được thứ tự của các hành động được thực hiện.
3. Quy trình xác định
yêu cầu?
Gồm
4 giai đoạn chính:
- Nghiên cứu tính khả thi
(Feasibility study):
+ Liệu hệ thống đóng góp vào mục tiêu
chung của toàn cơ quan?
+ Hệ thống có thể triển khai được sử dụng
công nghệ hiện tại, với một giới hạn về chi phí và lịch trình?
+ Sự tích hợp của hệ thống?
+ Cần đưa ra phương án phát triển và luận
chứng sự khả thi
+ Thực hiện công việc này sẽ quyết định
đưa ra một hệ thống đáp ứng được yêu cầu của khách hàng ->có tính khả thi
cao nhất
+ Việc thực hiện công việc này phải nhanh
và rẻ
+ Quyết định có tiếp tục phát triển theo
phương án đó không
+ Chỉ khi dự án khả thi được chấp nhận,
quá trình triển khai mới được bắt đầu
+ Nên phân loại phương án: phương án thấp,
phương án trung bình, phương án cao
+ Phân tích khả thi thường tập trung vào
các mặt:
Khả thi về kinh tế: chi phí và hiệu quả,
lợi ích cuối
Khả thi về kỹ thuật: khả năng đáp ứng của
kỹ thuật
Khả thi về pháp lý: loại trừ sự vi phạm,
xâm phạm
Khả thi về hoạt động: vận hành trong môi
trường cụ thể
Khả thi về thời gian: thời gian hoàn thành
- Phát hiện và phân tích yêu cầu
(Requirements elicitation and analysis):
+ Là bước khảo sát yêu cầu của khách hàng
và người sử dụng về miền ứng dụng -> Phân tích thành tài liệu xác định các
yêu cầu. Tài liệu phải phản ánh được mong muốn của khách hàng, được viết sao
cho mọi người đều hiểu được
+ Phải chú ý cả những đối tượng khác nhau
liên quan đến hệ thống như các kỹ sư, người quản lý nghiệp vụ, chuyên gia
+ Giai đoạn này bao gồm cả việc phát triển
thử nghiệm một hay nhiều mô hình hệ thống khác nhau. Việc làm bản mẫu hệ thống
có thể được thực hiện trong giai đoạn này
+ Quá trình này thường gặp khó khăn vì:
Người sử dụng (hoặc liên quan – stakeholders) không biết thực sự cần gì từ hệ
thống, thường trình bày theo cách riêng, có nhiều người có các yêu cầu khác và
giống nhau. Có thể bị ảnh hưởng bởi yếu tố chính trị do hoàn cảnh cụ thể của
các tổ chức. Môi trường kinh doanh biến động, thường xuất hiện các yêu cầu mới
mà không dự báo trước. Một số yêu cầu không thể định nghĩa được, không có công
thức trước
+ Tiến trình này được bắt đầu bằng việc
tìm hiểu lĩnh vực ứng dụng và kết thúc bằng việc thẩm định yêu cầu.
- Đặc tả yêu cầu (Requirement
Specification):
+ Mô tả chính xác và chi tiết yêu cầu của
hệ thống để làm cơ sở cho giao kèo giữa khách hàng và người phát triển hệ thống
+ Thường phải sử dụng những công cụ đặc
biệt
+ Việc lập tài liệu này thường được tiến
hành song song với các thiết kế ở mức cao (thiết kế sơ bộ)
+ Khi viết tài liệu đặc tả, các sai sót
trong xác định yêu cầu sẽ được phát hiện và sửa chữa.
- Thẩm định yêu cầu (Requirement Validation):
+ Là việc xem xét các đặc tả yêu cầu có
mô tả chính xác những gì đặt ra trong hệ thống có thể thực hiện được không?
+ Các lỗi trong tài liệu yêu cầu có thể dẫn
tới rất nhiều công việc làm lại trong quá trình phát triển cũng như trong quá
trình phần mềm được đưa vào sử dụng
4.
Cần
làm gì khi nghiên cứu tính khả thi của phần mềm?
- Liệu hệ thống đóng góp vào mục tiêu
chung của toàn cơ quan?
- Hệ thống có thể triển khai được sử dụng
công nghệ hiện tại, với một giới hạn về chi phí và lịch trình?
- Sự tích hợp của hệ thống?
- Cần đưa ra phương án phát triển và luận
chứng sự khả thi
- Thực hiện công việc này sẽ quyết định
đưa ra một hệ thống đáp ứng được yêu cầu của khách hàng ->có tính khả thi
cao nhất
- Việc thực hiện công việc này phải nhanh
và rẻ
- Quyết định có tiếp tục phát triển theo
phương án đó không
- Chỉ khi dự án khả thi được chấp nhận,
quá trình triển khai mới được bắt đầu
- Nên phân loại phương án: phương án thấp,
phương án trung bình, phương án cao
- Phân tích khả thi thường tập trung vào
các mặt:
+ Khả thi về kinh tế: chi phí và hiệu quả,
lợi ích cuối
+ Khả thi về kỹ thuật: khả năng đáp ứng của
kỹ thuật
+ Khả thi về pháp lý: loại trừ sự vi phạm,
xâm phạm
+ Khả thi về hoạt động: vận hành trong
môi trường cụ thể
+ Khả thi về thời gian: thời gian hoàn
thành
5. Cần làm gì
trong thẩm định yêu cầu?
- Là việc xem xét các đặc tả yêu cầu có
mô tả chính xác những gì đặt ra trong hệ thống có thể thực hiện được không?
- Các lỗi trong tài liệu yêu cầu có thể dẫn
tới rất nhiều công việc làm lại trong quá trình phát triển cũng như trong quá
trình phần mềm được đưa vào sử dụng
6. Các kỹ thuật
phân tích và xác định yêu cầu?
-
Tiếp cận định hướng cách nhìn:
+ Ghi nhận những cách nhìn khác nhau của
những người liên quan và sử dụng nó vào tiến trình phát hiện yêu cầu và tổ chức
các yêu cầu
+ Các góc độ khác nhau có thể được xem
xét:
Từ
nguồn hay đích tới của dữ liệu
Từ
khung làm việc
Từ
sự tiếp nhận dịch vụ
+ Xác định yêu cầu định hướng
cách nhìn gồm 4 giai đoạn cơ bản:
Xác
định viewpoint
Cấu
trúc viewpoint
Làm
tài liệu viewpoint
Ánh
xạ hệ thống viewpoint
- Kỹ thuật phân tích yêu cầu dựa trên mô hình:
+ Được sử dụng rộng rãi để phân tích yêu
cầu
+ Kỹ thuật này đi theo 2 hướng tiếp cận:
Tiếp cận định hướng chức năng (Hướng cấu
trúc dựa trên luồng dữ liệu)
Tiếp cận hướng đối tượng
+ Tập trung hướng vào mô tả nghiệp vụ của
hệ thống thực, kết quả thu được là MÔ HÌNH NGHIỆP VỤ
+ Mô hình nghiệp vụ theo phương pháp này
gồm:
Mô hình ngữ cảnh: Mô tả hệ thống được xét
trong môi trường của nó
Các mô hình cấu trúc chức năng mô tả cấu
trúc chức năng của hệ thống
Mô tả chi tiết các chức năng: cho đến mức
thấp nhất
Mô tả các đối tượng dữ liệu: Theo hướng cấu
trúc là bao gồm tất cả các hồ sơ và bản mẫu, theo HĐT gồm các đối tượng và khái
niệm của thế giới thực
Mô tả các mối liên kết của dữ liệu và chức
năng – chỉ cần thiết với cách tiếp cận hướng cấu trúc
Từ điển giải thích
- Kỹ thuật phân tích hình thức hoá :
+ Dựa trên việc sử dụng các khái niệm, ký
pháp và mô hình toán học để phân tích và biểu diễn hệ thống
+ Phân tích sẽ không tách thành mô hình
riêng. Kết quả của việc phân tích và mô hình hóa cho ta ngay đặc tả của hệ thống.
7. Các kỹ thuật và
phương pháp hỗ trợ phân tích yêu cầu?
- Các
mô hình hệ thống: Phương pháp biểu diễn yêu cầu hệ thống
một cách có kỹ thuật (thay vì văn bản dạng text)
- Use
Case (UC):
+ UC chỉ ra chức năng của một hệ thống bằng
cách mô tả hành vi của hệ thống (nghĩa là tương tác giữa người sử dụng và hệ thống).
+ UC có thể được sử dụng để mô tả hành vi
của hệ thống phần mềm.
+ Các khái niệm cơ bản trong UC:
Actor: Nhân vật sự dụng hệ thống để đạt
được một mục đích nào đó.
Primary actor là nhân vật chính khởi tạo
một UC.
Hoạt cảnh (Scenario): Tập hợp các hành động
nhằm đạt được mục đích
- Data
Flow Diagram (DFD):
+ DFD phổ biến trong phân tích bài toán.
+ DFD thể hiện dòng dữ liệu trong một hệ
thống. DFD coi hệ thống như là một hàm chuyển dữ liệu đầu vào thành dữ liệu đầu
ra.
+ DFD biểu diễn sự di chuyển dữ liệu giữa
các tiến trình xử lý dữ liệu.
+ Ký hiệu trong DFD:
Tiến trình : Đường tròn
Dòng dữ liệu là đường cong có mũi tên
Hình chữ nhật là nguồn sinh hay tiêu thụ
dữ liệu
Sự cần thiết nhiều dòng dữ liệu được biểu
dễn bởi “*” đặt giữa hai dòng (AND).Nghĩa là cả hai dòng đều cần thiết.
Tương tự, kí hiệu “+” dùng cho phép toán OR.
- Các
mô hình khác:
+ Mô hình ER cho phân tích dữ liệu
+ Mô hình đối tượng cho phân tích dự liệu
III. Kiến
trúc phần mềm
1. Khái niệm kiến trúc phần
mềm, thiết kế kiến trúc phần mềm?
- Kiến trúc phần
mềm (Software
Architecture) <-> một cấu trúc phần mềm và qua đó cung cấp một sự
tích hợp chặt về mặt khái niệm của hệ thống
- Qui trình thiết kế các hệ thống con cũng
như mô hình điều khiển/giao tiếp giữa các hệ thống con <-> architectural
design. Kết quả của qui
trình thiết kế này chính là software architecture.
- Kiến trúc phần mềm của một hệ thống bao gồm
các thành phần phần mềm, các thuộc tính của chúng cũng như mối quan hệ giữa các
thành phần.
2. Vai trò của kiến trúc
phần mềm?
- Có vai trò quan trọng trong p/triển PM:
+ Công cụ giao tiếp
giữa những người liên quan (understanding and communication): Tài liệu mô tả kiến trúc sẽ đựoc sử dụng
bởi nhiều thành viên liên quan tới dự án phần mềm
+ Để phân tích hệ
thống/xây dựng hệ thống: Kiến trúc phần mềm có thể được sử dụng để chỉ ra/dự đoán các thuộc
tính của hệ thống. Ngoài ra nếu kiến trúc phần mềm có phân hoạch tốt, thì việc
sử dụng phân hoạch để phát triển các chức năng dễ dàng hơn.
+ Sử dụng lại ở
quy mô lớn:
Chúng ta có xu hướng sử dụng lại các phần của phần mềm, do đó, kiến trúc là thông
thông tin quan trọng trong việc hiểu biết các phần của phần mềm.
- Kiến trúc không phải là thành phần hoạt động
nhưng nó có tác động sâu rộng đến quá trình phát triển PM, nó là một lọat mô tả
PM mà cho phép các kỹ sư PM thực hiện công việc:
+ Tăng cường hiểu biết về hệ thống cần xây
dựng
+ Phân tích hiệu quả
+ Xem xét, sửa đổi kiến trúc từ sớm, giảm rủi
ro
3. Các mô hình kiến trúc
phần mềm chủ yếu?
Có nhiều mô hình khác nhau, thường được
nhìn nhận dưới một số mặt:
- Mô hình kiến trúc tĩnh – các hệ con hay
các thành phần được phát triển độc lập
- Mô hình tiến trình động- hệ thống được tổ
chức thành các tiến trình vận hành
- Mô hình giao diện – xác định giao diện
đưa ra các dịch vụ
- Mô hình liên kết – chỉ ra mối liên kết giữa
các hệ con hay giữa các thành phần
- Mô hình phân tán
*
Cách nhìn khác:
- Mô
hình Module:
+ Hệ thống được coi như là tập hợp các đơn
vị mã. Mỗi đơn vị sẽ đảm nhiệm một vài phần chức năng -> Kiến trúc tĩnh
+ Ví dụ: Package, classes,…
- Mô hình cấp phát: Mô hình xác định cách các đơn vị phần mềm
được cấp phát cho các đơn vị phần cứng.
- Mô
hình C&C:
+ Mô hình là tập hợp các thực thể
runtime -> Kiến trúc liên kết
+ Ví dụ: Tập hợp các đối tượng
+ Connector cung cấp mối liên hệ giữa các
thành phần
+ Đây là mô hình phổ biến nhất
4. Mối quan hệ với các yếu
tố chất lượng, các yêu cầu phi chức năng của phần mềm?
- Kiến trúc phần mềm có ảnh hưởng lớn tới
các đặc tính chất lượng phi chức năng như: hiệu suất, độ tin cậy, độ an toàn,
vv…
- Chúng ta sẽ sự dụng những đặc tính này để
đánh giá kiến trúc
+ Dùng các phương pháp hình thức
+ Dùng phương pháp thủ tục lấy ý kiến từ
phía stakeholders
- Mối quan hệ
với các yêu cầu chất lượng:
+ vẫn đảm bảo
tính đúng đắn nhưng thỏa mãn thêm các yêu cầu khác (tiến hóa, tốc
độ nhanh, lưu trữ tối ưu).
+ cần chú ý
đảm bảo tính đúng đắn khi cải tiến sơ đồ logic.
5. Tài liệu kiến trúc phần
mềm có những nội dung gì?
Bao gồm:
+ Ngữ cảnh hệ thống: nhận dạng các stakeholders và các mối quan tâm
của họ;
+ Mô tả mô hình kiến trúc;
+ Các cách nhìn nhận khác nhau.
IV. Thiết
kế hệ thống phần mềm
1. Khái niệm thiết kế, vai
trò của thiết kế?
*
Khái
niệm thiết kế:
- Hoạt động thiết kế sẽ được thực hiện sau
khi tài liệu yêu cầu được xác định.
- Là quá trình chuyển hóa các đặc tả yêu cầu
phần mềm thành một biểu diễn thiết kế của hệ thống phần mềm cần xây dựng, sao
cho người lập trình có thể ánh xạ nó thành một chương trình.
- Mục đích: Tạo ra bản thiết kế đúng
- Một số hoạt động chính:
+ Nghiên cứu để hiểu vấn đề
+ Chọn một số giải pháp thiết kế và xác định
các đặc điểm thô của nó
+ Mô tả trừu tượng cho mỗi giải pháp thiết
kế, các sai sót cần phát hiện và chỉnh sửa trước khi lập tài liệu thiết kế
chính thức.
* Vai trò của thiết kế:
- Là cách duy nhất để 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 mô hình thiết kế hệ thống phần mềm
cuối cùng làm cơ sở cho việc triển khai chương trình của phần mềm
- Là công cụ giao tiếp giữa các nhóm cùng
tham gia phát triểm phần mềm, quản lý rủi ro, đạt được phần mềm hiệu quả
- Là tài liệu cung cấp đầy đủ các thông tin
cần thiết cho để bảo trì hệ thống
- Nếu không có thiết kế thì hệ thống không
tin cậy -> nguy cơ thất bại cao. Thiết kế tốt là chìa khóa làm cho phần mềm
hữu hiệu.
2. Các bước cần trải qua
trong giai đoạn thiết kế?
- Thiết kế kiến trúc: Xác định các hệ con tạo
nên hệ thống tổng thể và mối quan hệ giữa chúng
- Đặc tả trừu tượng: Mô tả trừu tượng các dịch
vụ của hệ con
- Thiết kế giao diện thành phần
- Thiết kế hệ thống giao diện người dùng
- Thiết kế các thành phần
- Thiết kế cấu trúc dữ liệu
- Thiết kế thủ tục (thuật toán): Stepwise
refinement
3. Các nguyên lý thiết kế?
- Cần tính đến mọi cách tiếp cận khác nhau
thay vì 1 cách
- Có thể lần vết trở lại mô hình hay bước
trước đó
- Không nên giải quyết vấn đề đã được giải
quyết mà nên sử dụng lại
- Phải rút ngắn khoảng cách phần mềm và vấn
đề tồn tại hệ thực
- Thể hiện được tính nhất quán và tích hợp
- Cần được cấu trúc để dễ thay đổi
- Thiết kế không phải là mã hóa và ngược lại
- Cần được theo dõi ngay từ đầu để tránh lỗi
- Cần được đánh giá và rà soát chất lượng
4. Thế nào là một thiết kế
tốt?
- Thiết kế phần mềm được gọi là tốt nếu nó
sản sinh ra một chương trình hiệu quả. Càng chặt chẽ, gọn ngà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.
- Các giải pháp
cho một thiết kế tốt: Một thiết kế sẽ tốt nếu thực hiện đúng tiến trình thiết kế phần mềm
thông qua việc áp dụng các nguyên lý thiết kế cơ bản, các phương pháp luận hệ
thống, các công cụ trợ giúp và việc xét duyệt nghiêm túc.
5. Phương pháp thiết kế hướng
cấu trúc?
- Hệ thống được phân chia thành các chức năng, bắt đầu ở mức cao nhất,
và được làm mịn dần
- Thường có 2 hoạt động độc lập: thiết kế dữ liệu và thiết kế xử lý
- 3 cấu trúc chuẩn là Tuần tự, chọn và lặp
* Thiết kế dữ liệu hướng cấu trúc:
- Gồm 2 bước: Thiết kế dữ liệu logic và thiết kế CSDL vật lý
- Thiết kế dữ liệu logic: Đầu vào của bước này là mô hình thực thể
quan hệ, được mô tả
- Thiết kế CSDL vật lý: Thực hiện trên cơ sở mô hình quan hệ nhận
được, lựa chọn hệ quản trị CSDL tiến hành phi chuẩn hóa, thiết kế tệp
* Thiết kế xử lý:
- Gồm 2 bước: thiết kế xử lý logic &
thiết kế kiến trúc modul
- Thiết kế xử lý logic: Xuất phát từ luồng dữ liệu vật lý, bỏ đi các
y/tố vật lý và cấu trúc lại để mô hình vẫn đảm bảo thực hiện đúng các chức năng
- Thiết kế kiến trúc module: Trước hết cần
xác định luồng hệ thống từ biểu đồ luồng dữ liệu bằng cách chọn các tiến trình
máy thực hiện và phương thức thực hiện
* Ưu
nhược điểm của phương pháp thiết kế dữ liệu hướng cấu trúc:
- Đã có thời gian phát triển lâu dài nên
các phương pháp và các công cụ cũng đã hoàn thiện
- Có các hệ quản trị CSDL mạnh: SQLServer,
Oracle trợ giúp việc lưu trữ và tự động hóa cao
- Thích hợp với các bài toán xử lý trên các
dữ liệu có thể mô tả ở dạng bảng
- Tuy nhiên hạn chế với các bài toán dữ liệu
đa dạng và đòi hỏi nhiều đối tượng tương tác với nhau
- Nếu hệ thống sử dụng CSDL dùng chung thì
khó sử dụng lại và sai sót ở một số bộ phận thì ảnh hưởng đến toàn hệ thống
* Các bước trong thiết kế hệ thống hướng cấu trúc:
- Phát biểu lại bài toán như một DFD
- Chỉ ra các thành phần dữ liệu vào/ra
- Phân chia mức cao
- Phân chia ở mức chi tiết
* Đánh giá phương pháp thiết kế hướng cấu trúc:
- Ưu điểm:
+ Quen thuộc.
+ Xây dựng hệ thống thông qua biểu đồ luồng
dữ liệu, mô tả việc biến đổi dữ liệu một cách logic. Đây là kết quả hợp nhất của
nhiều phương pháp diễn tả dữ liệu vào ra qua một dãy biến đổi. Ngoài ra người
ta còn phải xây dựng các bảng biểu dữ liệu, các mỗi liên kết cũng như lược đồ cấu
trúc để thể hiện cấu trúc của hệ thống.
- Nhược điểm:
+ Do chung nhau trạng thái hệ thống nên việc
thay đổi một chức năng nào đó thì sẽ ảnh hưởng đến các chức năng khác.
+ Phương pháp này chỉ được sử dụng tốt khi
các biến dùng chung, các trạng thái chung ít và phải được xác định một cách rõ
ràng.
6. Phương pháp thiết kế hướng
đối tượng?
- Hệ thống được nhìn nhận như một bộ các đối
tượng tương tác với nhau, đối tượng gồm dữ liệu + thao tác
- Một lớp được xác định = thuộc tính+phương
thức, có tính kế thừa cao
- Các đối tượng liên lạc với nhau bằng các
thông điệp
- Hiện nay đã có một số công cụ hỗ trợ mạnh.
* Khái niệm về Thiết kế hướng đối tượng:
- Là một phần của của chiến lược phát triển
định hướng đối tượng
- Đầu vào là các mô hình nhận được ở giai
đoạn phân tích
- Gồm các bước:
+ Xác định kiến trúc của hệ thống
+ Sắp thứ tự ưu tiên các gói
+ Với mỗi gói thiết kế ca sử dụng tương ứng
+ Xây dựng biểu đồ tương tác
+ Thiết kế chi tiết các lớp
+ Phân tích và hoàn thiện biểu đồ lớp dựa
trên mẫu thiết kế
* Ưu và nhược điểm của phương pháp:
- Dễ bảo trì, mọi thay đổi của đối tượng
không làm ảnh hưởng đến các đối tượng khác
- Các đối tượng có thể sử dụng lại được
- Có thể phản ánh được thế giới thực một
cách cụ thể
- Tuy nhiên có nhược điểm như: khó thực hiện
vì khó xác định đối tượng của hệ thống. Thường cách nhìn tự nhiên là nhìn chức
năng.
7. Cấu trúc của tài liệu đặc
tả thiết kế theo chuẩn IEEE 1016-1998?
- Introduction (giới
thiệu):
+ purpose (mục đích).
+ scope (phạm vi).
+ definitions, acronyms, and
abbreviations (định nghĩa, viết tắt).
- References (tham
khảo).
- Decomposition description
(mô tả phân rã).
- Dependency description (mô
tả phụ thuộc).
- Interface description (mô
tả giao diện).
- Detailed design (thiết
kế chi tiết).
V. Thiết
kế giao diện người dùng
1. Khái niệm và vai trò giao diện người
sử dụng?
- Khái niệm giao diện người dùng (User Interface –
UI): Là không gian, nơi mà sự tương tác giữa người sử dụng và máy tính được thực
hiện
- UID là thành phần quan trọng trong thiết kế phần mềm
- Yếu tố con người phải được coi trọng đặc biệt
(user-centric design)
+ Chúng ta có trí nhớ giới hạn
+ Chúng ta đều có thể có sai lầm trong thao tác với phần
mềm
+ Chúng ta có khả năng vật lý khác nhau: nghe nhìn, vv
+ Chúng ta có sở thích tương tác với phần mềm khác
nhau
- Người sử dụng thông thường đánh giá phần mềm
thông qua giao diện hơn là chức năng
- Giao diện tồi là nguyên nhân mà phần mềm không được
sử dụng
- Phần lớn là giao diện đồ họa, nói đến UID thường là
nói đến GUI design
3. Các nguyên tắc thiết kế
giao diện người sử dụng?
- Thân thiện người sử dụng:
+ Tránh áp đặt cách sử dụng cho người sử dụng
+ Sử dụng các khái niệm phổ biến
+ Gắn với môi trường làm việc cụ thể
- Thống nhất:
+ Định dạng thống nhất giữa các đối tượng
+ Thống nhất định dạng sẽ giúp cho việc giảm
thời gian học sử dụng phần mềm
+ Điều gi nếu một phần mềm khác sử dụng
“Ctrl+S” cho một chức năng khác thay vì SAVE?
- Ổn định: Giảm thiểu các hành động không mong đợi
khi người sử dụng thao tác với giao diện phần mềm
- Khắc phục sự cố:
+ Nên có câu hỏi khẳng định (confirm) những
hành động có thể gây ra sự mất mát
+ Cung cấp công cụ/thao tác undo
+ Điểm kiểm tra (checkpointing): cho phép
ghi lại công việc theo một chu kỳ nhất định
- Hướng dẫn:
+ Các hệ thống help
+ Thông tin help cần ngắn gọn xúc tích
- Đa dạng:
+ Tương tác với người sử dụng cần phải đa dạng
theo các thể loại người sử dụng.
+ Người sử dụng thông thường thì cần trợ
giúp nhiều hơn
+ Người sử dụng chuyên nghiệp thì cần
shortcuts nhiều hơn
4. Tiến trình thiết kế
giao diện người sử dụng?
- Tiến trình lặp (chi
tiết):
+ Bắt đầu với việc tạo ra
các mô hình khác nhau về chức năng hệ thống
+ Phác họa ra các nhiệm vụ
hướng con người và máy tính để đạt tới chức năng hệ thống
+ Xem xét các giải pháp t/kế
được áp dụng cho mọi t/kế giao diện
+ Sử dụng các công cụ làm bản
mẫu
+Cài đặt cho mô hình t/kế và
đánh giá kết quả về chất lượng
- Các hoạt động UID - tổng quát:
+ Phân tích người
sử dụng:
hiểu biết về nhiệm vụ của người sử dụng, môi trường làm việc,vv…
+ Xây dựng bản mẫu
hệ thống:
có thể trình bày với người sử dụng trước
+ Đánh giá giao diện: thông qua tương tác với người sử dụng
VI. Kỹ thuật lập trình
1. Đặc điểm của lập trình
cấu trúc?
- LTCT bắt đầu từ những năm 70 nhằm mục
đích tạo ra các code mà không có “goto”
- Ngoài ra, múc đích khác của LTCT là trợ
giúp quá trình quá trình kiểm chứng mã nguồn.
- Câu lệnh không chỉ đơn thuần là gán
- Ba cấu trúc lệnh cơ bản:
+ Selection: if B then S1 else S2 if B then S1
+ Iteration: While B do S hoặc repeat S until B
+ Sequencing: S1; S2; S3;...
- Luôn luôn có: Single-entry, single-exit
2. Đặc điểm của lập trình
hướng đối tượng?
- Là kĩ thuật lập trình hỗ
trợ công nghệ đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ
phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập
trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn. Ngoài ra,
nhiều người còn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập
trình hơn là các phương pháp trước đó.
- Một cách giản lược, đây
là khái niệm và là một nỗ lực nhằm giảm nhẹ các thao tác viết mã cho người lập
trình, cho phép họ tạo ra các ứng dụng mà các yếu tố bên ngoài có thể
tương tác với các chương trình đó giống như là tương tác với các đối tượng vật
lý.
- Những đối tượng trong một
ngôn ngữ OOP là các kết hợp giữa mã và dữ liệu mà chúng được nhìn nhận như là một
đơn vị duy nhất. Mỗi đối tượng có một tên riêng biệt và tất cả các tham chiếu đến
đối tượng đó được tiến hành qua tên của nó. Như vậy, mỗi đối tượng có khả năng
nhận vào các thông báo, xử lý dữ liệu (bên trong của nó), và gửi ra hay trả lời
đến các đối tượng khác hay đến môi trường.
- Ra đời từ những năm
1980.
3. Các nguyên lý lập
trình?
- Nhiệm vụ chính của lập trình viên là tạo
ra code với ít lỗi nhất với thời gian ít nhất.
- Kỹ năng lập trình thu nhận được thông qua
thực tế viết code.
- Lập trình tốt không phụ thuộc vào một
ngôn ngữ cụ thể
* Một số lưu ý thực
tế:
- Control Constructs: Sử dụng nhiều cấu trúc single-entry,
single-exit. Tăng cường sử dụng các cấu trúc chuẩn.
- Gotos: Không nên sử dụng các lệnh goto quá nhiều. Chỉ sử dụng trong các
trường hợp bất khả kháng.
- Che dấu thông tin: nên được sử dụng rộng rãi. Truy nhập
thông tin nên theo cơ chế hàm.
- Kiểu dữ liệu User-Defined: Nếu ngôn ngữ lập trình cho phép thì nên sử
dụng các kiểu dữ liệu tự định nghĩa.
- Lồng (Nesting): Nên tránh các Lặp sâu (deep nesting). For
example, consider the following construct of nested
+ if-then-elses:
·
if C1 then S1;
·
else if C2 then S2;
·
else if C3 then S3;
·
else if C4 then S4;
+ Nếu các điều kiện là không liên kết
disjoint thì ta nên:
·
if C1 then S1;
·
if C2 then S2;
·
if C3 then S3;
·
if C4 then S4;
- Module Size: Việc sử dụng hàm với nhiều tham số phải hết sức cẩn thận (>=
100). Kích thước lớn có thể làm cho việc quản lý kết dính và kết nối khó khăn.
- Module Interface: (rule of thumb), bất kỳ một giao diện
module mà có nhiều hơn 5 tham số thì phải đặc biệt cẩn thận và nên được chia
thành nhiều module nhỏ hơn.
- Side Effects: Hiện tượng thay đổi trạng thái chương trình mà không thay đổi giá
trị tham số. Thường xảy ra khi ta thay đổi biến toàn cục.
- Robustness: Xử lý tốt các điều kiện ngoại lệ.
- Switch Case with Default: Đảm bảo hành vi của chương trình ổn định.
- Empty Catch Block: nên có chặn bắt lỗi, tránh để trống.
- Empty if, while Statement: Không làm gì sau các câu lệnh if, while:
Nên tránh.
- Read Return to Be Checked: Giá trị trả về sau lệnh đọc nên được kiểm
tra
- Return from Finally Block: Không nên để return trong khối finally
- Correlated Parameters: Thông thường, sẽ tồn tại mối quan hệ giữa
các tham số.
- Trusted Data Sources: Kiểm tra dữ liệu nên được thực hiện trước
khi truy nhập chúng
- Give Importance to Exceptions: Chú trọng điều khiển ngoại lệ.
4. Cách phát triển mã nguồn
tăng dần?
- Hoạt động lập trình bắt đầu khi một số
thiết kế hoàn thành.
- Mỗi module sẽ do một hoặc nhiều lập trình
viên đảm nhiệm.
- Chính vì vậy mà nhu cầu quản lý qui trình
này là rất cao.
* Tiến trình tăng dần: Lập trình cho module, sau đó
kiểm thử, và sửa lỗi. Sau đó code được chuyển tải đến các bộ phận khác trong dự
án.
5. Cách quản lý mã nguồn?
- Xây dựng và quản lý Source Code:
+ Trong một dự án thường có nhiều nhóm người
khác nhau cùng tham gia phát triển code. Mỗi lập trình viên làm việc với một
file mã nguồn, những file này sẽ được biên dịch với nhau để tạo nên phần mềm.
+ Trong quá trình phát triển code, các lập
trình viên thường luôn thay đổi các file mã nguồn do họ tạo ra, cũng như những
file không do họ tạo ra.
+ Với mục đích kiểm soát tất cả các file mã
nguồn và quá trình thay đổi của chúng, các công cụ kiểm soát mã nguồn như CVS
trong Linux (www.cvshome.org) hay Visual Source Safe (VSS) trong Windows
(msdn.microsoft.com/vstudio/previous/ssafe) thường được sử dụng.
- Cách xử lý đụng chạm
khi lập trình nhóm:
+ Tạo một bản sao mã nguồn trên máy cá
nhân.
+ Thay đổi bản sao trên máy cá nhân.
+ Cập nhật, báo cáo.
- Cập nhật thay đổi
– refactoring: Thay đổi cấu trúc bên trong mà không làm thay đổi hành vi của phần
mềm
- Yếu tố dẫn đến
sự cần thiết sửa đổi:
+ Nhận bản code - Duplicate Code.
+ Tên Phương thức dài - Long Method.
+ Tên Lớp dài - Long Class.
+ Danh sách tham số dài - Long Parameter List.
+ Các câu lệnh Switch - Switch
Statements.
+ Tổng quát hóa - Speculative
Generality.
+ Quá nhiều kết nối - Too Much
Communication Between Objects.
+ Dây chuyền thông điệp - Message
Chaining.
6. Thanh tra mã nguồn?
- Thanh tra mã nguồn:
+ Thanh tra mã nguồn được thực hiện bởi người
lập trình và dành cho người lập trình.
+ Là một tiến trình với các qui định về vai
trò rõ ràng.
+ Trọng tâm tìm ra lỗi defects.
+ Dữ liệu thanh tra được ghi lại và dùng để
đánh giá mức độ hiệu quả của quá trình thanh tra
- Lập kế hoạch
thanh tra:
+ Mục tiêu của giai đoạn lập kế hoạch là để
chuẩn bị cho thanh tra.
+ Đội thanh tra được thành lập sẽ bao gồm
các lập trình viên mà code của họ đang cần xem xét.
+ Đội thanh tra nên bao gồm ít nhất ba người,
mặc dù đôi khi có bốn hoặc năm thành viên.
+ Đội thanh tra phải có một người phụ
trách.
- Họp kiểm tra
theo nhóm:
+ Nhằm đưa ra danh sách chung về các lỗi của
chương trình
+ Thảo luận về khả năng sửa chữa
- Phép đo đánh
giá mã nguồn:
+ Kích thước code: thường được dùng trong ước
lượng chi phí.
ü Phổ biến: Số dòng lệnh
ü Hạn chế: Phục thuộc vào ngôn ngữ
ü Phần lớn là sử dụng việc đếm dòng lệnh.
ü Tuy nhiên, hiện nay đã có mốt số phương
pháp ước lượng dựa trên số lượng toán tử và toán hạng
+ Độ phức tạp:
ü Số lượng cấu trúc thể hiện các nhánh của
FOC (follow of control),
ü Số lượng biến được sử dụng trong một
module – live variables
ü Độ sâu của nesting
VII. Thẩm định và xác minh phần mềm (Verification and Validation)
1. Khái niệm V&V, mục
đích, vai trò, tầm quan trọng?
*
Khái
niệm V&V:
- Verification –Xác minh:
+ "Are we building the product
right": Chúng ta có xây dựng phần mềm một cách đúng đắn hay không?
+ The software should conform to its
specification: Phần mềm cần tuân thủ các đặc tả
- Validation – Thẩm định:
+ "Are we building the right
product": Chúng ta có xây dựng đúng phần mềm được yêu cầu hay không?
+ The software should do what the user
really requires: Phần mềm cần tuân thủ các yêu cầu của người sử dụng.
- Thẩm định phần mềm: Là xem phần mềm cho kết
quả đúng hay không và có thỏa mãn yêu cầu của người sử dụng hay không.
- Xác minh phần mềm: Là xem sản phẩm có đúng là sản phẩm được yêu cầu không và chương
trình có đúng với đặc tả không.
- Thẩm định và xác minh phần mềm là 2 quá
trình liên tục, xuyên suốt từ lúc phân tích các yêu cầu của khách hàng cho đến
khi giao sản phẩm, với mục đích:
+ Xem hệ thống có đáp ứng yêu cầu của khách
hàng không, phát hiện lỗi của phần mềm.
* Mục đích của
V&V:
- Tạo sự tự tin về phần mềm sẽ đạt được mục tiêu đề ra.
- Điều này không có nghĩa là sẽ tạo ra phần mềm không
có lỗi chút nào.
- Kiểu sử dụng phần
mềm sẽ quyết định mức độ tự tin cần thiết.
2. Các thức tiến hành
V&V?
- Để thẩm định và xác minh phần mềm người
ta phải thử nghiệm (kiểm thử) hay thanh tra.
- Hai cách thức này thường có liên hệ với
nhau:
+ Thanh tra phần
mềm: Liên quan đến việc phân tích hệ thống trong trạng thái tĩnh (không chạy) để
phát hiện các vấn đề (Xác
minh tĩnh).
+ Kiểm thử phần mềm:
Liên quan đến việc cho chạy và quan sát hành vi của phần mềm (Xác minh động).
3. Xác minh tĩnh và động?
- Thanh tra phần
mềm: Liên quan đến việc phân tích hệ thống trong trạng thái tĩnh (không chạy) để
phát hiện các vấn đề (Xác
minh tĩnh)
+ Có thể sử dụng
các công cụ phân tích tài liệu và phân tích mã nguồn để hỗ trợ
- Kiểm thử
phần mềm: Liên quan đến việc cho chạy và quan sát hành vi của phần mềm (Xác
minh động).
+ Hệ thống được
cho chạy cùng với dữ liệu kiểm thử và hành vi của nó sẽ được quan sát
4. Thanh tra phần mềm?
- Liên quan đến việc kiểm tra mã nguồn để tìm ra các vấn
đề bất thường và khuyết tật
- Không yêu cầu chạy phần mềm trước và khi thanh tra
- Có thể tiến hành thanh tra mọi đối tượng cấu hình của
phần mềm (các bản đặc tả yêu cầu, thiết kế, dữ liệu test,…)
- Là một kỹ thuật hiệu quả để phát hiện ra lỗi
- Nhiều khuyết tật khác nhau có thể được phát hiện chỉ
bởi một lần thanh tra.
- Trong một lần kiểm thử, một khuyết tật có thể chưa
được phát hiện, vì vậy cần phải tiến hành nhiều lần
- Các lĩnh vực tái sử dụng và tri thức lập trình cho
phép phát hiện các loại lỗi thường hay xảy ra
5. Khái niệm phương pháp
hình thức?
VIII. Phương
pháp kiểm thử phần mềm
1. Khái niệm kiểm thử, mục
tiêu của kiểm thử?
* Khái niệm kiểm thử
:Kiểm thử phần mềm là hoạt
động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm trong đúng môi trường
chúng dự định sẽ được triển khai nhằm cung cấp cho người có lợi ích liên quan
những thông tin về chất lượng của sản phẩm hay dịch vụ phần mềm ấy. Mục đích của
kiểm thử phần mềm là tìm ra các lỗi hay khiếm khuyết phần mềm nhằm đảm bảo hiệu
quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau.
* Mục tiêu kiểm
thử:
- 3 mục tiêu:
+ Kiểm thử là một quá trình vận hành chương
trình để tìm ra lỗi.
+ Thiết kế các ca kiểm thử. Một ca kiểm thử
tốt là ca kiểm thử có xác suất cao trong việc tìm ra một lỗi chưa được phát hiện
+ Nghiên cứu thiết kế các ca kiểm thử thắng
lợi. Một ca kiểm thử thắng lợi là một ca kiểm thử làm lộ ra được ít nhất một lỗi
còn chưa được phát hiện
- Một ca kiểm thử thắng lợi làm lộ ra khiếm
khuyết, đồng thời mang lại các lợi ích phụ:
+ chứng tỏ rằng các chức năng phầm mềm làm
việc tương ứng với đặc tả,
+ chứng tỏ các yêu cầu thực thi là phù hợp
+ có thêm các chỉ số độ tin cậy phần mềm và
các chỉ số về chất lượng phần mềm nói chung
+ Kiểm thử không thể chứng minh được việc
không có khiếm khuyết, nó chỉ có thể chứng minh rằng khiếm khuyết phần mềm hiện
hữu
2. Quy trình kiểm thử?
- Hai lớp được cung cấp cho tiến trình kiểm
thử:
+ (1) Cấu hình phần mềm: Bản Đặc tả yêu
cầu phần mềm, bản Đặc tả thiết kế, chương trình gốc
+ (2) Cấu hình kiểm thử: Kế hoạch và thủ
tục kiểm thử, các công cụ kiểm thử dự định dùng, các ca kiểm thử cùng kết quả dự
kiến.
- Kiểm thử được tiến hành và tất cả các kết
quả được đánh giá bằng cách so sánh với kết quả dự kiến. Khi phát hiện lỗi, việc
gỡ lỗi bắt đầu được tiến hành.
- Tiến trình gỡ lỗi thường không dự kiến được
thời gian nên việc lập lịch kiểm thử trở nên khó khăn.
+ Ví dụ: 1 lỗi chỉ ra sự sai biệt độ 0.01%
giữa kết quả trông đợi và thực tại có thể mất 1 giờ, 1 ngày hay 1 tháng để chuẩn
đoán và sửa chữa.
- Khi các kết quả kiểm thử được thu thập và
đánh giá thì chất lượng và độ tin cậy phần mềm dần được khẳng định.
+ Nếu hay gặp phải lỗi nghiêm trọng yêu cầu
sửa đổi thết kế thì chất lượng và độ tin cậy là đáng ngờ và cần kiểm thử thêm.
- Mặt khác, nếu các chức năng phần mềm dường
như làm việc đúng và lỗi gặp phải là dễ sửa thì có thể rút ra một trong hai kết
luận:
+ (1) Chất lượng và độ tin cậy phần mềm chấp
nhận được
+ (2) Kiểm thử không tương xứng để làm lộ
ra những lỗi nghiêm trọng.
- Nếu việc kiểm thử không làm lộ ra lỗi nào
thì có thể hoài nghi rằng cấu hình kiểm thử chưa được cân nhắc đúng mức, các lỗi
vẫn còn ẩn núp trong phần mềm và sẽ bị phát hiện bởi người dùng.
3. Nguồn dữ liệu kiểm thử?
Dữ liệu vào
Dữ liệu của chương trình: số, xâu ký tự, tập tin,
Môi trường thử nghiệm: phần cứng, hệ điều hành,
Thứ tự thao tác (kiểm thử giao diện)
Dữ liệu của chương trình: số, xâu ký tự, tập tin,
Môi trường thử nghiệm: phần cứng, hệ điều hành,
Thứ tự thao tác (kiểm thử giao diện)
4. Khái niệm test case?
- Test Case là một cặp <input, expected outcome>
- Đối với
những hệ thống State-less (phi trạng thái): (ví dụ compiler là một hệ thống)
+ Test cases rất đơn giản: Outcome chỉ phụ thuộc
vào input hiện tại
- Đối với những hệ thống có trạng thái
State-oriented: Ví dụ như máy ATM
+ Test cases không đơn giản.
Một test case có thể bao gồm một chuỗi <input, expected outcome>
ü Outcome
phụ thuộc cả vào trạng thái hiện tại của hệ thống và input hiện tại
ü ATM
example:
< check balance, $500.00 >,
< withdraw, “amount?” >,
< $200.00, “$200.00” >,
< check balance, $300.00 >
* Test case
design:
- Liên quan đến việc thiết kế các test
cases (inputs và outputs) để kiểm thử hệ thống.
- Mục đích của thiết kế test case là để tạo
ra một tập hợp các bài test có hiệu quả trong thẩm định và kiểm tra khuyết tật.
- Các cách tiếp cận khi thiết kế test case:
+ Dựa trên yêu cầu (Requirements-based
testing);
+ Phân lớp (Partition testing);
+ Dựa vào cấu trúc (Structural testing).
5. Các phương pháp kiểm thử?
* Testing Levels:
- Component
testing (Unit testing):
+ Kiểm thử các từng
thành phần chương trình độc lập;
+ Thông thường
đây là trách nhiệm của các thành viên phát triển các thành phần (ngoại trừ một
số trường hợp hệ thống cực kỳ quan trọng);
+ Tests được tạo
ra từ kinh nghiệm của các thành viên phát triển.
- System
testing:
+ Kiểm thử các
nhóm thành phần chương trình được tích hợp với nhau để tạo ra các hệ thống hoặc
hệ thống con;
+ Là trách nhiệm
của một đội kiểm thử độc lập;
+ Tests được tạo
ra dựa trên đặc tả hệ thống.
* System testing:
- Liên quan đến việc tích hợp các thành phần
để tạo ra hệ thống hoặc hệ thống con.
- Có thể có sự tham gia của khách hàng
trong giai đoạn này.
- Hai phases:
+ Integration testing – Đội kiểm thử cần
truy cập đến mã nguồn hệ thống. Hệ thống được kiểm thử như các thành phần được
tích hợp với nhau.
+ Release testing – Đội kiểm thử kiểm thử hệ
thống như một hộp đen.
* Integration
testing:
- Liên quan đến
việc xây dựng hệ thống từ các thành phần của nó và kiểm thử để tìm các vấn đề
có thể phát sinh từ việc tích hợp.
- Top-down
integration: Phát triển bộ
khung của hệ thống và đưa vào đó các thành phần tương ứng.
- Bottom-up
integration: Tích hợp các
thành phần hạ tầng sau đó là các thành phần chức năng chính.
- Để đơn giản hóa
việc tìm ra vị trí lỗi, hệ thống nên được tích hợp dần dần.
* Testing
approaches của integration testing:
- Architectural
validation: Top-down integration testing tốt hơn để phát hiện ra các lỗi kiến
trúc hệ thống.
- System
demonstration: Top-down integration testing cho phép một sự trình diễn hữu hạn
hệ thống tại giai đoạn sớm trong quy trình phát triển.
- Test
implementation: Thường dễ dàng
hơn với bottom-up integration testing.
- Test
observation: Là vấn đề đối với
cả hai cách tiếp cận. Code bổ sung có thể được yêu cầu để thực hiện các tests.
* Release
testing:
- Là quá trình kiểm thử một phiên bản hệ thống
sẽ được bàn giao cho khách hàng.
- Mục tiêu chính là là tăng sự tự tin của
nhà cung cấp (nhà phát triển) về sự phù hợp của hệ thống với các yêu cầu của
nó.
- Release testing thường sử dụng phương
pháp black-box hoặc functional testing
+ Chỉ dựa trên đặc tả hệ thống;
+ Các Testers không cần biết về việc hệ thống
được hiện thực như thế nào.
* Testing levels (detailed):
- Unit testing: Kiểm thử các đơn vị
chương trình độc lập như các thủ tục, hàm, phương thức một cách riêng rẽ
- Integration testing: Kiểm thử việc ghép nối
các đơn vị chương trình
- System testing: Bao gồm một dải kiểm thử rộng như tính
chức năng, khả năng chịu tải
- Acceptance testing
+ Khách hàng kiểm tra những
kỳ vọng của mình về hệ thống
+ Hai loại acceptance
testing:
ü UAT (User
acceptance testing): Hệ
thống đáp ứng các tiêu chí của hợp đồng
BAT (Business
Acceptance Testing): Hệ
thống chưa, nhưng sẽ đáp ứng được user acceptance test
* Performance
testing:
- Một phần của release testing có thể liên
quan đến việc kiểm thử các tính chất quan trọng của hệ thống như hiệu suất và độ
tin cậy.
- Các tests hiệu suất thường liên quan đến
việc lập kế hoạch cho một loạt các bài kiểm tra khả năng chịu tải tăng dần cho
đến khi hệ thống không thể thực hiện được nữa.
* Stress testing:
- Là các thử nghiệm
hệ thống vượt quá khả năng chịu tải của nó. Việc thử nghiệm quá tải thường giúp
phát hiện các khuyết tật của hệ thống.
- Tập trung vào vấn đề hư hại của hệ thống.
Không có hệ thống nào không thể không hỏng. Stress testing kiểm
tra sự mất mát dịch vụ và dữ liệu không thể chấp nhận được (giới hạn mất mát dữ
liệu và dịch vụ).
- Stress testing
đặc biệt quan trọng đối với các hệ thống phân tán là những hệ thống dễ bị sụp đổ
nhanh chóng, ví dụ như một mạng khi bị quá tải.
IX. Quản
lý chất lượng phần mềm
1. Khái niệm chất lượng phần
mềm, đảm bảo chất lượng phần mềm?
- Khái niệm về chất
lượng phần mềm:
+ Từ điển American
Heritage định nghĩa chất lượng là "một đặc tính hoặc thuộc tính của một
cái gì đó"
+ Với quan niệm là một
thuộc tính của một mục, chất lượng đề cập đến đặc tính đo lường được - điều mà
chúng ta có thể so sánh với các đại lượng chuẩn được biết đến như chiều dài,
màu sắc, tính chất điện.
+ Tuy nhiên, phần mềm, được
biết rộng rãi là một thực thể trí tuệ, sẽ khó khăn hơn để định nghĩa chất lượng
so với các đối tượng vật lý.
+ Chất lượng phần mềm được
định nghĩa là: Sự phù hợp của phần mềm với các yêu cầu về chức năng, hiệu suất,
với các tiêu chuẩn phát triển được quy định rõ ràng bằng văn bản và phù hợp với
các đặc điểm ngầm định của tất cả các phần mềm được phát triển chuyên nghiệp.
- Software
quality management:
+ Quan tâm đến việc đảm bảo
mức độ yêu cầu về chất lượng được tuân thủ trong một sản phẩm phần mềm
+ Liên quan đến việc xác
định các tiêu chuẩn, các thủ tục chất lượng phù hợp và đảm bảo việc chúng được tuân thủ
+ Có mục đích để phát triển
một "văn hóa chất lượng", theo đó chất lượng được xem là trách nhiệm
của mọi người
- Đảm bảo chất lượng:
+ Đảm bảo chất lượng bao
gồm các chức năng kiểm toán và báo cáo về quản lý.
+ Mục tiêu của đảm bảo chất
lượng là cung cấp cho công việc quản lý các dữ liệu cần thiết để nhận được
thông tin về chất lượng sản phẩm, từ đó có cái nhìn sâu sắc và sự tự tin rằng
chất lượng sản phẩm đáp ứng các mục tiêu của nó.
+ Nếu dữ liệu được cung cấp
thông qua đảm bảo chất lượng chỉ ra các vấn đề, thì đó là trách nhiệm của ban
quản lý để giải quyết các vấn đề và áp dụng các nguồn lực cần thiết để giải quyết
các vấn đề chất lượng.
+ Thiết lập các thủ tục
cho tổ chức và thiết lập các tiêu chuẩn chất lượng
2. Những công việc chính
trong đảm bảo chất lượng phần mềm?
Đảm bảo chất lượng phần mềm bao gồm một
loạt nhiệm vụ liên quan tới 2 nhóm người:
- Các kỹ sư phần mềm, những người thực hiện
các công việc kỹ thuật;
- Nhóm SQA có trách nhiệm lập kế hoạch đảm
bảo chất lượng, giám sát, lưu trữ hồ sơ, phân tích, báo cáo.
* The SQA group:
+ Chuẩn bị kế hoạch SQA
cho một dự án.
+ Tham gia vào công việc
mô tả quá trình phần mềm của dự án.
+ Rà soát các hoạt động kỹ
nghệ phần mềm để xác minh tính phù hợp với quá trình phần mềm đã được xác định.
+ Kiểm toán các sản phẩm
phần mềm được chỉ định để xác minh sự tuân thủ với những quy định của chúng như
là một phần của quá trình phần mềm.
+ Đảm bảo rằng độ lệch giữa
các sản phẩm phần mềm thực tế và đặc tả được ghi chép và xử lý bằng văn bản.
+ Ghi chép lại mọi sự
không phù hợp và báo cáo cho người quản lý cấp cao hơn.
3. Các cuộc họp rà soát?
* Họp rà soát:
- Thành phần: Có từ 3 đến 5 người liên
quan tới việc rà soát, gồm có:
+ lãnh đạo rà soát
+ tất cả các cá nhân rà soát
+ người tạo ra sản phẩm được rà soát
- Thời gian:
+ Phải có sự chuẩn bị trước, tuy nhiên mỗi
người không quá 2 giờ chuẩn bị.
+ Cuộc họp nên ít hơn 2 giờ. Mỗi cuộc họp
rà soát chỉ hạn chế trong một phần nhỏ, cụ thể.
- Công việc cần làm:
+ Trọng tâm của các cuộc họp rà soát là về
sản phẩm: một thành phần (một thành phần của đặc tả yêu cầu, một thiết kế modul
chi tiết, một danh sách mã nguồn cho một modul)
+ Phải đưa ra một trong 3 quyết định sau
đây:
ü Chấp nhận sản phẩm không cần chỉnh sửa
ü Khước từ sản phẩm vì những lỗi nghiêm trọng
ü Chấp nhận cho chỉnh sửa sản phẩm, sau khi
chỉnh sửa phải có cuộc họp rà soát lại
+ Mọi thành viên tham gia cuộc họp phải ký
vào quyết định
* Họp rà soát -
Phương châm rà soát:
- Cần thiết lập trước phương châm rà soát,
phân phát cho những người làm nhiệm vụ rà soát, thống nhất tán thành và tuân thủ.
Một rà soát mà không khống chế được thì có thể còn xấu hơn là không rà soát
- 10 điều tối thiểu trong phương châm rà
soát kỹ thuật chính thức:
+ Rà soát sản phẩm, không rà soát người làm
nó
+ Lập chương trình nghị sự và duy trì nó.
+ Hạn chế tranh luận và bác bỏ: các vấn đề
tranh luận nên để ghi nhớ cho các thảo luận tiếp tục
+ Trình bày rõ ràng mạch lạc các vùng có vấn
đề nhưng không được gượng ép giải quyết mọi vấn đề nhận thấy: FTR không giải
quyết vấn đề, việc giải quyết vấn đề sau FTR và thường do chính người làm ra sản
phẩm thực hiện, có thể nhờ sự trợ giúp của vài cá nhân khác.
+ Nên có ghi chú trên bảng tường
+ Giới hạn số người tham dự và kiên trì các
dự kiến
+ Lập một danh sách các kiểm tra cho từng sản
phẩm sẽ được rà soát:
ü Giúp nhà lãnh đạo rà soát cấu trúc các cuộc
họp FTR
ü Giúp người rà soát tập trung vào các vấn đề quan trọng
ü Danh sách kiểm tra lập cho từng loại sản
phẩm:ành cho việc phân tích, thiết kế, mã hoá kiểm tra và bảo trì
ü Một tập thể các đại diện sẽ xem lại danh
sách này để trình.
+ Cấp phát nguồn lực và thời biểu cho các
FTR: xem nó là một nhiệm vụ trong quá trình
phát triển phần mềm, và cũng phải dự tính các cải biên cần thiết cho sự kiện chưa dự đoán được
+ Cần phải tiến hành huấn luyện chính thức
cho các cá nhân ra soát: Rà soát lại các rà soát trước đây.
* Sản phẩm của cuộc
họp rà soát:
- Báo cáo các vấn đề nảy sinh do các cá
nhân rà soát nêu ra
- Một danh sách các vấn đề cần giải quyết
do cuộc họp thống nhất.
+ để nhận ra vùng có vấn đề trong sản phẩm
được rà soát
+ dùng như một danh sách các khoản mục hành
động để chỉ cho người làm ra sản phẩm cần chỉnh sửa
+ Cần thiết lập một thủ tục để bảo đảm rằng
các khoản mục trong danh sách đó sẽ được chỉnh sửa thực sự
- Một văn bản tổng kết cuộc họp rà soát đó,
văn bản này phải chỉ rõ
+ Rà soát cái gì
+ Ai rà soát
+ Tìm thấy cái gì và kết luận
4. Rà soát phân tích yêu cầu,
phân tích thiết kế, coding, kiểm thử?
* Rà soát phân tích yêu cầu phần mềm:
- Mục tiêu: thẩm định và xác minh yêu cầu
phần mềm
+ phải chỉ ra các nhu cầu của người
dùng là được thoả mãn
+ Các yêu cầu phải nhất quán, nghĩa
là không mâu thuẫn nhau
+ Các yêu cầu phải đầy đủ: chúng phải
chứa mọi chức năng và mọi ràng buộc mà người dùng đã nhắm đến
+ Các yêu cầu phải là hiện thực, tức
là có khả năng thực hiện được
- Nội dung:
+ tập trung vào khả năng viết ra các yêu cầu
hệ thống phần mềm (chức năng, phi chức năng, ngoại lai)
+ sự phù hợp và tính đúng đắn của mô hình
phân tích.
+ Với các hệ thống lớn cần tăng cường: đánh
giá các nguyên mẫu cũng như các cuộc họp với khách hàng
- Danh mục: xem xét các chủ đề sau:
+ Phân hoạch vấn đề (hệ con) có đầy đủ hay không?
+ Các giao diện trong và ngoài đã thực
sự được xác định chưa?
+ Phân tích lĩnh vực thông tin có đầy
đủ, phi mâu thuẫn và chính xác hay ko?
+ Mô hình dữ liệu đã thực sự phản ánh các đối tượng dữ liệu,
các thuộc tính và các quan hệ?
+ Tất cả các yêu cầu có thể lần vết được
ở mức hệ thống không?
+ Đã làm bản mẫu dành cho người sử dụng
(khách hàng) chưa?
+ Liệu có thực hiện được với những ràng
buộc quy định bởi các phần tử hệ thống khác hay không?
+ Các yêu cầu có phù hợp với lịch biểu,
nguồn lực và kinh phí hay không?
+ Các chuẩn thẩm định có đầy đủ hay
không?
* Rà soát phân tích thiết kế phần mềm:
- Mục tiêu: Hướng đến thiết kế đảm bảo hai
yêu cầu
+ Phản ánh đúng các yêu cầu đặc tả
+ Đủ các phần
+ Đủ chức năng và ràng buộc
+ Dữ liệu đủ, phù hợp
+ Có chất lượng tốt
+ Cấu trúc tốt (phân hoạch, giao diện,
modul hoá)
+ Thuật toán tốt (ít phức tạp, tốc độ cao,
dễ hiểu)
+ Dữ liệu tốt (cấu trúc, biểu diễn)
+ Có thể lần vết được (dễ hiểu, dễ kiểm
tra)
- Nội dung:
+ Rà soát kỹ thuật chính thức cho khâu thiết
kế tập trung vào:
+ thiết kế dữ liệu
+ thiết kế kiến trúc
+ thiết kế thủ tục.
+ Có 2 kiểu rà soát thiết kế (phù hợp với
bước triển khai):
+ rà soát thiết kế sơ bộ - preliminary
design review (đánh giá việc dịch các yêu cầu thành thiết kế dữ liệu và thiết kế
kiến trúc),
+ rà soát thiết kế trọn vẹn - design
walkthrough (tập trung vào tính đúng đắn của thuật toán).
- Danh mục :
+ Rà soát thiết kế sơ bộ :
ü Các yêu cầu phần mềm có được phản ánh
trong kiến trúc phần mềm hay không?
ü Có đạt được sự môđun hoá hiệu quả không?
Các môđun có độc lập chức năng hay không
ü Kiến trúc chơng trình có được phân tách
không?
ü Các giao diện đã được xác định cho các
môđun và các phần tử hệ thống ngoại lai chưa?
ü Cấu trúc dữ liệu có phù hợp với lĩnh vực
thông tin chưa?
ü Cấu trúc dữ liệu có phù hợp với yêu cầu
phần mềm chưa?
ü Khả năng bảo trì đã được xem xét chưa?
ü Các nhân tố chất lượng đã được đánh giá
rõ ràng chưa?
+ Rà soát thiết kế toàn bộ :
ü Thuật toán có hoàn thành chức năng mong
muốn không?
ü Thuật toán có đúng đắn logic không?
ü Giao diện có phù hợp với thiết kế kiến
trúc không?
ü Độ phức tạp logic có phải chăng hay
không?
ü Xử lý sai đã được đặc tả chưa?
ü Cấu trúc dữ liệu cục bộ có thật sự đã được
xác định?
ü Kiến tạo lập trình cấu trúc đã xuyên suốt
chưa?
ü Các chi tiết thiết kế đã tuân theo ngôn
ngữ thực hiện chưa?
ü Dùng các đặc điểm hệ điều hành hay là phụ
thuộc ngôn ngữ?
ü Đó dùng logic compound hoặc logic
inverse?
ü Khả năng bảo trì đã được xét tới chưa
* Rà soát coding:
- Mục tiêu: rà soát hướng đến mã nguồn đạt
được
+ phản ánh đầy đủ, phù hợp với thiết kế
+ phù hợp với ngôn ngữ sử dụng (chuẩn, cú
pháp, khai báo dữ liệu...)
+ Văn bản chương trình tốt (không lỗi chính
tả, có cấu trúc, nhất quán ...)
- Danh mục :
+ Thiết kế có thực sự được dịch thành mã
chưa?
+ Có các sai sót chính tả hoặc in ấn nào
không?
+ Có thực sự dùng các quy ước ngôn ngữ hay
không?
+ Có phục tùng về các chuẩn mẫu lập mã đối
với phong cách ngôn ngữ, ghi chú…
+ Có ghi chú nào không đúng đắn hoặc mơ hồ?
+ Kiểu dữ liệu và khai báo dữ liệu có chính
xác hay không?
+ Các hằng số vật lý có đúng đắn hay không?
+ Có phải tất cả các khoản mục của danh
sách rà soát thiết kế trọn vẹn là được
áp dụng lại hay không?
* Rà soát kiểm thử:
- Mục tiêu:
+ Đánh giá một cách phê phán các kế hoạch
kiểm thử và các thủ tục kiểm thử
+ hướng đến đảm bảo các phương pháp, các
chiến lược và các kỹ thuật được sử dụng và kế hoạch tốt
- Nội dung:
+ chiến lược kiểm thử :
ü từ trên xuống
ü từ dưới lên
ü vụ nổ lớn (big bang)
+ kỹ thuật kiểm thử :
ü kiểm thử hộp đen
ü kiểm thử hộp trắng
ü kiểm thử tải trọng
ü kiểm thử luồn sợi (cho hệ thời gian thực)
ü sử dụng CASE
+ Kế hoạch kiểm thử tổng thể :
ü Giới thiệu chung
§ Mô tả hệ thống cần kiểm thử
§ Các mục tiêu kiểm thử
§ Phương pháp sử dụng
§ Tài liệu hỗ trợ
ü Kế hoạch :
§ Thời gian, địa điểm
§ Tài liệu kiểm thử: các ca kiểm thử, tiến
trình, lịch trình
§ Điều kiện
ü Các yêu cầu: phần cứng, phần mềm, nhân sự
ü Kiểm soát quá trình kiểm thử
- Danh mục:
+ Các pha thử nghiệm chủ yếu có thực sự được
định rõ và được xắp xếp tuần tự hay không?
+ Theo dõi các yêu cầu (tiêu chuẩn) có được
thiết lập như một phần của pha phân tích yêu cầu phần mềm hay không?
+ Các chức năng chủ yếu có được trình diễn
sớm không?
+ Kế hoạch thử nghiệm có phù hợp với kế hoạch
dự án tổng thể hay không?
+ Lịch trình thử nghiệm có được xác định
rõ ràng hay không?
+ Nguồn lực và công cụ thử nghiệm đã đợc
minh định và đã sẵn sàng hay chưa?
+ Đã thiết lập cơ chế lưu trữ các báo cáo
chưa?
+ Các bộ lái (driver) và các cuống (stub)
thử nghiệm đã được minh định chưa?; công việc phát triển chúng đã được lập lịch
chưa?
+ Thử nghiệm cường độ chịu áp lực cho phần
mềm đã được đặc tả chưa?
+ Cả hai loại thử nghiệm hộp trắng và hộp
đen đã được đặc tả chưa?
+ Có phải tất cả các đường logic độc lập đều
được thử nghiệm?
+ Có phải tất cả các ca thử nghiệm đều đã được
minh định và lập danh sách với đủ các kết qủa chờ mong?
+ Việc xử lý sai có được thử nghiệm?
+ Các giá trị biên có được thử nghiệm?
+ Các yêu cầu thời gian và sự diễn tiến có
được thử nghiệm?
+ Các biến thể chấp nhận được của kết quả
thử nghiệm mong đợi đã được đặc tả chưa?
5. Các tiêu chí của chất
lượng phần mềm?
- Tiêu chuẩn 1: Tính đúng đắn. Các sản phẩm phần mềm phải thực hiện được
chính xác các mục tiêu được đặt ra ở giai đoạn thiết kế, không bị treo máy hoặc
ra kết quả sai đối với bộ dữ liệu nằm trong phạm vi yêu cầu. Để đạt được yêu cầu
này, các sản phẩm phần mềm trước hết phải có thuật toán đúng và chương trình
tình phải tương ứng với thuật toán.
- Tiêu chuẩn 2: Tính khoa học.
+
Tính khoa học về cấu trúc: Các sản phẩm phần mềm được chia thành các đơn vị nhỏ cân đối và
có quan hệ hữu cơ không trùng lặp và có thể tổ hợp từng nhóm để tạo ra các chức
năng mới. Thuật toán và chức năng được xây dựng một cách có cấu trúc.
+
Tính khoa học về nội dung: Thuật toán được xây dựng dựa trên những thành tựu mới của toán học
và tin học. Các chương trình phải được xây dựng trên các ngôn ngữ lập trình mới
và phổ dụng.
+
Tính khoa học về hình thức thao tác: Mỗi lệnh của chương trình cần phải được
tối ưu. Muốn vậy, các lệnh phải được xây dựng một cách hợp lý, logic và phù hợp
với tư duy tự nhiên của người sử dụng. Các lỗi phải được thông báo một cách rõ
ràng (lỗi số bao nhiêu, vị trí lỗi, nội dung lỗi, cách khắc phục).
- Tiêu chuẩn 3: Tính hữu hiệu. Thể hiện ở các mặt sau:
+ Hữu hiệu về kinh tế: Có giá trị kinh tế hoặc có ý nghĩa giá
trị thu được khi áp dụng sản phẩm đó.
+ Hữu hiệu về tốc độ xử lý: Có số lượng lớn các đối tượng được xử lý
trong một đơn vị thời gian. Lượng tối đa của sản phẩm quản lý được (ví dụ:
trong Excel quản lý được 65536 bản ghi, FoxPro quản lý được 255 trường).
+ Hữu hiệu về dung lượng bộ nhớ: Tốn càng ít càng tốt.
- Tiêu chuẩn 4: Tính sáng tạo.
+ Sản phẩm phải mới mẻ và độc đáo. Nếu phát
triển trên cái cũ thì phải tiếp theo được những cái hay của nó đồng thời phải
cung cấp được các chức năng mới tốt hơn so với cái đã có.
- Tiêu chuẩn 5: Tính an toàn.
+ Sản phẩm phần mềm phải có cơ chế bảo mật
chống xâm phạm, sao chép trộm và làm biến dạng chương trình. Có cơ chế bảo vệ đối
tượng mà nó phát sinh và quản lý, có cơ chế hồi phục khi có sự cố.
- Tiêu chuẩn 6: Tính đầy đủ và toàn vẹn.
+ Sản phẩm thực hiện được đầy đủ yêu cầu của
khách hàng. Các chức năng phải có tính đối xứng, nghĩa là: có tạo lập thì có
xoá bỏ, có mở thì có đóng, có tiếp theo thì cũng cho phép trở về, …
- Tiêu chuẩn 7: Tính độc lập với các thiết bị.
+ Sản phẩm có thể sử dụng trên nhiều loại máy
khác nhau và sử dụng nhiều các thiết bị đi kèm khác nhau. Độc lập cả với cấu
trúc của đối tượng mà nó phát sinh ra.
- Tiêu chuẩn 8: Tính phổ dụng.
+ Có thể sử dụng được rộng rãi trong nhiều
lĩnh vực và ở nhiều chế độ làm việc.
- Tiêu chuẩn 9: Tính dễ học và dễ sử dụng, cải tiến.
+ Sản phẩm hợp với yêu cầu người dùng về
ngôn ngữ, hệ thống các chức năng (menu), các thông báo, cú pháp đơn giản, rõ
ràng, dễ nhớ, dễ thao tác, dễ tăng cường các chức năng, dễ mở rộng và cải tiến.
6. Tiêu chuẩn ISO 9126?
- Functionality. Mức độ mà phần
mềm đáp ứng các yêu cầu, được thể hiện qua các thuộc tính con sau: tính phù hợp,
độ chính xác, khả năng tương tác, tính tuân thủ, an ninh toàn.
- Reliability. Lượng thời
gian mà phần mềm sẵn sàng cho sử dụng, được thể hiện qua các thuộc tính
con sau: sự trưởng thành, khả năng chịu lỗi, khả năng phục hồi.
- Usability. Phần mềm được
sử dụng dễ dàng, được thể hiện qua các thuộc tính con sau: dễ hiểu, dễ học,
dễ thao tác.
- Efficiency. Phần mềm sử dụng
các tài nguyên hệ thống một cách tối ưu, được thể hiện qua các thuộc tính con:
thời gian thực hiện, lượng tài nguyên sử dụng.
- Maintainability. Phần mềm dễ sửa
chữa, được thể hiện qua các thuộc tính con: khả năng phân tích được, dễ thay đổi,
ổn định, kiểm thử được.
- Portability. Phần mềm dễ
chuyển từ môi trường này sang môi trường khác, được thể hiện qua các thuộc tính
con: tính thích ứng,
dễ cài đặt, tính phù hợp, dễ thay thế.
X. Các
chủ đề khác trong SE
1. Vấn đề quản lý dự án phần
mềm, các công việc chính trong quản lý dự án?
* Quản lý dự án phần mềm:
- Liên
quan đến các hoạt động đảm bảo:
+ Phần mềm được giao vào
thời gian và đúng tiến độ;
+ Phù hợp với các yêu cầu
của các tổ chức phát triển và khách hàng.
- Quản lý dự án là cần
thiết vì: Việc phát triển phần mềm
luôn bị hạn chế ngân sách và lịch trình được thiết lập bởi tổ chức phát triển
phần mềm.
* Những nét riêng
của Software management:
- Sản phẩm vô
hình.
- Phần mềm là loại
sản phẩm linh hoạt duy nhất.
- Quy trình phát
triển phần mềm không được chuẩn hóa.
- Nhiều dự án phần
mềm chỉ được thực hiện một lần.
* Management
activities:
- Proposal
writing (viết đề xuất).
- Project
planning and scheduling (Lập kế hoạch và lập lịch dự án).
- Project costing
(Lập chi phí dự án).
- Project
monitoring and reviews (Giám sát và ra soát dự án).
- Personnel
selection and evaluation (Lựa chọn nhân sự và đánh giá).
- Report writing
and presentations (Ghi chép và báo cáo thống kê).
2. Vấn đề quản lý rủi ro?
Quản lý rủi ro để giảm tối thiểu khả năng rủi
ro trong khi đó tăng tối đa những cơ hội tiềm năng. Những tiến trình
chính bao gồm:
- Lập kế hoạch quản lý rủi ro: quyết định
tiếp cận và hoạch định những công việc quản ký rủi ro cho dự án như
thế nào
- Nhận biết rủi ro: xác định yếu tố rủi ro
nào ảnh hưởng tới 1 dự án và tài liệu về những đặc điểm của
chúng.
- Phân tích tính chất rủi ro: đặc điểm, phân
tích rủi ro, ưu tiên xem xét những ảnh hưởng của chúng tới mục tiêu
của dự án.
- Phân tích mức độ rủi ro: xem xét khả năng có
thể xảy ra và hậu quả của những rủi ro.
- Kế hoạch đối phó rủi ro: thực hiện những
bước đề cao những cơ hội và cắt giảm bớt những mối đe dọa đáp ứng
những mục tiêu của dự án.
- Giám sát và kiểm soát rủi ro: giám sát rủi
ro đã phát hiện, nhaann biết rủi ro mới, cắt giảm rủi ro và đánh
giá hiệu quả của việc cắt giảm rủi ro.
3. Vấn đề lập lịch trong
quản lý dự án?
- Project
scheduling:
+ Chia dự án thành các nhiệm vụ và dự toán thời gian, nguồn
lực cần thiết để hoàn thành mỗi nhiệm vụ.
+ Tổ chức thực hiện các nhiệm vụ đồng thời để sử dụng tối
ưu lực lượng lao động.
+ Giảm thiểu sự phụ thuộc giữa nhiệm vụ để tránh sự chậm
trễ gây ra bởi một nhiệm vụ nào đó để dự án hoàn thành đúng tiến độ.
+ Phụ thuộc vào trực giác và kinh nghiệm quản lý dự án.
- Scheduling
problems:
+ Đánh giá mức độ khó khăn của vấn đề và chi phí phát triển
giải pháp là một bài toán khó.
+ Năng suất lao động không tỷ lệ thuận với số lượng người
làm việc trên một nhiệm vụ.
+ Thêm người vào dự án chậm làm cho dự án bị kéo dài do
phát sinh các chi phí truyền thông.
4. Cách định giá phần mềm?
- xây dựng yêu cầu công việc, chuẩn hóa nhu cầu
thông tin.
- khảo sát, xây dựng và tối ưu hóa các quy
trình công việc, các phương pháp/công nghệ thực hiện công việc.
- thiết lập các tiêu chuẩn đánh giá hiệu quả
của đề án Ứng dụng CNTT sẽ triển khai và phương pháp đo tính các
hiệu quả này.
- thiết kế giải pháp pm và chuẩn hóa các quy
trình công việc.
- lập trình pm, xây dựng tài liệu hướng dẫn và
các công cụ trợ giúp liên quan.
- kiểm thử pm (testing).
- thiết lập cấu hình hệ thống ban đầu và
chuyển đổi dữ liệu.
- tái cơ cấu tổ chức và xây dựng các quy định
liên quan cho phù hợp với quy trình công việc mới.
- tổ chức triển khai áp dụng bước đầu đào tạo
và hướng dẫn sd.
- đo tính hiệu quả của đề án theo các phương
pháp đã đề ra.
- hiệu chỉnh pm và các quy trình công việc.
- xd phương pháp triển khai đại trà.
- tổ chức triển khai áp dụng đại trà và đào
tạo hướng dẫn sd.
- công tác hỗ trợ bảo trì sau triển khai.
- đánh giá tổng thể đề án, quyết toán và
nghiệm thu đề án.
5. Vấn đề cải tiến quy
trình?
- Hiểu biết về các quy
trình hiện có và giới thiệu quá trình thay đổi để cải thiện chất lượng sản phẩm,
giảm chi phí hoặc đẩy nhanh tiến độ.
- Hầu hết các công việc cải
tiến quy trình cho đến nay tập trung vào việc giảm khiếm khuyết. Điều này phản
ánh sự quan tâm ngày càng tăng của ngành công nghiệp đối với chất lượng.
- Tuy nhiên, các thuộc
tính khác của quá trình sản xuất phát triển cũng cần được cải tiến.
6. Chuẩn CMM/CMMI?
-
CMMI
viết tắt cho Capability Maturity Model Integration - Mô hình trưởng thành năng
lực tích hợp - và là khuôn khổ cho cải tiến qui trình phần mềm. Nó dựa trên
khái niệm về các thực hành tốt nhất về kĩ nghệ phần mềm và giải thích kỉ luật
mà các công ty có thể dùng để cải tiến các qui trình của họ.
-
Mô
hình CMMI là một khung các giải pháp tối ưu cho quá trình sản xuất phần mềm.
Phiên bản CMMI-DEV hiện nay (CMMI cho chuyên viên phát triển), mô tả những giải
pháp tốt nhất trong quá trình kiểm soát, đo lường và kiểm tra các quy trình
phát triển phần mềm. Mô hình CMMI không tập trung mô tả chính các quá trình mà
chỉ mô tả đặc điểm của các quá trình hiệu quả, vì vậy mô hình CMMI đưa ra chỉ dẫn
cho các công ty để họ có thể tự mình phát triển hoặc điều chỉnh chính các quá
trình của họ.
- Mô hình CMMI được mô tả trên trang web chính thức CMMI website: Dự án CMMI là một nỗ lực chung nhằm cung cấp các mô hình để cải thiện nâng cấp các sản phẩm và quy trình. Trọng tâm chính của dự án là tập trung xây dựng các công cụ hỗ trợ việc cải thiện các quy trình dùng để phát triển và ổn định các hệ thống và sản phẩm. Kết quả của dự án CMMI là một bộ các sản phẩm cung cấp một phương pháp tiếp cận tích hợp trên toàn doanh nghiệp để cải thiện các quy trình sản xuất mà vẫn có thể giảm bớt nhân công dư thừa, độ phức tạp, và chi phí từ việc sử dụng các mô hình CMM (quy trình quản lý sản xuất phẩn mềm) riêng lẻ và nhiều mô hình CMM.
- Mô hình CMMI được mô tả trên trang web chính thức CMMI website: Dự án CMMI là một nỗ lực chung nhằm cung cấp các mô hình để cải thiện nâng cấp các sản phẩm và quy trình. Trọng tâm chính của dự án là tập trung xây dựng các công cụ hỗ trợ việc cải thiện các quy trình dùng để phát triển và ổn định các hệ thống và sản phẩm. Kết quả của dự án CMMI là một bộ các sản phẩm cung cấp một phương pháp tiếp cận tích hợp trên toàn doanh nghiệp để cải thiện các quy trình sản xuất mà vẫn có thể giảm bớt nhân công dư thừa, độ phức tạp, và chi phí từ việc sử dụng các mô hình CMM (quy trình quản lý sản xuất phẩn mềm) riêng lẻ và nhiều mô hình CMM.
- Khác
biệt giữa ISO 9001:2000 và CMM/CMMI:
+ ISO 9001 là một tiêu chuẩn quốc tế về quản lý, các điều khoản gọi là “yêu cầu” quy định những điểm cần phải làm (what to do), không chỉ ra việc đó nên làm như thế nào (how to do).
+ CMM/CMMi là một mô hình, cung cấp các hướng dẫn và kinh nghiệm thực tế dùng để phát triển, cải tiến và đánh giá năng lực của quy trình.
+ ISO 9001 là một tiêu chuẩn quốc tế về quản lý, các điều khoản gọi là “yêu cầu” quy định những điểm cần phải làm (what to do), không chỉ ra việc đó nên làm như thế nào (how to do).
+ CMM/CMMi là một mô hình, cung cấp các hướng dẫn và kinh nghiệm thực tế dùng để phát triển, cải tiến và đánh giá năng lực của quy trình.
+ CMMi
không phải là một tiêu chuẩn, tùy vào từng tổ chức, cách thực hiện khác nhau rất
nhiều.
+ Về
nguyên tắc, ISO bao gồm (ở mức cao) hầu hết các quy trình chủ chốt của
CMM/CMMi, tuy nhiên ISO được dùng cho hầu hết mọi ngành nghề, do vậy không cụ
thể và gần gũi với công việc đặc thù có liên quan đến phần mềm như CMM/CMMi.
ISO không cung cấp các ví dụ và kinh nghiêm cụ thể như CMM/CMMi
- Lợi
ích CMMI:
+
Cải
tiến năng lực của các tổ chức phần mềm bằng cách nâng cao kiến thức và kỹ năng
của lực lượng lao động.
+ Đảm
bảo rằng năng lực phát triển phần mềm là
thuộc tính của tổ chức không phải của một vài cá thể.
+ Hướng
các động lực của cá nhân với mục tiêu tổ chức.
+ Duy
trì tài sản con người, duy trì nguồn nhân lực chủ chốt trong tổ chức.
+ Lợi
ích CMM mang lại cho Doanh nghiệp gói gọn trong
4 từ: Attract, Develop, Motivate và Organize.
- Lợi
ích CMM mang lại cho người lao động:
+ Môi trường làm việc, văn hóa làm việc tốt hơn.
+ Vạch rõ vai trò và trách nhiệm của từng vị trí
công việc.
+ Đánh giá đúng năng lực, công nhận thành tích.
+
Chiến lược, chính sách đãi ngộ luôn được quan tâm.
+
Có cơ hội thăng tiến.
+
Liên tục phát triển các kỹ năng cốt yếu.