Chương 1 TỎNG QUAN VÈ CÔNG NGHỆ PHÀN MÈM Phần mềm đã trở thành phần lử chù chốt trong tiến hỏa cùa các hệ thống và sàn phẩm dựa trên máy tính. Công nghệ phần mềm là mộI chuyên ngành khoa học nghiên cứu tìm ra cách tốt nhất để làm ra các phần mềm đáp im g các bài toán x ử lý Un lừ đơn giản đến phức tạp sao cho chương trình nhận được phải đúng, đáng tin và hiệu quà lại d ễ sử dụng. Churmg này giới thiệu những đặc trung chung nhái về công nghệ phần mềm. Học viên cần nắm vững các khái niệm về phần mềm, công nghệ phần mềm, các phuưng pháp trong kỹ nghệ phần mềm, bàn thợ C.ASE, các tiêu chuẩn cùa một phần mềm lốt, những thách thức chính đối với công nghệ phần mềm, khái quát được một số hướng kỹ nghệ phần mềm điển hình.
Định nghĩa phần mềm Đến nay, đã có nhiều định nghĩa về phần mềm, song định nghĩa sau đây cho chúng ta một khái niệm khá đầy chi về các thành phần phần mềm. Đinh nựhĩa Í91\ Phần mềm bao gồm một tập hợp các thành phần: - Các tài liệu phân tích thiết kế, tài liệu hướng dẫn cài đặt và sử dụng phần mềm, tài liệu bảo trì, nâng cấp; - Cơ sở dữ liệu (CSDL) được cài đặt trong môi truờng thích hợp (hệ quản trị dữ liệu); - Các dòng lệnh (chương trình máy tính) khả thi trên máy tính, phù hợp với hệ quản trị dữ liệu đã cài đặt CSDL; - Các tiện ích số hoá đi kèm hỗ trợ cho chương trinh máy tính. 18 Trong xã hội hiện đụi, phản mềm ỊỊÍữ vai trò ráí quan trụng. Phần mèm (Software -SW) bây ỊỊÌỜ đã giữ vị tri then chốt hon phần cútiỊỊ (HardWare- HW): điều mấu chồi cho sự thành công cua nhiều /)(? íhồnịỉ dựa trên máy tinh.
Kha HÚHỊỊ lưii trừ cua phàn cútig biêu thị cho tiềm Iiă/Iịỉ linh toán cua máy lính. Còn phần mem the hiện một cơ chế giúp chúng lu chế ngự và khui thác tiềm năng này. Hệ thống phần mèm hoạt động trùn các IIIÚV lính trơ tliành diều kiện sổnịỉ còn cua các máy linh đó. Phần mèm lù nhân lố dúnh ỊỊÍá sự khác hiệt; điều này ihê hiện ơ cho: - Tíiilì đày đu và đúng thời hạn cua thôiiỊỉ Un do phan mèm cung cấp (vù cúc ( 'SU/, liên í/uan) dân đến sự khác biệt ỊỊiũa một công ly này vời các đoi thu cạnh tranh.
- Thiết kẻ và "tinh thân thiện" cua san phàm phần mèm cũng lùm khác biệi nỏ với các sản phàm cạnh íranh cú CÙHỊỊ ch ú t năng luxmg tự khúc. Sự íhông minh vù chức năng do phần mèm đur/c nhúng Irong đó đưa ra thường làm khác biệt 2 sàn phẩm tiêu thụ hay công nghiệp tuxrng lự nhau. Như vậy, chinh phần mèm tạo ra sự khác biệt đó. Vai trò cùa phần mèm không ngừng mơ rộng như Norman và Levy /23J dã viết: “Ngày nay, hoạt động tính toán có mặt khắp mọi nơi đã sản sinh ra một thế hệ những người ứng dụng thông tin sử dụng web để cung cấp một mạng lưới thòng tin bao phù liên kết mọi nhà, mọi công sờ đến các xa lộ ”.
Định nghla công nghệ phần mềm Công nghệ phần mềm (Software technology) là tập hợp các công nghệ (bao gồm nhiều kỹ thuật) để tạo ra phần mềm, mỗi công nghệ có thể có nhiều kỹ thuật tạo chương trình khác nhau [9], Chắng hạn như Công nghệ hướng sự vật: một ỊỊÌải pháp đê thiét kế và lập trình phần mèm hiệu quá nhừ sứ dụng các sự vật LỈur/c xây dw ig lừ trước. Công nghệ Java: một giải pháp lạo ra phần mèm cù thê hoạt động trẽn các nền làng khúc nhau trên mạng máy tính. Có thê nói rằng, công nghệ phàn mèm !à lập hợp các phuung pháp, quy trình, kỹ năng, bí quyết, CÔHỊỊ cụ, />hurrnỊỉ tiện đế lùm ra sán phẩm lù phần mèm. Sự khác biệt giữa công nghệ phần mềm với kỹ nghệ phần mềm Trong cuộc hội thào chính đầu Hên về chù để kỹ nghệ phần mem, Fritz Rauer đã đira ra định nghĩa han đầu về kỹ nghệ phần mềm.
Đinh nnhĩa: Theo Naur p. [9,23], Kỹ nghệ phần mềm (Software Engineering) 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 một cách kinh tế vừa tin cậy vừa làm việc hiệu quả trên các máy thực. Nhiều định nghĩa khác về sau đều nhấn mạnh vàn các yêu cầu về một kỳ luật công nghệ trong việc phát triển. Parnas /2 3 / coi kỹ 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 /2 5 / xem kỹ nghệ phần mềm là mộ! lĩnh vực cùa khoa học máy linh. Hên quan đến xây dựng các hệ thống phần mềm vừa lởn vùa phirc lạp bởi một hay mội số nhóm kỹ sư. Sommerville ¡25] xác định kỹ nghệ phan mềm là lĩnh vực Hên quan đến lý thuyết, phương pháp và cỏrtỊỊ cụ dùng cho pháI triển phần mèm. Pressman /2 3 / định nghĩa kỹ nghệ phần mềm là bộ môn tích h<rp cà tiến trình, các phw m g pháp, các công cụ để phát triển phần mềm máy tính.
Trong công nghiệp phần mềm (Software Industry) thì công nghệ và kỹ nghệ không khác nhau là mấy, vì kỹ nghệ phần mềm không dùng đến các kỹ thuật gì khác hơn là kỹ thuật của công nghệ phần mềm. Cái khác ¡à cách nhìn: cách nhìn kỹ nghệ hao trùm hơn. Khía cạnh công nghệ thin'mg ìà cách thức kỹ thuật để tạo ra nhũng sàn phẩm cụ thể (có thể xem như đó là định nghĩa cơ sờ tin học), còn các khia cạnh khác cùa kỹ nghệ phần mềm, cho đến bây giờ íhưìmg dùng trong “việc huấn luyện trong công việc ” là chú yếu, nói tới việc thực hành các tiến trình sản xuất phần mềm theo quy tắc, ký luật và có bài bản. Nói gọn lại, kỹ nghệ phần mềm hay công trình học phần mềm không phải là chính việc sản sinh ra sàn phẩm mà nó liên quan đèn việc sản sinh ra sản phẩm một cách hiệu quà 1.
Sự khác biệt giữa kỹ nghệ phần mềm và kỹ nghệ hệ thểng Vì hệ thống không phài là khái niệm nguyên thuỷ, nghĩa là chúng la cỏ thể dùng những khái niệm đã biết đế định nghĩa thế nào là hệ thống, nhưng hệ thống là khái niệm được nghiên cứu và ứng dụng trong rấl nhiều lĩnh vực khác 20 nhau nên việc nêu lên một định nghĩa hình thức hoá vè hệ ihốHỊỊ, củ đu tinh khái quát đế có thẻ úp dụng trong những lĩnh vụt khác nhau là một việc vô cùng khó khăn. Tuy vậy, chúng ta sẽ đưa ru một "định nghĩa "phố cập nhất. Định nirhĩa 1131: Hệ thống bao gồm : + Tập hợp các phần từ (không phân biột bản chất của nó). + Tập hợp các mối quan hệ giũa các phần tứ đó (các quan hệ có nhiều dạng rất khác nhau.
Có thể kể ra một vài dạng như các quan hệ cơ học, năng luợng, thông tin và các quan hệ khác ràng buộc bới: kinh tế, thân hữu, pháp luật và có thể xác định qua các mặt như: số lượng, chiều hướng và cường độ cùa chúng). + Tạo thành một thể thống nhất để có được những chức năng hay mục tiêu (của chinh nó hay được con người gán cho) của hệ thống. Nhờ lạo ihành một íhế thống nhất mà hệ thong có được các đặc lính mà tùng phần íừ riêng rẽ không thể củ đur/c. Các đặc tinh nậy gọi là các "đặc tính trồi”.
Nguìri kỹ sư hệ thống cần có sự hiểu biếí về kỹ nghệ một hệ thống dựa trẽn máy linh vì nhũng vắn đẻ cùa kỹ nghệ phần mèm thường là hậu quà íất yếu từ các quyèl định kỹ nghệ ở mức toàn hệ thống. Kỹ nghệ hệ thống là hoạt động đặc tà, thiết kế, thực thi, thẩm định, triền khai và bảo trì toàn bộ hệ thống. Định nghĩa về hệ thống tin học: Một hệ thống dựa trên máy tính gồm có các thiết bị tin học (phần cứng), các chương trinh (phần mềm), các dữ liệu, con người và các thù tục làm việc được tổ chức lại để tạo ra các chức năng hay dịch vụ phục vụ cho một tổ chức /9 ,16Ị. Sự hoạt động thành công cùa mỗi thùnh phần írong một hệ thống phụ thuộc vào sự hoạt động cùa một số thành phần khác.
Hệ thống luôn mang tỉnh phân cấp theo nghĩa là chúng luôn bao hùm trong nó những hệ thống nhỏ hơn (gọi là các hệ con) các thành phần của chúng. Khi cúc thành phần liên két lại cấu íhành một hệ thống, chúng tạo ra những tính trồi mà moi íhành phan riêng rẽ không ihế có được. 21 Do phần mèm chì là một thành phần (cốt lõi) cùa hệ thong mà chúng la quan tâm, nên khái niệm kỹ nghệ hệ thong bao hàm nhiều nghĩa và nội dttnịỉ rộng hơn khái niệm kĩ’ nghệ phần mềm. Tiến trình kỹ nghệ hệ thống Un học điợrc thế hiện thỏnỊỉ qua sơ đồ đặc tà trong hình 1.
Tiến Irình kỹ nghệ thống dựa trên máy tinh /lổ ] 1. Các phưong pháp trong kỹ nghệ phần mềm Phương pháp cho một “cách làm” về mặt kỹ thuật để xây dựng phần mềm. Các phương pháp thường bao gồm phương pháp luận và các phương pháp cụ thể [16], Phương pháp luận mô tả một cách tiếp cận mang tính kỹ thuật để tạo ra phần mềm, thường bao gồm các hoạt động theo một đjnh hướng công nghệ và trình tự thực hiện chúng. Các hướng công nghệ như hướng cấu trúc, hướng dữ liệu, hướng đối tượng,.
Các hoạt động 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à thuật toán, mã hoá, kiểm thử và bảo trì, và tùy thuộc hướng công nghệ được lựa chọn mà các phương pháp cụ thể thích hợp được sử dụng. Các phương pháp cụ thể là cách thức giải quyết các vấn đề cụ thề phát sinh khi thực hiện các nhiệm vụ khác nhau trong các giai đoạn khác nhau của tiến trình phát triển phần mềm. 22 Tất cả các phương pháp đều dựa trên ý tưởng phát triển các IĨ1 Ô hình cùa hệ thống mà có thể biểu diễn ở dạng đồ họa và dùng các mô hình này làm đặc tá hay thiết ke cho hệ thống được phát triển hay thẩm định. Các phương pháp thường bao gồm các thành phần sau (bàng 1.