Bai Giang Cong Nghe Phan Mem - DHSP Hue - Nguyen The Dung tài liệu, giáo án, bài giảng , luận văn, luận án, đồ án, bài t...
Trang 1NGUYỄN THẾ DŨNG
NHẬP MÔN CÔNG NGHỆ PHẦN MỀM
Trường Đại học Sư phạm - Đại học Huế
Huế, tháng 11 năm 2014
Trang 2Giáo trình này được viết bởi Nguyễn Thế Dũng, giảng viên Khoa Tin học, Trường ĐHSP - Đại học Huế Giáo trình này được dùng để giảng dạy và học tập học phần:
Nhập môn Công nghệ phần mềm
Mã số: TINS4392
Trang 3Lời nói đầu
Môn học Nhập môn Công nhệ phần mềm là học phần bắt buộc trong khung chương trình của hầu hết sinh viên ngành Sư phạm Tin học Hiện nay đã có khá nhiều tài liệu về môn học này Tuy vậy phần lớn được trình bày dưới dạng sách chuyên khảo, do đó sinh viên rất khó khăn trong việc học môn này Bên cạnh đó với các đặc thù của sinh viên ngành Sư phạm, nên việc học tập môn học mang nặng tính lý thuyết suông đối với sinh viên
Ngay từ đầu giáo trình, chúng tôi đưa ra mục tiêu và tóm tắt nội dung học phần mà khung chương trình đã quy định để làm rõ mục đích cần đạt được khi học môn học này của sinh viên Sư phạm Tin học so với sinh viên các ngành chuyên về Công nghệ phần mềm
Cuối các chương mục, chúng tôi đưa vào phần ôn tập chương cùng các câu hỏi và bài tập nhằm giúp sinh viên dễ học tập và có một cái nhìn rộng hơn về thực tiễn hay các vấn đề mở mà giáo trình chưa đề cập đến do giới hạn khuôn khổ
Do trong khung chương trình, phần quản lý dự án phần mềm được tách riêng thành một học phần gồm 2 tín chỉ, nên giáo trình sẽ không bao gồm phần này như thường thấy trong một số giáo trình khác
Giáo trình được chia thành 7 chương
Chương 1 Tổng quan về công nghệ phần mềm
Chương 2 Qui trình phát triển phần mềm
Chương 3 Phân tích và đặc tả yêu cầu
Trang 4Trong quá trình biên soạn giáo trình này, chúng tôi có tham khảo một số tài liệu của một số tác giả khác nhằm mang lại những kiến thức phong phú, phù hợp nhất cho sinh viên, nhưng có thể chưa kịp liên hệ được với chính các tác giả ấy Mong các Thầy, cô vì sự học của các sinh viên mà niệm tình bỏ quá
Tác giả chân thành cảm ơn các thầy cô Hà Viết Hải, Lê Văn Tường Lân, Nguyễn Thị Hoàng Anh… đã góp ý cho bản thảo rất tận tình Đồng thời xin chân thành cảm ơn quý Thầy cô khác cũng đã giúp đỡ chúng tôi rất nhiều Chúng tôi cũng gửi lời cảm ơn đến rất nhiều bạn sinh viên đã giúp chúng tôi sưu tầm các tư liệu làm cơ sở để hoàn thành giáo trình này
Giáo trình không tránh khỏi những thiếu sót và đặc biệt là sự thiếu cập nhật thông tin đối với một môn học có tính thời sự công nghệ này
Rất mong sự góp ý, đánh giá, nhận xét của quý Thầy cô, Sinh viên… để giáo trình được hoàn thiện hơn Xin chân thành cảm ơn
Trang 5Dưới đây là trích dẫn mục tiêu và tóm tắt nội dung của học phần được khung chương trình đào tạo giáo viên Tin học Trung học phổ thông do Bộ Giáo dục và Đào tạo đưa ra năm 2007
Mục tiêu học phần NHẬP MÔN CÔNG NGHỆ PHẦN MỀM
Giúp cho sinh viên nắm được quá trình phát triển một phần mềm một cách hiệu quả, mang tính công nghiệp và hiểu được những khái niệm cơ bản thuộc lĩnh vực này Trên cơ sở đó sinh viên có định hướng đúng đắn khi học tập nghiên cứu
các môn khác cũng như đi sâu vào nghiên cứu và thực hành làm phần mềm Tóm tắt nội dung học phần NHẬP MÔN CÔNG NGHỆ PHẦN MỀM
Nội dung môn học bao gồm: các quy trình xây dựng và đánh giá một phần mềm; vận dụng để xây dựng được những phần mềm cỡ nhỏ đáp ứng thực tế công việc và các đề án
Trang 6MỤC LỤC
CHƯƠNG 1 TỔNG QUAN VỀ CÔNG NGHỆ PHẦN MỀM 9
1 Một số khái niệm 9
2 Nhân tố con người và phân loại nghề nghiệp trong công nghệ phần mềm 15
3 Sản phẩm phần mềm – đặc trưng và phân loại 22
Chương 2 QUI TRÌNH PHÁT TRIỂN PHẦN MỀM 28
1 Qui trình phát triển phần mềm 28
2 Mô hình phát triển phần mềm 34
3 Trợ giúp tự động hoá phát triển 46
Chương 3 PHÂN TÍCH VÀ ĐẶC TẢ YÊU CẦU 49
1 Đại cương về phân tích và đặc tả yêu cầu 49
2 Phân tích và đặc tả yêu cầu 53
3 Nguyên lý phân tích và mô hình hóa 66
4 Đặc tả yêu cầu 74
5 Thẩm định yêu cầu 76
6 Làm bản mẫu trong quá trình phân tích 77
7 Định dạng đặc tả yêu cầu 79
8 Quản lý yêu cầu 82
9 Phân tích và đặc tả yêu cầu theo mô hình tiến trình hợp nhất (Unified Process Model) 84
Chương 4 THIẾT KẾ 102
1 Khái niệm về thiết kế phần mềm 102
2 Thiết kế hướng chức năng 114
3 Thiết kế kiến trúc 118
4 Thiết kế giao diện người dùng 128
5 Thiết kế thủ tục 133
6 Thiết kế hướng đối tượng 135
Chương 5 LẬP TRÌNH 151
1 Khái niệm 151
2 Ngôn ngữ lập trình 152
3 Phong cách lập trình 154
4 Kỹ thuật lập trình 156
5 Lập trình hướng hiệu quả thực hiện 158
Chương 6 KIỂM THỬ 161
Trang 71 Đại cương về kiểm thử phần mềm 161
2 Các mức độ kiểm thử 163
3 Các hoạt động kiểm thử 167
4 Kỹ thuật kiểm thử 169
5 Chiến thuật kiểm thử phần mềm 169
6 Kiểm thử hướng đối tượng 178
7 Chứng minh toán học tính đúng đắn của chương trình 180
Chương 7 TRIỂN KHAI VÀ BẢO TRÌ 189
1 Triển khai phần mềm 189
2 Hiện thực và triển khai phần mềm được xây dựng theo mô hình hướng đối tượng 193
3 Bảo trì 198
Trang 85
Kỹ nghệ phần
mềm
Software Engineering
13
Computer-aided software engineering Đặc tả yêu cầu
phần mềm
Software Requirement Specification
Trang 9CHƯƠNG 1 TỔNG QUAN VỀ CÔNG NGHỆ PHẦN MỀM
Mục đích
Trình bày các khái niệm thiết yếu của Công nghệ phần mềm như định nghĩa, đối tượng nghiên cứu, con người, sản phẩm…
Yêu cầu
Biết được những khái niệm thiết yếu trong Công nghệ phần mềm
Biết được tổ chức nhân sự và vai trò của từng thành viên trong nhóm phát triển phần mềm
Biết được các loại tài liệu kỹ thuật
1 Một số khái niệm
Thuật ngữ phần mềm (software) cần được hiểu trong sự đối chiếu với thuật ngữ phần cứng (hardware) được đưa ra trong ngành điện tử Theo đó phần cứng (hardware) là những thiết bị có thể sờ mó cầm nắm, trong khi đó phần mềm là những gì làm cho các thiết bị vô tri vô giác đó có thể hoạt động được
Phần mềm trong Tin học có thể được hiểu bao gồm:
- Tập các lệnh máy tính nhằm thực hiện các chức năng xác định
- Các cấu trúc dữ liệu cho phép chương trình thao tác với dữ liệu
- Các tài liệu giúp cho người dùng có thể vận hành được phần mềm
Trong một hệ thống máy tính, nếu trừ bỏ đi các thiết bị và các loại phụ kiện thì phần còn lại chính là phần mềm Theo nghĩa hẹp: Phần mềm là tập các chương trình dịch vụ để tăng khả năng xử lý của phần cứng của máy tính (như hệ điều hành - OS) Theo nghĩa rộng: Phần mềm là tất cả các kỹ thuật ứng dụng để thực hiện những dịch vụ chức năng cho mục đích nào đó bằng phần cứng
Nếu hiểu theo nghĩa rộng thì phần mềm bao gồm các nhóm minh họa như dưới đây:
Trang 10Nhóm các kỹ thuật, phương pháp luận
Bao gồm: Các khái niệm và trình tự cụ thể hóa một hệ thống; Các phương pháp tiếp cận giải quyết vấn đề; Các trình tự thiết kế và phát triển được chuẩn hóa; Các phương pháp đặc tả yêu cầu, thiết kế hệ thống, thiết kế chương trình, kiểm thử, toàn bộ quy trình quản lý phát triển phần mềm
Phần mềm ứng dụng: dùng để xử lý nghiệp vụ thích hợp nào đó (quản lý, kế toán, ), phần mềm đóng gói, phần mềm của người dùng,
Nhóm các tư liệu
Đó là những tư liệu hữu ích, có giá trị cao cần thiết để phát triển, vận hành
và bảo trì phần mềm Để sản xuất ra phần mềm với độ tin cậy cao cần tạo ra các
tư liệu chất lượng cao: đặc tả yêu cầu, mô tả thiết kế từng loại, điều kiện kiểm thử, thủ tục vận hành, hướng dẫn thao tác,…
Một số giáo trình về môn học này dùng các thuật ngữ có khác nhau về tên môn học này như Công nhệ phần mềm, Kỹ nghệ phần mềm, Công trình học phần
Trang 11mềm… Nên ở đây chúng ta cần xem xét một số vấn đề liên quan đến kiến thức chung là: Khoa học, công nghệ, kỹ nghệ và công nghiệp
Công nghiệp, là một bộ phận của nền kinh tế, là lĩnh vực sản xuất hàng hóa vật chất mà sản phẩm được "chế tạo, chế biến" cho nhu cầu tiêu dùng hoặc phục
vụ hoạt động kinh doanh tiếp theo Đây là hoạt động kinh tế, sản xuất quy mô lớn, được sự hỗ trợ thúc đẩy mạnh mẽ của các tiến bộ về công nghệ, khoa học và kỹ thuật
Một nghĩa rất phổ thông khác của từ “công nghiệp” là "hoạt động kinh tế quy mô lớn, sản phẩm (có thể là phi vật thể) tạo ra trở thành hàng hóa" Theo nghĩa này, những hoạt động kinh tế chuyên sâu khi đạt được một quy mô nhất định sẽ trở thành một ngành công nghiệp, ngành kinh tế như: công nghiệp phần mềm máy tính, công nghiệp điện ảnh, công nghiệp giải trí, công nghiệp thời trang, công nghiệp báo chí, v.v
Công nghệ (tiếng Anh: technology) là sự tạo ra, sự biến đổi, việc sử dụng,
và kiến thức về các công cụ, máy móc, kỹ thuật, kỹ năng nghề nghiệp, hệ thống,
và phương pháp tổ chức, nhằm giải quyết một vấn đề, cải tiến một giải pháp đã tồn tại, đạt một mục đích, hay thực hiện một chức năng cụ thể Công nghệ cũng có thể chỉ đến một tập hợp những công cụ như vậy, bao gồm máy móc, những sự sắp xếp, hay những quy trình Công nghệ ảnh hưởng đáng kể lên khả năng kiểm soát
và thích nghi của con người cũng như của những động vật khác vào môi trường tự nhiên của mình Thuật ngữ có thể được dùng theo nghĩa chung hay cho những lĩnh vực cụ thể, ví dụ như "công nghệ xây dựng", "công nghệ thông tin"
Trong tiếng Việt, các từ "khoa học", "kỹ thuật", và "công nghệ" đôi khi được dùng với nghĩa tương tự nhau hay được ghép lại với nhau (chẳng hạn "khoa học kỹ thuật", "khoa học công nghệ", và "kỹ thuật công nghệ") Tuy vậy, công nghệ khác với khoa học và kỹ thuật Khoa học là toàn bộ hoạt động có hệ thống nhằm xây dựng và tổ chức kiến thức dưới hình thức những lời giải thích và tiên đoán có thể kiểm tra được về vũ trụ Còn kỹ thuật là việc ứng dụng kiến thức khoa học, kinh tế, xã hội, và thực tiễn để thiết kế, xây dựng, và duy trì các cấu trúc, máy móc, thiết bị, hệ thống, vật liệu, và quá trình
Công nghệ (có nguồn gốc từ technologia, hay τεχνολογια, trong tiếng Hy Lạp; techne có nghĩa là thủ công và logia có nghĩa là "châm ngôn") là một thuật
Trang 12ngữ rộng ám chỉ đến các công cụ và mưu mẹo của con người Tuỳ vào từng ngữ cảnh mà thuật ngữ công nghệ có thể được hiểu:
+ Công cụ hoặc máy móc giúp con người giải quyết các vấn đề;
+ Các kỹ thuật bao gồm các phương pháp, vật liệu, công cụ và các tiến trình
để giải quyết một vấn đề;
+ Các sản phẩm được tạo ra phải hàng loạt và giống nhau
+ Sản phẩm có chất lượng cao và giá thành hạ
Kỹ nghệ (engineering) nói tới một tập hợp các công nghệ được bố trí theo một qui trình nhất định, được con người dùng các phương pháp và thực hiện qua các công cụ để tạo ra những sản phẩm nhất định
Kỹ nghệ là việc sử dụng phối hợp các công nghệ cần thiết để sản xuất ra các sản phẩm của một ngành nào đó
Cần phân biệt công nghệ là nói đến những kỹ thuật được phát triển cho một loại vấn đề nào đó, còn kỹ nghệ nói đến các qui trình nghiêm ngặt phối hợp các công nghệ, phương pháp và công cụ để làm ra sản phẩm có chất lượng
Định nghĩa công nghệ do Uỷ ban Kinh tế và Xã hội khu vực Châu Á - Thái Bình Dương (ESCAP): Công nghệ là kiến thức có hệ thống về quy trình và kỹ thuật dùng để chế biến vật liệu và thông tin Nó bao gồm kiến thức, thiết bị, phương pháp và các hệ thống dùng trong việc tạo ra hàng hoá và cung cấp dịch
vụ
Mặc dù theo tiến trình phát triển, hiện nay khái niệm Kỹ nghệ phần mềm được dùng cho môn học Nhưng do yếu tố lịch sử và khách quan của tên môn học trong khung chương trình chung của sinh viên, nên trong giáo trình này cụm từ Công nghệ phần mềm và Kỹ nghệ phần mềm được dùng với nghĩa tương tự nhau Rất mong người đọc suy xét
Trang 13Theo Pressman [2001]: Kỹ nghệ phần mềm là bộ môn tích hợp cả quy trình, các phương pháp, các công cụ để phát triển phần mềm máy tính
Theo Sommerville [2007]: Kỹ nghệ phần mềm là lĩnh vực liên quan đến lý thuyết, phương pháp và công cụ dùng cho phát triển phần mềm
Như vậy có thể khái quát: Kỹ nghệ phần mềm (software engineering): là việc áp dụng các công cụ, các kỹ thuật một cách hệ thống trong việc phát triển các ứng dụng dựa trên máy tính Đó chính là việc áp dụng các quan điểm, các tiến trình có kỷ luật và lượng hoá được, có bài bản và hệ thống để phát triển, vận hành
và bảo trì phần mềm
Theo quan điểm của nhiều nhà nghiên cứu, có thể nhìn nhận kỹ nghệ phần mềm là một mô hình được phân theo bốn tầng mà tất cả các tầng này đều nhằm tới mục tiêu chất lượng, chi phí, thời hạn phát triển phần mềm
Ở đây, tầng chất lượng hướng đến việc đảm bảo chất lượng và kiểm thử phần mềm
Tầng quy trình liên quan tới vấn đề quản trị phát triển phần mềm như lập kế hoạch, quản trị chất lượng, tiến độ, chi phí, mua bán sản phẩm phụ, cấu hình phần mềm, quản trị sự thay đổi, quản trị nhân sự (trong môi trường làm việc nhóm), việc chuyển giao, đào tạo, tài liệu;
Tầng phương pháp hay cách thức, công nghệ, kỹ thuật để làm phần mềm: liên quan đến tất cả các công đoạn phát triển hệ thống như nghiên cứu yêu cầu, thiết kế, lập trình, kiểm thử và bảo trì Phương pháp dựa trên những nguyên lý cơ bản nhất cho tất cả các lĩnh vực công nghệ kể cả các hoạt động mô hình hoá và kỹ thuật mô tả
Chất lượng
Quy trình
Phương pháp Công cụ
Trang 14Tầng công cụ liên quan đến việc cung cấp các phương tiện hỗ trợ tự động hay bán tự động cho các tầng quá trình và phương pháp (công nghệ)
Kỹ sư phần mềm (software engineer): là một người biết cách áp dụng rộng rãi những kiến thức về cách phát triển ứng dụng vào việc tổ chức phát triển một cách có hệ thống các ứng dụng Công việc của người kỹ sư phần mềm là: đánh giá, lựa chọn, sử dụng những cách tiếp cận có tính hệ thống, chuyên biệt, rõ ràng trong việc phát triển, đưa vào ứng dụng, bảo trì, và thay thế phần mềm
Do đặc điểm nghề nghiệp, người kỹ sư phần mềm phải có những kỹ năng cơ bản như:
- Định danh, đánh giá, cài đặt, lựa chọn một phương pháp luận thích hợp và các công cụ CASE (Computer-aided software engineering)
- Biết cách sử dụng các mẫu phần mềm (software prototyping)
- Biết cách lựa chọn ngôn ngữ, phần cứng, phần mềm
- Quản lý cấu hình, lập sơ đồ và kiểm soát việc phát triển của các tiến trình
- Lựa chọn ngôn ngữ máy tính và phát triển chương trình máy tính
- Đánh giá và quyết định khi nào loại bỏ và nâng cấp các ứng dụng Mục tiêu của kỹ sư phần mềm là sản xuất ra các sản phẩm có chất lượng cao
và phù hợp với các quy trình phát triển chuẩn mực
Việc phát triển (development): được bắt đầu từ khi quyết định phát triển sản phẩm phần mềm và kết thúc khi sản phẩm phần mềm được chuyển giao cho người
về công việc, hoặc làm cho phần mềm được hiệu quả hơn
Việc loại bỏ (retirement): thường là việc thay thế các ứng dụng hiện thời bởi các ứng dụng mới
Đối tƣợng nghiên cứu của công nghệ phần mềm
Trang 15Hướng đến việc xây dựng các phần mềm có chất lượng như đã nêu, ngành công nghệ phần mềm đưa ra 3 đối tượng nghiên cứu chính: Qui trình công nghệ, Phương pháp phát triển, Công cụ và Môi trường phát triển phần mềm
- Qui trình công nghệ phần mềm: Hệ thống các giai đoạn mà quá trình phát triển phần mềm phải trải qua Với mỗi giai đoạn cần xác định rõ mục tiêu, kết quả nhận từ giai đoạn trước đó cũng chính là kết quả chuyển giao cho giai đoạn kế tiếp
- Phương pháp phát triển phần mềm: Hệ thống các hướng dẫn cho phép từng bước thực hiện một giai đoạn nào đó trong qui trình công nghệ phần mềm
- Công cụ và môi trường phát triển phần mềm: Hệ thống các phần mềm trợ giúp chính trong lĩnh vực xây dựng phần mềm Các phần mềm này sẽ hỗ trợ trong các bước xây dựng phần mềm theo một phương pháp nào đó với một qui trình được chọn trước
2 Nhân tố con người và phân loại nghề nghiệp trong công nghệ phần mềm
2.1 Nhân tố con người trong ngành công nghiệp phần mềm
Đối với một sản phẩn phần mềm, một người không thể hoàn thành mà là kết quả lao động của một nhóm người, ta gọi là nhóm phát triển phần mềm
Như vậy, một nhóm phát triển phần mềm như thế nào gọi là một nhóm hợp lý? Sau đây là một vài yếu tố cần xem xét:
- Nhóm có bao nhiêu thành viên,
- Nhóm được tổ chức như thế nào,
- Tình hình thực tế của mỗi thành viên trong nhóm,
- Môi trường, điều kiện mà nhóm đang làm việc,
Mỗi thành viên trong nhóm phải có một số kiến thức cần thiết tuỳ thuộc vào
vai trò trong nhóm để phát triển phần mềm
2.2 Phân loại nghề nghiệp
Yêu cầu hiện nay của sự phát triển Công nghệ Thông tin (CNTT) ở Việt nam đòi hỏi cần có những người lao động trong tất cả các ngành kinh tế biết sử dụng hữu hiệu CNTT trong công việc của mình, và đồng thời cần có những người
Trang 16trực tiếp tham gia vào sản xuất, kinh doanh, vận hành về CNTT Do vậy cần có những lớp người lao động sau:
Những người biết vận dụng sáng tạo CNTT vào nghiệp vụ chuyên môn
Những người tham gia quản lí và vận hành các hệ thống CNTT
Những người tham gia trực tiếp vào việc phát triển và xây dựng ra các sản phẩm CNTT
Việc phân loại nghề nghiệp trong các hệ thống thông tin có thể được phân chia dựa vào các tiêu chuẩn như: mức độ kinh nghiệm, loại hình công việc,
Loại hình công việc
Ở đây, các loại hình công việc được bàn luận, dựa vào cách phân loại gồm: phát triển ứng dụng, hỗ trợ ứng dụng, chuyên ngành kỹ thuật, nhân viên và những vấn đề khác
a Phát triển ứng dụng
Lập trình viên: Các lập trình viên chuyển đổi những đồ án chi tiết kỹ thuật sang các module mã và tự kiểm tra các đơn vị Các lập trình viên có thể luân phiên chịu trách nhiệm giữa phát triển ứng dụng và bảo trì Những chuyên gia lập trình ở trình độ đại học thực hiện những nhiệm vụ bên ngoài việc lập trình
Kỹ sư phần mềm: Một kỹ sư phần mềm thực hiện những chức năng của các nhà phân tích, các nhà thiết kế và các lập trình viên Các phân tích gia ở trình độ đại học luôn luôn tham gia vào tổ chức có cấp độ cao để lập kế hoạch và nghiên cứu khả thi Các kỹ sư phần mềm có thể làm cả ba việc phân tích, thiết kế và lập trình cũng như đứng ra lãnh đạo dự án hoặc quản lý dự án Một kỹ sư quản lý phần mềm sơ cấp thường dành nhiều thời gian lập trình trong khi một kỹ sư có trình độ cao cấp lại tập trung vào việc lập kế hoạch, nghiên cứu khả thi, phân tích
và thiết kế
Phân tích viên hệ thống: Phân tích viên hệ thống đóng vai trò đặc biệt quan trọng trong tiến trình phân tích Ngoài kinh nghiệm, một phân tích viên tốt cần có các khả năng sau:
- Khả năng hiểu thấu các khái niệm trừu tượng, có khả năng tổ chức lại thành các phân tích logic và tổng hợp các giải pháp dựa trên từng dải phân chia
Trang 17- Khả năng rút ra các sự kiện thích đáng từ các nguồn xung khắc và lẫn lộn
- Khả năng hiểu được môi trường người dùng/khách hàng
- Khả năng áp dụng các phần tử hệ thống phần cứng và/hoặc phần mềm vào môi trường người sử dụng/khách hàng
- Khả năng giao tiếp tốt ở dạng viết và nói
- Khả năng trừu tượng hóa/tổng hợp vấn đề từ các sự kiện riêng lẻ
Kỹ sư tri thức (Knowledge Engineer): Các kỹ sư tri thức suy luận ra những
mô hình ngữ nghĩa từ các chuyên gia để từ đó xây dựng những hệ chuyên gia và trí tuệ nhân tạo Các kỹ sư tri thức tương tự như các kỹ sư phần mềm nhưng được chuyên môn hoá các kỹ năng để áp dụng vào các vấn đề trí tuệ nhân tạo Việc phát triển các mô hình và các chương trình của cấu trúc trí tuệ đòi hỏi khả năng quan sát, kỹ năng phỏng vấn sâu sắc, khả năng trừu tượng hoá những vấn đề không phải của chuyên môn cá nhân để tạo ra những ý thức lập luận và thông tin cần thiết và khả năng phát triển những dự đoán về thông tin và tính chính xác với các chuyên gia
b Hỗ trợ ứng dụng
Chuyên gia ứng dụng: Chuyên gia ứng dụng có những vùng vấn đề được chuyên môn hoá cho phép họ tham khảo ý kiến của các đội dự án về một loại ứng dụng cụ thể Ví dụ một nhà phân tích cao cấp về chuyển tiền thời gian thực có thể phân chia được thời gian giữa các dự án chuyển tiền trong nước và quốc tế, biết trước được những quy tắc, luật lệ phải tuân theo của ngân hàng dự trữ liên bang cũng như của các tổ chức chuyển tiền khác
Quản trị dữ liệu: Người quản lý dữ liệu quản lý thông tin như một nguồn thống nhất Với chức năng này, bộ phận quản lý dữ liệu giúp cho người sử dụng xác định được tất cả dữ liệu được sử dụng, các dữ liệu có ý nghĩa trong quá trình thực hiện chức năng của công ty Những người quản lý dữ liệu thiết lập và bảo lưu những chuẩn mực để thống nhất dữ liệu
Khi dữ liệu đã được xác định, người quản lý dữ liệu sẽ làm việc để định dạng và xác định cấu trúc cơ sở dữ liệu để sử dụng với ứng dụng Với việc phát triển ứng dụng mới, những người quản lý dữ liệu làm việc với bộ phận phát triển ứng dụng để định vị những số liệu đã được tự động và với bộ phận quản trị CSDL
Trang 18để cung cấp những nhóm ứng dụng dễ dàng truy nhập những cơ sở dữ liệu đã được tự động hoá
Quản trị cơ sở dữ liệu (DBA - DataBase Administrator): Những người quản
lý cơ sở dữ liệu quản lý môi trường dữ liệu vật lý của một tổ chức DBA phân tích, thiết kế, xây dựng và bảo lưu cơ sở dữ liệu cũng như môi trường phần mềm
cơ sở dữ liệu Làm việc cùng với những người quản lý dữ liệu xác định dữ liệu DBA xác định các cơ sở dữ liệu vật lý và nạp thông tin thực tế vào chúng
Một người quản lý cơ sở dữ liệu làm việc với các nhóm phát triển ứng dụng
để cung cấp truy nhập đến dữ liệu tự động và để định nghĩa rõ ràng cơ sở dữ liệu cần thiết cho thông tin được tự động
Kỹ sư trí tuệ nhân tạo: Các kỹ sư trí tuệ nhân tạo làm việc như cố vấn giúp các đội dự án xác định, thiết kế và cài đặt trí tuệ vào các ứng dụng Kỹ sư trí tuệ nhân tạo cùng với các kỹ sư tri thức dịch và kiểm tra những vấn đề miền dữ liệu
và thông tin lập luận bằng một ngôn ngữ của trí tuệ nhân tạo Các kỹ sư trí tuệ nhân tạo đạt được trình độ chuyên môn cao hơn các kỹ sư tri thức
Nhà tư vấn: Người tư vấn thì biết mọi vấn đề và thực hành được tất cả Số năm kinh nghiệm càng cao thì kiến thức có được càng nhiều Lĩnh vực chuyên môn có thể bao gồm một vài loại công việc được đề cập đến trong phần này Người tư vấn được nhờ đến trong hầu hết các trường hợp lắp đặt hệ thống và cung cấp những kỹ năng bên ngoài không sẵn có Bởi vậy họ thường đào tạo đội ngũ bên trong trong suốt quá trình thực hiện công việc Khi được nhờ đến, người tư vấn được mong chờ có những kỹ năng chuyên biệt và sẽ áp dụng những kỹ năng này trong việc thực hiện tư vấn
c Chuyên ngành kỹ thuật
Nhà phân tích và kỹ sư truyền thông: Các nhà phân tích và kỹ sư truyền thông phân tích, thiết kế, đàm phán và/hoặc cài đặt các thiết bị và phần mềm truyền thông Họ đòi hỏi liên quan chặt chẽ tới kỹ thuật truyền thông và có thể làm việc trên mainframe hoặc các mạng truyền thông dựa vào máy tính cá nhân
Để bắt đầu ở mức xuất phát thì nền tảng kiến thức phải có là điện tử, kỹ thuật, các ứng dụng, khoa học máy tính và truyền thông
Chuyên gia về mạng cục bộ: Các chuyên gia mạng cục bộ đặt kế hoạch, lắp đặt, quản lý và duy trì những khả năng của mạng cục bộ Điểm khác nhau duy
Trang 19nhất giữa các chuyên gia mạng cục bộ và các chuyên gia truyền thông là phạm vi Các chuyên gia truyền thông làm việc với nhiều mạng kể cả mainframe; còn chuyên gia mạng cục bộ chỉ làm việc trên những mạng có giới hạn về mặt địa lý
và được cấu thành bởi nhiều máy tính cá nhân
Một người quản lý mạng cục bộ tạo ra người sử dụng mới, thực hiện hoặc thay đổi mức hoặc mã bảo mật, cài đặt những version mới của phần mềm điều hành mạng cục bộ, cài đặt những version mới của cơ sở dữ liệu hoặc phần mềm
cơ sở mạng cục bộ khác Giám sát tài nguyên cung cấp qua mạng cục bộ, cung cấp bản sao và khả năng phục hồi cho mạng cục bộ, và quản lý cấu hình mạng cục
bộ
Lập trình viên hệ thống: Các lập trình viên hệ thống cài đặt và bảo dưỡng hệ điều hành và ứng dụng hỗ trợ phần mềm Định giá những đặc điểm mới và xem xét chúng có cần thiết ở một thời điểm nào đó không là một kỹ năng mà lập trình viên hệ thống cần phát triển Giám sát hàng trăm ứng dụng để xem xét những rắc rối của nó có liên quan đến vấn đề của hệ thống hay không là một nhiệm vụ quan trọng
Chuyên gia hỗ trợ phần mềm (SSP – Sofware Support): Hỗ trợ phần mềm
ứng dụng tương tự nhưng khác với lập trình viên hệ thống SSP cài đặt và bảo dưỡng gói phần mềm sử dụng bởi cả các nhà phát triển ứng dụng và người sử dụng Chúng có thể là cơ sở dữ liệu, ngôn ngữ hỏi đáp, sao lưu và phục hồi, bảng tính, quản lý khoảng trống đĩa, giao diện, truyền thông
d Nhân viên
Chuyên gia về bảo mật: Một chuyên gia bảo mật chịu trách nhiệm bảo mật
và sẵn sàng phục hồi thảm hoạ Để bảo mật, một chuyên gia phải thiết lập các chuẩn cho bảo mật dữ liệu, giúp đỡ các đội dự án trong việc quyết định các yêu cầu bảo mật và thiết lập các chuẩn cho trung tâm bảo mật dữ liệu Tương tự để phục hồi thảm hoạ, chuyên gia bảo mật giúp đỡ những người quản lý và các đội
dự án trong việc xác định các dữ liệu nguy cấp cần thiết cho tổ chức Sau đó chuyên gia giúp trung tâm dữ liệu và các đội dự án trong việc phát triển và thử nghiệm các kế hoạch phục hồi thảm hoạ
Kiểm soát viên: Các kiểm soát viên thực hiện việc kiểm tra khả năng tin cậy của những thiết kế ứng dụng Bất kỳ ứng dụng nào duy trì những quy định hợp
Trang 20pháp, trách nhiệm hoặc dùng bản hướng dẫn của công ty cũng có thể bị tạo lại bất
kỳ giao dịch nào và phát hiện ra tiến trình của nó Các kiểm soát viên đảm bảo rằng những mất mát của công ty là nhỏ nhất qua việc thiết kế những ứng dụng tốt Những khía cạnh thiết kế được các kiểm soát viên đánh giá là rãnh kiểm soát, khả năng phục hồi và bảo mật
Đào tạo: Một người đào tạo kỹ thuật học công nghệ mới, các sản phẩm đại
lý, những đặc điểm ngôn ngữ mới, sau đó dạy những người khác trong tổ chức
sử dụng Đào tạo có thể thực hiện trong nội bộ tổ chức những cũng có thể do một công ty đào tạo có chuyên môn đảm nhận
Người viết các chuẩn và kỹ thuật: Những người phát triển chuẩn làm việc với những người quản lý để định ra những mặt công việc họ muốn chuẩn hoá và
để tiêu chuẩn hoá những yêu cầu thành những chính sách và thủ tục chuẩn hoá cho tổ chức Những kỹ năng quan trọng nhất đối với người phát triển chuẩn là ngôn ngữ và chữ viết truyền thông
Phát triển tiêu chuẩn và việc viết kỹ thuật là các hoạt động có liên quan với nhau Người viết kỹ thuật lấy thông tin và sản phẩm phần mềm, ứng dụng hoặc những sản phẩm công nghệ thông tin khác và viết tài liệu để mô tả những đặc điểm, chức năng, công dụng của chúng Người viết kỹ thuật phải có kỹ năng giao tiếp tốt trong cả lĩnh vực kỹ thuật và phi kỹ thuật Người viết dùng các kỹ năng giao tiếp kỹ thuật để nói và phát triển sự hiểu biết về sản phẩm được giới thiệu Đảm bảo chất lượng (QA): Các dạng kiểm tra khác nhau tuỳ thuộc vào sản phẩm được duyệt Một phân tích đảm bảo chất lượng thường được thực hiện với một kế hoạch phát triển khi nó bắt đầu Anh ta hay cô ta cần phải tham gia đến khi sản phẩm đầu tiên của nhóm phát triển xuất hiện Sau đó khi mà tài liệu đã có, người phân tích đảm bảo chất lượng phải xem xét sự thống nhất, hoàn thiện, chính xác uyển chuyển linh động của nó Bất cứ vấn đề nào xuất hiện trong quá trình xem xét phải được ghi lại để trình lên người quản lý dự án
Những người phân tích đảm bảo chất lượng phải có kỹ năng giao tiếp, kỹ năng giải quyết vấn đề để thực hiện công việc kiểm tra chất lượng Họ cần phải có kinh nghiệm trong tất cả các khía cạnh phát triển của dự án để biết nên làm cái gì
và vấn đề nảy sinh từ đâu Đồng thời sự nhạy cảm và khả năng phát hiện ra những vấn đề cần phê bình cũng rất quan trọng Không ai muốn bị nói trước công chúng
Trang 21là mình có lỗi mặc dù về mặt lý trí họ đều biết rằng công việc dự án sẽ có lợi từ những phê bình đó Nhân viên đảm bảo chất lượng cần phải nhạy cảm với cả những chính sách và vấn đề được phát hiện
Lập kế hoạch công nghệ: Các chuyên gia giám sát sự phát triển công nghệ xác định các xu hướng, lựa chọn các công nghệ thích hợp để thử nghiệm trong tổ chức và cuối cùng chạy đua trong thực hiện các kỹ thuật mới trong tổ chức Những nhân viên cao cấp là cầu nối giữa thế giới bên ngoài và cộng đồng các đại
lý với công ty Đội ngũ nhân viên sơ cấp có thể làm việc với nhân viên cao cấp để tìm ra những chỉ dẫn trong hợp tác và quản lý công nghệ
e Những vấn đề khác
Hỗ trợ sản phẩm: Nhân viên hỗ trợ sản phẩm làm việc cho nhóm người
dùng cuối hoặc bán hàng để cung cấp những chuyên môn kỹ thuật liên quan đến sản phẩm hoặc những hỗ trợ trên đường dây nóng khác Ngoài những kiến thức kỹ thuật về sản phẩm, các cá nhân trong công việc này còn phải có kỹ năng trả lời điện thoại tốt và phải nói bằng ngôn ngữ không chuyên đối với người sử dụng về các vấn đề
Tiếp thị sản phẩm: Nhân viên hỗ trợ tiếp thị làm việc cho nhà bán hàng để cung cấp những thông tin kỹ thuật cho đại diện bán hàng trong các tình huống tiếp thị Loại công việc này đòi hỏi khả năng giao tiếp và kỹ năng giao tiếp tốt với một vài kiến thức về tiếp thị, chẳng hạn như thu hẹp phạm vi giao tiếp, đề cập đến các
kỹ thuật để giới thiệu một cách hiệu quả với người đại diện bán hàng Tất cả các công ty tư vấn và phần cứng, phần mềm đều có người để làm những công việc này Thông thường nó được các nhân viên cao cấp thực hiện nhưng nếu bạn có trình độ chuyên môn ở những lĩnh vực cần thiết thì bạn cũng có thể làm được mà không cần là nhân viên cao cấp
Chuyên gia người sử dụng cuối: Chuyên gia người dùng cuối là người chuyển những yêu cầu sử dụng thành những ngôn ngữ kỹ thuật cho nhóm phát triển sử dụng Trong một vài tổ chức, đây là chức năng của người phân tích hệ thống hoặc là kỹ sư phần mềm Ở các công ty khác, có những môi giới giữa người
sử dụng cuối với bộ phận sử dụng để thực hiện chức năng này
Tóm lại mọi công ty đều phải có sự kết hợp của những đặc điểm công việc khác nhau ở tất cả các bộ phận
Trang 22Có thể liệt kê các thành viên quan trọng của nhóm phần mềm
6 Quản lý cơ sở dữ liệu
7 Kỹ sư trí tuệ nhân tạo
8 Chuyên viên tư vấn
9 Phân tích thông tin
10 Kỹ sư thông tin
21 Chuyên viên người dùng
Khi nghiên cứu một công nghệ để sản xuất một sản phầm, chúng ta cần chỉ
ra các đặc trưng của sản phẩm đó, vì đặc trưng của sản phầm sẽ có ảnh hưởng rất lớn đến qui trình công nghệ
3 Sản phẩm phần mềm – đặc trƣng và phân loại
3.1 Đặc trƣng của phần mềm
Trang 23Chúng ta có thể thấy khó khăn hàng đầu của việc phát triển phần mềm là do phần mềm là một hệ thống logic Do đó nó có đặc trưng khác biệt đáng kể so với các đặc trưng của phần cứng
Dưới đây là các đặc trưng chính tạo ra sự phức tạp trong quá trình phát triển cũng như sử dụng, bảo trì phần mềm
a Phần mềm không được chế tạo theo nghĩa cổ điển
Phần mềm cũng được thiết kế, phát triển như phần cứng, nhưng nó không được định hình trước Chỉ khi phát triển xong người ta có sản phẩm cụ thể và hiểu được nó có hiệu quả hay không Tức là ở các bước trung gian, chúng ta rất khó kiểm soát chất lượng của phần mềm
Giá thành của phần cứng chủ yếu bị chi phối bởi giá thành nguyên vật liệu
và chúng ta tương đối dễ kiểm soát Trong khi đó, giá thành phần mềm chủ yếu tập chung vào chi phí nhân công Quá trình phát triển phần mềm phụ thuộc vào con người (hiểu biết, khả năng vận dụng, kinh nghiệm và cách thức quản lý) và được tiến hành phát triển trong điều kiện môi trường (kỹ thuật, xã hội) đa dạng và không ngừng thay đổi Do đó chúng ta rất khó ước lượng được chi phí cũng như hiệu quả của phần mềm
Chức năng của phần mềm thường biến hóa, thay đổi theo thời gian (theo nơi
sử dụng) Chúng có thể sao chép dễ dàng
b Phần mềm không hỏng đi nhưng thoái hóa theo thời gian
Chất lượng phần mềm không suy giảm đi mà có xu hướng tốt lên sau mỗi lần có lỗi được phát hiện và sửa chữa Phần mềm không cảm ứng đối với những tác động của môi trường vốn gây cho phần cứng bị mòn cũ đi, nhưng nó cũng thoái hóa theo thời gian
Thực tế, phần mềm trải qua thời gian sử dụng cần phải được thay đổi (bảo trì) để đáp ứng nhu cầu luôn thay đổi của tổ chức sử dụng nó Mỗi khi thay đổi, sẽ xuất hiện thêm một số khiếm khuyết mới không thể tránh làm cho số lỗi tiềm ẩn trong phần mềm tăng lên Dần dần, phần mềm bị thoái hóa do tỷ lệ sai hỏng ngày càng tăng lên đến mức gây ra những thiệt hại không thể chấp nhận được
Việc bảo trì phần mềm phức tạp hơn nhiều và có bản chất khác hẳn so với bảo trì phần cứng do sự phức tạp của hệ thống phần mềm và sự không có sẵn phần
Trang 24thay thế cho bộ phận bị lỗi Chúng ta không thay thế bộ phận bị lỗi bằng cái có sẵn mà thực tế phải tạo ra một module mới Do đó, thông thường chỉ có nhà sản xuất phần mềm mới bảo trì (sửa chữa) được hỏng hóc Sẽ rất khó ước lượng được chi phí cho bảo trì phần mềm
Phần mềm vốn chứa lỗi tiềm tàng, theo quy mô càng lớn thì khả năng chứa lỗi càng cao Lỗi của phần mềm dễ được phát hiện bởi người ngoài
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
• Phần mềm không có danh mục các thành phần cố định như phần cứng
• Phần mềm thường được đặt hàng theo một đơn vị hoàn chỉnh, theo yêu cầu riêng của khách hàng
• Phần mềm ít khi có thể lắp ráp theo một khuôn mẫu có sẵn Yêu cầu với phần mềm thay đổi theo môi trường cụ thể mà ở đó nó được xây dựng Môi trường của phần mềm (gồm phần cứng, phần mềm nền, con người và tổ chức) không thể định dạng từ trước và lại thay đổi thường xuyên
Những yếu tố này dẫn đến chi phí cho phần mềm cao và rất khó đảm bảo được lịch biểu cho phát triển phần mềm
d Phần mềm là phức tạp, khó hiểu, vô hình
Phần mềm là hệ thống logic khó hiểu,chứa nhiều khái niệm khác nhau, khó hiểu Mối liên kết trong phần mềm mang tính logic, để hiểu nó cần phải tư duy trừu tượng
Phần mềm có tính không nhìn thấy, vì nó không phải vật thể vật lý Mỗi biểu diễn chỉ một khía cạnh (dữ liệu, hành vi, cấu trúc, giao diện), mà không phải
là một hệ thống tổng thể
e Sự thay đổi là bản chất của phần mềm
Phần mềm là mô hình thế giới thực thay đổi theo thời gian do môi trường nghiệp vụ thay đổi, do nhu cầu con người thay đổi
Phần mềm phải thay đổi thích ứng với môi trường vận hành, do các hệ phần mềm nền (hệ điều hành, ), thiết bị phần cứng thay đổi
Có thể phân loại phần mềm theo chức năng như sau:
Trang 25+ Phần mềm hệ thống và trợ giúp tiện ích (hệ điều hành, driver; BIOS, Network Operating system, communications protocol, messaging protocol, hệ quản trị cơ cở dữ liệu, ngôn ngữ lập trình,…)
+ Phần mềm ứng dụng (phần mềm văn phòng, phần mềm nghiệp vụ, time software, Business software, Engineering/scientific software, Embedded software, PC software, AI software, WebApps (Web applications))
Real-Trong phần mềm ứng dụng có thể chia thành 2 nhóm sau:
Sản phẩm đặt hàng
– Sản xuất theo đơn đặt hàng (hệ thống thông tin quản lý )
– Sản xuất đơn chiếc với yêu cầu đặc thù (nhận dạng)
Sản phẩm chung (software pakages)
– bán rộng rãi
– thỏa mãn yêu cầu chung số lớn người dùng
+ Phần mềm công cụ (Tools, CASE):
Nhằm trợ giúp cho quá trình phát triển phần mềm như các ngôn ngữ lập trình (soạn thảo, dịch, gỡ rối, ), các công cụ trợ giúp một hay nhiều giai đoạn phát triển (phân tích, thiết kế, quản lý dự án, kiểm thử, )
+ Phần mềm khoa học kỹ thuật, phần mềm nhúng, phần mềm máy tính cá nhân, phần mềm trí tuệ nhân tạo, phần mềm dựa trên nền Web…
3.2 Những khó khăn trong sản xuất phần mềm
(1) Không có phương pháp mô tả rõ ràng để định nghĩa yêu cầu của người dùng (khách hàng), sau khi bàn giao sản phẩm dễ phát sinh những trục trặc
(2) Với những phầnmềm quy mô lớn, tư liệu đặc tả đã cố định trong thời gian dài, do vậy khó đáp ứng nhu cầu thay đổi của người dùng một cách kịp thời (3) Nếu không có phương pháp luận thiết kế nhất quán mà thiết kế theo cách riêng (của công ty, nhóm), sẽ dẫn đến sự suy giảm chất lượng phần mềm (do phụ thuộc quá nhiều vào con người)
(4) Nếu không có chuẩn về làm tư liệu quy trình sản xuất phần mềm, dẫn đến những đặc tả không rõ ràng sẽ làm giảm chất lượng phần mềm
Trang 26(5) Việc kiểm thử phải được diễn ra thường xuyên qua các giai đoạn phát triển phần mềm chứ không chỉ xảy ra trong giai đoạn cuối
(6) Việc xem nhẹ khâu thiết kế thường dẫn đến làm giảm chất lượng phần mềm
(7) Việc xem thường việc tái sử dụng phần mềm (software reuse), dẫn đến năng suất lao động của nhóm làm phần mềm giảm
(8) Sự tự động hóa trong công nghệ phần mềm chưa cao
(9) Việc chứng minh tính đúng đắn của phần mềm là khó khăn, do vậy độ tin cậy của phần mềm cũng giảm đi
(10) Chuẩn về một phần mềm tốt không thể đo được một cách định lượng,
do vậy không thể đánh giá được một hệ thống đúng đắn hay không
(11) Đầu tư nhân lực lớn vào bảo trì sẽ làm giảm hiệu suất lao động của nhân viên
(12) Công việc bảo trì kéo dài làm giảm chất lượng của tư liệu và ảnh hưởng xấu đến những việc khác
(13) Việc quản lý dự án lỏng lẻo kéo theo quản lý lịch trình cũng không rõ ràng
(14) Không có tiêu chuẩn để ước lượng nhân lực và dự toán, làm kéo dài thời hạn và vượt kinh phí của dự án
Trên đây là những vấn đề phản ánh các khía cạnh khó khăn trong việc sản xuất phần mềm, do vậy cần nghiên cứu các quy trình công nghệ để tạo ra những phần mềm tốt
TỔNG KẾT
Chúng ta đã bước đầu tìm hiểu các khái niệm cơ bản như định nghĩa, đối tượng nghiên cứu … của Công nghệ phần mềm, nhằm định hướng những điều cốt lõi của môn học
Các vấn đề về sản phẩm phần mềm, nhằm nêu lên những đặc trưng của sản phẩm có ảnh hưởng như thế nào tới qui trình công nghệ để sản xuất sản phẩm ấy Các chức năng, chuyên môn, kiến thức… cần có của các con người có vai trò khác nhau trong Công nghệ phần mềm cũng được đưa ra giúp các bạn sinh
Trang 27viên ngành Sư phạm Tin học định hướng nghề nghiệp cho học sinh khi giảng dạy
3 Các đặc trưng của phần mềm và giải thích?
4 Các loại phần mềm? Giải thích nội dung mỗi loại?
5 Phân biệt chương trình và sản phẩm?
6 Tiến hóa phần mềm tương ứng với công nghệ, nhu cầu?
7 Khó khăn phát triển phần mềm (bản chất, sự thay đổi môi trường kỹ thuật, nghiệp vụ, xã hội)?
8 Thách thức đối với phát triển phần mềm? (nhu cầu, bảo trì, thời gian, giá
cả, khả năng phần cứng)
9 Phân biệt khoa học máy tính với Công nghệ Phần mềm?
10 Phân biệt Công nghệ Hệ thống với Công nghệ Phần mềm?
11 Tìm hiểu thêm trên Internet để biết khi xây dựng một sản phẩm phần mềm phải đầu tư những chi phí nào ?
12 Định nghĩa kỹ nghệ phần mềm – SE theo một trích dẫn nào đó và cho ý nghĩa của định nghĩa khi xác định các vấn đề cần quan tâm của kỹ nghệ phần mềm?
13 Tìm hiểu thêm trên Internet về các giai đoạn lịch sử phát triển của SE? đặc trưng của mỗi giai đoạn (sản phẩm, phương pháp, công cụ, quản lý và tổ chức làm việc)?
14 Giải thích nội dung các yếu tố cơ bản trong SE? Lấy ví dụ minh hoạ về phương pháp, công cụ?
Trang 28Chương 2 QUI TRÌNH PHÁT TRIỂN PHẦN MỀM
• Nắm được một số mô hình phát triển phần mềm
• Xác định những công việc phải làm trong quy trình phát triển phần mềm
Trang 29Ở giai đoạn vạch kế hoạch: Tại sao chúng ta xây dựng hệ thống này? Nó sẽ mang lại những lợi ích gì? Cần bao lâu để xây dựng nó?
Ở giai đoạn phân tích: Ai sẽ dùng nó? Nó làm được những gì cho ta? Ở đâu
và khi nào nó sẽ được sử dụng?
Ở giai đoạn thiết kế: Chúng ta sẽ xây dựng nó như thế nào?
Các hoạt động chính của từng giai đoạn là:
Giai đoạn vạch kế hoạch
a Khởi tạo dự án
Ở hoạt động này chúng ta cần phát triển/tiếp nhận các yêu cầu về hệ thống,
do đó dẫn đến một sự phân tích về tính khả thi, gồm: khả thi về kỹ thuật; khả thi
a Phát triển một chiến lược phân tích
Nhằm mô hình hóa hệ thống hiện tại; xác lập hệ thống mới
b Thu thập yêu cầu
Nhằm phát triển một hệ thống lôgic; tạo một mô hình nghiệp vụ để trình bày: Dữ liệu nghiệp vụ; Các tiến trình xử lý nghiệp vụ
c Phát triển một hệ thống yêu cầu
Giai đoạn này nhằm trả lời câu hỏi: Cái gì hệ thống sẽ làm cho ta? Ở đâu và khi nào hệ thống sẽ được dùng?
Giai đoạn thiết kế
Bao gồm:
Trang 30a Phát triển một chiến lược thiết kế
b Thiết kế kiến trúc và giao diện
c Phát triển cơ sở dữ liệu và các đặc tả file
d Phát triển thiết kế chương trình để xác định: Chương trình nào phải viết? Mỗi chương trình sẽ làm gì?
Giai đoạn triển khai
Bao gồm:
a Tiến hành xây dựng hệ thống:
+ Tạo dựng hệ thống (viết mã)
+ Kiểm tra thử nghiệm
b Cài đặt hệ thống và triển khai một kế hoạch tập huấn cho người sử dụng
Trang 31Cũng như mọi ngành sản xuất khác, qui trình là một trong những yếu tố cực
kỳ quan trọng đem lại sự thành công cho các nhà sản xuất phần mềm, nó giúp cho mọi thành viên trong dự án từ người cũ đến người mới, trong hay ngoài công ty đều có thể xử lý đồng bộ công việc tương ứng vị trí của mình thông qua cách thức chung của công ty, hay ít nhất ở cấp độ dự án
Có thể nói qui trình phát triển/xây dựng phần mềm (Software Development/Engineering Process - SEP) có tính chất quyết định để tạo ra sản phẩm chất luợng tốt với chi phí thấp và năng suất cao, cũng như đồng bộ hóa hoạt động trong dự án Điều này có ý nghĩa quan trọng đối với các công ty sản xuất hay gia công phần mềm củng cố và phát triển cùng với nền công nghiệp phần mềm đầy tính cạnh tranh
Quy trình phát triển phần mềm (quy trình/tiến trình phần mềm) là một tập hợp các hoạt động được tổ chức và cần phải thực hiện trong quá trình xây dựng một hệ thống phần mềm
Quy trình phát triển phần mềm gồm 4 hoạt động cơ bản:
+ Đặc tả yêu cầu: chỉ ra những “đòi hỏi” cho cả các yêu cầu chức năng và phi chức năng
+ Phát triển phần mềm: tạo ra phần mềm thỏa mãn các yêu cầu được chỉ ra trong “Đặc tả yêu cầu”
+ Kiểm thử phần mềm: để bảo đảm phần mềm sản xuất ra đáp ứng những
“đòi hỏi” được chỉ ra trong “Đặc tả yêu cầu”
+ Thay đổi phần mềm: đáp ứng nhu cầu thay đổi của khách hàng
Ở đây, đặc tả là quá trình xác định những dịch vụ được yêu cầu, những ràng buộc trong phát triển và hoạt động của hệ thống Phần chính yếu là xác định yêu cầu Qui trình kỹ nghệ yêu cầu gồm: Nghiên cứu khả thi; Phân tích yêu cầu; Đặc
tả yêu cầu; Đánh giá yêu cầu
Hoạt động thiết kế và cài đặt là quá trình chuyển những đặc tả hệ thống thành một hệ thống thực thi Thiết kế nhằm hiện thực những đặc tả thành những cấu trúc phần mềm Cài đặt nhằm chuyển cấu trúc thành chương trình thực thi Thiết kế bao gồm: Đặc tả trừu tượng; Thiết kế đối tượng dữ liệu; Thiết kế hệ
Trang 32thống; Thiết kế kiến trúc; Thiết kế giao diện; Thiết kế thành phần; Thiết kế cấu trúc dữ liệu; Thiết kế giải thuật…
Lập trình là giai đoạn chuyển thiết kế thành chương trình, bắt lỗi và sửa lỗi, đây là một hoạt động cá nhân không có một tiến trình chung cho mọi người Người lập trình phải tiến hành kiểm thử để gỡ lỗi chương trình Gỡ lỗi là hoạt động của lập trình Lập trình đòi hỏi chọn ngôn ngữ thích hợp và có kinh nghiệm, phong cách lập trình tốt Để đảm bảo độ tin cậy, cần biết lập trình tránh lỗi, thứ lỗi
và ném ngoại lệ
Đánh giá phần mềm hay còn gọi là kiểm chứng và thẩm định được sử dụng
để chỉ ra rằng hệ thống đã thực hiện theo đúng các đặc tả và thoả mãn mọi yêu cầu của khách hàng hay không? Để đánh giá cần phải kiểm thử hệ thống
Cải tiến phần mềm nhằm duy trì và cải tiến hệ thống theo những biến đổi về yêu cầu Phần mềm phải mềm dẻo vì nó cần phải thay đổi Môi trường nghiệp vụ
và kỹ thuật luôn thay đổi, vì vậy phần mềm cần thay đổi để phù hợp với chúng, do
đó tiến hóa là tất yếu Việc phân định phát triển và tiến hoá là tương đối; giữa chúng có quan hệ chặt chẽ với nhau Phát triển là làm mới, tiến hóa trên cơ sở hệ thống đã có
1.3 Ba giai đoạn chính của quy trình phát triển phần mềm
Tiến trình phát triển kỹ nghệ phần mềm chứa ba giai đoạn chính, bất kể mô
hình kỹ nghệ phần mềm được chọn lựa Ba giai đoạn này là xác định, phát triển
và bảo trì, được gặp trong mọi dự án phát triển phần mềm, bất kể tới miền ứng
dụng, kích cỡ và độ phức tạp
Giai đoạn xác định tập trung vào khái niệm “cái gì” Tức là trong khi xác
định, người phát triển phần mềm cố gắng tập trung vào xác định thông tin nào cần được xử lý, chức năng và hiệu năng nào là cần có, giao diện nào cần được thiết lập, ràng buộc thiết kế nào hiện có và tiêu chuẩn hợp lệ nào cần có để xác định ra một hệ thống thành công
Yêu cầu chủ chốt của hệ thống và phần mềm cũng được xác định Mặc dầu các phương pháp được áp dụng trong giai đoạn xác định thay đổi tùy theo mô hình kỹ nghệ phần mềm (hay tổ hợp các mô hình) được áp dụng, có ba bước riêng:
Trang 331 Phân tích hệ thống: Phân tích hệ thống xác định ra vai trò của từng phần
tử trong một hệ thống dựa trên máy tính, tức là vạch ra vai trò mà phần mềm (cần phát triển) sẽ giữ
2 Lập kế hoạch dự án phần mềm: Một khi vai trò của phần mềm đã được thiết lập, rủi ro đã được phân tích, tài nguyên đã được cấp phát, chi phí đã được ước lượng thì phải xác định cụ thể các công việc cần thực hiện và lập lịch thực hiện chúng
3 Phân tích yêu cầu: Trong bước phân tích hệ thống chúng ta chỉ xác định được vai trò chung của phần mềm Sau khi đã chính thức quyết đinh phát triển phần mềm, chúng ta cần phải phân tích để xác định chi tiết lĩnh vực thông tin, các chức năng cũng như các ràng buộc khi vận hành của phần mềm Phân tích yêu cầu
là khâu kỹ thuật quan trọng đầu tiên để đảm bảo chất lượng của phần mềm Nếu xác định sai yêu cầu thì các bước kỹ thuật khác có tốt đến đâu thì phần mềm cũng
sẽ không được đưa vào sử dụng
Qui trình kỹ nghệ yêu cầu gồm: Nghiên cứu khả thi (Feasibility study); Phân tích yêu cầu; Đặc tả yêu cầu (specification); Đánh giá yêu cầu
Giai đoạn phát triển tập trung vào khái niệm thế nào Tức là, trong giai
đoạn này người phát triển phần mềm từng bước xác định cách cấu trúc dữ liệu và kiến trúc phần mềm cần xây dựng, cách các chi tiết thủ tục được cài đặt, cách dịch thiết kế vào ngôn ngữ lập trình (hay ngôn ngữ phi thủ tục) và cách thực hiện kiểm thử Phương pháp được áp dụng trong giai đoạn phát triển sẽ thay đổi tùy theo mô hình nhưng có ba bước đặc thù xuất hiện dưới dạng:
1 Thiết kế phần mềm: Là quá trình “dịch” các yêu cầu phần mềm thành một tập các biểu diễn (dựa trên đồ họa, bảng, hay ngôn ngữ), mô tả cho cấu trúc dữ liệu, kiến trúc, thủ tục thuật toán và đặc trưng giao diện
Thiết kế bao gồm: Đặc tả trừu tượng; Thiết kế đối tượng dữ liệu; Thiết kế hệ thống; Thiết kế kiến trúc (Architectural design); Thiết kế giao diện; Thiết kế thành phần; Thiết kế cấu trúc dữ liệu; Thiết kế giải thuật…
2 Mã hóa: Các biểu diễn thiết kế phải được biểu diễn bởi một (hay một vài) ngôn ngữ nhân tạo (ngôn ngữ lập trình qui ước hay ngôn ngữ phi thủ tục được dùng trong khuôn cảnh công nghệ phần mềm thế hệ thứ tư - 4GT) mà sẽ tạo ra kết quả là các lệnh thực hiện được trên máy tính
Trang 343 Kiểm thử phần mềm: Một khi phần mềm đã được cài đặt dưới dạng máy thực hiện được, cần phải kiểm thử nó để phát hiện các lỗi phân tích, thiết kế, cài đặt và đánh giá tính hiệu quả
Giai đoạn bảo trì tập trung vào những thay đổi gắn với việc sửa lỗi, thích
ứng khi môi trường phần mềm tiến hóa và sự nâng cao gây ra bởi sự thay đổi yêu cầu của người dùng Giai đoạn bảo trì áp dụng lại các bước của giai đoạn xác định
và phát triển, nhưng là việc thực hiện trong hoàn cảnh phần mềm hiện có Có ba kiểu thay đổi gặp phải trong giai đoạn bảo trì:
1 Sửa đổi: Cho dù có các hoạt động bảo đảm chất lượng tốt nhất, vẫn có thể
là khách hàng sẽ phát hiện ra khiếm khuyết trong phần mềm Bảo trì sửa đổi làm thay đổi phần mềm để sửa các khiếm khuyết (lỗi lập trình, thuật toán, thiết kế )
2 Thích nghi: Qua thời gian, môi trường ban đầu (như CPU, hệ điều hành, ngoại vi) để phát triển phần mềm có thể sẽ thay đổi Bảo trì thích nghi thực hiện việc sửa đổi phần mềm để thích hợp với những thay đổi môi trường ngoài
3 Nâng cao: Khi phần mềm được dùng, khách hàng/người dùng sẽ nhận ra những chức năng phụ sẽ có lợi Bảo trì hoàn thiện mở rộng phần mềm ra ngoài các yêu cầu chức năng gốc của nó
2 Mô hình phát triển phần mềm
Mô hình phát triển phần mềm (mô hình tiến trình phát triển phần mềm) là sự trừu tượng tiến trình phát triển theo góc nhìn nào đó Với một tiến trình có các góc nhìn sau:
+ Luồng công việc: trình tự các hoạt động của tiến trình phát triển
+ Luồng dữ liệu: luồng các dữ liệu di chuyển khi phát triển hệ thống phần mềm
+ Vai trò/hành động: hành vi của tác nhân đối với hệ thống phần mềm Tùy theo mô hình phát triển phần mềm, các nhóm công việc được triển khai theo những cách khác nhau Để sản xuất cùng một sản phẩm phần mềm người ta
có thể dùng các mô hình khác nhau Tuy nhiên không phải tất cả các mô hình đều thích hợp cho mọi ứng dụng
Một số mô hình tiến trình phát triển phần mềm phổ biến:
Trang 35Mô hình thác nước (Water Fall Model)
Mô hình phát triển tiến hóa (Evolutionary development Model)
Mô hình bản mẫu (Prototyping Model)
Mô hình xoắn ốc (Spiral Model)
Mô hình RAD (Rapid Application Development Model)
Mô hình tăng trưởng (Incremental Model)
Mô hình phát triển hệ thống hình thức (Formal systems development Model)
Mô hình phát triển dựa trên sử dụng lại (Reuse-based development Model)
Mô hình dựa trên kỹ nghệ thứ hệ thứ 4 (4 GT)
Mô hình RUP (Rational Unified Process Model)
Nhìn chung các mô hình tiến trình phát triển phần mềm đều có một khung làm việc như sau:
- Khung tiến trình (Process framework) gồm:
+ Khung công việc (Framework activities)
- Hoạt động hỗ trợ (umbrella activities) như: Điều khiển và lần vết dự án phần mềm; Quản lý rủi ro; Bảo đảm chất lượng phần mềm; Kiểm tra kỹ thuật hình thức; Đo lường; Quản lý cấu hình phần mềm; Quản lý sử dụng lại; Tạo và chuẩn
bị những sản phẩm cộng tác
Trang 36Dưới đây là một số mô hình phát triển phần mềm tiêu biểu
2.1 Mô hình thác nước (The waterfall model)
Đôi lúc còn được gọi là mô hình cổ điển (classic model) hay mô hình tuyến tính (the linear sequential model) Mô hình này xem quá trình xây dựng một sản phẩm phần mềm bao gồm nhiều 5 giai đoạn tách biệt gồm: phân tích yêu cầu, thiết kế, cài đặt và kiểm thử đơn thể, tích hợp tổng thể và kiểm thử, bảo trì và phát triển, sau khi hoàn tất một giai đoạn thì chuyển đến giai đoạn sau
Mô hình này được tóm tắt như sau:
Hình 2.2 Mô hình thác nước
Ưu điểm:
Các pha được xác định rõ ràng (đầuvào/ra); Thấy được trình tự kỹ nghệ từ đầu đến sản phẩm cuối; Bảo trì thuận lợi; Thích hợp khi yêu cầu của sản phẩm là được hiểu tốt
Phân tích yêu cầu
Thiết kế
Cài đặt và thử nghiệm đơn thể
Thử nghiệm và tích hợp tổng thể
Bảo trì và phát triển
Trang 37Nhược điểm:
Mô hình này chỉ thích hợp khi các yêu cầu rõ ràng và những thay đổi được giới hạn Tuy vậy, bản chất của phát triển phần mềm là quá trình lặp đi lặp lại chứ không phải tuần tự Khách hàng không thể đặc tả tất cả yêu cầu một cách chính xác và đầy đủ ngay từ ban đầu Do đó khó đáp ứng yêu cầu thay đổi của khách hàng và khi sai sót phát hiện muộn có thể là thảm họa cho dự án
Khách hàng thường phải chờ đợi rất lâu để thấy được phiên bản đầu tiên thực hiện được của sản phẩm, đòi hỏi khách hàng phải kiên nhẫn
Tồn tại sự chờ đợi giữa các đội phát triển trong nhóm làm việc
2.2 Mô hình bản mẫu (Prototyping model)
Thường thì khách hàng thường khó nói rõ được điều họ mong đợi và người phát triển thường hiểu sai yêu cầu của khách hàng Khách hàng thường phát hiện sai sót khi dùng sản phẩm, vì vậy dẫn đến nhu cầu tạo nên môi trường để thu thập yêu cầu của khách hàng Điều này là phù hợp với đặc trưng dùng lại của phần mềm
Mô hình bản mẫu dựa trên ý tưởng xây dựng một mẫu thử ban đầu (Prototype – nguyên mẫu) và đưa cho người sử dụng xem xét; sau đó, tinh chỉnh mẫu thử qua nhiều phiên bản cho đến khi thỏa mãn yêu cầu của người sử dụng thì dừng lại Mẫu thử ban đầu như là một cơ chế để nhận diện chính xác yêu cầu của khách hàng và có thể trở thành sản phẩm Khi các yêu cầu của người sử dụng được thỏa mãn thì cũng là lúc chúng ta đã xây dựng xong hệ thống Mẫu thử ban đầu có thể loại bỏ, mẫu thử chỉ có tác dụng để làm sáng tỏ yêu cầu của người sử dụng
Cách tiếp cận làm bản mẫu cho kỹ nghệ phần mềm là cách tiếp cận tốt nhất khi:
- Mục tiêu tổng quát cho phần mềm đã xác định, nhưng chưa xác định được input và output
- Người phát triển không chắc về hiệu quả của thuật toán, về thích nghi hệ điều hành hay giao diện người máy cần có
Khi đã có bản mẫu, người phát triển có thể dùng chương trình đã có hay các công cụ phần mềm trợ giúp để sinh ra chương trình làm việc
Trang 38Làm bản mẫu là tạo ra một mô hình cho phần mềm cần xây dựng Mô hình
có thể có 3 dạng:
1 Bản mẫu trên giấy hay trên máy tính mô tả giao diện người-máy làm người dùng hiểu được cách các tương tác xuất hiện
2 Bản mẫu cài đặt chỉ một tập con chức năng của phần mềm mong đợi
3 Bản mẫu là một chương trình có thể thực hiện một phần hay tất cả chức năng mong muốn nhưng ở mức sơ lược và cần cải tiến thêm các tính năng khác tùy theo khả năng phát triển
Trước hết người phát triển và khách hàng gặp nhau và xác định mục tiêu tổng thể cho phần mềm, xác định các yêu cầu đã biết, các miền cần khảo sát thêm Tiếp theo là giai đoạn thiết kế nhanh, tập trung vào việc biểu diễn các khía cạnh của phần mềm thấy được đối với người dùng (input và output), và xây dựng một bản mẫu Người dùng đánh giá và làm mịn các yêu cầu cho phần mềm Tiến trình này lặp đi lặp lại cho đến khi bản mẫu thoả mãn yêu cầu của khách hàng, đồng thời giúp người phát triển hiểu kỹ hơn nhu cầu nào cần phải thực hiện
Một biến thể của mô hình này là mô hình thăm dò, trong đó các yêu cầu được cập nhật liên tục và bản mẫu được tiến hóa liên tục để trở thành sản phẩm cuối cùng
Có thể tóm lược 6 bước làm bản mẫu như sau:
+ Khởi đầu bằng pha thu thập yêu cầu
+ Tiến hành thiết kế nhanh
+ Xây dựng bản mẫu
+ Đánh giá của khách hàng
+ Làm mịn bản mẫu
+ Nếu chưa được sản phẩm thì chuyển sang thiết kế nhanh và lặp lại
Mô hình làm bản mẫu có một số vấn đề như:
- Do sự hoàn thiện dần (tiến hóa) của bản mẫu, phần mềm nhiều khi có tính cấu trúc không cao, dẫn đến khó kiểm soát, khó bảo trì
- Khách hàng nhiều khi thất vọng với việc phát triển phần mềm do họ nhầm tưởng bản mẫu là sản phẩm cuối cùng hướng tới người sử dụng Khách
Trang 39hàng hối thúc nhà phát triển hoàn thành sản phẩm một khi thấy được các prototype đầu tiên Khách hàng cũng có thể không dành nhiều công sức vào đánh giá bản mẫu
- Thiếu tầm nhìn của cả quy trình
- Các hệ thống được cấu trúc một cách nghèo nàn Những chọn lựa không tốt có thể được tích hợp trong hệ thống
- Yêu cầu kỹ năng đặc biệt (sử dụng công cụ CASE)
Nên áp dụng mô hình này cho:
• Những hệ thống tương tác ở mức độ nhỏ hoặc vừa
• Trên một phần của những hệ thống lớn hay những hệ thống có thời gian chu kỳ tồn tại ngắn
2.3 Mô hình xoắn ốc (The spiral model)
Mô hình này được Boehm đưa ra nên đôi lúc còn được gọi là mô hình Boehm's (The Boehm's spiral model) Nó có thể xem là sự kết hợp giữa mô hình thác nước (tính trình tự tốt nhưng rủi ro cao) và mô hình mẫu (loại trừ rủi ro nhưng trình tự không rõ ràng) và đồng thời thêm một thành phần mới - phân tích rủi ro Bao gồm bốn hoạt động chính:
Lập kế hoạch (Planning): Xác định mục tiêu, tương tác và ràng buộc
Phân tích rủi ro (Risk analysis): Phân tích các lựa chọn và các chỉ định/giải quyết rủi ro
Trang 40Hình 2.3 Mô hình xoắn ốc
Trong vòng đầu tiên của xoáy ốc, mục đích, lựa chọn, các ràng buộc được định nghĩa và các nguy cơ được xác định và phân tích Nếu phân tích các lỗi chỉ ra rằng có một vài yêu cầu không chắc chắn, tạo mẫu có thể dược tiến hành để giúp
đỡ nhà phát triển và khách hàng Mô phỏng và các mô hình khác có thể được sử dụng để xác định vấn đề và làm mịn các yêu cầu
Khách hàng đánh giá công việc và đưa ra các gợi ý Trên cơ sở ý kiến đó, phần tiếp theo của lập kế hoạch và phân tích lỗi xuất hiện
Mô hình xoáy ốc hiện nay là mô hình hướng tiếp cận hiện thực nhất để phát triển các hệ thống lớn Nó sử dụng mô hình mẫu như là cơ chế loại trừ lỗi, cho phép nhà phát triển áp dụng mô hình mẫu tại mỗi chu trình phát triển Nó kế thừa cách tiếp cận hệ thống từng bước từ chu kỳ sống cổ điển nhưng kết hợp với quá trình lặp lại phù hợp với thực tế
Giống như các quy trình khác, mô hình xoáy ốc không phải là công cụ vạn năng Đối với những hệ thống lớn, khó có thể điều khiển sự tiến hóa của phần mềm Nó đòi hỏi phải có kỹ năng đánh giá lỗi Hơn nữa cần phải có thêm thời gian để kiểm thử phương pháp mới này Khó thuyết phục khách hàng về việc
triển hệ thống?
Phân tích rủi ro trên
cơ sở các yêu cầu ban đầu
Phân tích rũi ro trên
cơ sở các phản ứng của kh hàng