Bài giảng Kỹ thuật phần mềm - Nguyễn Việt Hà
MỤC LỤC
Chương 1- Phần mềm và kỹnghệphần
mềm . 1
1.1 Tầm quan trọng và sựtiến hóa của phần mềm . 1
1.1.1 Tiến hóa của phần mềm . 1
a. Những năm đầu (từ1950 đến 1960): . 1
b. Thời kỳtrải rộng từnhững năm 1960 đến giữa những năm 1970: . 1
c. Thời kỳtừgiữa những năm 1970 đến đầu những năm 1990: . 2
d. Thời kỳsau 1990: . 2
1.1.2 Sự ứng dụng của phần mềm . 2
a. Phần mềm hệthống . 2
b. Phần mềm thời gian thực . 3
c. Phần mềm nghiệp vụ. 3
d. Phần mềm khoa học và công nghệ. 3
e. Phần mềm nhúng . 3
f. Phần mềm máy tính cá nhân . 3
g. Phần mềm trí tuệnhân tạo . 4
1.2 Khó khăn, thách thức đối với phát triển phần mềm . 4
1.2.1 Phần mềm và phần mềm tốt . 4
1.2.2 Đặc trưng phát triển và vận hành phần mềm . 5
a. Phần mềm không được chếtạo theo nghĩa cổ điển . 5
b. Phần mềm không hỏng đi nhưng thoái hóa theo thời gian . 6
c. Phần lớn phần mềm đều được xây dựng từ đầu, ít khi được lắp ráp từthành phần có
sẵn . 6
1.2.3 Nhu cầu và độphức tạp . 6
1.3 Kỹnghệphần mềm . 7
1.3.1 Định nghĩa . 7
a. Các phương pháp . 7
b. Các công cụ. 7
c. Các thủtục . 8
1.3.2 Mô hình vòng đời cổ điển . 8
a. Kỹnghệvà phân tích hệthống . 8
b. Phân tích yêu cầu phần mềm . 8
c. Thiết kế. 8
d. Mã hóa . 9
e. Kiểm thử. 9
f. Bảo trì . 9
1.3.3 Mô hình làm bản mẫu . 10
1.3.4 Mô hình xoắn ốc . 11
1.3.5 Kỹthuật thếhệthứtư. 13
1.3.6 Mô hình lập trình cực đoan . 14
a) Tạo các ca thửnghiệm trước tiên . 14
b) Lập trình đôi . 14
1.3.7 Tổhợp các mô hình . 15
1.3.8 Tính khảthịcủa quá trình kỹnghệ. 15
1.3.9 Vấn đềgiảm kích cỡcủa phần mềm . 16
1.4 Cái nhìn chung vềkỹnghệphần mềm . 17
Chương 2- Phân tích và đặc tảyêu cầu . 20
2.1 Đại cương vềphân tích và đặc tả. 20
2.2 Nghiên cứu khảthi . 21
2.3 Nền tảng của phân tích yêu cầu . 23
2.3.1 Các nguyên lý phân tích . 23
2.3.2 Mô hình hóa . 24
2.3.3 Người phân tích . 26
2.4 Xác định và đặc tảyêu cầu . 27
2.4.1 Xác định yêu cầu . 27
2.4.2 Đặc tảyêu cầu . 27
2.4.3 Thẩm định yêu cầu . 28
2.5 Làm bản mẫu trong quá trình phân tích . 29
2.5.1 Các bước làm bản mẫu . 29
2.6 Định dạng đặc tảyêu cầu . 31
Chương 3- Thiết kếphần mềm . 34
3.1 Khái niệm vềthiết kếphần mềm . 34
3.1.1 Khái niệm . 34
3.1.2 Tầm quan trọng . 34
3.1.3 Quá trình thiết kế. 35
3.1.4 Cơsởcủa thiết kế. 36
3.1.5 Mô tảthiết kế. 37
3.1.6 Chất lượng thiết kế. 38
3.2 Thiết kếhướng chức năng . 41
3.2.1 Cách tiếp cận hướng chức năng . 41
3.2.2 Biểu đồluồng dữliệu . 42
3.2.3 Lược đồcấu trúc . 42
3.2.4 Các từ điển dữliệu . 42
3.3 Thiết kếhướng đối tượng . 43
3.3.1 Cách tiếp cận hướng đối tượng . 43
3.3.2 Ba đặc trưng của thiết kếhướng đối tượng . 43
3.3.3 Cơsởcủa thiết kếhướng đối tượng . 43
3.3.4 Các bước thiết kế. 44
3.3.5 Ưu nhược điểm của thiết kếhướng đối tượng . 45
3.3.6 Quan hệgiữa thiết kếvà lập trình hướng đối tượng . 45
3.3.7 Quan hệgiữa thiết kếhướng đối tượng và hướng chức năng . 46
3.4 Thiết kếgiao diện người sửdụng . 46
3.4.1 Một sốvấn đềthiết kế. 48
3.4.2 Một sốhướng dẫn thiết kế. 48
Chương 4 - Lập trình . 50
4.1 Ngôn ngữlập trình . 50
4.1.1 Đặc trưng của ngôn ngữlập trình . 50
4.1.2 Lựa chọn ngôn ngữlập trình . 51
4.1.3 Ngôn ngữlập trình và và sự ảnh hưởng tới kỹnghệphần mềm . 52
4.2 Phong cách lập trình . 52
4.2.1 Tài liệu chương trình . 53
4.2.2 Khai báo dữliệu . 53
4.2.3 Xây dựng câu lệnh . 54
4.2.4 Vào/ra . 54
4.3 Lập trình tránh lỗi . 54
4.3.1 Lập trình thứlỗi . 56
4.3.2 Lập trình phòng thủ. 56
4.4 Lập trình hướng hiệu quảthực hiện . 57
4.4.1 Tính hiệu quảchương trình . 57
4.4.2 Hiệu quảbộnhớ. 58
4.4.3 Hiệu quảvào/ra . 58
Chương 5- Xác minh và thẩm định . 60
5.1 Đại cương . 60
5.2 Khái niệm vềphép thử. 61
5.3 Thửnghiệm chức năng và thửnghiệm cấu trúc . 61
5.3.1 Thửnghiệm chức năng . 61
5.3.2 Thửnghiệm cấu trúc . 62
5.4 Quá trình thửnghiệm . 63
5.4.1 Thửnghiệm gây áp lực . 64
5.5 Chiến lược thửnghiệm . 64
5.5.1 Thửnghiệm dưới lên . 64
5.5.2 Thửngiệm trên xuống . 65
Chương 6- Quản lý dựán phát triển phần
mềm . 66
6.1 Đại cương . 66
6.2 Độ đo phần mềm . 67
6.2.1 Đo kích cỡphần mềm . 67
6.2.2 Độ đo dựa trên thống kê . 68
6.3 Ước lượng . 68
6.4 Quản lý nhân sự. 69
6.5 Quản lý cấu hình . 70
6.6 Quản lý rủi ro . 71
Tài liệu tham khảo . 73
dẻo nhất định trong kế hoạch - Phối thuộc các tiến trình con • Tài nguyên: thêm tiền, thêm thiết bị, thêm người... • Sản phẩm: thêm bớt chức năng của sản phẩm... • Rủi ro: phân tích và tìm phương pháp xử lý, chấp nhận một số rủi ro - 67 - Ngoài ra, người quản lý dự án còn cần phải quan tâm đến sự phối thuộc với các dự án khác và thông tin cho người quản lý cấp trên... Phương pháp tiếp cận của người quản lý dự án • Hiểu rõ mục tiêu (tìm cách định lượng các mục tiêu bất cứ khi nào có thể) • Hiểu rõ các ràng buộc (chi phí, lịch biểu, tính năng...) • Lập kế hoạch để đạt dược mục tiêu trong các ràng buộc • Giám sát và điều chỉnh kế hoạch • Tạo môi trường làm việc ổn định, năng động cho nhóm Quản lý tồi sẽ dẫn đến sự chậm trễ của dự án, tính năng yếu kém và tăng chi phí phát triển. Một ví dụ kinh điển về quản lý tồi là dự án hệ điều hành OS360 của IBM bị chậm 2 năm so với kế hoạch. 6.2 Độ đo phần mềm Để quản lý chúng ta cần định lượng được đối tượng quản lý cần quản lý, ở đây là phần mềm và qui trình phát triển. Chúng ta cần đo kích cỡ phần mềm, chất lượng phần mềm, năng suất phần mềm... 6.2.1 Đo kích cỡ phần mềm Có hai phương pháp phổ biến để đo kích cỡ phần mềm là đo số dòng lệnh (LOC -Lines Of Code) và đo điểm chức năng (FP - Function Points). Độ đo LOC tương đối trực quan, tuy nhiên phụ thuộc rất nhiều vào ngôn ngữ lập trình cụ thể. Từ kích cỡ của phần mềm (LOC), chúng ta có thể tính một số giá trị như - Hiệu năng = KLOC/ngườiưtháng - Chất lượng = số khiếm khuyết/KLOC - Chi phí = giá thành/KLOC Các thông số của các dự án đã phát triển trong quá khứ sẽ được dùng dể phục vụ cho ước lượng cho các phần mềm sẽ phát triển. Điểm chức năng FP được tính dựa trên đặc tả yêu cầu và độc lập với ngôn ngữ phát triển. Tuy nhiên nó lại có sự phụ thuộc vào các tham số được thiết lập dựa trên kinh nghiệm. Mô hình cơ sở của tính điểm chức năng là FP = a1I+ a2O + a3 E + a4 L + a5F, Trong đó - I : số Input - O: số Output - E: số yêu cầu - L: số tệp truy cập - 68 - - F: số giao diện ngoại lai (devices, systems) 6.2.2 Độ đo dựa trên thống kê Người ta còn thiết lập một số độ đo phần mềm dựa trên thống kê như sau: - Độ tin cậy MTBF - Mean Time Between Failure: thời gian chạy liên tục của hệ thống - Thời gian khôi phục hệ thống MTTR - Mean Time To Repair - Tính sẵn có M TBF/(M TBF + M TTR) 6.3 Ước lượng Công việc đầu tiên của người quản lý dự án là ước lượng - ước lượng về kích cỡ, chi phí, thời gian tiến hành dự án. Việc này thông thường được tiến hành bằng cách phân rã phần mềm cần phát triển thành các khối nhỏ và áp dụng các kinh nghiệm (các thông số như kích cỡ, chi phí, năng lực nhân viên...) đối với các phần mềm đã phát triển để ước lượng, đánh giá công việc. Một mô hình ước lượng hay được dùng là mô hình COCOMO - Constructive Cost Model ước lượng chi phí từ số dòng lệnh. Dùng mô hình này ta sẽ có thể ước lượng các thông số sau: - Nỗ lực phát triển E = aLb - Thời gian phát triển T = cEd - Số người tham gia N = E/T Trong đó a,b,c,d là các tham số tùy thuộc vào từng loại dự án (xem bảng 6.1). Điểm đáng chú ý ở đây là từ nỗ lực phát triển chúng ta suy ra thời gian và số người tham gia vào dự án. Bảng 6.1: COCOMO - Các tham số cơ sở a b c d organic 3.2 1.05 2.5 0.38 semiưdetached 3.0 1.12 2.5 0.35 embeded 2.8 1.2 2.5 0.32 Các bước tiến hành của COCOMO như sau: - Thiết lập kiểu dự án (organic: đơn giản, semiưdetached: trung bình, embeded: phức tạp) - Xác lập các mô đun và ước lượng dòng lệnh - Tính lại số dòng lệnh trên cơ sở tái sử dụng - Tính nỗ lực phát triển E cho từng mô đun - Tính lại E dựa trên độ khó của dự án (mức độ tin cậy, kích cỡ CSDL, yêu cầu về tốc độ, bộ nhớ,...) - 69 - - Tính thời gian và số người tham gia Ví dụ: Phần mềm với 33.3 nghìn dòng lệnh và các tham số a,b,c,d lần lượt là 3.0, 1.12, 2.5, 0.35, ta tính được: E = 3.0*33.31.12 = 152ngườiưtháng T = 2.5*E 0.35 = 14.5 tháng N = E/D ˜ 11người Cần nhớ rằng đo phần mềm là công việc rất khó khăn do • Hầu hết các thông số đều không đo được một cách trực quan •Rất khó thẩm định được các thông số • Không có mô hình tổng quát • Các kỹ thuật đo còn đang thay đổi Chúng ta không thể kiểm soát được quá trình sản xuất phần mềm nếu không ước lượng (đo) nó. Một mô hình ước lượng nghèo nàn vẫn hơn là không có mô hình nào và phải liên tục ước lượng lại khi dự án tiến triển. 6.4 Quản lý nhân sự Chi phí (trả công) con người là phần chính của chi phí xây dựng phần mềm. Ngoài ra, năng lực của người phát triển phần mềm lại rất biến thiên, kéo theo sự phức tạp trong tính toán chi phí. Phát triển phần mềm được tiến hành theo nhóm. Kích thước tốt của nhóm là từ 3 đến 8 ngưòi. Phần mềm lớn thường được xây dựng bởi nhiều nhóm nhỏ. Một nhóm phát triển có thể gồm các loại thành viên sau: • Người phát triển • Chuyên gia về miền ứng dụng • Người thiết kế giao diện • Thủ thư phần mềm (quản lý cấu hình phần mềm) • Người kiểm thử Một nhóm phát triển cần có người quản lý, và người có vai trò lãnh đạo về mặt kĩ thuật. Một đặc trưng của làm việc theo nhóm là sự trao đổi thông tin (giao tiếp) giữa các thành viên trong nhóm. Thời gian dùng cho việc giao tiếp có thể chiếm đến nửa tổng thời gian dành cho pháp triển phần mềm. Ngoài ra, thời gian không dùng cho phát triển sản phẩm cũng chiếm một phần lớn thời gian còn lại của người lập trình. Một người có thể đồng thời làm việc cho nhiều nhóm (dự án) - 70 - phần mềm khác nhau. Điều này làm cho việc tính toán giá thành phần mềm phức tạp. Cần ghi nhớ, trong sản xuất phần mềm thì - Năng lực của các thành viên là không đồng đều - Người tốt (nhất) có thể sản xuất hơn 5 lần trung bình, người kém có thể không cho kết quả gì - Một số công việc quá khó đối với mọi người Không nên tăng số thành viên một cách vô ý thức, vì như thế chỉ làm tăng sự phức tạp giao tiếp giữa các thành viên, khiến công việc nhiều khi chậm lại. Một số việc (phức tạp, đăc thù) chỉ nên để một người làm. 6.5 Quản lý cấu hình Quản lý cấu hình phần mềm (còn gọi là quản lý mã nguồn) là một công việc quan trọng trong sản xuất phần mềm. Mã nguồn (và dữ liệu) là sản phẩm chính của dự án phần mềm. Quản lý cấu hình được tự động hóa thông qua các công cụ. Nhiệm vụ chính của công cụ quản lý là: • Lưu trữ mã nguồn • Tạo ra một điểm truy cập duy nhất (phiên bản thống nhất) cho người lập trình sửa đổi, thêm bớt mã nguồn. Do đó chúng ta có thể dễ dàng: • Kiểm soát được tính thống nhất của mã nguồn • Kiểm soát được sự sửa đổi, lý do của sự sửa đổi, lý lịch các lần sửa đổi • Dễ dàng lưu trữ và truy cập tới các phiên bản khác nhau của phần mềm • Tối ưu hóa vùng đĩa cần thiết cho lưu trữ Phương thức hoạt động của các công cụ này là: • Quản lý tập chung (mã nguồn, tư liệu, công cụ phát triển...) • Các tệp được tạo một lần duy nhất, các phiên bản sửa đổi chỉ ghi lại sai phân đối với bản gốc • Sử dụng phương pháp check out/check in khi sửa đổi tệp Thông thường, người phát triển khi muốn sửa đổi mã nguồn sẽ thực hiện thao tác check out tệp đó. Khi tệp đã bị check out thì các người phát triển khác chỉ có thể mở tệp dưới dạng chỉ đọc. Khi kết thúc sửa đổi và ghi tệp vào CSDL, người sửa đổi tiến hành check in để thông báo kết thúc công việc sửa đổi, đồng thời có thể ghi lại các thông tin liên quan (lý do sửa đổi...) đến sự sửa đổi. - 71 - Dữ liệu được lưu trữ của dự án thông thường bao gồm: • Mã nguồn • Dữ liệu • Tư liệu • Công cụ phát triển (chương trình dịch...), thường cần để đảm bảo tương thích với các phiên bản cũ, và để đảm bảo chương trình được tạo lại (khi sửa lỗi...) đúng như cái đã phân phát cho khách hàng • Các ca kiểm thử Một số các công cụ quản lý cấu hình phổ biến là RCS, CVS trên HĐH Solaris và SourceSafe của Microsoft. 6.6 Quản lý rủi ro Quản lý rủi ro là một công việc đặc biệt quan trọng và khó khăn trong phát triển phần mềm. Có các nguyên nhân (rủi ro) sau dẫn đến chấm dứt dự án: • Chi phí phát triển quá cao • Quá chậm so với lịch biểu • Tính năng quá kém so với yêu cầu Quản lý rủi ro bao gồm các công việc chính sau: • Dự doán rủi ro • Đánh giá khả năng xảy ra và thiệt hại • Tìm giải pháp khắc phục Dưới đây là các rủi ro thường xẩy ra khi phát triển phần mềm và các phương pháp khắc phục chúng: • Thiếu người phát triển: sử dụng những người tốt nhất; xây dựng nhóm làm việc; đào tạo người mới • Kế hoạch, dự toán không sát thực tế: ước lượng bằng các phương pháp khác nhau; lọc, loại bỏ các yêu cầu không quan trọng. • Phát triển sai chức năng: chọn phương pháp phân tích tốt hơn; phân tích tính tổ chức/mô hình nghiệp vụ của khách hàng • Phát triển sai giao diện: phân tích thao tác người dùng; tạo kịch bản cách dùng; tạo bản mẫu. • Yêu cầu quá cao: lọc bớt yêu cầu; phân tích chi phí/lợi ích. - 72 - • Thay đổi yêu cầu liên tục: áp dụng thiết kế che dấu thông tin; phát triển theo mô hình tiến hóa. - 73 - Tài liệu tham khảo [1] Kent Beck, Extreme Programming Explained, AddisonưWasley, 2000. [2] Bruce Eckel, Thinking in Java, 3rd ed., 2002. [3] Mike Gancarz, The Unix Philosophy, Digital Press, 1994. [4] Roger S. Pressman (dịch: Ngô Trung Việt), Kỹ nghệ phần mềm, Tập I,II,III, NXB Giáo dục, 1997. [5] Walker Royce, Software Project Management - A Unified Framework, Addison- Wesley, 1998. [6] Stephen R. Schach, Classical and ObjectưOriented Software Engineering with UML and C++, 4th ed., McGrawưHill, 1999. [7] Ian Sommerville, Software Engineering, 6th ed., AddisonưWasley, 2001. [8] Nguyễn Quốc Toản, Bài giảng về Nhập môn Công trình học phần mềm, Khoa Công nghệ, 1999. [9] Lê Đức Trung, Công nghệ phần mềm, NXB Khoa học và Kỹ thuật, 2001. [10] Ngô Trung Việt, Nguyễn Kim ánh (biên soạn), Nhập môn Công nghệ phần mềm, NXB Khoa học và kỹ thuật, 2003. [11] Nguyễn Văn Vỵ, Phân tích thiết kế các hệ thống thông tin hiện đại, NXB Thống kê, 2002.
File đính kèm:
- Bài giảng Kỹ thuật phần mềm - Nguyễn Việt Hà.pdf