
BỘ LAO ĐỘNG - THƯƠNG BINH VÀ XÃ HỘI
TRƯỜNG CAO ĐẲNG KỸ THUẬT CÔNG NGHỆ HÒA BÌNH
----------
GIÁO TRÌNH
Công nghệ phần mềm
Hà Nội, năm 2023

Giáo trình Công nghệ phần mềm.
2 | P a g e
MỤC LỤC
MỤC LỤC ................................................................................................................. 2
Bài 1: Đối tượng của Kỹ nghệ phần mềm .............................................................. 4
1.1. Mở đầu - Sự cần thiết của Kỹ nghệ phần mềm: ......................................... 4
1.2 Định nghĩa về “Kỹ nghệ phần mềm”: .......................................................... 5
1. 3. Phần mềm: ..................................................................................................... 7
1. 4. Tiến trình ..................................................................................................... 10
1.5. Về mức độ trưởng thành để thực thi tiến trình (Process maturity ): ..... 13
Bài 2: Các mô hình tiến trình PM ....................................................................... 15
2.1 Định nghĩa: .................................................................................................... 15
2.2. Các mô hình “kinh điển”: .......................................................................... 15
2.3. Các mô hình tiến hoá: ................................................................................. 19
2.4. Mô hình phát triển tương tranh): ............................................................. 23
2.5. Phát triển theo thành phần: ....................................................................... 23
Bài 3: Quản lý Dự án Phần mềm .......................................................................... 25
3.1 Quản lý dự án PM: ....................................................................................... 25
3.2. Phổ các vấn đề quản lý dự án PM: ............................................................ 30
Bài 4: Đặc tả Phần mềm ........................................................................................ 34
4.1. Đặc tả yêu cầu: ............................................................................................. 34
4.2 Kỹ nghệ tạo bản mẫu .................................................................................... 38
4.3 Các phương pháp và công cụ làm bản mẫu: .............................................. 39
4.4 Đặc tả hình thức [3]: ..................................................................................... 41
Bài 5: Phân tích và thiết kế PM ............................................................................ 46
Phần I: Phân tích hệ thống ................................................................................ 46
5.1 Các cách tiếp cận và nguyên lý phân tich ................................................... 46
5.2. Mô hình hoá việc phân tích: ...................................................................... 49
Phần II: Thiết kế phần mềm ................................................................................. 63
5.3 TK PM và KNPM: ........................................................................................ 63
5.4 Tiến trình TK: ............................................................................................... 64
5.5 Các nguyên lý thiết kế: ................................................................................. 65
5.6 Các quan điểm (cách tiếp cận) về thiết kế: ................................................ 66
5.7 Thiết kế modula hiệu quả : .......................................................................... 71
5.8 Quy tắc heuristic để TK cho mô hình modula hiệu quả: ........................ 73
5.9 Mô hình thiết kế: ........................................................................................... 75
5.10 Tài liệu thiết kế: .......................................................................................... 75
Bài 6. Lập trình và kiểm thử phần mềm .............................................................. 77
Phần I: Lập trình và ngôn ngữ lập trình .......................................................... 77
6.1 Các thuộc tính của chương trình [2] ........................................................... 77
6.2 Các cấu trúc chính của chương trình ......................................................... 78
6.3 Phân loại ngôn ngữ lập trình: ..................................................................... 79
6.4 Kỹ thuật lập trình: ........................................................................................ 81
Phần II: Kiểm thử ............................................................................................... 84

Giáo trình Công nghệ phần mềm.
3 | P a g e
6.5 Tổng quan: ..................................................................................................... 84
6.6 Kiểm thử đơn vị ............................................................................................ 84
6.7 Kiểm thử tích hợp: ........................................................................................ 85
6.8 Kiểm thử hệ thống: ...................................................................................... 87
6.9 Một số kiểm thử khác: ................................................................................. 88
6.10 Kế hoạch kiểm thử ...................................................................................... 88
6.10 Kiểm điểm .................................................................................................... 90
6.11 Thiết kế và quản lý kiểm thử ..................................................................... 90
7.1 Tiếp cận hướng đối tượng: ........................................................................... 92
7.2 Kỹ nghệ hướng đối tượng ............................................................................ 94
7.3 UML (tổng quan) .......................................................................................... 96

