Giáo trình Nhập môn công nghệ phần mềm (Trình độ Cao đẳng)

BỘ LAO ĐỘNG -THƯƠNG BINH VÀ Xà HỘI TRƯỜNG CAO ĐẲNG NGHỀ KỸ THUẬT CÔNG NGHỆ -----š›&š›----- GIÁO TRÌNH MÔN HỌC : NHẬP MÔN CÔNG NGHỆ PHẦN MỀM NGHỀ: CÔNG NGHỆ THÔNG TIN TRÌNH ĐỘ: CAO ĐẲNG Ban hành kèm theo Quyết định số: 245/QĐ-CĐNKTCN ngày 23 tháng 10 năm 2020 của Hiệu trưởng Trường Cao đẳng nghề Kỹ thuật Công nghệ Hà Nội, năm 2021 (Lưu hành nội bộ) 1TUYÊN BỐ BẢN QUYỀN: Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể được phép dùng nguyên bản hoặc trích dùng cho

pdf63 trang | Chia sẻ: Tài Huệ | Ngày: 21/02/2024 | Lượt xem: 5 | Lượt tải: 0download
Tóm tắt tài liệu Giáo trình Nhập môn công nghệ phần mềm (Trình độ Cao đẳng), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
các mục đích về đào tạo và tham khảo. Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm. MÃ TÀI LIỆU: MHCNTT 18 2LỜI GIỚI THIỆU Mục tiêu của môn Nhập môn Công nghệ phần mềm là cung cấp cho sinh viên những kiến thức cơ bản về tất cả mọi hoạt động liên quan đến phát triển phần mềm và kiến thức cơ bản về UML trong phát triển phần mềm. Qua môn học này sinh viên có kỹ năng sử dụng công cụ phần mềm để thực hiện các pha trong quá trình phát triển phần mềm và qua đó nâng cao năng lực làm việc nhóm và kỹ năng mềm. Sinh viên tham dự lớp và thực hành đầy đủ đặc biệt tích cực tham gia thảo luận trình bày trên lớp là yêu cầu quan trọng. Các nội dung chính được trình bày trong tài liệu này gồm các chương: - Giới thiệu chung về phần mềm và công nghệ phần mềm - Một số mô hình vòng đời phát triển phần mềm - Xác định và đặc tả yêu cầu - Thiết kế phần mềm - Kiểm thử phần mềm Mặc dầu có rất nhiều cố gắng, nhưng không tránh khỏi những khiếm khuyết, rất mong nhận được sự đóng góp ý kiến của độc giả để giáo trình được hoàn thiện hơn. Xin chân thành cảm ơn! Hà Nội, ngày 23 tháng 04 năm 2021 Tham gia biên soạn 1. Chủ biên Phùng Sỹ Tiến Trưởng khoa 2. Tập thể Giảng viên Khoa CNTT Mọi thông tin đóng góp chia sẻ xin gửi về hòm thư tienphungktcn@gmail.com, hoặc liên hệ số điện thoại 0913393834-0983393834 3MỤC LỤC LỜI GIỚI THIỆU ................................................................................................... 2 CHƯƠNG 1: GIỚI THIỆU CHUNG ...................................................................... 7 VỀ PHẦN MỀM VÀ CÔNG NGHỆ PHẦN MỀM ................................................ 7 1. Khái niệm về phần mềm ............................................................................. 7 1.1. Định nghĩa chung về phần mềm .......................................................... 7 1 .2 . Các đặc tính của phần mềm ....................................................................... 8 1.3. Thế nào là một phần mềm tốt ? ......................................................... 10 1.4. Ứng dụng phần mềm ........................................................................ 11 2. Công nghệ phần mềm ................................................................................ 12 CHƯƠNG 2: MỘT SỐ MÔ HÌNH VÒNG ĐỜI PHÁT TRIỂN PHẦN MỀM ...... 14 1. Các khái niệm cơ bản ................................................................................... 14 1.1. Vòng đời phần mềm ......................................................................... 14 1.2. Quy trình phát triển phần mềm .............................................................. 15 2. Một số mô hình vòng đời phát triển phần mềm............................................. 16 2.2. Mô hình thuần thục khả năng ................................................................ 16 2.3. Mô hình chế thử .................................................................................... 17 2.4. Mô hình phát triển ứng dụng nhanh (RAD) ........................................... 18 2.5. Mô hình xoắn ốc ................................................................................... 20 2.6. Mô hình theo thành phần ....................................................................... 21 2.9. Mô hình chữ V ..................................................................................... 23 CHƯƠNG 3: XÁC ĐỊNH VÀ ĐẶC TẢ YÊU CẦU ............................................ 24 1. Tổng quan về yêu cầu phần mềm ................................................................. 24 1.1. Khái niệm yêu cầu phần mềm ............................................................... 24 1.2. Phân loại các yêu cầu phần mềm ........................................................... 24 2. Xác định yêu cầu phần mềm ......................................................................... 24 2.1. Nội dung xác định yêu cầu phần mềm ................................................... 24 2.2 Phát hiện các yêu cầu phần mềm ............................................................ 25 2.3. Phân tích các yêu cầu phần mềm và thương lượng với khách hàng........ 26 3. Đặc tả yêu cầu .............................................................................................. 26 4. Thẩm định yêu cầu ....................................................................................... 27 CHƯƠNG 4: THIẾT KẾ PHẦN MỀM ................................................................ 35 1. Tổng quan về thiết kế phần mềm .................................................................. 35 1.1 Khái niệm và vai trò của thiết kế ............................................................ 35 1.2. Tiến trình thiết kế .................................................................................. 37 4.1. Một số khái niệm UML ......................................................................... 40 4.2. Tiến trình thiết kế hướng đối tượng ....................................................... 43 CHƯƠNG 5: KIỂM THỬ PHẦN MỀM .............................................................. 49 1. Một số khái niệm cơ bản .............................................................................. 49 1.1 Đặc tả và lỗi phần mềm. ......................................................................... 50 1.2. Kiểm thử và tiến trình kiểm thử............................................................. 52 1.3 Các mức kiểm thử .................................................................................. 53 1.4 Một số thuật ngữ .................................................................................... 56 2. Các cấp độ kiểm thử ..................................................................................... 57 2.1. Kiểm thử đơn vị.................................................................................... 57 2.2. Kiểm thử tích hợp ................................................................................. 57 42.3. Kiểm thử hệ thống ................................................................................ 58 2.4. Kiểm thử chấp nhận.............................................................................. 58 3. Các kỹ thuật kiểm thử. ................................................................................. 58 3.1. Kiểm thử hộp đen - Black-box Testing .................................................. 58 3.2 Kiểm thử hộp trắng - White-box Testing ................................................ 60 TÀI LIỆU THAM KHẢO .................................................................................... 62 5GIÁO TRÌNH MÔN HỌC Tên môn học: Nhập môn công nghệ phần mềm Mã môn học: MHCNTT 18 Vị trí, tính chất, ý nghĩa và vai trò môn học: - Vị trí: Môn học Nhập môn Công nghệ phần mềm dành cho sinh viên trình độ Cao đẳng. Môn học thuộc khối kiến thức chuyên ngành.. - Tính chất: Môn học giúp sinh viên hiểu rõ được các khái niệm và phương pháp kỹ thuật liên quan đến tiến trình phát triển phần mềm, bắt đầu từ công việc đặc tả, xác định yêu cầu, phân tích thiết kế phần mềm. Giới thiệu các công cụ hỗ trợ thiết kế, lập trình để phát triển phần mềm và kiểm thử phần mềm để sinh viên có kiến thức tổng quan nhất về quy trình phát triển một phần mềm và ứng dụng được kiến thức đó vào công việc phát triển phần mềm sau này. - Ý nghĩa và vai trò của môn học: Đây là môn học cơ sở ngành, cung cấp cho sinh viên các kiến thức cơ bản về phần mềm và lập trình phần mềm. Mục tiêu của môn học: - Về kiến thức: + Trình bày được một số kiến thức cơ bản về khái niệm về phần mềm và công nghệ phần mềm, các phương pháp kỹ thuật liên quan đến tiến trình phát triển phần mềm. + Hiểu rõ các công cụ hỗ trợ công việc đặc tả và xác định yêu cầu, thiết kế và lập kế hoạch để phát triển phần mềm.; - Về kỹ năng + Lựa chọn được phương pháp kỹ thuật phù hợp cho một dự án phần mềm. + Vận dụng được các công cụ hỗ trợ, kỹ thuật lập trình để phát triển phần mềm + Xác định và ý thức được mục tiêu, ý nghĩa và vị trí của học phần Nhập môn Công nghệ phần mềm trong chương trình đào tạo - Về năng lực tự chủ và trách nhiệm: + Đi học đầy đủ, tích cực tham gia thao luận, chăm chỉ đọc tài liệu tham khảo để có được những kiến thức quan trọng của công nghệ phần mềm đối với khoa học máy tính. + Hăng say, nhiệt tình, có khả năng tự nghiên cứu Nội dung của môn học: Số TT Tên chương, mục Thời gian Tổng số Lý thuyết Thực hành Kiểm tra* (LT hoặc TH) I Giới thiệu chung về phần mềm và công nghệ phần mềm 6 3 3 Khái niệm về phần mềm Công nghệ phần mềm II Một số mô hình vòng đời phát triển phần mềm 6 3 3 Các khái niệm cơ bản Một số mô hình vòng đời phát 6triển phần mềm III Xác định và đặc tả yêu cầu 11 7 4 Tồng quan về yêu cầu phần mềm Xác định yêu cầu phần mềm Đặc tả yêu cầu Thẩm định yêu cầu IV Thiết kế phần mềm 15 11 3 1 Tổng quan về thiết kế phần mềm Thiết kế kiến trúc Thiết kế hệ thống hướng chức năng Thiết kế hệ thống hướng đối tượng Thiết kế giao diện V Kiểm thử phần mềm Một số khái niệm cơ bản Các cấp độ kiểm thử Các kỹ thuật kiểm thử 6 3 3 Thi kết thúc môn học 1 1 Cộng 45 27 16 2 7CHƯƠNG 1: GIỚI THIỆU CHUNG VỀ PHẦN MỀM VÀ CÔNG NGHỆ PHẦN MỀM Mã chương: MHCNTT 18.1 Mục tiêu: - Nêu được các định nghĩa, khái niệm về phần mềm và công nghệ phần mềm. - Nêu được lịch sử hình thành và phát triển công nghệ phần mềm. - Trình bày được tầm quan trọng của công nghệ phần mềm 1. Khái niệm về phần mềm Mục tiêu: Nắm được định nghĩa phần mềm; Nắm được các đặc tính của phần mềm. 1.1. Định nghĩa chung về phần mềm Trong ba thập kỷ đầu tiên của thời đại tính toán, thách thức chủ yếu là phải phát triển ứng dụng phần cứng máy tính để làm giảm bớt giá thành xử lý và lưu trữ dữ liệu. Trong suốt thập kỷ 80, tiến bộ trong vi điện tử đã làm phát sinh năng lực tính toán mạnh hơn với giá thành thấp đáng kể. Ngày nay vấn đề đã khác đi. Thách thức chủ yếu là phải cải tiến chất lượng và giảm giá thành của các giải pháp dựa trên máy tính - giải pháp được cài đặt bằng phần mềm. Vậy phần mềm là gì? Định nghĩa 1: Phần mềm là tập họp: 1. Các lệnh (chương trình máy tính) khi được thực hiện sẽ cung cấp những chức năng và kết quả mong muốn. 2. Cấu trúc dữ liệu làm cho chương trình thao tác thông tin thích hợp. 3. Các tư liệu mô tả thao tác và cách sử dụng chương trình. Định nghĩa 2: 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à các phần mềm. Nghĩa hẹp- phần mềm là dịch vụ chương trình để tăng khả năng xử lý của phần cứng máy tính. Nghĩa rộng- phần mềm là tập 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 các mục đích nào đó bằng phần cứng. Tóm lại : Phần mềm được biểu diễn như hình 1.1. Hình 1.1. Phần mềm là gi? 8Trong đó: ■ Nhó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ể hoá của một hệ thống; -Các phương pháp tiếp cận và giải quyết vấn đề; -Các trình tự thiết kế và phát triển được chuẩn hoá (quy trình); -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. ■ Nhóm các chương trình là phần giao diện với phần cứng, con người từ các nhóm lệnh chỉ thị cho máy tính biết trình tự thao tác xử lý dữ liệu. ■ Nhóm các tư liệu: -Những tài liệu hữu ích, có giá trị cao và rất cần thiết để phát triển, vận hành và bảo trì phần mềm. -Để tạo ra phần mềm với độ tin cậy cao cần phải 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. ■ Những yếu tố khác: -Sản xuất phần mềm phụ thuộc rất nhiều vào con người (kỹ sư phần mềm). Khả năng hệ thống hoá trừu tượng, khả năng lập trình, kỹ năng công nghệ, kinh nghiệm làm việc, tầm bao quát... khác nhau ở mỗi người. -Phần mềm phụ thuộc nhiều vào ý tưởng và kỹ năng của con người/nhóm tác giả. 1 .2 . Các đặc tính của phần mềm Để hiểu được khái niệm phần mềm, cần xem xét các đặc trưng của phần mềm làm cho nó khác biệt với những thứ khác mà con người đã xây dựng, Khi phần cứng được xây dựng, tiến trình sáng tạo của con người (phân tích, thiết kế, xây dựng, kiểm thử) cuối cùng được dịch thành dạng vật lý. Phần mềm là hệ thống logic, không phải là hệ thống vật lý. Do đó, phần mềm có các đặc trưng khác với các đặc trưng của phần cứng: Phần mềm được phát triển hay được kỹ nghệ hoá, nó không được chế tạo theo nghĩa cổ điển. Mặc dù có một số điểm tương đồng giữa phát triển phần mềm và chế tạo phần cứng nhưng hai hoạt động này về cơ bản là khác nhau. Trong cả hai hoạt động này, chất lượng cao sẽ đạt được nếu thiết kế tốt, nhưng giai đoạn chế tạo phần cứng có thể đưa ra các vấn đề chất lượng, điều mà không tồn tại hay dễ sửa đổi ở phần mềm. Cả hai hoạt động này đều phụ thuộc vào con người nhưng mối quan hệ giữa người được áp dụng và công việc là hoàn toàn khác nhau. Phần mềm không hỏng đi Phần mềm không bị tác động bởi môi trường - yếu tố vốn gây cho phần cứng bị mòn cũ đi. Do đó về lý thuyết, đường cong tỷ lệ hỏng hóc phần mềm có dạng như hình 1.2. Những khiếm khuyết chưa được phát hiện sẽ làm cho chương trình có tỷ lệ hỏng hóc cao ngay từ ban đầu khi mới sử dụng. Tuy nhiên, những khiếm khuyết này được sửa đổi và đường cong trở nên phẳng như hình vẽ. Phần mềm không mòn cũ đi nhưng nó bị ‘‘suy thoái”. Điều này dường như mâu thuẫn nhưng có thể được giải thích rõ ràng nhất trong hình 1.3. 9Hình 1.2. Đường cong hỏng hóc phần mềm (lý tưởng) Hình 1.3. Đường cong hỏng hóc thực tế của phần mềm Trong quá trình sử dụng, phần mềm sẽ có nhiều thay đổi. Khi thay đổi được thực hiện, có thể một số khiếm khuyết mới sẽ xuất hiện, làm cho đường cong tỷ lệ hỏng hóc trở thành có đầu nhọn như hình vẽ. Trước khi đường cong trở về với tỷ lệ hỏng hóc ổn định ban đầu thì một thay đổi khác lại được thực hiện và làm cho đường cong phát sinh đỉnh nhọn một lần nữa. Dần dần, mức tỷ lệ hỏng hóc tối thiểu bắt đầu nâng lên - phần mềm bị thoái hoá do những thay đổi. Một khía cạnh khác của sự mòn sẽ minh hoạ cho sự khác biệt giữa phần cứng và phần mềm : Khi một yếu tố phần cứng bị mòn cũ đi, nó liền được thay thế. Nhưng không có phần thay thế cho phần mềm. Mọi hỏng hóc phần mềm đều chỉ ra lỗi thiết kế hay đường quá trình chuyển thiết kế thành mã máy thực hiện được. Do đó, việc bảo trì phần mềm có độ phức tạp phụ thêm đáng kể so với bảo trì phần cứng. Phần lớn phần mềm đều được xây dựng theo các đơn đặt hàng, ít khi được lắp ráp từ các thành phần có sẵn. Nói chung không có danh mục các thành phần phần mềm. Có thể đặt hàng phần mềm nhưng chỉ như một đơn vị hoàn chỉnh, không phải là những thành phần có thể 10 lắp ráp lại thành chương trình mới. Mặc dù có nhiều bài viết đề cập tới vấn đề tái sử dụng phần mềm, nhưng chúng ta cũng mới chỉ thu được rất ít hiệu quả từ việc tái sử dụng này. 1.3. Thế nào là một phần mềm tốt ? ■ Các chỉ tiêu cơ bản bao gồm: - Phản ánh đúng yêu cầu người dùng. - Chứa ít lỗi tiềm tàng. - Giá thành không vượt quá ước lượng ban đầu. - Dễ vận hành sử dụng. - Tính an toàn, độ tin cậy cao. ■ Hiệu suất xử lý cao: - Hiệu suất thời gian tốt: Độ phức tạp tính toán thấp, thời gian quay vòng ngắn, thời gian hồi đáp nhanh. - Sử dụng các tài nguyên như CPU, RAM, HDD, Internet một cách hữu hiệu. ■ Tính dễ hiểu: - Kiến trúc và cấu trúc dễ hiểu. - Dễ kiểm tra, kiểm chứng và bảo trì. - Có tài liệu mô tả yêu cầu, điều kiện kiểm thử, vận hành, bảo trì với chất lượng cao. Tính dễ hiểu ngày càng trở thành chỉ tiêu quan trọng với phần mềm. Tuy nhiên để xây dựng phầm mềm tốt ta phải chú ý các điểm sau: ■ 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, khi bàn giao sản phẩm dễ phát sinh những trục trặc. ■ Với những phần mềm có quy mô lớn, tư liệu đặc tả cố định thời gian dài, sẽ khó đáp ứng nhu cầu thay đổi của người dùng một cách kịp thời trong thời gian đó. ■ Nếu không có phương pháp luận thì chất lượng phần mềm sẽ suy giảm. ■ Nếu không có chuẩn về tư liệu quy trình sản xuất phần mềm thì những đặc tả không rõ ràng sẽ làm giảm chất lượng phần mềm. ■ Nếu không kiểm thử tính đúng đắn của phần mềm ở từng giai đoạn mà chỉ kiểm tra giai đoạn cuối, khi đó nếu phát hiện ra lỗi thì bàn giao sản phẩm không đúng hạn. ■ Coi trọng lập trình hơn thiết kế làm cho chất lượng phần mềm giảm. ■ Coi thường tái sử dụng phần mềm làm cho năng suất lao động giảm. ■ Phần lớn trong quy trình phát triền phần mềm do con người thực hiện cũng làm năng suất lao động giảm. ■ Không chứng minh tính đúng đắn của phần mềm làm giảm độ tin cậy của phần mềm. ■ Chuẩn 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. ■ Khi đầ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. ■ 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 các công việc khá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. 11 Không có tiêu chuẩn để ước lượng nhân lực và dự toán sẽ làm kéo dài thời hạn vượt kinh phí của dự án. 1.4. Ứng dụng phần mềm Phần mềm có thể được áp dụng trong bất kỳ tình huống nào bao gồm một tập các bước thủ tục (như một thuật toán) đã được xác định trước (các phần mềm ngoại lệ với quy tắc này là các phần mềm hệ chuyên gia và các phần mềm mạng nơron). Nội dung thông tin và tính tất định là các nhân tố quan trọng trong việc xác định bản chất ứng dụng của phần mềm. Nội dung thể hiện ý nghĩa và hình dạng của thông tin vào và ra. Tính tất định thông tin cho biết việc tiên đoán trước trật tự và thời gian của thông tin. Các lĩnh vực phần mềm sau sẽ chỉ ra những phạm vi ứng dụng rộng rãi của phần mềm: Phần mềm hệ thống: Phần mềm hệ thống là tập hợp các chương trình được viết để phục vụ cho chương trình khác. Phần mềm hệ thống (trình biên dịch, trình soạn thảo, các tiện ích quản lý tệp...) xử lý các cấu trúc thông tin phức tạp nhưng xác định. Các ứng dụng hệ thống khác (như thành phần hệ điều hành, bộ xử lý viễn thông) có dữ liệu thường không xác định. Lĩnh vực phần mềm hệ thống được đặc trưng chủ yếu bởi tương tác với hệ thống máy tính; sử dụng nhiều trong các hệ thống nhiều người dùng, thao tác tương tranh đòi hỏi lập lịch, dùng chung tài nguyên và các quản lý tiến trình phức tạp; cấu trúc dữ liệu phức tạp và nhiều giao diện ngoài. Phần mềm thời gian thực: Phần mềm điều phối, phân tích, kiểm soát các sự kiện của thế giới thực khi chúng xuất hiện gọi là phần mềm thời gian thực. Các yếu tố của phần mềm thời gian thực bao gồm một thành phần thu thập dữ liệu để thu thập và định dạng thông tin từ môi trường bên ngoài, một thành phần phân tích biến đổi thông tin theo yêu cầu của ứng dụng, một thành phẩn kiếm soát/đưa ra để đáp ứng với môi trường bên ngoài, một thành phần điều phối để điều hoà các thành phần khác sao cho có thể duy trì đáp ứng thời gian thực hiện hình. Hệ thống thời gian thực phải đáp ứng những ràng buộc thời gian chặt chẽ. Phần mềm nghiệp vụ: Xử lý thông tin nghiệp vụ là lĩnh vực ứng dụng phần mềm lớn nhất. Các hệ thống rời rạc (như tính lương, kế toán thu/chi, quản lý kho) đã phát triển thành các phần mềm hệ thông tin quản lý thâm nhập vào một hay nhiều cơ sở dữ liệu lớn chứa thông tin nghiệp vụ. Những ứng dụng trong lĩnh vực này cấu trúc lại dữ liệu hiện có theo cách thuận tiện cho các thao tác nghiệp vụ hay quản lý. Bên cạnh các ứng dụng xử lý dữ liệu quy ước, các ứng dụng phần mềm nghiệp vụ còn bao gồm cả các tính toán tương tác (như xử lý các giao dịch cho các điểm bán hàng). Phần mềm khoa học và công nghệ: Phần mềm khoa học và công nghệ được đặc trưng bởi các thuật toán ‘‘máy nghiền số”. Các ứng dụng mở rộng từ thiên văn cho đến núi lửa, từ phân tích về ô tô cho tới sự biến động quỹ đạo tàu con thoi, từ sinh học phân tử đến chế tạo tự động. Tuy nhiên, những ứng dụng mới trong lĩnh vực khoa học và công nghệ đang “di chuyển nhanh” ra khỏi các thuật ngữ quy ước. Thiết kế có sự trợ giúp của máy tính (CAD), mô phỏng hệ thống và những ứng dụng tương tác khác đã bắt đầu kế tục các đặc trưng thời gian thực và thậm chí cả phần mềm hệ thống. Phần mềm nhúng: Các sản phẩm thông minh đã trở nên thông dụng. Phần mềm nhúng nằm trong bộ nhớ chỉ đọc và được dùng để điều khiển các sản phẩm và 12 các hệ thống cho người tiêu dùng và thị trường công nghiệp. Phần mềm nhúng có thể thực hiện các chức năng rất giới hạn như điều khiển bàn phím cho lò vi sóng hay đưa ra các khả năng điều khiển và vận hành như chức năng số hoá trong ô tô, kiểm tra xăng, hiển thị bảng đồng hồ, hệ thống phanh... Phần mềm máy tính cá nhân: Xử lý văn bản, đồ họa máy tính, quản trị cơ sở dữ liệu, các ứng dụng tài chính cá nhân và nghiệp vụ, mạng bên ngoài hay thâm nhập cơ sở dữ liệu chỉ là một số lĩnh vực trong hàng trăm ứng dụng, Trong thực tế, phần mềm máy tính cá nhân biểu thị cho một số thiết kế giao diện người - máy được cải tiến nhiều nhất trong các phần mềm, Phần mềm trí tuệ nhân tạo (AI): Phần mềm trí tuệ nhân tạo dùng các thuật toán phi số để giải quyết các vấn đề phức tạp mà tính toán hay phân tích trực tiếp không quản lý được. Hiện nay lĩnh vực trí tuệ nhân tạo hoạt động mạnh nhất là các hệ chuyên gia, còn gọi là các hệ cơ sở tri thức. Tuy nhiên, các lĩnh vực áp dụng khác của phần mềm trí tuệ nhân tạo còn là nhận dạng (hình ảnh và tiếng nói), chứng minh định lý và trò chơi. Trong những năm gần đây, một nhánh mới của phần mềm trí tuệ nhân tạo gọi là mạng nơron nhân tạo, đã phát triển. Mạng nơron mô tả cấu trúc việc xử lý trong não bộ và cuối cùng tạo ra lớp phần mềm mới có thể nhận dạng các mẫu phức tạp và học từ “kinh nghiệm quá khứ”. 2. Công nghệ phần mềm Mục tiêu: Nắm được các định nghĩa công nghệ phần mềm. Định nghĩa công nghệ phân mềm Có nhiều định nghĩa công nghệ phần mềm được đưa ra: Bauer (1969): Công nghệ phần mềm là việc thiết lập và sử dụng các nguyên lý công nghệ đúng đắn để thu được phần mềm vừa kinh tế, tin cậy vừa làm việc hiệu quả trên các máy thực. Pamas (1987): Công nghệ phần mềm là việc xây dựng phần mềm nhiều phiên bản bởi nhiều người. Ghezzi (1991): Công nghệ phần mềm là một lĩnh vực của khoa học máy tính, liên quan đến xây dựng các hệ thống phần mềm vừa lớn vừa phức tạp bởi một hay một số nhóm kỹ sư. IEEE (1993) : Công nghệ phần mềm là: 1. Việc áp dụng phương pháp tiếp cận có hệ thống, bài bản và được lượng hoá trong phát triển vận hành và bào trì phần mềm. 2. Nghiên cứu các phương pháp tiếp cận nói trên. Pressman (1995): Công nghệ phần mềm là sự phát triển của công nghệ phần cứng và hệ thống. Nó là một tập gồm ba yếu tố chủ chốt: Phương pháp, công cụ và thủ tục giúp người quản lý kiểm soát được tiến trình phát triển phần mềm và cung cấp cho người hành nghề một nền tảng để xây dựng phần mềm chất lượng cao có hiệu quả. Các phương pháp công nghệ phần mềm đưa ra các ‘‘cách làm” về mặt kỹ thuật để xây dựng phần mềm. Các phương pháp này bao gồm một phạm vi các nhiệm vụ, bao gồm: Lập kế hoạch và ước lượng dự án, phân tích yêu cầu hệ thống và phần mềm, thiết kế cấu trúc dữ liệu, kiến trúc chương trình và thủ tục thuật toán, mã hoá, kiểm thử và bảo trì. Các phương pháp cho kỹ nghệ phần mềm thường đưa ra các ký pháp đồ hoạ hay hướng ngôn ngữ đặc biệt và đưa ra một tập tiêu chuẩn về chất lượng phần mềm. Các công cụ công nghệ phần mềm cung cấp sự hỗ trợ tự động hay bán tự động 13 cho các phương pháp. Ngày nay đã có các công cụ hỗ trợ cho từng phương pháp được nêu trên. Khi các công cụ được tích hợp đến mức thông tin do công cụ này tạo ra có thể được dùng cho các công cụ khác thì hệ thống hỗ trợ cho việc phát triển phần mềm được thiết lập và còn được gọi là công nghệ phần mềm có sự trợ giúp của máy tính CASE. CASE: tổ hợp phần mềm, phần cứng và cơ sở dữ liệu kỹ nghệ phần mềm (cấu trúc dữ liệu chứa các thông tin quan trọng về việc phân tích, thiết kế, mã hoá và kiểm thử) để tạo ra môi trường kỹ nghệ phần mềm, điều này tương tự như thiết kế có máy tính hỗ trợ/kỹ nghệ có máy tính hỗ trợ (CAD/CASE) cho phần cứng. Các thủ tục công nghệ phần mềm là chất keo dán các phương pháp và công cụ lại với nhau, làm cho chúng được sử dụng hợp lý và đúng hạn trong việc phát triển phần mềm máy tính. Thủ tục xác định trình tự các phương pháp sẽ được áp dụng, những sản phẩm cần bàn giao (tài liệu, báo cáo, mẫu...) cần cho việc kiểm soát để đảm bảo chất lượng và điều hoà thay đổi, xác định những cột mốc để cho người quản lý phần mềm nắm được tiến độ. CÂU HỎI VÀ BÀI TẬP 1. Định nghĩa phần mềm.? 2. Các đặc tính của phần mềm.? 3. Thế nào là một phần mềm tốt.? 4. Ứng dụng của phần mềm? 5. Công nghệ phần mềm là gì?. 14 CHƯƠNG 2: MỘT SỐ MÔ HÌNH VÒNG ĐỜI PHÁT TRIỂN PHẦN MỀM Mã chương: MHCNTT 18.2 Mục tiêu: Sau khi học xong bài học này, sinh viên có khả năng: - Nắm được cách giai đoạn của vòng đời phần mềm - Nắm được quy trình phát triển phần mềm - Hiểu được một số mô hình vòng đời phát triển phần mềm - Nêu được đặc trưng cơ bản và cách thức thực hiện của một số mô hình vòng đời phát triển phần mềm. - Trình bày được các mô hình vòng đời phát triển phần mềm. - Phân biệt được ưu nhược điểm của mỗi mô hình. 1. Các khái niệm cơ bản Mục tiêu: - Nắm được cách giai đoạn của vòng đời phần mềm, quy trình phát triển phần mềm 1.1. Vòng đời phần mềm Vòng đời phần mềm là thời kỳ tính từ khi phần mềm được sinh ra cho đến khi chết đi (từ lúc hình thành đáp ứng yêu cầu, vận hành bảo dưỡng cho đến khi loại bỏ không được sử dụng). Quy trình phát triển phần mềm bao gồm 3 giai đoạn chính: Xác định, phát triển và bảo trì. Ba giai đoạn này xuất hiện trong tất cá các công việc phát triển phần mềm, không phụ thuộc vào miền ứng dụng, cỡ dự án hay độ phức tạp. ■ Giai đoạn xác định : Trong giai đoạn xác định, người phát triển phần mềm 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 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 xác định. Mặc dù các phương pháp được áp dụng trong giai đoạn xác định thay đổi tuỳ theo khuôn cảnh công nghệ phần mềm, nhưng có ba bước luôn xuất hiện dưới dạng: Phân tích hệ thống-. Xác định ra vai trò của từng phần từ trong hệ thống dựa trên máy tính, chỉ ra vai trò của phần mềm. Lập kế hoạch dự án phần mềm: Khi phạm vi 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 nhiệm vụ công việc và lập lịch. Phân tích yêu cầu: Phạm vi được xác định cho phần mềm sẽ đưa ra chiều hướng nhưng cần phải có thêm việc xác định chi tiết lĩnh vực thông tin và chức năng trước khi công việc có thể bắt đầu. ■ Giai đoạn phát triển : Trong khi xác định, người phát triển cố gắng xác định cách cấu trúc dữ liệu và kiến trúc phần mềm cần được thiết kế, 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ưong pháp được áp dụng trong giai đoạn phát triển sẽ thay đổi nhưng có 3 bước đặc thù bao giờ cũng xuất hiện dưới dạng: Thiết kế phần mềm: Thiết kế dịch các yêu cầu về phần mềm thành một tập hợp các biểu diễn (dựa trên đồ hoạ, bảng hay ngôn ngữ) mô tả 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. 15 Mã hoá: Các biểu diễn thiết kế phải được dịch thành ngôn ngữ nhân tạo (ngôn ngữ có thể là ngôn ngữ lập trình quy ước hoặc ngôn ngữ phi thủ tục dùng trong ngôn ngữ thế hệ 4 - 4GT) mà kết quả sẽ tạo ra là các lệnh thực hiện được trên máy tính. Bước mã hoá thực hiện việc này. Kiểm thử phần mềm: Mỗi khi phần mềm đã được cài đặt dưới dạng mã máy thực hiện được cần phải kiểm thử nó để phát hiện các khiếm khuyết khi vận hành, trong logic và trong cài đặt. ■ 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 hoá và nâng cao do yêu cầu 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àm việc đó 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ì: Sửa đổi: Phần mềm luôn có lỗi tiềm tàng. Trong quá trình sử dụng, cho dù các hoạt động bảo đảm chất lượng phần mềm là tốt nhất, khách hàng vẫn có thể sẽ phát hiện ra khiếm khuyết trong phần mềm. Bảo trì sửa đổi thay đổi phần mềm để sửa các khiếm khuyết. Thích nghi: Qua thời gian, môi trường ban đầu để phát triển phần mềm có thể thay đổi. Bảo trì để thích nghi thực hiện việc sửa đổi phần mềm để nó thích hợp với những thay đổi môi trường bên ngoài. 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ụ có lợi. Bảo trì hoàn thiện mở rộng phần mềm ngoài các yêu cầu chức năng gốc của nó. Bên cạnh những hoạt động cơ bản này, một số công ty còn xem xét tới kỹ nghệ ngược. Dùng một tập riêng các công cụ CASE, phần mềm cũ được kỹ nghệ hoá ngược lại để cho người dùng có thể hiểu và cải tiến sự làm việc bên trong của nó. 1.2. Quy trình phát triển phần mềm Một quy trình phát triển phần mềm có thể được mô tá như hình 2.1. Common Process Framework Framework Activities Umbrella activities Hình 2.1.Quy trình phần mềm Một khung quy trình chung (Common Process Framework) được thiết lập bằng cách xác định một số các hoạt động khung (Frame Activities) có khả năng áp dụng cho mọi dự án phần mềm không phân biệt kích cỡ, độ phức tạp. Tập nhiệm vụ công việc (task sets) - tập hợp các công việc công nghệ phần mềm, các cột mốc dự án, sản phẩm và các điểm bảo đảm chất lượng - cho phép các hoạt động khung thích ứng với các đặc tính của dự án phần mềm và yêu cầu của đội dự án. Cuối cùng các hoạt động bao trùm (umbrella activities) được coi như các bảo đảm cho chất lượng phần mềm, quản lý cấu hình phần mềm, bảo trì - bao trùm mô hình quy 16 trình. Các hoạt động bao trùm độc lập với bất cứ hoạt động khung nào và diễn ra trong suốt quy trình. 2. Một số mô hình vòng đời phát triển phần mềm Mục t... Một vài hướng dẫn đơn giản sau có thể trợ giúp cho việc suy ra biểu đồ luồng dữ liệu: 1. Biểu đồ luồng dữ liệu mức 0 nên mô tả chỉ là một vòng tròn phần mềm /hệ thống. 2. Đầu vào và đầu ra chính cần được chú thích cẩn thận. 3. Việc làm mịn dần nên bắt đầu từ việc cô lập các tiến trình, khoản mục dữ liệu và kho ứng cử viên được biểu diễn ở mức tiếp. 4. Tất cả các mũi tên và hình tròn nên được gắn nhãn bằng những tên có ý nghĩa. 5. Phải duy trì được tính liên tục luồng thông tin từ mức này sang mức kia. 6. Mỗi lúc chỉ làm mịn một hình tròn. Có một khuynh hướng tự nhiên hay làm phức tạp hoá biểu đồ luồng dữ liệu. Điều này xuất hiện khi người phân tích chỉ ra nhiều chi tiết quá sớm hay biểu diễn các khía cạnh thủ tục của phần mềm thay vì luồng thông tin. Trong DFD mức 0, các tác nhân ngoài chủ yếu tạo ra thông tin cho hệ thống và tiêu thụ các thông tin do hệ thống sinh ra. Các mũi tên có nhãn biểu thị cho khoản mục dữ liệu hợp thành, tức là các dữ liệu thực là một tập hợp của nhiều khoản mục dữ liệu phụ. DFD mức 0 được mở rộng thành DFD mức 1. Một cách tiếp cận đơn giản và hiệu quả là thực hiện “phân tích văn phạm”. Tức là, chúng ta cô lập tất cả các danh từ và cụm danh từ, động từ và cụm động từ trong lời thoại trên. Tất cả các danh từ đều hoặc là các tác nhân ngoài, các khoản mục dữ liệu, các điều khiển hay các kho dữ liệu. Do đó, bằng cách thực hiện phân tích văn phạm lời thuật về xử lý cho một hình tròn ở bất kỳ mức DFD nào chúng ta có thể tạo ra rất nhiều thông tin có ích về cách tiến hành làm mịn cho mức tiếp theo. Các tiến trình được biểu diễn ở DFD mức 1 có thể được làm mịn thêm ở các mức thấp hơn. Việc làm mịn cho các DFD tiếp tục cho đến khi hình tròn thực hiện một chức năng đơn giản, tức là cho tới khi tiến trình được biểu diễn bởi một vòng tròn thực hiện một chức năng dễ dàng, được cài đặt như một thành phần của chương trình. Trong phân tích yêu cầu, người kỹ sư phần mềm có thể phát hiện một số khía cạnh nào đó của hệ thống sẽ thay đổi hay sẽ được nâng cao trong tương lai hoặc chưa được xác định rõ. Một cách khác, người phân tích có thể làm việc trên phần mềm hiện có để tìm ra sự thay đổi. Trong cả hai trường hợp, biểu đồ luồng dữ liệu cho phép dễ dàng cô lập lĩnh vực thay đổi. Bằng việc hiểu rõ luồng thông tin đi qua biên giới lĩnh vực thay đổi. người ta có thể có chuẩn bị tốt cho việc thay đổi trong tương lai, hay có thể tiến hành thay đổi hiện tại mà không làm đảo lộn các phần tử khác của hệ thống. Tạo ra mô hình luồng điều khiển 30 Đối với nhiều kiểu ứng dụng xử lý dữ liệu, biểu đồ luồng dữ liệu là tất cả những điều cần thiết để có được cái nhìn ý nghĩa đối với các yêu cầu phần mềm. Tuy nhiên, như đã lưu ý, tồn tại một lớp ứng dụng rộng rãi hơn, được “điều khiển” bởi các sự kiện thay vì dữ liệu, tạo ra thông tin điều khiển chứ không chỉ là báo cáo hay hiển thị, xử lý thông tin với mối quan tâm chủ yếu về thời gian và hiệu năng. Những ứng dụng như vậy đòi hỏi mô hình luồng điều khiển CFD bên cạnh biểu đồ luồng dữ liệu. Để xét duyệt cách tiếp cận CFD, biểu đồ luồng dữ liệu được loại bỏ mọi mũi tên luồng dữ liệu. Các sự kiện và các khoản mục điều khiển được bổ sung vào biểu đồ và một cửa sổ được vẽ trong đặc tả điều khiển. Để chọn các sự kiện ta có hướng dẫn sau: ■ Liệt kê tất cả các cảm biến mà phần mềm đọc. ■ Liệt kê tất cả các điều kiện ngắt. ■ Liệt kê tất cả các “chuyển mạch” mà thao tác viên dùng. ■ Liệt kê tất cả các điều kiện dữ liệu. ■ Gợi lại việc phân tích danh từ - động từ áp dụng cho lời thuật xử lý xét lại tất cả các "khoản mục điều khiển" như đầu vào/đầu ra. ■ Mô tả hành vi của hệ thống bằng cách xác định trạng thái của nó. Xác định cách đạt đến từng trạng thái và định nghĩa phép chuyển giữa các trạng thái. ■ Tập trung vào những bỏ sót có thể - một lỗi rất thông thường trong xác định các điều khiển như hỏi "Liệu còn cách nào khác để tới hay ra khỏi trạng thái này không?". Đặc tả điều khiển (Control specification) Đặc tả điều khiển (CSPEC) biểu diễn cho hành vi của hệ thống theo hai cách khác nhau. CSPEC chứa một biểu đồ chuyển trạng thái (STD) là đặc tả tuần tự cho hành vi. Nó cũng có thể chứa một bảng kích hoạt chương trình (PAT) - một đặc tả tổ hợp cho hành vi. Bằng cách nghiên cứu STD người kỹ sư phần mềm có thể xác định hành vi của hệ thống và điều quan trọng hơn là xác định được liệu có lỗ hổng nào trong hành vi được đặc tả không. Một kiểu biểu diễn hành vi khác là bảng kích hoạt tiến trình PAT. PAT biểu thị cho thông tin chứa trong hoàn cảnh của tiến trình, không phải là trạng thái. Tức là bảng chỉ ra tiến trình nào (hình tròn nào) trong mô hình luồng sẽ được gọi đến khi sự kiện xuất hiện. PAT được dùng như bảng hướng dẫn cho người thiết kế, người phải xây dựng cách điều hành kiếm soát các tiến trình được biểu diễn ở mức này. CSPEC mô tả hành vi của hệ thống, nhưng nó không cung cấp bất kỳ thông tin nào về cách làm việc của các tiến trình được xem như kết quả của hành vi này Đặc tả tiến trình (Process specification) Đặc tả tiến trình (PSPEC) được dùng để mô tả cho các tiến trình mô hình luồng xuất hiện ở mức cuối của việc làm mịn. Nội dung của đặc tả tiến trình bao gồm đoạn văn tường thuật, ngôn ngữ thiết kế chương trình (PĐL) mô tả thuật toán xử lý, phương trình toán học, bảng, biểu đồ hay lược đồ. Bằng cách đưa PSPEC đi kèm với từng hình tròn trong mô hình luồng, người kỹ sư phần mềm tạo ra một “mini đặc tả" được dùng như bước đầu tiên trong việc tạo ra bản đặc tả các yêu cầu phần mềm và dùng như một hướng dẫn cho việc thiết kế thành phần chương trình sẽ cài đặt cho tiến trình. 31 4.3. Phân tích hướng đối tượng Khi xây dựng một sản phẩm hay một hệ thống mới, chúng ta mô tả nó như thế nào để thích hợp với công nghệ phần mềm hướng đối tượng? Các đối tượng phù hợp là gì? Chúng liên hệ với nhau như thế nào? Các đối tượng ứng xử như thế nào trong ngữ cảnh của hệ thống? Chúng ta mô tả hoặc mô hình các vấn đề như thế nào để tạo ra được một thiết kế có hiệu quả? Mỗi câu hỏi trên đều có thể trả lời trong ngữ cảnh phân tích hướng đối tượng (OOA). Để xây dựng một mô hình phân tích 5 nguyên tắc sau được áp dụng: 1. Miền thông tin được mô hình. 2. Chức năng module được mô tả. 3. Mô hình hành vi được mô tả. 4. Các mô hình được chia nhỏ để chi tiết hơn. 5. Các mô hình ban đầu mô tả bản chất của vấn đề, các mô hình về sau cung cấp chi tiết thực hiện. Mục đích của OOA là định nghĩa các lớp (và các mối quan hệ, các hành vi liên kết nói chung) phù hợp với vấn đề cần giải quyết. Để thực hiện điều này phải thực hiện các công việc sau: 1. Các yêu cầu cơ bản của người sử dụng phải được liên lạc giữa khách hàng và kỹ sư phần mềm. 2. Các lớp phải được xác định (các phương thức và các thuộc tính phải được định nghĩa). 3. Một cây lớp phải được mô tả. 4. Mối quan hệ đối tượng tới đối tượng phải được mô tả. 5. Một hành vi các đối tượng phải được mô hình hoá. 6. Các công việc từ 1 đến 5 được lặp đi lặp lại cho đến khi mô hình được hoàn tất. Mục đích của phân tích hướng đối tượng là phát triển một tập các mô hình mô tả hệ thống phần mềm máy tính như nó hoạt động để thỏa mãn các yêu cầu người dùng đã được xác định. OOA giống như các phương pháp phân tích thông thường khác xây dựng một mô hình phân tích nhiều phần để đạt mục tiêu trên Cách tiếp cận thông thường và cách tiếp cận hướng đối tượng Phân tích có cấu trúc đã đưa ra một khung nhìn đầu vào – xử lý - đầu ra của yêu cầu. Dữ liệu được xem xét riêng rẽ từ các xử lý chuyển dữ liệu 1 hành vi của hệ thống, mặc dù rất quan trọng chỉ chiếm vị trí thứ yếu trong phân tích có cấu trúc. Fichman và Kemerer đã gợi ý 11 "hướng mô hình" được sử dụng để so sánh phương pháp thiết kế thông thường và phương pháp thiết kế hướng đối tượng: 1. Xác định/phân loại các thực thể. 2. Mô tả chung và toàn bộ mối quan hệ thực thể. 3. Các mối quan hệ thực thể khác. 4. Mô tả thuộc tính các thực thể. 5. Phân chia mô hình phạm vi rộng. 6. Trạng thái và chuyển giữa các trạng thái. 7. Mô tả chi tiết các hàm. 8. Phân tích trên xuống. 9. Dãy xử lý end - to - end. 10. Xác định các dịch vụ thực hiện riêng. 11. Giao tiếp thực thể (bằng thông điệp hay bằng sự kiện). 32 Các phương pháp phân tích hướng đối tượng Phương pháp Booch Phương pháp Booch bao gồm hai quy trình phát triển vi mô và vĩ mô. Mức vi mô xác định tập các nhiệm vụ phân tích được áp dụng lại cho các bước trong quy trình vĩ mô. Do đó, cách tiếp cận tiến hoá được duy trì. Một phác thảo của quy trình phát triển vi mô do Booch đề nghị như sau: ■ Xác định các lớp và đối tượng. - Đưa ra các lớp ứng viên. - Quản lý phân tích hành vi. - Xác định kịch bản thích hợp. - Xác định các thuộc tính và phương thức cho mỗi lớp. ■ Xác định ngữ nghĩa của các lớp và đối tượng - Chọn kịch bản và phân tích. - Phân công trách nhiệm cho các hành vi kế thừa của lớp và đối tượng. - Chọn đối tượng và liệt kê vai trò và nhiệm vụ của nó. - Xác định phương thức thỏa mãn nhiệm vụ. - Tìm kiếm sự cộng tác giữa các đối tượng. ■ Xác định mối quan hệ giữa các lớp và đối tượng. - Xác định tính phụ thuộc tồn tại giữa các lớp. - Mô tả vai trò của mỗi đối tượng cụ thể. - Kiểm tra bảng các kịch bản. ■ Quản lý các hoạt động điều chỉnh thích hợp. - Tạo ra biểu đồ thích hợp cho công việc được quản lý bên trên. - Xác định phân cấp lớp khi thích hợp. - Thực hiện nhóm dựa trên sự tương đồng lớp. ■ Thực thi các kép và đối tượng (trong ngữ cảnh OOA, nó mang ý nghĩa hoàn thành mô hình phân tích). Phương pháp Coad và Yourdon Một phác thảo của quy trình phát triển do Coad và Yourdon đề nghị như sau: ■ Xác định đối tượng sử dụng tiêu chuẩn “tìm kiếm cái gì". ■ Xác định cấu trúc tổng quát - đặc tả. ■ Xác định cấu trúc toàn thể - bộ phận. ■ Xác định chủ đề (mô tả các thành phần hệ thống con). ■ Xác định các thuộc tính ■ Xác định các dịch vụ Phương pháp Jacobson Phương pháp này nhấn mạnh vào các trường hợp sử dụng - mô tả cách người dùng tương tác với sản phẩm hay hệ thống. Một phác thảo của quy trình phát triển do Jacobson đề nghị như sau: ■ Xác định người sử dụng hệ thống và toàn bộ nhiệm vụ của họ. ■ Xây dựng mô hình yêu cầu. - Xác định các tác nhân và trách nhiệm. - Xác định trưởng hợp sử dụng cho mỗi tác nhân. - Chuẩn bị khung nhìn ban đầu của đối tượng hệ thống và các quan hệ. - Xem xét lại mô hình sử dụng trường hợp sử dụng như một kịch bản để kiểm tra. ■ Xây dựng mô hình phân tích 33 - Xác định đối tượng giao diện sử dụng thông tin tác nhân tương tác. - Tạo khung nhìn cấu trúc của đối tượng giao diện. - Mô tả hành vi đối tượng. - Cô lập hệ thống con và mô hình cho chúng. - Xem lại mô hình sử dụng trường hợp sử dụng như một kịch bản để kiểm tra. Phương pháp Rambaugh Kỹ thuật mô hình đối tượng (OM 1) cho phân tích, thiết kế hệ thống và thiết kế mức đối tượng. Các hoạt động phân tích tạo ra 3 mô hình: mô hình đối tượng (mô tả các đối tượng, các lớp, cây và mối quan hệ), mô hình động (mô tả các hành vi của đối tượng và hệ thống) và mô hình chức năng (mô tả giống như DFD mức cao mô tả các luồng thông tin chuyển qua trong hệ thống). Một phác thảo của quy trình phát triển do Rambaugh đề nghị như sau: ■ Phát triển một bản kê phạm vi vấn đề. ■ Xây dựng một mô hình đối tượng. - Xác định các lớp thích hợp cho vấn đề. - Định nghĩa các thuộc tính và liên kết. - Định nghĩa liên kết đối tượng. - Tổ chức lớp đối tượng sử dụng thừa kế. ■ Phát triển mô hình động. - Chuẩn bị kịch bản. - Xác định sự kiện và phát triển vết các sự kiện cho mỗi kịch bản. - Xây dựng biểu đồ luồng sự kiện. - Phát triển biểu đồ trạng thái. - Xem lại hành vi cho tính nhất quán và sự hoàn chỉnh. ■ Xây dựng một mô hình chức năng cho hệ thống. - Xác định đầu vào và đầu ra. - Sử dụng biểu đồ luồng dữ liệu để mô tả sự chuyển luồng. - Phát triển PSPEC cho mỗi chức năng. - Mô tả ràng buộc và các tiêu chuẩn tối ưu. Phương pháp Wirfs - Brock Phưong pháp này không tạo ra sự khác biệt rõ ràng giữa các công việc phân tích và thiết kế. Thay vào đó, một quá trình tiếp diễn bất đầu khi xác định đặc tả khách hàng và kết thúc khi thiết kế được đề xuất. Một phác thảo của quy trình phát triển do Wirfs - Brock đề nghị như sau: ■ Ước lượng đặc tả khách hàng. ■ Sử dụng phân tích ngữ pháp để rút ra các lớp ứng viên từ đặc tả. ■ Nhóm các lớp để xác định các lớp Cha. ■ Định nghĩa trách nhiệm cho mỗi lớp. ■ Phân công trách nhiệm cho mỗi lớp. ■ Xác định sự cộng tác giữa các lớp dựa trên trách nhiệm. ■ Xây dựng mô tả cây của lớp để chỉ ra mối quan hệ thừa kế ■ Xây dựng một biểu đồ công tác cho hệ thống. Mặc dù các bước tiến hành khác nhau với mỗi phương pháp OOA nhưng toàn bộ quy trình OOA có sự tương tự. Để thực hiện phân tích hướng đối tượng, một kỹ sư hệ thống phải thực hiện các bước sau: ■ Thu nhận các yêu cầu của khách hàng cho hệ thống hướng đối tượng 34 (Object Oriented - 00). - Xác định các kịch bản hay các trường hợp sử dụng. - Xây dựng mô hình yêu cầu. ■ Chọn các lớp, các đối tượng sử dụng các yêu cầu cơ bản như là hướng dẫn. ■ Xác định các thuộc tính và các phương thức cho mỗi đối tượng hệ thống. ■ Xác định cấu trúc và cây cho mỗi lớp tổ chức. ■ Xây dựng mô hình quan hệ đối tượng. ■ Xây dựng mô hình hành vi đối tượng. ■ Xem xét lại các phân tích CÂU HỎI VÀ BÀI TẬP 1. Xác định yêu cầu phần mềm? 2. Phân tích có cấu trúc? 3. Phân tích hướng đối tượng? 4. Các phương pháp phân tích hướng đối tượng? 35 CHƯƠNG 4: THIẾT KẾ PHẦN MỀM Mã chương: MHCNTT 18.4 Mục tiêu: Sau khi học xong bài học này, sinh viên có khả năng: - Nêu được khái niệm và vai trò của thiết kế phần mềm. - Phát biểu được tiến trình để triển khai thiết kế. -Trình bày được các phương pháp thiết kế hệ thống theo hướng chức năng, hướng đối tượng, thiết kế hệ thống thời gian thực, thiết kế giao diện -Vận dụng các phương pháp thiết kế để giải quyết bài toán phần mềm thực tế 1. Tổng quan về thiết kế phần mềm 1.1 Khái niệm và vai trò của thiết kế Thiết kế là bước đầu tiên trong giai đoạn phát triển bất cứ một sản phẩm hay hệ thống công nghệ nào. Nó được định nghĩa là ''tiến trình áp dụng nhiều kỹ thuật và nguyên lý với mục đích xác định một thiết bị, một tiến trình hay một hệ thống dù chi tiết để cho phép thực hiện nó về mặt vật lý’’. Mục tiêu của thiết kế là tạo ra một mô hình hay biểu diễn một thực thể sau này sẽ được áp dụng. Tiến trình phát triển mô hình này dựa trên kinh nghiệm trong việc xây dựng các thực thể tương tự, một tập các nguyên lý và/hoặc các trực cảm hướng dẫn cách tiến triển mô hình này, một tập các tiêu chuẩn để đánh giá chất lượng và một tiến trình lặp lại để sau đó dẫn tới biểu diễn thiết kế chung cuộc. Thiết kế phần mềm là trung tâm kỹ thuật của tiến trình công nghệ phần mềm và được áp dụng cho khuôn cảnh phát triển phần mềm bất kỳ. Khi các yêu cầu phần mềm được phân tích và đặc tả thì thiết kế phần mềm là một trong 3 hoạt động - thiết kế, lập trình và kiểm thử - những hoạt động cần để xây dựng và kiểm chứng phần mềm. Luồng thông tin trong giai đoạn kỹ thuật được minh hoạ trên hình 6.1. Các yêu cầu phần mềm được biểu thị bởi mô hình thông tin, chức năng và hành vi, là đầu vào cho bước thiết kế. Sử dụng một trong các phương pháp thiết kế, tạo thiết kế dữ liệu, thiết kế kiến trúc, thiết kế thủ tục. Thiết kế dữ liệu chuyển mô hình lĩnh vực thông tin đã được tạo ra trong phân tích thành các cấu trúc dữ liệu cần thiết cho việc cài đặt phần mềm sau này. Thiết kế kiến trúc định nghĩa một mối quan hệ giữa các thành phần cấu trúc chính của chương trình. Thiết kế thủ tục biến đổi các thành phần cấu trúc thành mô tả thủ tục phần mềm. Chương trình gốc sẽ được sinh ra sau đó việc kiểm thử được thực hiện để tích hợp và làm hợp lệ phần mềm. Thiết kế phần mềm là một tiến trình qua đó các yêu cầu được dịch thành một biểu diễn phần mềm. Ban đầu biểu diễn mô tả quan điểm của toàn bộ phần mềm. Việc làm mịn tiếp sau dẫn tới một biểu diễn thiết kế rất gần với chương trình gốc. Theo quan điểm quản lý dự án, thiết kế phần mềm được tiến hành theo hai bước. Thiết kế sơ bộ quan tâm tới việc dịch các yêu cầu thành kiến trúc dữ liệu và phần mềm. Thiết kế chi tiết tập trung vào làm mịn biểu diễn kiến trúc để dẫn tới cấu trúc dữ liệu chi tiết và biểu diễn thuật toán cho phần mềm. Trong phạm vi thiết kế sơ bộ và chi tiết, xuất hiện các hoạt động khác nhau. Bên cạnh việc thiết kế dữ liệu, kiến trúc và thủ tục, nhiều ứng dụng hiện đại còn có hoạt động thiết kế giao diện phân biệt. Thiết kế giao diện lập ra cách bố trí và cơ chế tương tác cho tương tác người - máy. 36 Khái niệm thiết kế được định nghĩa theo 2 cách sau: · Thiết kế là quy trình định nghĩa ra kiến trúc, thành phần, interfaces và các thuộc tính khác của một hệ thống hoặc một thành phần. Trong quy trình này, yêu cầu phần mềm được phân tích để đưa ra một cấu trúc của phần mềm làm cơ sở để làm ra phần mềm. · Thiết kế là kết quả của một quá trình. Nó mô tả kiến trúc của một phần mềm như là phần mềm được phân rã và tổ chức như thế nào trong các thành phần và các interfaces giữa các thành phần như thế nào. Nó cũng có thể mô tả các thành phần ở mức chi tiết cho phép có thể xây dựng được phần mềm. Thiết kế phần mềm đóng vai trò quan trọng trong suốt quá trình thiết kế, những kỹ sư phần mềm sẽ đề xuất các mô hình tạo thành loại kế hoạch chi tiết cho giải pháp để có thể thực hiện được. Chúng ta có thể phân tính và đánh giá những mô hình này có hay không phù hợp với những yêu cầu khác nhau. Chúng ta có thể sử dụng kiểm tra và thẩm định thay thế những giải pháp và những đánh đổi (tradeoffs). Cuối cùng chúng ta sử dụng những mô hình kết quả để lên kế hoạch các hoạt động phát triển tiếp theo như là: thẩm định và kiểm thử hệ thống, thêm vào đó sử dụng chúng như là đầu vào hay là điểm bắt đầu của xây dựng và kiểm thử phần mềm. Trong danh sách chuẩn của vòng đời phát triển phần mềm như ISO/IEC/IEEE Software Life Cycle Process, thiết kế phần mềm bao gồm 2 hoạt động tương ứng với phân tích yêu cầu phần mềm và xây dựng phần mềm: · Thiết kế kiến trúc (còn được gọi là thiết kế mức cao): là phát triển mức kiến trúc cao nhất và đưa ra cách tổ chức phần mềm và chỉ ra các thành phần khác nhau trong phần mềm 37 · Thiết kế chi tiết: chỉ ra chi tiết và đầy đủ về thành phần tạo điều kiện xây dựng phần mềm trong pha sau đó Đầu ra của thiết kế phần mềm sẽ được sử dụng cho quá trình xây dựng và kiểm thử nên việc đánh giá một thiết kế có phù hợp hay không rất quan trọng, nếu một thiết kế sai sẽ dẫn đến tất cả các quá trình sau đó cũng sai và cần phải chỉnh sửa nếu thiết kế được chỉnh sửa. 1.2. Tiến trình thiết kế Thiết kế có cấu trúc cho phép biến đổi thuận tiện từ các biểu diễn thông tin như biểu đồ luồng dữ liệu có trong bản Đặc tả yêu cầu phần mềm sang mô tả về cấu trúc chương trinh. Việc biến đổi từ luồng thông tin sang cấu trúc thông tin được thực hiện như một phần của tiến trình gồm 5 bước: ■ Thiết lập kiểu luồng thông tin. ■ Chi ra biên giới luồng. ■ Ánh xạ DT’D vào cấu trúc chương trình ■ Xác định các cấp bậc điều khiển theo cách tạo nhân to ■ Cấu trúc kết quả được làm mịn bằng cách dùng các phương tiện thiết kế và trực cảm. Khi luồng thông tin là bộ dẫn lái cho cách tiếp cận ánh xạ ở bước 3. 1.3. Chất lượng thiết kế Chất lượng phần mềm là gì? Chất lượng phần mềm là phần mềm có số lượng lỗi chấp nhận được, được phân phối đúng thời hạn và trong ngân sách, đáp ứng các yêu cầu hoặc kỳ vọng, và có thể duy trì được. Tiêu chuẩn ISO 8402-1986 định nghĩa chất lượng là một tổng số các tính năng và đặc điểm của sản phẩm hoặc dịch vụ mang khả năng đáp ứng các nhu cầu đã nêu hoặc ngụ ý. Các khía cạnh chính của phần mềm chất lượng cho khách hàng bao gồm: · Thiết kế đẹp · Chức năng tốt – phần mềm hoạt động tốt · Đáng tin cậy - mức độ sự cố hoặc lỗi chấp nhận được · Tính nhất quán · Bền - kéo dài · Dịch vụ hậu mãi tốt · Giá trị của đồng tiền Thiết kế tốt là gì Sẽ rất quan trọng để có một thiết kế tốt. Ứng dụng hoặc sản phẩm phải đáp ứng tất cả các thông số kỹ thuật yêu cầu và đồng thời nó phải thân thiện với người dùng. Các khách hàng về cơ bản bị thu hút bởi ngoại hình đẹp và phong cách của ứng dụng. Sự kết hợp màu sắc phù hợp, kích thước phông chữ và kiểu dáng của văn bản và nút là rất quan trọng. Chức năng tốt - nó hoạt động tốt Cùng với vẻ ngoài đẹp mắt của ứng dụng hoặc sản phẩm, nó rất quan trọng là chức năng phải còn nguyên vẹn. Tất cả các tính năng và chức năng của chúng nên hoạt động như mong đợi. Không nên có bất kỳ sai lệch nào trong kết quả thực tế và kết quả mong đợi. Đáng tin cậy - mức độ sự cố hoặc thất bại chấp nhận được 38 Sau khi tester đã kiểm tra tất cả các tính năng và chức năng của phần mềm, điều rất quan trọng là ứng dụng hoặc sản phẩm phải đáng tin cậy. Ví dụ: Có một ứng dụng lưu hồ sơ của sinh viên. Ứng dụng này sẽ lưu tất cả các hồ sơ của sinh viên và không nên thất bại sau khi nhập 100 hồ sơ. Điều này được gọi là độ tin cậy. Tính nhất quán Phần mềm nên có tính nhất quán trên toàn bộ ứng dụng hoặc sản phẩm. Phần mềm đơn có thể là đa chiều. Điều rất quan trọng là tất cả các kích thước khác nhau phải hành xử một cách nhất quán. Bền - kéo dài Phần mềm phải bền. Ví dụ: nếu phần mềm đang được sử dụng trong một năm và số lượng dữ liệu đã vượt quá 5000 bản ghi thì không nên thất bại nếu số lượng bản ghi tăng. Sản phẩm hoặc ứng dụng phần mềm nên tiếp tục hoạt động theo cùng một cách mà không có bất kỳ sự phá vỡ chức năng nào. Dịch vụ hậu mãi tốt Sau khi sản phẩm được chuyển đến khách hàng, bảo trì sẽ được đưa vào hình ảnh. Điều rất quan trọng là cung cấp dịch vụ bán hàng tốt để giữ cho khách hàng hài lòng. Ví dụ, nếu sau khi sử dụng sản phẩm trong sáu tháng, khách hàng nhận ra một số thay đổi cho ứng dụng thì những thay đổi đó nên được thực hiện nhanh nhất có thể và nên được gửi đến khách hàng đúng thời gian với chất lượng. Giá trị của đồng tiền Nó luôn luôn quan trọng để cung cấp sản phẩm cho khách hàng có giá trị đồng tiền. Sản phẩm phải đáp ứng các thông số kỹ thuật yêu cầu. Nó nên hoạt động như mong đợi, nên thân thiện với người dùng. Chúng tôi nên cung cấp dịch vụ tốt cho khách hàng. Khác với các tính năng được đề cập trong thông số kỹ thuật yêu cầu, một số chức năng bổ sung có thể được cung cấp cho khách hàng mà họ có thể không nghĩ tới. Những chức năng bổ sung này sẽ làm cho sản phẩm của họ thân thiện hơn và dễ sử dụng hơn. Điều này cũng thêm giá trị đồng tiền. 2. Thiết kế kiến trúc 2.1. Khái niệm và vai trò Một số vấn đề quan trọng phải được xử lý trong khi thiết kế phần mềm. Đặc biệt là những lo ngại về chất lượng phần mềm mà có thể kể đến như: hiệu suất, bảo mật, độ tin cậy, khả năng sử dụng, vv... Một số vấn đề quan trọng khác là làm thế nào để phân rã, tổ chức và đóng gói những thành phần phần mềm. Đây là nguyên tắc cơ bản mà tất các các phương pháp thiết kế phải giải quyết nó bằng cách này hay cách khác. Ngược lại, những vấn đề “liên quan đến các khía cạnh của các hành vi phần mềm mà lại không nằm trong miền ứng dụng mà nằm ở các miền khác có liên quan” Những vấn đề đó thường xuyên chồng chéo với các chức năng của hệ thống và được gọi những khía cạnh mà đa phần không phải là đơn vị phân rã của phần mềm mà là thuộc tính ảnh hưởng đến hiệu suất hoặc ngữ nghĩa của các thành phần một cách có hệ thống. Đồng thời (concurrency) Đồng thời là nhiều việc xảy ra tại cùng một thời điểm. Thiết kế để có tính đồng thời có liên quan đến phân rã phần mềm thành quy trình, nhiệm vụ, quá trình và đối phó với các vấn đề liên quan đến tính hiệu quả, tính nguyên tố, đồng bộ hóa và lập kế hoạch. Thiết kế này đảm bảo dễ phân chia công việc cũng như có thể hoàn thành công việc trong thời gian ngắn nhất. Điều khiển và xử lý các sự kiện 39 Vấn đề thiết kế này liên quan tới làm thế nào tổ chức dữ liệu và dòng dữ liệu cũng như làm thế nào để xử lý các sự kiện tạm thời và phản xạ qua các cơ chế lời gọi ngầm và gọi lại. Dữ liệu bền vững (data persistence) Vấn đề của thiết kế này liên quan tới làm thế nào để xử lý dữ liệu tồn tại lâu dài Phân phối các thành phần Vấn đề của thiết kế này liên quan đến làm thế nào để phân phối các phần mềm trên phần cứng ( bao gồm phần cứng máy tính và phần cứng mạng), làm thế nào các thành phần giao tiếp được với nhau và làm thế nào tầng giữa có thể được sử dụng để đối phó với không tương thích phần mềm. Lỗi và xử lý ngoại lệ và lỗi dung nạp (error and exception handling and fault tolerance) Vấn đề của thiết kế này liên quan đến làm thế nào để phòng chống, chịu đựng và các xử lý lỗi và đối phó với các điều kiện ngoại lệ Tương tác và trình bày (Interaction and presentation) Vấn đề thiết kế này liên quan tới làm thế nào để cấu trúc và tổ chức tương tác với những người dùng và biểu diễn thông tin ( ví dụ, chia giao diện và khung nhìn logic sử dụng hướng tiếp cận MVC) Chú ý rằng chủ đề này không chỉ chi tiết giao diện người dùng, đó là nhiệm vụ của thiết kế giao diện người dùng Bảo mật (sercurity) Thiết kế cho bảo mật liên quan đến làm thế nào để ngăn chặn tiết lộ trái phép, sáng tạo, thay đổi, xóa, hoặc từ chối truy cập đến thông tin từ các nguồn khác. Nó cũng quan tâm làm thế nào để chịu được các cuộc tấn công bảo mật hoặc sự xâm phạm bởi hạn chế thiệt hại, tiếp tục dịch vụ, tốc độ sửa chữa và phục hồi, và thất bại và phục hồi an toàn. Kiểm soát truy cập là một khái niệm an ninh cơ bản và ta cũng nên đảm bảo sử dụng đúng mật mã 2.2. Các mô hình kiến trúc Để tổ chức các hệ thống phần mềm, bạn có thể sử dụng các mẫu kiến trúc phổ biến dưới đây: Kiến trúc phân lớp – Layered (n-tier) Architecture Mẫu kiến trúc này có thể được sử dụng trong các hệ thống có thể được phân tách thành các nhóm gồm nhiều công việc nhỏ. Đặc điểm: · Các lớp khác nhau được xác định trong kiến trúc. Nó bao gồm lớp bên ngoài và bên trong. · Thành phần của lớp ngoài quản lý các hoạt động giao diện người dùng. · Các thành phần thực thi giao diện hệ điều hành ở lớp bên trong. · Các lớp bên trong là lớp ứng dụng, lớp tiện ích và lớp lõi. Kiến trúc hướng sự kiện – Event-driven architecture Nhiều chương trình dành phần lớn thời gian để chờ đợi điều gì đó xảy ra. Điều này đặc biệt đúng đối với các máy tính làm việc trực tiếp với con người. Nhưng nó cũng phổ biến trong các lĩnh vực như mạng. Đôi khi có dữ liệu cần xử lý và những lần khác thì không. Kiến trúc hướng sự kiện giúp quản lý điều này bằng cách xây dựng một đơn vị trung tâm quản lý tất cả dữ liệu. Sau đó, dữ liệu sẽ được đưa đến các modules riêng biệt để xử lý. Kiến trúc hướng đối tượng – Objects based Architecture 40 Nó là một mô hình kiến trúc dựa trên việc phân chia công việc cho một ứng dụng hoặc hệ thống thành các đối tượng có thể tái sử dụng và tự cung cấp. Kiến trúc hướng đối tượng xem một hệ thống phần mềm như một tập hợp các thực thể được gọi là các đối tượng. 3. Thiết kế hệ thống hướng chức năng 3.1. Thiết kế dữ liệu Đây là lối tiếp cận truyền thống của ngành Công nghệ phần mềm. Theo lối tiếp cận này, chúng ta quan tâm chủ yếu tới những thông tin mà hệ thống sẽ lưu trữ. Chúng ta hỏi người dùng xem họ sẽ cần những thông tin nào, rồi chúng ta thiết kế ngân hàng dữ liệu để chứa những thông tin đó, cung cấp Forms để nhập thông tin và in báo cáo để trình bày các thông tin. Nói một cách khác, chúng ta tập trung vào thông tin và không mấy để ý đến những gì có thể xảy ra với những hệ thống đó và cách hoạt động (ứng xử) của hệ thống là ra sao. Đây là lối tiếp cận xoay quanh dữ liệu và đã được áp dụng để tạo nên hàng ngàn hệ thống trong suốt nhiều năm trời. Lối tiếp cận xoay quanh dữ liệu là phương pháp tốt cho việc thiết kế ngân hàng dữ liệu và nắm bắt thông tin, nhưng nếu áp dụng cho việc thiết kế ứng dụng lại có thể khiến phát sinh nhiều khó khăn. Một trong những thách thức lớn là yêu cầu đối với các hệ thống thường xuyên thay đổi. Một hệ thống xoay quanh dữ liệu có thể dể dàng xử lý việc thay đổi ngân hàng dữ liệu, nhưng lại khó thực thi những thay đổi trong nguyên tắc nghiệp vụ hay cách hoạt động của hệ thống. Phương pháp hướng đối tượng đã được phát triển để trả lời cho vấn đề đó. Với lối tiếp cận hướng đối tượng, tập trung vào cả hai mặt của vấn đề : thông tin và cách hoạt động. 3.2. Thiết kế xử lý Thiết kế phần mềm thường được xem như là một quy trình 2 bước: Thiết kế kiến trúc (cũng được xem như là thiết kế mức cao high- level design or top- level design) mô tả phầm mềm được tổ chức thành các thành phần như thế nào Thiết kế chi tiết mô tả hành động mong muốn của những thành phần Đầu ra của 2 quy trình này là tập mô hình và tài liệu ghi lại những những quyết định quan trọng đã được thực hiện cùng lời giải thích cho mỗi lý do. Bằng cách ghi lại các lý do đó công việc bảo trì dài hạn của phần mềm được nâng cao. 4. Thiết kế hệ thống hướng đối tượng 4.1. Một số khái niệm UML Khi thực hiện các dự án phần mềm, ứng dụng tôi có thói quen chia đôi thời gian thực hiện, một nửa dành cho việc tìm hiểu nghiệp vụ, phân tích tính năng và thiết kế database, một nửa thời gian còn lại dành cho việc code. Trong thời đại mở của các nền tảng kỹ thuật chúng ta hoàn toàn có thể áp dụng những công nghệ tốt nhất cho hiệu suất ứng dụng của mình, lúc này việc ứng dụng hoạt động ổn định, đúng nghiệp vụ, dễ dàng mở rộng theo yêu cầu thay đổi của tình hình thực tế lại là điều quan trọng hơn. Phân tích và thiết kế hướng đối tượng OOAD (Object Oriented Analysis and Design) và ngôn ngữ mô hình hóa UML (Unified Modeling Language) phổ biến và được đưa vào các trường đào tạo ngành CNTT tuy nhiên để áp dụng thực tế với sinh viên vẫn còn tương đối khó khăn. Trong bài này chúng ta sẽ tiếp cận bằng cách đơn giản những kiến thức về Phân tích và thiết kế hướng đối tượng và UML để cùng hiểu và áp dụng vào thực tế. 41 Khái niệm OOAD (Object Oriented Analysis and Design) Phân tích và thiết kế hướng đối tượng là một kỹ thuật tiếp cận phổ biến dùng để phân tích, thiết kế một ứng dụng, hệ thống. Nó dựa trên bộ các nguyên tắc chung, đó là một tập các hướng dẫn để giúp chúng ta tránh khỏi một thiết kế xấu. 5 nguyên tắc SOLID trong thiết kế hướng đối tượng: · Một lớp chỉ nên c...nhân, phép chia đúng. Nếu bạn nhận việc kiểm thử phần mềm Calculator, nhấn phím “+” và không có chuyện gì xảy ra, đó chính là một lỗi Quy tắc 2: Phần mềm thực hiện một số việc mà bản đặc tả yêu cầu nó không được thực hiện Ví dụ: Bản đặc tả phần mềm yêu cầu rằng, calculator sẽ không bao giờ bị đột ngột ngưng hoạt động, bị khóa lại hoặc bị đóng băng. Nếu bạn ấn liên tục lên các phím và nhận được thông điệp từ calculator là “not responding” (dừng quá trình hồi đáp với dữ liệu vào), đây là một lỗi theo quy tắc 2. Quy tắc 3: Phần mềm thực hiện một số chức năng mà bản đặc tả không đề cập tới Ví dụ: Lập trình viên tự ý thêm vào phép tính căn bậc 2, trong khi đặc tả của calulator chỉ yêu cầu các phép tính cộng, trừ, nhân, chia. Quy tắc 4: Phần mềm không thực hiện một số việc mà bản đặc tả không đề cập tới, nhưng là những việc nên làm Ví dụ: Bạn mong muốn rằng công việc sẽ được duy trì cho đến khi pin hoàn toàn hết, hoặc ít nhất bằng cách nào đó báo cho bạn biết Pin đã yếu. Những phép tính đúng đã không xảy ra khi pin yếu, và nó cũng không chỉ rõ điều gì sẽ xảy đến. Quy tắc số 4 tạo nên lỗi này. Quy tắc 5: Trong con mắt của người kiểm thử, phần mềm là khó hiểu, khó sử dụng, chậm đối với người sử dụng Trong trường hợp của calculator, có lẽ bạn đã tìm thấy những nút có kích thước quá nhỏ. Hoặc có thể sự sắp xếp của nút “=” đã làm cho nó khó sử dụng. Hoặc sự bố trí màu sắc làm cho nó rất khó nhìn... Tất cả những điều này đều là lỗi (bug) theo quy tắc 5. Vòng đời của lỗi? Vòng đời của lỗi là một hành trình mà mà lỗi đi qua trong suốt cuộc đời của nó. Nó thay đổi từ tổ chức này sang tổ chức khác, từ dự án này đến dự án khác và nó được điều chỉnh bởi quy trình kiểm thử phần mềm. Vòng đời của lỗi bao gồm các trạng thái dưới đây: New: Khi mà lần lỗi được log lên lần đầu tiên bời người kiểm thử Assigned: Khi lỗi đã được đăng lên và chỉ định cho lập trình viên nào đó Open: Khi lập trình viên đang sửa lỗi Fixed: Khi lập trình viên đã hoàn thành việc sửa lỗi 52 Retest: Người kiểm thử kiếm tra lại lỗi đã được sửa hay chưa, có phát sinh thêm lỗi mới nào không Reopened: Nếu lỗi vẫn còn, người kiểm thử sẽ trả lại cho lập trình viên. Lỗi phải đi lại một vòng đời như cũ. Deferred: Lỗi sẽ được sửa trong bản phát hành tiếp theo. Lý do có thể là độ ưu tiên của lỗi có thể là thấp, thiếu thời gian để phát hành hoặc lỗi có thể không có ảnh hưởng lớn đến phần mềm. Rejected: Nếu lập trình viên cho rằng không phải là lỗi, họ có thể chuyển sang trạng thái này Duplicate: Lỗi được đăng trùng với nhau Closed: Khi người kiểm thử đã thấy lỗi được sửa triệt để Not a bug/Enhancement: Một số thay đổi trong ứng dụng, không phải là lỗi 1.2. Kiểm thử và tiến trình kiểm thử Định nghĩa về kiểm thử và thuật ngữ liên quan Kiểm thử phần mềm là một cuộc kiểm tra được tiến hành để cung cấp cho các bên liên quan thông tin về chất lượng của sản phẩm hoặc dịch vụ được kiểm thử. Kiểm thử có thể cung cấp cho doanh nghiệp một quan điểm, một cách nhìn độc lập về phần mềm để từ đó cho phép đánh giá và thấu hiểu được những rủi ro trong quá trình triển khai phần mềm. Trong kỹ thuật kiểm thử không chỉ giới hạn ở việc thực hiện một chương trình hoặc ứng dụng với mục đích đi tìm các lỗi phần mềm (bao gồm các lỗi và các thiếu sót) mà còn là một quá trình phê chuẩn và xác minh một chương trình máy tính / ứng dụng / sản phẩm nhằm: • Đáp ứng được mọi yêu cầu hướng dẫn khi thiết kế và phát triển phần mềm. • Thực hiện công việc đúng như kỳ vọng. • Có thể triển khai được với những đặc tính tương tự. • Và đáp ứng được mọi nhu cầu của các bên liên quan. Tùy thuộc vào từng phương pháp, việc kiểm thử có thể được thực hiện bất cứ lúc nào trong quá trình phát triển phần mềm. Lỗi và chịu lỗi Tiêu chí lựa chọn kiểm thử/Kiểm tra mức độ đầy đủ tiêu chí Tiêu chí lựa chọn thử nghiệm có nghĩa là lựa chọn trường hợp kiểm thử hoặc xác định một tập các trường hợp kiểm thử là đủ cho một mục đích cụ thể. Hiệu quả kiểm thử/Mục tiêu kiểm thử Hiệu quả kiểm thử được xác định bằng cách phân tích một tập hợp các chương trình thực thi. Lựa chọn kiểm thử được thực hiện có thể được hướng dẫn bởi các mục tiêu khác nhau. Kiểm thử phát hiện khiếm khuyết Phát hiện lỗi hoặc những khiếm khuyết của phần mềm để thấy được ứng xử của nó có chính xác hoặc phù hợp với tài liệu đặc tả của nó hay không. Về mặt lý thuyết, chúng ta phải kiểm thử hệ thống một cách cặn kẽ thì mới khẳng định được chương trình không còn khiếm khuyết. Tuy nhiên, trong thực tế không thể kiểm thử một cách cặn kẽ được. Các vấn đề về Oracle Oracle là bất kỳ người hoặc máy móc dùng để quyết định xem liệu một chương trình có thực hiện một cách chính xác trong một thử nghiệm nhất định và phù hợp kết quả là đạt hoặc thất bại (các nguyên tắc hay cơ chế phát hiện vấn đề). Kiểm thử không thể xác định hoàn toàn được tất cả các lỗi bên trong phần mềm. Thay 53 vào đó, nó so sánh trạng thái và hành vi của sản phẩm với các oracle. Các oracle này có thể bao gồm (nhưng không giới hạn ở) các đặc tả phần mềm, hợp đồng, sản phẩm tương đương, các phiên bản trước của cùng một sản phẩm, phù hợp với mục đích dự kiến nhằm đáp ứng sự kỳ vọng của người dùng, khách hàng, quy định của pháp luật hiện hành và các tiêu chuẩn liên quan khác. Vấn đề về đường dẫn không khả thi Đường dẫn không khả thi là các đường dẫn luồng điều khiển không thể được thực thi bởi bất kỳ dữ liệu đầu vào. Khả năng kiểm thử Khả năng kiểm thử là mức độ mà một thành phần phần mềm (hệ thống phần mềm, module, tài liệu thiết kế) hỗ trợ kiểm thử trong một bối cảnh kiểm thử nhất định. Nếu khả năng kiểm thử của thành phần phần mềm cao, thì việc tìm kiếm lỗi trong hệ thống (nếu có) bằng việc kiểm thử được dễ dàng hơn. Mối quan hệ của kiểm thử với các hoạt động khác Kiểm thử vs kỹ thuật quản lý chất lượng phần mềm tĩnh Kiểm thử vs Bằng chứng về tính đúng đắn và xác minh hình thức Kiểm thử vs Gỡ lỗi Kiểm thử vs Xây dựng chương trình 1.3 Các mức kiểm thử Dựa trên trực giác và kinh nghiệm của kỹ sư phần mềm Có lẽ kỹ thuật được thực hiện nhiều nhất là kiểm thử tùy biến: các kiểm thử có được dựa trên kỹ năng, trực quan và kinh nghiệm của kỹ sư phần mềm với cá chương trình quen thuộc. Kiểm thử tùy biến có thể hữu ích cho việc định danh các trường hợp kiểm thử mà không dễ thực hiện bằng các kỹ thuật bình thường. Kiểm thử theo kiểu khám phá được định nghĩa là tiến hành đồng thời việc học tập, thiết kế và thực hiện kiểm thử, nó không được thực hiện theo kế hoạch kiểm thử đã được lên trước và linh động về việc thiết kế, thực hiện và sửa đổi. Hiệu quả của kiểm thử khám phá phụ thuộc và kinh nghiệm của kỹ sư phần mềm, điều này có được từ nhiều nguồn như quan sán hành vi của sản phẩm trong quá trình kiểm thử, sự quen thuộc với các ứng dụng, môi trường, quá trình lỗi, các dạng lôi có thể có, nguy cơ khi tích hợp với các sản phẩm riêng biệt. Kỹ thuật dựa trên miền đầu vào Phân vùng tương đương liên quan đến việc phân chia miền đầu vào thành các vùng dựa trên tiêu chuẩn hoặc quan hệ. Tiêu chuẩn hoặc quan hệ này có thể là những kết quả tính toán khác nhau, quan hệ dựa trên luồng điều khiển hoặc luồng dữ liệu, hoặc một sự phân biệt được tạo ra giữa các đầu vào hợp được chấp nhận và đầu vào không hợp lệ sẽ bị từ chối và đưa ra lỗi. Các trường hợp kiểm thử có được bằng việc kết hợp các giá trị tiêu biểu cho mỗi cặp của một tập hợp biến đầu vào thay vì xét đến toàn bộ các kết hợp có thế có. Kiểm thử theo cặp thuộc về kiểm thử tổ hợp, nhìn chung bao gồm mức tổ hợp cao hơn so với cặp: những kỹ thuật này được xem như t-wise, cái mà toàn bộ tổ hợp đầu vào t được xem xét. Các trường hợp kiểm thử được chọn ra sẽ nằm trên hoặc gần với điên của miền đầu vào, nơi tỉ lệ lỗi thường tập chung cao nhất. Trường hợp ngoại lệ của kỹ thuật này là kiểm thử sự bền vững, nơi mà trường hợp kiểm thử được chọn bên ngoài miền biến đầu vào để kiểm thử sự bền vững của sản phầm trong việc xử lý đầu vào lỗi. 54 Các kiểm thử được thực hiện đơn thuẩn một cách ngẫu nhiên. Dạng kiểm thử này đặt dưới đầu của miền đầu vào bởi vì miền đầu vào phải được biến để để có thể lấy ra được những điểm ngẫu nhiên. Kiểm thử ngẫu nhiên cung cấp một tiếp cận đơn giản để kiểm thử tự động, gần đây các dạng nâng cao của kiểm thử ngẫu nhiên được đưa ra, mẫu đầu vào ngẫu nhiên được hướng bởi tiêu chuẩn lựa chọn đầu vào khác. Kiểm thửu Fuzz hay Fuzzing là dạng đặc biệt của kiểm thử ngẫu nhiên,tập chung vào việc phá vỡ phần mềm, nó chủ yếu được dùng để kiểm thử an ninh của phần mềm. Kỹ thuật dựa trên mã nguồn Tiêu chuẩn phủ dựa trên luồng điều khiển được tập chung vào việc phủ toàn bộ các câu lệnh, khối lệnh hoặc kết hợp đặc biệt của các câu lệnh trong chương trình. Điểm mạnh nhất của tiêu chuẩn này là kiểm thử đường đi, cái mà tập chung vào để thực thi toàn bộ đường đi lường điều khiển từ khi vào đến khi kết thúc trong biểu đồ luồng điều khiển của chương trình. Vì kiểm thử vét kiệt đường đi là không khả thi do vòng lặp, tiêu chuẩn ít chính xác tập chung vào đọ phủ của đường đi các mà giới hạn các bước lặp như phủ câu lệnh, phủ nhánh và kiểm thử quyết định. Sự đầy đủ của các kiểm thử như thế được đo đạc theo phần trăm, ví dụ, khi tất cả các nhánh được thự thi ít nhất một lần khi kiểm thử thì độ phủ nhánh là 100%. Trong kiểm thử dựa trên luồng dữ liệu, biểu đồ luồng điều khiển được diễn giải với thông tin về việc bằng cách nào các biến chương trình được định nghĩa, dử dụng và kết thúc. Tiêu chuẩn mạnh nhất yêu cầu từ định nghĩa của biến đến việc sử dụng định nghĩa đó được thực thi. Để giảm số đường đi yêu cầu, những chiến lược yếu hơn như định nghĩa tất cả và sử dụng tất cả được dùng. Mặc dù bản thân không phải là một kỹ thuật, cấu trúc điều khiển của một chương trình có thể được hình ảnh hoá để biểu diễn việc sử dụng một biểu đồ như kỹ thuật dựa trên mã nguồn. Một biểu đồ là đồ thị có hướng, các nút và cung biểu diễn cho các yếu tố của chương trình. Ví dụ, các nút có thể biểu diễn các lệnh hoặc tần xuất không bị can thiệp của lệnh và cung có thể biểu diễn sử trao đổi giữa các nút. Kỹ thuật dựa trên lỗi Trong việc dự đoán lỗi, các trường hợp kiểm thử được thiết kế đặc biệt bởi kỹ sư phần mềm người mà cố gắng dự đoán trước các lỗi có thể xảy ra trong chương trình cho trước. Một nguồn thông tin tốt là lịch sử lỗi được tìm ra trong những dự án có trước cũng như kỹ năng của kỹ sư phần mềm. Một đột biến là một phiên bản chỉnh sửa nhẹ của chương trình đang kiểm thử, với một sử thay đổi nhẹ để khác biệt với chương trình cũ. Mỗi lần kiểm thử là kiểm thử phiên bản gốc và toàn bộ các đột biến: nếu trường hợp kiểm thử thành công trong việc định danh sự khác biệt giữa chương trình và đột biến thì đột biến sẽ bị tiêu diệt. Nói cách khác, khi một đột biến được kiểm thử mà trả kết quả khác so với bản gốc thì đột biến bị tiêu diệt và xem như bản gốc đạt tiêu chuẩn. Khi bản đột biến mà cho kết quả giống bản gốc thì xem như kiểm thửu thất bại. Hiệu của của kỹ thuật này được đánh giá bằng số lượng lớn của các đột biến bị tiêu diệt. Các đột biến thường được tạo ra một cách tự động và kiểm thử thực hiện theo một cách có hệ thống. Kỹ thuật dựa trên việc sử dụng 55 Trong việc kiểm thử sự đánh giá độ tin cậy, mội trường kiểm thử được tạo ra gần với môi trường vận hành của phần mềm hoặc gọi là hồ sơ vận hành. Mục tiêu là để suy ra từ các kết quả đã được theo dõi độ tin cậy tương lai của phần mềm khi được sử dụng thật. để làm điều này, đầu vào được gán các xác suất hoặc hồ sơ theo tần suất xảy ra trong thực tế. Hồ sơ vận hành so thể được dùng trong kiểm thử hệ thống để hướng dẫn bắt nguồn của các trường hợp kiểm thử sẽ đánh giá sự tin cậy và thử nghiệm liên quan đến việc sử dụng và các chức năng khác nhau giống với những gì xảy ra trong môi trường kiểm thử vận hành. Các nguyên tắc sử dụng có thể cung cấp hướng dẫn cho việc tìm ra vấn đề trong thiết kế giao diện. Nguồn thông tin cho vấn đề này có thể được lấy qua các nguồn như phỏng vấn và làm khảo sát người dùng. Kỹ thuật dựa trên mô hình Những bảng quyết định biểu diễn các mối quan hệ logic giữa các điều kiện và hành động. Các trường hợp kiểm thử có được một cách hệ thống bằng việc xem xét mọi tổ hợp của điều kiện và các hành động phản ứng. Một kỹ thuật liên quan là đồ thị nguyên nhân - ảnh hưởng. Bằng việc mô hình hóa một chương trình như một máy trạng thái hữu hạn, việc kiểm thử được lựa chọn để bao phủ các trạng thái và sự chuyển tiếp. Trạng thái hóa cả chi tiết kỹ thuật trong ngôn ngữ hình thức cho phép sự dẫn xuất tự động các trường hợp kiểm thử chức năng và cùng lúc cung cấp một dự đoán cho việc kiểm tra kết quả kiểm thử. TTCN3 là một ngôn ngữ được phát triển để viết ra các trường hợp kiểm thử. Định nghĩa được hiểu với những yêu cầu riêng biệt của kiểm thử các hệ thống truyền thông, vì thế nó đặc biệt thích hợp cho kiểm thử các giao thức truyền thông phức tạp. Mô hình luồng công việc chỉ ra tần xuất của các hoạt động được thực hiện bởi con người hay ứng dụng phần mềm, thường được biểu diễn thông qua các định nghiwax hình ảnh. Mỗi tần suất của hành động cấu thành một luồng công việc. Kỹ thuật dựa trên tính chất của phần mềm Các kỹ thuật bên trên áp dụng cho toàn bộ các loại phần mềm. các kỹ thuật phụ cho kiểm thử dựa trên tính chấn của phần mềm như: Phần mềm hướng đối tượng Phần mềm dựa trên bộ phận Phần mềm nền web Các chương trình tương tranh Phần mềm dựa trên giao thức Hệ thống thời gian thực Hệ thống an toàn nguy cấp Phần mềm hướng dịch vụ Phần mềm mã nguồn mở Phần mềm nhúng Chọn và kết hợp các kỹ thuật Các kỹ thuật kiểm thử dựa trên mô hình và mã nguồn thường tương phản như kiểm thử chức năng và cấu trúc. Hai cách tiếp cận lựa chọn kiểm thử này không được xem như thay thế cho nhau mà được xem là bổ sung cho nhau; trong thực tế, chúng sử dụng các nguồn thông tin khác nhau và đã chỉ ra các loại vấn đề tiêu biểu khác nhau. Chúng có thể được dùng kết hợp và phụ thuộc vào xem xét đầu tư. 56 Các trường hợp kiểm thử được chọn theo cách tất định, theo một trong số các kỹ thuật hoặc thực hiện ngẫu nhiên từ sự phân phối đầu vào như trong kiểm thử độ tin cậy. Một vài so sánh theo kiểu phân tích và kinh nghiệm được chọn để phân tích các điều kiện mà tạo cách tiếp cận có hiệu quả hơn. 1.4 Một số thuật ngữ Các phép đo chương trình hỗ trợ lên kế hoạc và thiết kế kiểm thử Các phép đó dựa trên kích cỡ của phần mềm (ví dụ: các dòng mã nguồn hoặc kích thước chức năng) hoặc cấu trúc phần mềm có thể được dùng để hướng dẫn kiểm thử. Các phép đo cấu trúc bao gồm các phép đo mà quyết định tần suất của mô đun này gọi thực hiện mô đun khác. Các loại lỗi, phân loại và thống kê Văn học kiểm thử đa dạng trong phân loại và nguyên tắc phân loại lỗi. Để tạo ra kiêm thử hiệu quả hơn thì quan trọng là biết loại lỗi nào có thể được phát hiện trong phần mềm đang kiểm thử và tần xuất tương đối những lỗi đó tồn tại trong quá khứ. Thông tin này có thể hữu ích trong việc dự đoán chất lượng cũng như trong việc cải tiến quá trình. Mật độ lỗi Một chương trình đang kiểm thử có thể được đánh giá bằng việc tính toán các lỗi đã được tìm ra như tỉ lệ giữa số lỗi được tìm thấy và độ lớn cửa chương trình. Đánh giá độ tin cậy Một ước lượng thống kê của độ tin cậy phần mềm có thể được dùng để đánh giá một sản phẩm phần mềm và quết định kiểm thử có thể dừng lại hay không bằng việc quan sát độ tin cậy được tạo ra. Những mô hình phát triển độ tin cậy Những mô hình phát triển độ tin cậy cung cấp dự đoán dộ tin cậy dựa trên lỗi. Chúng giả định rằng các lỗi gây ra các thất bại được quan sát đều được sửa, độ tin cậy của sản phầm đữa ra một xu thế tăng dần. Rất nhiều mô hình kiểu này được đưa ra. Đáng chú ý, những mô hình này được chi ra là 2 loại là mô hình đếm lỗi và mô hình thời gian giữa các lỗi. Các phép đo phủ Một vài tiêu chuẩn kiểm thử yêu cầu rằng các trường hợp kiểm thử thực hiện một tập yếu tố được định danh trong chương trình hoặc trong chi tiết kỹ thuật một các hệ thống. Để đánh giá độ chi tiết của các kiểm thử được thực hiện, các kỹ sư phần mềm cso thể theo dõi các yếu tố được bao phủ để họ có thể đo đạc tỉ lệ giữa yếu tố được phủ và tổng số một các linh động. Ví dụ, có thể đo tỉ lệ phần trăm của các nhánh được phủ trong biểu đồ dòng chảy chương trình hoặc phần trăm yêu cầu chức năng được thực hiện và danh sách chức năng trong tài liệu chi tiết kỹ thuật. Các tiêu chí phù hợp dứa trên mã nguồn yêu cầu sự đo đạc thích hợp của chương trình đang kiểm thử. Gieo lỗi Trong việc gieo lỗi, vài lỗi được đưa nhân tạo vào chương trình trước khi kiểm thử. Khi kiểm thử được tiến hành, và trong số này sẽ được bộc lộ cũng như và lỗi có sẵn. Theo lý thuyết, phụ thuộc vào việc cái nào và bao nhiêu lỗi nhân tạo được tìm ra, hiệu quả kiểm thử và số lỗi thực có thể được đánh giá. Trong thực tế, các nhà thống kê đặt ra câu hỏi thử phân phối và biểu diễn của các lỗi được gieo trước đó quan hệ vơi lỗi thật và một cỡ bé mẫu thử lên bất kỳ phéo ngoại suy nào được 57 dựa trên. Một số khác tranh cãi rằng kỹ thuật này nên dùng thận trọng vì việc chèn lỗi vào phần mềm liên quan đến mạo hiểm rõ rằng rằng có thể quên các lỗi đó trong chương trình. Điểm đột biến Trong kiểm thử đột biến, tỉ lệ các đột biến bị tiêu diệt với tổng số đột biến có thể là phép đo cho sự hiệu của của tập kiểm thử được thực hiện. Sự so sánh và hiệu quả tương đối của các kỹ thuật khác nhau Và nghiên cứu được tiến hành đê so sánh hiệu quả tương đối của việc sử dụng các kỹ thuật khác nhau. Quan trọng là để được chính xác như đối với thuộc tính dựa vào đó các kỹ thuật đang được đánh giá. Cách diễn dải có thể bao gồm số các kiểm thử cần để tìm ra lỗi đầu tiên, tỉ lệ của số lỗi được tìm ra thông qua kiểm thử và toàn bộ số lỗi được tìm ra trong và sau khi kiểm thử, và cải thiện độ tin cậy được bao nhiêu. Các so sánh phân tích và thực nghiệm giữa các kỹ thuật khác nhau được tiến hành theo từng ý niệm về hiệu quả quy định ở trên 2. Các cấp độ kiểm thử Kiểm thử phần mềm thường được thực hiện ở các cấp độ khác nhau trong suốt quá trình phát triển và bảo trì. Mức có thể được phân biệt dựa trên các đối tượng thử nghiệm, được gọi là các target, hoặc về mục đích, được gọi là các objective (từ cấp thử nghiệm). Mục tiêu của kiểm thử (Target of the Test) Mục tiêu của thử nghiệm có thể khác nhau: một mô-đun duy nhất, một nhóm các mô-đun như (liên quan theo mục đích, sử dụng, hành vi, hoặc cơ cấu), hay toàn hệ thống. Ba giai đoạn thử nghiệm có thể được phân biệt: đơn vị, tích hợp và hệ thống. 2.1. Kiểm thử đơn vị Unit testing đề cập đến các kiểm thử để chứng thực (xác minh - verify) chức năng của một phần riêng biệt của code, thường ở mức hàm (function level). Trong một môi trường hướng đối tượng (object-oriented environment), kiểm thử đơn vị thường được sử dụng ở mức lớp (class) và kiểm thử các đơn vị nhỏ nhất bao gồm các hàm constructor và destructor. Loại kiểm thử này thường được viết bởi các DEV như công việc của họ trong việc code (loại test white-box), để bảo đảm rằng từng hàm riêng biệt hoạt động đúng theo mong muốn. Một hàm có thể có nhiều kiểm thử, để bắt được các trường hợp hoặc các nhánh trong code. Unit testing một mình không thể bảo đảm chức năng của một bộ phận của phần mềm mà là sử dụng để bảo đảm rằng các khối kiến trúc của phần mềm làm việc độc lập với nhau. Unit testing (kiểm thử đơn vị) cũng được gọi là component testing (kiểm thử thành phần). 2.2. Kiểm thử tích hợp Integration testing là một loại kiểm thử phần mềm mà tìm kiếm để kiểm tra các giao diện giữa các thành phần dựa vào thiết kế của phần mềm. Các thành phần phần mềm có thể được tích hợp lại với nhau theo cách lặp đi lặp lại (từng phần nhỏ ghép lại với nhau, rồi ghép tiếp phần nhỏ khác vào nữa, hành động này lặp lại cho đến khi kết hợp toàn bộ phần mềm) hoặc tất cả các thành phần cùng tích hợp một lần (gọi là “big bang”). Thông thường trước đây được xem là một cách làm 58 tốt hơn từ khi nó cho phép các vấn đề về giao diện được xác định vị trí nhanh hơn và cố định. Integration testing làm việc để tìm ra lỗi (defect) trong các giao diện và giao tiếp giữa các thành phần (mô-đun). Các nhóm thành phần phần mềm đã được kiểm thử lớn dần từng bước tương ứng với các yếu tố của thiết kế kiến trúc đã được tích hợp và kiểm thử cho đến khi phần mềm hoạt động như một hệ thống. 2.3. Kiểm thử hệ thống System testing kiểm thử một hệ thống đã được tích hợp hoàn chỉnh để xác minh rằng nó đáp ứng được yêu cầu. Kiểm thử tích hợp hệ thống chứng thực rằng hệ thống đã được tích hợp với các hệ thống bên ngoài hoặc hệ thống thứ ba đã được xác định trong các yêu cầu hệ thống. Mục đích của kiểm thử Kiểm thử được tiến hành trong bối cảnh mục tiêu cụ thể, trong đó được ghi nhận nhiều hơn hoặc ít hơn một cách rõ ràng và có độ chính xác khác nhau. Trong đó nêu rõ mục đích của kiểm thử một cách chính xác, hỗ trợ về mặt định lượng đo lường và kiểm soát trong quá trình kiểm thử. Kiểm thử có thể được dùng để xác minh các tính chất khác nhau. Trường hợp kiểm thử có thể được thiết kế để kiểm tra các thông số kỹ thuật chức năng được thực hiện một cách chính xác, hiệu suất, độ tin cậy, khả dụng... Nghiệm thu/Năng lực kiểm thử Nghiệm thu/Năng lực kiểm thử xác định một hệ thống đáp ứng tiêu chuẩn nghiệm thu của nó, thường là bằng cách kiểm tra các hành vi hệ thống mong muốn đối với các yêu cầu của khách hàng. 2.4. Kiểm thử chấp nhận Nhiệm vụ chính của phần này là đánh giá như thế nào là dễ dàng cho người dùng cuối để tìm hiểu và sử dụng phần mềm. Nói chung, nó có thể liên quan đến việc thử nghiệm các chức năng phần mềm hỗ trợ việc sử dụng, tài liệu hướng dẫn nhằm hỗ trợ người sử dụng, và khả năng của hệ thống để phục hồi từ lỗi người sử dụng 3. Các kỹ thuật kiểm thử. 3.1. Kiểm thử hộp đen - Black-box Testing Black Box Testing là gì? Kiểm tra hộp đen (Black box testing) là một phương pháp kiểm thử phần mềm mà việc kiểm tra các chức năng của một ứng dụng không cần quan tâm vào cấu trúc nội bộ hoặc hoạt động của nó. Phương pháp thử nghiệm Black Box Testing Dựa vào chức năng Kiểm thử hộp đen (Black box testing) có thể được áp dụng hầu như đến mọi cấp độ của kiểm thử phần mềm: · Kiểm thử đơn vị (Unit testing) · Kiểm thử tích hợp (Integration testing) · Kiểm thử hệ thống (System testing) · Kiểm thử chấp nhận (Acceptance testing). Tuy nhiên, Black box test được sử dụng thích hợp nhất trong kiểm thử hệ thống (System test) và Kiểm thử chấp nhận (Acceptance testing) 59 Ưu điểm Black Box Testing · Các Tester được thực hiện từ quan điểm của người dùng và sẽ giúp đỡ trong việc sáng tỏ sự chênh lệch về thông số kỹ thuật. · Các Tester theo phương pháp black box không có “mối ràng buộc” nào với code, và nhận thức của một tester rất đơn giản: một source code có nhiều lỗi. Sử dụng nguyên tắc, “Hỏi và bạn sẽ nhận” các tester black box tìm được nhiều bug ở nơi mà các developer không tìm thấy. · Tester không cần phải biết ngôn ngữ lập trình hoặc làm thế nào các phần mềm đã được thực hiện. · Thiết kế kịch bản kiểm thử khá nhanh, ngay khi mà các yêu cầu chức năng được xác định. Nhược điểm Black Box Testing Người ta nói kiểm thử hộp đen giống như là đi trong bóng tối mà không có bóng đèn vậy “, bởi vì kiểm thử viên không biết các phần mềm được kiểm tra thực sự được xây dựng như thế nào. Đây là lý do mà một kiểm thử viên viết rất nhiều test case để kiểm tra một thứ gì đó mà đáng lẽ ra chỉ cần 1 ca kiểm thử là đủ, và/hoặc một số phần của phần mềm không được kiểm thử chút nào. Vòng đời phát triển của kiểm thử hộp đen. Kiểm thử hộp đen có chu kỳ sống riêng của nó được gọi là vòng đời kiểm thử phần mềm( STLC) và nó liên quan đến mọi giai đoạn của Vòng đời phát triển phần mềm. · Requirement – Đây là giai đoạn ban đầu của SDLC và trong giai đoạn này các yêu cầu được thu thập. Kiểm thử phần mềm cũng tham gia vào giai đoạn này. · Test Planning & Analysis – Các loại thử nghiệm áp dụng cho dự án được xác định. Một kế hoạch thử nghiệm được tạo ra để xác định các rủi ro có thể xảy ra của dự án và giảm thiểu sự rủi ro của chúng. · Design – Trong giai đoạn này các trường hợp / tập lệnh thử nghiệm được tạo trên cơ sở các tài liệu yêu cầu phần mềm · Test Execution – Trong giai đoạn này chúng ta thực hiện các trường hợp thử nghiệm đã chuẩn bị. Phương pháp kiểm thử hộp đen Đoán lỗi: Là một kỹ năng quan trọng của tester, thậm chí có thể gọi là nghệ thuật. Một kiệt tác của trực giác. Phương pháp này đặc biệt dựa vào kinh nghiệm và kiến thức của tester. Nhiều tester cố gắng đoán xem phần nào của hệ thống mà có khả năng ẩn chứa lỗi. Với phương pháp này, họ không cần một công cụ hay một kịch bản kiểm thử nào khi bắt đầu vào việc. Kiểm thử dựa vào đồ thị nguyên nhân – kết quả (Cause Effect Graphing): là một kỹ thuật thiết kế kiểm thử phần mềm liên quan đến việc xác định các trường hợp (điều kiện đầu vào) và các hiệu ứng (điều kiện đầu ra). Vì các hệ thống hiện nay đều được phát triển trên nền tảng OOP, do đó, chúng ta có thể có được một đồ thị các đối tượng mà hệ thống định nghĩa và kết nối. Từ đồ thị này, chúng ta dễ dàng biết các mối quan hệ của những đối tượng mà hệ thống xử lý, từ đó sẽ cho chúng ta các kịch bản kiểm thử phù hợp. Phân vùng tương đương (Equivalence Class) : 60 Là một kỹ thuật kiểm thử phần mềm có liên quan đến phân chia các giá trị đầu vào thành các phân vùng hợp lệ và không hợp lệ, sau đó chúng ta sẽ viết ra các kịch bản kiểm thử cho từng phần, chọn giá trị đại diện từ mỗi phân vùng làm dữ liệu thử nghiệm. · Phân vùng tương đương: là kỹ thuật thực hiện test theo từng class đồng giá trị (tập hợp điều kiện cùng một thao tác). · Tập hợp giá trị input có cùng một kết quả xử lý, tập hợp thời gian có cùng một kết quả xử lý, tập hợp kết quả export được xử lý cùng một giá trị nhập. · Mục đích : Giảm đáng kể số lượng test case cần phải thiết kế vì với mỗi lớp tương đương ta chỉ cần test trên các phần tử đại diện. · Chọn tối thiểu một giá trị đại diện từ các class đồng giá trị để tiến hành test. Nếu có lỗi xảy ra thì các giá trị khác trong class đồng giá trị cũng sẽ có lỗi giống nhau. Phân tích giá trị biên (Boundary Value Analysis): Là một kỹ thuật kiểm thử phần mềm có liên quan đến việc xác định biên (ranh giới) của điều kiện mô tả cho các giá trị đầu vào và chọn giá trị ở biên và bên cạnh giá trị biên làm dữ liệu kiểm thử. Phương pháp phân tích giá trị biên sẽ đưa ra các giá trị đặc biệt, bao gồm loại dữ liệu, giá trị lỗi, bên trong, bên ngoài biên giá trị, lớn nhất và nhỏ nhất. Những kỹ sư nhiều kinh nghiệm chắc chắn đã từng gặp phải các lỗi của hệ thống ngay tại giá trị biên. Đó là lý do tại sao phân tích giá trị biên lại quan trọng khi kiểm thử hệ thống. · Test giá trị biên được thực hiện theo trình tự dưới đây: · Tìm ra đường biên · Quyết định giá trị biên · Quyết định giá trị để test · Giá trị biên. · Dưới giá trị biên. (Nếu là class đồng giá trị) · Trên 1 giá trị biên. (Nếu là class đồng giá trị) Sử dụng bảng quyết định (Decision Tables) · Là dùng bảng để hiển thị danh sách các thao tác phần mềm được quyết định trên các điều kiện khác nhau. · Decision table testing chú trọng vào nhiều điều kiện để thực hiện test. 3.2 Kiểm thử hộp trắng - White-box Testing White Box Testing là gì? Kiểm thử hộp trắng (White Box Testing) là một kỹ thuật xác minh giúp các Tester có thể sử dụng để kiểm tra mã code của họ hoạt động như dự kiến. Có 2 hoạt động kiểm thử hộp trắng: · Kiểm thử luồng điều khiển · Kiểm thử dòng dữ liệu Các kỹ thuật White Box Testing phổ biến Để thực hiện được kiểm thử hộp trắng, ta cần tuân thủ các bước cơ bản sau: · Hiểu được mã nguồn: Đây là việc cần thiết cần làm đầu tiên, vì kiểm thử hộp trắng liên quan đến kiểm tra các hoạt động bên trong nên bắt buộc phải hiểu được mã nguồn mà ta cần kiểm tra. Ngoài ra, ta cần phải thực hiện chặt chẽ vấn đề mã hóa an toàn vì bảo mật là cốt lỗi của việc kiểm thử này. 61 · Tạo và thực hiện các trường hợp kiểm thử: Việc viết thêm các đoạn mã để kiểm tra đoạn mã nguồn của ứng dụng sẽ là việc tiếp theo cần làm. Cần phải phát triển các thử nghiệm nhỏ cho từng quy trình hoặc cho từng chuỗi quy trình trong ứng dụng. Một ví dụ đơn giản với đoạn mã như sau: Printme (int a, int b) { ------------ Printme is a function int result = a+ b; If (result> 0) Print ("Positive", result) Else Print ("Negative", result) } Mục tiêu đặt ra là xác định tất cả các nhánh, các vòng lặp và câu lệnh trong đoạn mã trên. Và các trường hợp thử nghiệm của White Box Testing sẽ là A = 1, B = 1 A = -1, B = -3 Các trường hợp thử nghiệm trên sẽ bao phủ được các điều kiện, các nhánh cũng như các lệnh trong đoạn mã. Các loại kiểm thử hộp trắng · Unit testing: đây là phương pháp kiểm thử đầu tiên được thực hiện để kiểm tra một ứng dụng. Phương pháp này khá quan trọng nên ta sẽ bàn về nó ngay sau khi đọc xong phương pháp kiểm thử Black box testing. · Testing for Memory Leaks (kiểm tra rò rỉ bộ nhớ): Rò rỉ bộ nhớ là nguyên nhân hàng đầu khiến cho việc chạy ứng dụng trở nên chậm chạp hơn. Và khi có hiện tượng như trên thì cần phải nghĩ ngay đến trường hợp này. Ngoài ra cũng có một số phương pháp khác như: White Box Penetration Testing và White Box Mutation Testing Ưu điểm của White Box Testing: · Tối ưu hóa mã nguồn bằng cách tìm ra các lỗi ẩn. · Dễ dàng thực hiện tự động nhưng cũng kỹ lưỡng hơn · Và việc kiểm tra có thể bắt đầu sớm ngay cả khi GUI không khả dụng. Nhược điểm của White Box Testing: · Thực hiện khá phức tạp và tốn kém chi phí. · Đòi hỏi người kiểm thử phải thực sự chuyên nghiệp và hiểu biết về lập trình. · Tốn rất nhiều thời gian CÂU HỎI VÀ BÀI TẬP 1. Trình bày một số khái niệm cơ bản về kiểm thử phần mềm.? 2. Trình bày các cấp độ kiểm thử phần mềm? 3. Trình bày các kỹ thuật kiểm thử phần mềm.? 62 TÀI LIỆU THAM KHẢO [1]. Thạc Bình Cường, Nhập môn công nghệ phần mềm , NXB Giáo dục, 2008. [2]. Trần Đình Quế, Nhập môn công nghệ phần mềm, Đại học Đà Nẵng, Năm 2007. [3]. Giáo trình nhập môn UML, Huỳnh Văn Đức, Đoàn Thiện Ngân, NXB Lao động Xã hội,2003. [4]. Nguồn Internet.

Các file đính kèm theo tài liệu này:

  • pdfgiao_trinh_nhap_mon_cong_nghe_phan_mem_trinh_do_cao_dang.pdf