CHƯƠNG 1- TỔNG QUAN VỀ KỸ NGHỆ PHẦN MỀM Trong chương này, giáo trình giới thiệu một số khái niệm về phần mềm, kỹ nghệ phần mềm, các thuộc tính và sự ứng dụng của phần mềm, chất lượng sản phẩm phần mềm. Các nguyên lý và phương pháp luận phát triển phần mềm, trách nhiệm và đạo đức của người làm phần mềm. Đây là các nội dung cơ bản mà người đọc cần nắm bắt trước khi tìm hiểu chi tiết về các tiến trình kỹ nghệ phần mềm. Phần mềm và Kỹ nghệ phần mềm Phần mềm là một tập hợp các lệnh được viết trên một hoặc nhiều ngôn ngữ lập trình tạo thành một ứng dụng để tự động hóa một số chức năng, nghiệp vụ nào đó.
Thuật ngữ kỹ nghệ (Engineering) nói chung là việc áp dụng kiến thức thực tế, kinh tế, xã hội và khoa học để thiết kế, xây dựng, cải tiến, duy trì các máy móc, hệ thống, quy trình. Kỹ nghệ phần mềm là sự kết hợp giữa hai khái niệm phần mềm và kỹ nghệ nhằm nghiên cứu và áp dụng các kỹ thuật để phát triển và bảo trì các hệ thống phần mềm. Trong đó, kỹ sư phần mềm là những người phát triển các hệ thống phần mềm. Các công việc cơ bản của kỹ sư phần mềm là: đánh giá, lựa chọn và sử dụng các phương pháp để phát triển, vận hành, bảo trì, và loại bỏ (Retirement) phần mềm.
Phát triển bắt đầu khi quyết định phát triển một phần mềm được chốt và kết thúc khi sản phẩm được bàn giao. Vận hành là việc sử dụng phần mềm. Bảo trì là quá trình chỉnh sửa lỗi, thêm bớt các chức năng hay nâng cấp chất lượng phần mềm. Loại bỏ là sự thay thế phần mềm hiện tại bằng cách làm khác tốt hơn nhưng thường là thay thế bằng một ứng dụng phần mềm mới.
Khi thực hiện các công việc trên trong một dự án phần mềm, các kỹ sư phần mềm luôn có một mục tiêu chung là làm ra một sản phẩm chất lượng cao. Phân biệt giữa Kỹ nghệ phần mềm và Khoa học máy tính Kỹ nghệ phần mềm được phát triển và tách ra từ khoa học máy tính nhằm giải quyết các khó khăn, thách thức trong việc phát triển các hệ thống máy tính ngày càng phức tạp đảm bảo các yêu cầu về chất lượng trong thời gian ngắn, chi phí hợp lý. Các kết quả nghiên cứu về khoa học máy tính tiếp tục là nền tảng cho kỹ nghệ phần mềm, tuy nhiên, kỹ nghệ phần mềm còn khai thác kinh nghiệm thực hành mà thực tiễn đã minh chứng là không hoặc chưa được làm sáng tỏ ở góc độ lý thuyết (Bảng 1.1 cho thấy sự khác nhau giữa Kỹ nghệ phần mềm và Khoa học máy tính). 1 Bảng 1-1: Phân biệt giữa Kỹ nghệ phần mềm và Khoa học máy tính Tiêu chí Khoa học máy tính Kỹ nghệ phần mềm Cung cấp các khoa học cơ bản về Xây dựng hệ thống phần mềm phần cứng máy tính và phần mềm hiệu quả sử dụng một phương Mục tiêu pháp tiếp cận kỹ thuật nghiêm ngặt Nghiên cứu cơ sở lý thuyết tính Áp dụng cách tiếp cận có hệ toán và cách cài đặt chúng trong thống, có kỉ luật và định lượng các hệ thống máy tính.
cho quá trình phát triển, vận hành Lý thuyết khoa học máy tính cơ và bảo trì phần mềm: bản: - Thu thập, phân tích và đặc tả - Hệ thống; yêu cầu; Cơ sở - Mạng; - Thiết kế phần mềm, cài đặt; - Cơ sở dữ liệu; - Thẩm tra và thẩm định; - Trí tuệ nhân tạo; - Đảm bảo chất lượng; - Lý thuyết tính toán; - Các tiến trình kỹ thuật phần - Nội dung kỹ thuật phần mềm. mềm; - Làm việc nhóm và quản lý dự án. Ứng dụng phần mềm Kỹ nghệ phần mềm là việc áp dụng các nguyên lý, phương pháp, công cụ để xây dựng các ứng dụng phần mềm. Một ứng dụng phần mềm là một chương trình được cài đặt trên máy tính, hoặc các thiết bị điện tử để làm một nhiệm vụ nào đó.
Các nghiệp vụ được tạo bởi các yêu cầu như: marketing, kế toán, sản xuất, quản lý nhân viên, v. Mỗi yêu cầu ở trên có thể được chia thành các tiến trình công việc nhỏ hơn. Ví dụ như nghiệp vụ tiếp thị có thể được chia thành bán hàng, quảng cáo. Khi nghiên cứu về một ứng dụng phần mềm nào đó, ta thường tìm hiểu dưới ba góc độ: đặc tính của phần mềm, tính phản hồi của phần mềm và chủng loại phần mềm.
Các thuộc tính phần mềm Các thuộc tính của phần mềm bao gồm: dữ liệu, tiến trình, ràng buộc và giao diện. Dữ liệu là các số hoặc các ký tự có liên quan đến nhau và có thể tạo thành các thuộc tính để định nghĩa ra các thực thể. Ví dụ, thực thể con người, đơn hàng, sách, v.2 minh họa thực thể con người và các thuộc tính). 2 Bảng 1-2: Thực thể và các thuộc tính Thực thể Người Các thuộc tính Chứng minh thư 123456789 Tên xxx Địa chỉ yyy Số điện thoại zzz Trong một ứng dụng phần mềm thì yêu cầu về dữ liệu bao gồm: dữ liệu đầu vào, đầu ra, cách thức lưu trữ và truy xuất.
Dữ liệu đầu vào: Là dữ liệu từ thế giới thực, được nhập vào máy tính qua các thiết bị đầu vào nào đó như bàn phím, máy quét, từ máy tính khác, v. Dữ liệu đầu ra: Là dữ liệu được ứng dụng xử lý từ dữ liệu đầu vào theo một số quy trình nghiệp vụ nào đó. Cách thức lưu trữ và truy xuất dữ liệu: Cách thức lưu trữ dữ liệu đề cập đến định dạng lưu trữ dữ liệu có thể đọc được bởi máy tính, còn cách thức truy xuất dữ liệu là các công cụ, phương pháp sử dụng để truy cập dữ liệu từ định dạng lưu trữ của nó. Hiện nay, phương thức chủ yếu người ta sử dụng là dùng các hệ quản trị CSDL như Oracle, SQL Server.
Tiến trình: Một tiến trình là chuỗi các lệnh hoặc sự kết hợp của các sự kiện xử lý dữ liệu. Các kết quả của tiến trình có thể là các thay đổi dữ liệu trong cơ sở dữ liệu, định dạng hiển thị của dữ liệu trên màn hình. Ràng buộc: Các tiến trình bị giới hạn bởi các ràng buộc ở các hành vi hoặc xử lý các thực thể. Có các kiểu ràng buộc như: Điều kiện tiên quyết, điều kiện kết thúc, thời gian, cấu trúc, điều khiển và suy diễn.
Điều kiện tiên quyết: Là các tiền điều kiện trước khi một tiến trình có thể khởi chạy. Điều kiện kết thúc: Là điều kiện để kết thúc thành công của một tiến trình. Thời gian: Có thể là một trong các ràng buộc sau: 3 ✓ Thời gian xử lý: Thời gian mà một tiến trình phải bắt đầu hoặc kết thúc công việc xử lý của nó, hoặc cả hai. ✓ Thời gian được phân bổ cho một tiến trình: Time-out của các kết nối đến cơ sở dữ liệu.
✓ Yêu cầu đồng bộ về thời gian xử lý. ✓ Thời gian phản hồi cho các tiến trình giao diện bên ngoài. Cấu trúc: Ràng buộc này mô tả mối quan hệ giữa dữ liệu, tri thức về dữ liệu và thông tin mô tả của tri thức đó (Bảng 1.3 minh họa ràng buộc cấu trúc). Các ràng buộc cấu trúc quyết định các kiểu đầu vào hoặc đầu ra có thể có trong ứng dụng và cách kết thúc của các tiến trình và mối quan hệ giữa các tiến trình.
Bảng 1-3: Ràng buộc cấu trúc của dữ liệu trong một ứng dụng Dữ liệu Customer Thông tin mô tả dữ liệu Field = Customer-ID Name = XXX Type = YYY Tri thức về dữ liệu trong Customer phải thanh toán bằng tiền mặt khi mua hàng hệ thống Thông tin mô tả tri thức Customer nếu là khách hàng Vip (Type) thì sẽ được miễn 50% tiền hóa đơn, v. Điều khiển: Liên quan đến việc tự động duy trì các mối quan hệ của dữ liệu. Suy diễn: Là các giới hạn về khả năng suy diễn của ứng dụng và khả năng sinh ra các thông tin mới từ các thông tin và các mối quan hệ cũ. Tức là ràng buộc về độ thông minh của bản thân ứng dụng.
Nguyên nhân có thể là do con người quyết đinh, do bản thân dữ liệu hoặc tri thức nằm trong hệ thống hoặc do ngôn ngữ lập trình để tạo ra ứng dung. Giao diện: Có ba kiểu giao diện phổ biến là: trực tiếp, gián tiếp và ẩn. ✓ Trực tiếp: Con người trực tiếp sử dụng giao diện của ứng dụng. Có thể là giao diện đồ họa hoặc giao diện dòng lệnh (Command Line); 4 ✓ Gián tiếp: Con người đọc các báo cáo do máy tính in ra hoặc xem các chỉ thị do máy tính tạo ra.
Ví dụ như các hóa đơn tính tiền mua hàng; ✓ Ẩn: Dữ liệu được lưu trữ trên máy tính và được trao đổi với ứng dụng khác. Sự phản hồi của ứng dụng phần mềm: Là khoảng thời gian mà hệ thống thực hiện và phản hồi đến các yêu cầu của người dùng. Theo tiêu chuẩn này thì có ba loại ứng dụng như sau: Ứng dụng xử lý theo lô (Batch), ứng dụng trực tuyến (Online) và ứng dụng thời gian thực (Real-Time). ✓ Ứng dụng theo lô (Batch): Là ứng dụng mà các giao dịch được thực hiện theo chỉ định, không có tương tác giữa người và chương trình lúc xử lý trừ khi hệ thống gây lỗi.
Ví dụ các hệ thống sắp sếp, trộn dữ liệu từ nhiều các nguồn khác nhau nhằm tối ưu hóa quá trình xử lý tiếp theo như cung cấp các báo cáo hàng ngày, tuần, tháng, v. ✓ Ứng dụng On-Line: Xử lý tương tác giữa người và máy tính. Con người nhận phản hồi từ ứng dụng trong quá trình xử lý. Ứng dụng online được chia nhỏ và có thể giao tiếp với nhau qua việc truyền dữ liệu chứ không phải thông qua các file như ở các ứng dụng lô.
✓ Ứng dụng thời gian thực (Real-Time): Các ứng dụng real time xử lý các giao dịch hoặc các sự kiện trong suốt một khoảng thời gian thực tế mà các tiến trình vật lý nào đó ở thế giới thực diễn ra. Kết quả của các quá trình xử lý từ máy tính luôn có sẵn trong thời gian thực để điều khiển các tiến trình vât lý. Ứng dụng thời gian thực có thể xử lý nhiều giao dịch đồng thời. Ví dụ của các hệ thống dạng này là hệ thống cảnh báo cháy, v.
Ứng dụng phần mềm Có bốn kiểu ứng dụng phần mềm chính: ứng dụng giao dịch, phân tích dữ liệu, hỗ trợ ra quyết đinh, các ứng dụng chuyên gia và hệ thống nhúng.