Giáo trình Công nghệ phần mềm.
4 | P a g e
Bài 1: Đối tượng của Kỹ nghệ phần mềm
.
1.1. Mở đầu - Sự cần thiết của Kỹ nghệ phần mềm:
Phần mềm (PM) máy tính hiện nay đóng một vai trò không thể thay thế trong công nghiệp và
trong sự phát triển của xã hội nói chung, do công nghệ thông tin (CNTT) đã được ứng dụng rộng
khắp và sâu sắc. Những trục trặc xảy ra trong các phần mềm có thể gây ra những xáo động có
quy mô rất lớn. Ví dụ về sự cố Y2K cho thấy phạm vi ảnh hưởng mà lỗi của phần mềm có thể tác
động trong nền kinh tế và trong cuộc sống. Nó đồng thời cũng cho thấy sự cần thiết phải có các
hệ thống và tiêu chuẩn chặt chẽ trong việc xây dựng và khai thác phần mềm để có thể kiểm soát
và ứng phó với các tình huống ứng dụng một cách khoa học và hiệu quả.
Ảnh hưởng của PM đến xã hội và văn hoá của con người là rất sâu sắc. Dường như con người
hiện đại đã “đánh cược” tất cả cuộc sống của họ (công việc, tiện nghi, an toàn, sự nghỉ ngơi giải
trí, các quyết định, v.v.) vào các PM máy tính.
Nói như trong [1], khi một phần mềm thành công, tức là khi nó đáp ứng được các nhu cầu của
người dùng chúng, chạy trơn tru trong một thời gian dài, dễ sửa chữa và dễ sử dụng, nó có thể
làm cho mọi việc tốt đẹp lên. Còn với một phần mềm thất bại, tức là khi người dùng nó không
thoả mãn, khi nó rất dễ bị sai sót, rất khó sửa chữa và sử dụng - mọi điều xấu đều có thể xảy ra.
Ai cũng mong muốn xây dựng được những phần mềm làm cho công việc tốt lên, loại trừ các điều
xầu ẩn sau những nỗ lực bị phá hỏng. Muốn vậy, cần có một kỷ luật khi thiết kế và xây dựng phần
mềm, nói cách khác, cần tới một cách tiếp cận mang tính kỹ nghệ.
Do vai trò quan trọng ngày càng tăng của PM, cộng đồng PM đã liên tục phát triển các công
nghệ giúp cho việc xây dựng các chương trình chất lượng cao nhanh hơn, dễ hơn, rẻ hơn. Các
công nghệ đó hoặc hướng tới các lĩnh vực ứng dụng (như thiết kế và ứng dụng Web), hoặc tập
trung vào các lĩnh vực kỹ thuật (như hướng đối tượng), hoặc một vấn đề rộng lớn hơn (như hệ
điều hành (HĐH), thí dụ Linux). Tuy nhiên cho đến nay vẫn còn chưa phát triển được công nghệ
lập trình nào làm được tất cả các điều đó, và cũng ít có hy vọng sẽ có được nó trong tương lai.
Trong thời kỳ đầu của CNTT, “xây dựng phần mềm” tương đương với việc lập trình, và mang
nhiều đặc trưng nghệ thuật và sáng tạo cá nhân, nhiều khi rất cầu kỳ, chỉ tác giả của nó mới may
ra hiểu được! Các kỹ thuật lập trình sau đó tập trung chủ yếu vào nâng cao hiệu quả của chương
trình và năng suất viết chương trình. Vào những năm 70 của thế kỷ trước, D. Knuth có dự định
viết bộ sách đồ sộ về “Nghệ thuật lập trình” (“The art of programming”) - gồm nhiều tập, đã ra
được 3 tập đầu1), nhằm tổng kết và hệ thống hoá những thành tựu trong lĩnh vực thuật toán và lập
trình. Chúng đã từng là một trong các bộ sách “gối đầu giường” của nhiều thế hệ lập trình viên.
Tuy nhiên, hiện nay, trong công nghiệp, “kỹ sư phần mềm” đã thay thế “lập trình viên” trong danh
mục chức danh công việc. Điều này đánh dấu sự chuyển hướng nghề nghiệp rất quan trọng của
những người làm phần mềm máy tính, nhấn mạnh tính kỹ nghệ trong việc phát triển phần mềm,
và nhấn mạnh các phẩm chất kỹ sư của những người sáng tạo chúng.
Vì vậy, cách tiếp cận vấn đề theo hướng kỹ nghệ có vai trò thực tiễn riêng. Cách tiếp cận này
nhấn mạnh các đặc điểm sau đây của một sản phẩm phần mềm hiện đại:
Phần mềm là một sản phẩm công nghiệp,
1 Tập 1: “Các thuật toán cơ sở” , Tập 2: “ Các thuật toán nửa số”, và Tập 3: “Sắp xếp và lựa chọn”.

Giáo trình Công nghệ phần mềm.
5 | P a g e
Phần mềm - với tư cách là sản phẩm đáp ứng các nhu cầu của cuộc sống thực tiễn –
thu hút nhiều người tham gia, từ thiết kế, xây dựng và cả “chăm chút” (bảo trì) qua
nhiều giai đoạn và trong một thời gian dài,
Phần mềm được sử dụng bởi một cộng đồng, gồm nhiều người và trong nhiều bối
cảnh ứng dụng.
Tập bài giảng này trình bày có tính chất nhập môn về kỹ nghệ phần mềm, nhằm cung cấp các
kiến thức cần thiết nhất, từ góc nhìn “kỹ nghệ”, về phần mềm, với tư cách là đối tượng của kỹ
nghệ đó, các tiến trình phần mềm - với tư cách là các quy trình sản xuất ra chúng, cũng như các
vấn đề quản lý dự án phần mềm, và các vấn đề về đặc tả, thiết kế, đo đạc, và kiểm tra chất lượng
của phần mềm.
1.2 Định nghĩa về “Kỹ nghệ phần mềm”:
1.2.1 Một số định nghĩa về Kỹ nghệ phần mềm (KNPM, hay SE – software
engineering):
(R. Pressman): KNPM là việc áp dụng một cách có kỷ luật các nguyên lý, phương pháp và công
cụ của toán học, của khoa học, cũng như của bản thân kỹ nghệ (engineering), nhằm sản xuất
một cách kinh tế các phần mềm có chất lượng.
(Fritz Bauer): KNPM là thiết lập và sử dụng các nguyên lý kỹ nghệ hợp lý để thu được, một
cách kinh tế, PM bền vững và làm việc hiệu quả trên một máy tính thực.
(IEEE): KNPM là: (1) Áp dụng một cách tiếp cận có hệ thống, có kỷ luật, định lượng được trong
phát triển, vận hành và bảo trì PM, tức là áp dụng kỹ nghệ đối với PM, và (2) Nghiên cứu các
cách tiếp cận nói trong (1).

