Giáo trình Quản lý dự án phần mềm
Lời nói đầu 6
Ch-ơng 1. Nhập môn về quản lý dự án phần mềm
Nhập môn
1.1. Nhu cầu đang gia tăng về phần mềm
1.2. Vai trò của việc quản lý trong phát triển phần mềm
1.3. Một thí dụ
1.4. Giành sự chấp nhận các thủ tục phát triển mới
1.5. Tóm tắt
10
11
13
15
17
Ch-ơng 2. Những vấn đề phát triển phần mềm
Một chút phòng xa
2.1. Những vấn đề cơ bản
2.1.1. Những vấn đề liên quan đến các yêu cầu của dự án
2.1.2. Những thay đổi th-ờng xuyên
2.1.3. Dự toán và những vấn đề liên quan
2.1.4. Nguồn lực bên ngoài
2.1.5. Kết thúc một dự án phần mềm
2.1.6. Tuyển dụng nhân viên và thuyên chuyển
2.1.7. Theo dõi và giám sát
2.2. Phân tích rủi ro
2.2.1. Dự kiến những vấn đề cần giải quyết
2.2.2. Pha phân tích
2.2.3. Thực hiện các kế hoạch đối phó bất ngờ
2.3. Tóm tắt
Bài tập
Ch-ơng 3. Phát triển phần mềm theo hợp đồng
Quan hệ khách hàng - nhà phát triển
3.1. Chi phí cộng thêm đối lại với giá cố định
3.1.1. Hợp đồng phí cộng thêm
3.1.2. Hợp đồng giá cố định
3.2. Các mối quan hệ khác gi-ã khách hàng - nhà phát triển
3.3. Yêu cầu đối với một đề xuất (RFP)
3.3.1. Một số vấn đề cơ bản
3.3.2. Chuẩn bị của RFP
3.3.3. Phát yêu cầu đề xuất RFP
3.4. Đề xuất
3.4.1. Đề xuất không do yêu cầu
3.4.2. Đề xuất khi có yêu cầu
3.4.3. Đội ngũ chuẩn bị đề xuất
3.4.4. Khuân dạng đề xuất
3.4.5. Khẳng định công việc (SOW)
3.5. Duyệt xét đề xuất và quá trình lựa chọn
3.5.1. Ban tuyển chọn đề xuất
Quản lý dự án phần mềm
3
3.5.2. Ph-ơng pháp đánh giá đề xuất
3.6. Một số nhận định bổ sung về đề xuất
3.6.1. Những vấn đề liên quan đến khách hàng
3.6.2. Những vấn đề liên quan đến ng-ời đề nghị
3.7. Tóm tắt
Bài tập
Ch-ơng 4. Chu trình phát triển phần mềm
Các biểu thái về chủ đề thác n-ớc
4.1. Pha quan niệm
4.1.1. Bàu không khí trong pha quan niệm
4.1.2. Những vấn đề trong pha quan niệm
4.2. Pha yêu cầu phần mềm
4.2.1. Bàu không khí trong quá trình pha yêu cầu
4.2.2. Các vấn đề trong pha yêu cầu
4.3. Pha thiết kế
4.3.1. Bàu không khí trong pha thiết kế
4.3.2. Những vấn đề trong pha thiết kế
4.4. Pha thực hiện
4.4.1. Bàu không khí trong pha thực hiện
4.4.2. Những vấn đề trong pha thực hiện
4.5. Pha tích hợp và thử nghiệm
4.5.1. Bàu không khí trong pha tích hợp và thử nghiệm
4.5.2. Những vấn đề trong pha tích hợp và thử nghiệm
4.6. Pha bảo trì
4.6.1. Bàu không khí trong pha bảo trì
4.6.2. Những vấn đề trong pha bảo trì
4.7. Tóm tắt
Bài tập
57
60
61
62
63
65
66
67
68
70
71
73
74
75
76
77
78
79
Ch-ơng 5. Nguyên tắc quản lý các kỹ s- phần mềm
Họ có thực có gì khác nhau không ?
5.1. Cơ cấu tổ chức dự án phần mềm
5.2. Cơ cấu đội ngũ
5.2.1. Lãnh đạo đội
5.2.2. Các đội dân chủ
5.2.3. Các đội kỹ s- tr-ởng
5.2.4. Các đội chuyên gia
5.3. Các kỹ thuật báo cáo cơ bản
5.3.1. Báo cáo tình hình
5.3.2. Các cuộc họp về tình hình dự án
5.4. Những đ-ờng lối chung trong quản lý các kỹ s- phần
mềm
5.5. Tóm tắt
Bài tập
80
81
85
87
88
89
90
91
92
94
95
Ch-ơng 6. Chia để trị các dự án lớn thế nào: phân chia và
chiếm lĩnh.
Quản lý dự án phần mềm
4
Nhu cầu lớn không có nghĩa khó
6.1. Tinh chế từng b-ớc một
6.1.1. Phân giải chức năng
6.1.2. Phân giải thiết kế
6.2. Cơ cấu phân tích công việc
6.2.1. Phân giải dự án
6.2.2. WBS làm công cụ quản lý dự án
6.3. Xử lý những dự án lớn
6.3.1. Các hệ thống phụ
6.3.2. Đ-ờng lối phân giải chức năng
6.3.3. Đ-ờng lối phân giải thiết kế
6.3.4. Đ-ờng lối phân giải nhiệm vụ công việc
6.4. Tóm tắt
Bài tập
96
98
99
102
103
105
106
108
109
110
111
112
Ch-ơng 7. Các chức năng hỗ trợ dự án
Hỗ trợ quản lý dự án
7.1. Kiểm tra cấu hình phần mềm (SCC)
7.1.1. Thuật ngữ kiểm tra cấu hình
7.1.2. Nguồn lực kiểm tra cấu hình
7.1.3. Kế hoạch quản lý cấu hình phần mềm
7.1.4. Một số đ-ờng lối chung
7.2. Bảo đảm chất l-ợng phần mềm (SQA)
7.2.1. Cung cấp phần mềm có chất l-ợng
7.2.2. Nguồn lực kiểm tra chất l-ợng
7.2.3. Kế hoạch bảo đảm chất l-ợng phầm mềm
7.2.4. Độ đo chất l-ợng phần mềm
7.2.5. Một số đ-ờng lối chung
7.3. Thử nghiệm phần mềm
7.3.1. Các loại thử nghiệm phần mềm
7.3.2. Các thủ tục thử nghiệm chính thức
7.3.3. Một số đ-ờng lối chung
7.4. Tóm tắt
Bài tập
115
116
118
119
121
123
126
128
130
132
133
134
135
137
138
139
140
Ch-ơng 8. Tiêu chuẩn phát triển phần mềm
Tiêu chuẩn phát triển: tai hại cần thiết
8.1. Tổng quan các tiêu chuẩn phát triển phần mềm
8.2. Tiêu chuẩn US DOD 2167
8.2.1. Tổng quan tiêu chuẩn 2167
8.2.2. Rà soát và kiểm toán
8.2.3. Mô tả hạng mục dữ liệu (DIDS)
8.2.4. Lấy kích th-ớc tiêu chuẩn
8.2.5. Lợi và bất lợi của tiêu chuẩn 2167
8.3. Các tiêu chuẩn công nghệ phần mềm IEEE
8.3.1. Tổng quan tiêu chuẩn IEEE
8.3.2. Phân loại IEEE về các tiêu chuẩn công nghệ phần
142
145
146
148
154
156
157
Quản lý dự án phần mềm
5
mềm
8.3.3. Lợi và bất lợi của tiêu chuẩn IEEE
8.3.4. So sánh các tiêu chuẩn IEEE và DOD
8.4. Các tiêu chuẩn Ada
8.4.1. Môi tr-ờng Ada
8.4.2. Tiêu chuẩn IEEE cho các Ada PDL
8.5. Các tiêu chuẩn phát triển phần mềm khác
8.6. Tóm tắt
Bài tập
159
164
165
166
167
168
Ch-ơng 9. Lập trình dự án
Lập trình: vấn đề
9.1. Kế hoạch phát triển dự án
9.2. Các hoạt động theo lập trình và mốc
9.2.1. Danh mục hoạt động theo lập trình
9.2.2. Các cột mốc và đ-ờng mốc chủ yếu
9.3. Các biểu đồ Gantt
9.4. Các biểu đồ PERT và con đ-ờng tới hạn
9.4.1. Đ-ờng tới hạn
9.4.2. Các khối ch-ơng trình PERT và việc tăng c-ờng
9.5. Nhân sự lập trình
9.5.1. Qui mô đội ngũ phát triển
9.5.2. Kỹ năng và kinh nghiệm
9.5.3. Tháng của con ng-ời bất nghì
9.6. Lập lịch các nguồn lực
9.6.1. Lập lịch không gian làm việc
9.6.2. Thiết bị lập trình
9.6.3. Chủ bán các nhà thầu phụ
9.7. Kiểm chứng và cập nhật ch-ơng trình
9.7.1. Báo cáo định kỳ
9.7.2. Các hoạt động kiểm chứng khác
9.7.3. Cập nhật ch-ơng trình
9.8. Một số đ-ờng lối chung cho việc lập trình và qui hoạch
9.8.1. Tinh lọc danh mục hoạt động ban đầu
9.8.2. Giành đ-ợc phê chuẩn ch-ơng trình
9.8.3. Mối quan hệ giữa ch-ơng trình, tài nguyên, chất
l-ợng và tính chức năng
9.9. Tóm tắt
Bài tập
170
171
173
174
176
177
180
182
183
184
187
188
189
190
191
192
193
194
195
197
198
199
Ch-ơng 10. Chuẩn bị dự toán: ph-ơng pháp và kỹ thuật
Dự toán: vấn đề
10.1. Dự toán dự án
10.2. Dự toán từng b-ớc
10.2.1. Những thành phần đ-a khỏi giá
10.2.2. Những thành phần d- thừa kinh nghiệm
10.2.3. Những thành phần có một phần kinh nghiệm
200
201
202
203
205
Quản lý dự án phần mềm
6
10.2.4. Phát triển mới
10.2.5. Phân tích chi tiết dự án ở mức rủi ro
10.3. Uớc định phát triển mới
10.3.1. Những ph-ơng pháp kiểu đầu (nguyên mẫu)
10.3.2. Những ph-ơng pháp thống kê
10.4. Mô hình chi phí xây dựng (Cocomo)
10.4.1. Mức nhân sự
10.4.2. Mức độ phức tạp
10.4.3. Yếu tố độ tin cậy
10.4.4. Môi tr-ờng phát triển
10.4.5. Các thứ hệ
10.4.6. Thuật toán dự toán phí
10.5. Chức năng phân tích điểm
10.5.1. Những b-ớc FPA cơ bản
10.5.2. ứng dụng của FPA
10.6. Dự toán là một lĩnh vực
10.7. Dự toán tài nguyên phần cứng
10.7.1.Tải trọng CPU
10.7.2. L-u trữ dự liệu
10.7.3. Tốc độ
10.8. Tổng phí không phát triển
10.9. Tóm tắt
Bài tập
206
207
209
210
213
215
216
218
219
221
224
225
229
233
236
238
239
241
Tham khảo 243
ao điểm và thời gian đáp ứng tr-ờng hợp hẳn là 15 giây. Mặc dù việc chậm trả lời 15 giây có thể gây tức bực cho ng-ời dùng thì nó lại có thể chấp nhận đ-ợc cho ngân hàng nếu điều này không xảy ra quá th-ờng xuyên. Do đấy cần thiết khi trình bày dự toán thời gian đáp ứng phải bao gồm cả dự toán phần trăm thời gian mà tr-ờng hợp tồi nhất có thể dự kiến xảy ra. Chẳng hạn chúng ta có thể khẳng định: 1. Thời gian đáp ứng trung bình dự kiến: 5 giây 2. Thời gian đáp ứng tr-ờng hợp tồi nhất dự kiến: 15 giây trong 1% giao dịch. Việc mô tả chi tiết hơn thời gian đáp ứng dự kiến th-ờng đ-ợc yêu cầu. Trong thí dụ trên 10% chậm trễ đáp ứng có thể chiếm 14,5 giây là không thể chấp nhận đ-ợc, nh-ng lại có thể khớp với các con số ở trên. Trong những tr-ờng hợp đó, thì bảng phân phối (coi bảng 10.7) đ-ợc -a thích hơn. 10.8 tổng phí không phát triển. Những dự toán tốt đ-ợc căn cứ ở hầu hết dữ liệu mới nhất và dễ hiểu hiện có. Do đấy, điều quan trọng là phải cập nhật định kỳ mọi dự toán của dự án. Chí ít ra thì điều này phải đ-ợc làm ở các cột mốc dự án chủ yếu, nh- tổng duyệt yêu cầu phần mềm, tổng duyệt thiết kế sơ bộ và tổng duyệt thiết kế tới hạn. Các dự toán đ-ợc cập nhật phải là bộ phận của những thứ giao đ-ợc có yêu cầu ở những tổng duyệt đó. Bảng 10.8 Tổng phí của các hoạt động không phát triển Tổng phí Quản lý 0.1 Khống chế cấu hình 0,02 Bảo đảm chất l-ợng phần mềm 0,03 Sau khi kết thúc pha thiết kế, các dự toán phải đ-ợc xem lại tr-ớc khi tích hợp bắt đầu và rồi lại xem lại tr-ớc khi thử nghiệm bắt đầu. Cũng vậy, mỗi sự cố không dự kiến xảy ra trong chu kỳ phát triển có thể đòi hỏi phải tính toán lại dự toán. Một thí dụ của sự cố nh- thế có thể là việc thay thế hợp phần lỗi thời bằng một hợp phần phát triển mới hay một sự chậm trễ dự án ch-a lập lịch chủ yếu. Cũng vậy mỗi thay đổi đến đặc tả yêu cầu của dự án bao giờ cũng phải kèm theo phân tích tác động của thay đổi đó đến lịch dự án. Mọi thay đổi Quản lý dự án phần mềm 240 với số rất ít ngoại lệ đều phải thay đổi chi phí. Ngay việc rút bỏ một yêu cầu cũng gây ra thay đổi chi phí dự án đã dự toán. Một khối l-ợng thay đổi nào đó đến đặc tả yêu cầu th-ờng đ-ợc tính đến trong việc chuẩn bị dự toán của dự án. Điều này bao gồm trong dự toán d-ới hình thức yếu tố an toàn. Yếu tố an toàn cũng có thể đ-ợc dùng để bù trừ cho các tr-ờng hợp khác nh- sai lầm trong dự toán và chậm trễ không dự kiến. Các yếu tố an toàn th-ờng sử dụng từ 20% đến 40% tuỳ theo mức độ tin cậy trong dự toán, dự đoán các thay đổi yêu cầu và các chậm trễ có thể xảy ra. Các yếu tố t-ơng tự cũng đôi khi đ-ợc dùng để đ-a vào trong dự toán những hoạt động không phát triển nh- quản lý dự án, kiểm tra cấu hình và bảo đảm chất l-ợng. Dù sao, chừng mực của những nhiệm vụ này cũng phụ thuộc ở các đặc tính khác của dự án. Một dự án rất nhỏ có thể không yêu cầu bất cứ quản lý trực tiếp nào trong khi dự án lớn hẳn bị kết tội nếu không có nó. Bảng 10.8 trình bày các yếu tố tổng phí cho các hoạt động không phát triển của dự án phần mềm. Các con số trong bảng 10.8 cho thấy là dự án phần mềm với đội ngũ 100 kỹ s- hẳn yêu cầu xấp xỉ 10 nhà quản lý (thời gian làm việc 100%). Điều này bao gồm những nhiệm vụ nh- quản lý dự án, phó quản lý dự án, lãnh đạo đội (có thể dành một phần thời gian vào công việc phát triển) v.v. Trong một dự án nhỏ ba ng-ời, một trong những thành viên hẳn đ-ợc dự kiến giành khoảng 1/3 thời gian của anh hay chị cho việc quản lý dự án. T-ơng tự, trong một dự án phần mềm do một đội ngũ 100 kỹ s- phát triển, chúng ta có thể dự kiến bố trí 2 kỹ s- kiểm tra cấu hình và 3 kỹ s- đảm bảo chất l-ợng phần mềm. Công bố tổng quát hơn có thể là trong một dự án 100 năm công, 2 năm công hẳn đ-ợc giành cho kiểm tra cấu hình và 3 năm công cho bảo đảm chất l-ợng tổng hợp. Các con số trong bản 10.8 có thể hơi bị ảnh h-ởng bởi qui mô dự án và bởi các yếu tố bản đến ở phần 10.4. Một dự án phức tạp sẽ đòi hỏi phần chung nhiều hơn một dự án t-ơng đối đơn giản. Toàn bộ tổng phí dự án cho những hoạt động đó tất cả khoảng 15%. Quan trọng là phải nhớ rằng điều này chỉ liên quan đến tổng phí dự án trực tiếp và không tính đến thời gian đầu t- của quản lý cấp cao, th- ký văn phòng v.v.. 10.9 Tóm tắt Ch-ơng này minh hoạ dự toán đ-ợc vận dụng thế nào trong việc tiên liệu bất trắc. Bất cứ l-ợng không biết nào đều có thể đ-ợc dự toán trong khi các l-ợng đã biết không cần dự toán. Với ng-ời quản lý dự án phần mềm có nhiều l-ợng không biết phải đ-ợc dự toán. Những l-ợng này liên kết với các lĩnh vực nh-: Quản lý dự án phần mềm 241 1. Chi phí phát triển dự án 2. Lịch phát triển dự án 3. Qui mô đội phát triển dự án 4. Khối l-ợng phần mềm phải phát triển 5. Nguồn lực phần cứng đòi hỏi. Dự toán từng b-ớc th-ờng đ-ợc coi là ph-ơng cách “phân chia và khuất phục”, phân vấn đề lớn ra vô vàn vấn đề nhỏ và đ-ợc dùng trong hầu hết kỹ thuật dự toán. Ph-ơng cách cơ bản là phân giải dự án thành những hợp phần xác định rõ và rồi lặp lại từng b-ớc đến khi chỉ còn lại những đơn vị nhỏ có thể dễ dự toán hơn. Phân giải ban đầu của dự án phần mềm nhận ra 4 phạm trù chủ yếu với những mức độ rủi ro phát triển khác nhau liên kết với chúng. B-ớc đầu tiên của phân giải dự án tạo ra những hợp phần dự án hoặc (1) chúng ta đã có (2) chúng ta biết phát triển nh- thế nào (kinh nghiệm trọn vẹn) (3) ít ra chúng ta đã phần nào làm quen với chúng (kinh nghiệm một phần) hay (4) hoàn toàn mới với chúng ta (phát triển mới). Các kỹ thuật dự toán đặc thù có thể đ-ợc vận dụng cho mỗi loại hợp phần dự án khác nhau. Một ph-ơng pháp khác, gọi là thuật toán chi phí kiến thiết (COCOMO) bao gồm 10 b-ớc cơ bản. Những b-ớc đó bao gồm phân giải dự án ra các hợp phần, vận dụng công thức công sức vào mỗi hợp phần và phối hợp mọi dữ liệu tạo ra vào một dự toán chi phí duy nhất của dự án. Phân tích chức năng (FPA) tạo ra dự toán của dự án căn cứ ở qui mô vấn đề. Số l-ợng các chức năng trong dự án xác định qui mô vấn đề, đ-ợc biểu thị bằng giá trị số (trị số FPA). Trị số FPA của dự án có thể đ-ợc dùng để: So sánh độ phức tạp của các dự án. So sánh công sức t-ơng đối đòi hỏi để hoàn thành dự án. Phát sinh các độ đo dự án khác (nh- các SLOC) Dự toán cũng th-ờng đ-ợc trình bày nh- là một phạm vi. Một phạm vi là một dự toán có ích trong qui hoạch phát triển của dự án. Lý thuyết thống kê đứng sau ph-ơng cách này đề cập quan niệm khoảng tin cậy, nó cung cấp xác suất là chi phí phát triển sẽ nằm trong một phạm vi đã cho. Các ph-ơng pháp dự toán tải CPU, l-u giữ dữ liệu và tốc độ đ-ợc căn cứ ở phân giải phần mềm thành những mô đun dự toán đ-ợc. Rồi những dự toán này đ-ợc phối hợp với yếu tố an toàn. Các yếu tố an toàn th-ờng sử dụng từ 20% đến 40% tuỳ theo mức độ tin cậy trong dự toán và thời hạn dự kiến thay đổi yêu cầu. Các dự toán tốt đ-ợc căn c- ở hầu hết dữ liệu mới nhất, dễ hiểu hiện có đ-ợc. Do đó, quan trọng là phải cập nhật định kỳ toàn bộ dự toán của dự án. Dù sao, bất kể ph-ơng pháp dự toán nào đ-ợc sử dụng, quan trọng là Quản lý dự án phần mềm 242 bao giờ cũng phải nhớ rằng dự toán chỉ có thể tốt đ-ợc nh- các dữ liệu đ-ợc dùng làm căn cứ. Bài tập. 1. Phân tích một hệ thống kiểm warehouse do một công ty phát triển vốn tr-ớc đây đã phát triển hệ thống kiểm cửa hàng bách hoá. Hãy sử dụng dự toán từng b-ớc, phân giải hệ thống thành 4 phạm trù hợp phần. Sau đó phân giải hợp phần kinh nghiệm từng phần thành hợp phần kinh nghiệm đày đủ và hợp phần phát triển mới. Đặc tả mọi giả định đã làm. 2. Phát triển tiếp vấn đề ở bài tập 1 và chuẩn bị một kế hoạchdự toán các hợp phần phát triển mới bằng cách sử dụng lấy mẫu thống kê. Xác định nhóm phạm trù và bố trí mỗi hợp phần phát triển mới vào loại thích hợp của nó. Chọn những mô đun tiêu biểu từ mỗi phạm trù để thực hiện. Giải thích điều hợp lý của việc gán các loại và lựa chọn đã làm. 3. Căn cứ ở kinh nghiệm của bạn, hãy bố trí những con số KSLOC hợp lý vào mỗi hợp phần ở bài tập 2. Giả định mỗi ng-ời phát triển cho 5 KSLOC. Giả định là 10% nhân lực là mức 1, 30% ở mức 2, 45% mức 3 và 15% mức 4. Hãy tính nhân tố PL cho dự án phát triển. Bình luận tác động của trị số PL đó tới chi phí phát triển dự án. 4. Duyệt lại bảng 10.1, có liên quan đến việc tính toán thừa số PL. Cho một gợi ý một bảng trị số khác, căn cứ ở các mức KSLOC phụ thêm và một phạm trù rộng các nhân tử. Bình luận lý do chọn những con số trong bảng của bạn. Tính lại trị số trong bảng 10.2 căn cứ ở bảng bạn đã đề nghị. 5. Phân giải hệ thống kiểm kê warehouse mô tả ở bài tập 1 thành các hợp phần theo mức phức tạp. Căn cứ ở các con số KSLOC bố trí ở bài tập 3, hãy tính SEM cho mỗi lớp hợp phần và phối hợp kết quả để có đ-ợc con số dự toán của SEM cho toàn bộ dự án. 6. Phân giải hệ thống kiểm kê kho mô tả ở bài tập 1 ra những hợp phần theo mức tin cậy. Sử dụng năm mức tin cậy để đ-a thành thừa số độ tin cậy vào dự toán SEM tính ở bài tập 5. 7. (a) Gợi ý bảng các nhân tử 5 mức cho mức môi tr-ờng phát triển, căn cứ ở ba mức qui mô dự án. KSLOC < 25, 25 < KSLOC < 300, 3000 < KSLOC (b) Gợi ý bảng nhân tử để đ-a thành thừa số tính phức tạp của hệ thống phụ. Thảo luận về cỡ của dự án phải xét. 8. Tính dự toán chi phí cho hệ thống kiểm warehouse mô tả ở bài tập 1 bằng cách sử dụng các kết quả của các bài tập 3, 5, 6 và 7. 9. Xem xét việc vận dụng thuật toán phân tích l-ợng chức năng vào hệ thống kiểm warehouse mô tả ở bài tập 1. Lợi và bất lợi trong việc sử dụng ph-ơng pháp FPA ? So sánh FPA với COCOMO cho dự án đặc biệt này. Quản lý dự án phần mềm 243 10. Xếp loại uỷ thác: căn cứ ở các kết quả cá nhân khác nhau cho bài tập 8, hãy tính khoảng cách tin cậy 68% và 95% cho phạm vi chi phí phát triển đối với hệ thống kiểm warehouse này. 11. (a) Duyệt lại thí dụ tải CPU ở phần 10.6. Giả định rằng đầu vào của thiết bị đ-ợc điều khiển bởi các ngắt. Mỗi ngắt có tổng phí 0,5 mili-giây. Vậy tải CPU là bao? (b) Tải CPU phải là gì nếu vòng lặp nhanh có ba đầu vào chứ không phải 2 ? Bình luận tác động của kết quả.
File đính kèm:
- Giao_trinh_quan_ly_du_an_phan_mem.pdf