Chương 1: Giới thiệu 1. Giới thiệu nhiệm vụ chính của đề tài Kiểm thử là một khâu không thể thiếu trong quá trình phát triển phần mềm. Nhiều hệ thống phần mềm thất bại là do không tìm ra lỗi. Nguồn lực sử dụng cho khâu kiểm thử là một yêu cầu khá lớn trong quá trình phát triển phần mềm.
Quá trình kiểm thử yêu cầu một số pha kết hợp gồm: kiểm thử đơn vị, kiểm thử tích hợp, kiểm thử hệ thống, và kiểm thử chấp nhận. Quy trình kiểm thử được xây dựng nhằm đạt các mục tiêu chính như sau: Xem xét các yêu cầu đưa ra bởi khách hàng, đối chiếu với sản phẩm phần mềm được lập trình bởi lập trình viên. Phát hiện các sai sót hoặc lỗi trong phần mềm mà ở đó hành vi phần mềm là không đúng, hoặc không tuân theo các đặc tả của nó. Phương pháp hướng đối tượng (Object-Oriented) đã thể hiện rõ tính ưu việt trong phát triển phần mềm.
Trong đó, tính đóng gói, trừu tượng hóa và tính sử dụng lại làm tăng chất lượng phần mềm. Theo Paul Allen thì hiện nay có đến hơn 70% hệ thống phần mềm mới được phát triển dựa trên cơ sở cấu phần. Các cấu phần thường được phát triển theo hướng đối tượng và được viết bằng các ngôn ngữ khác nhau, chạy trên các môi trường khác nhau, có thể phân tán khắp nơi và người phát triển phần mềm mới không được cung cấp các mã nguồn. Các đặc tính này là nguyên nhân gây nhiều khó khăn trong việc kiểm thử hệ thống phần mềm.
Để tăng tính mềm dẻo khi nhìn nhận các chức năng, đặc điểm phần mềm xây dựng, chúng ta sử dụng ngôn ngữ mô hình hóa chuẩn UML. Ngôn ngữ mô hình hóa thống nhất (UML – Unified Modeling Language) được công nhận là chuẩn công nghiệp cho việc phân tích và thiết kế các hệ thống hướng đối tượng. UML cung cấp các ký pháp biểu đồ thể hiện các thông tin thiết kế dưới các góc độ nhìn hệ thống. Trong những năm gần đây, đã có nhiều nghiên cứu sử dụng mô hình UML như nguồn thông tin đầu vào cho kiểm thử phần mềm.
Thí dụ, biểu đồ trạng thái UML được sử dụng biểu diễn hành vi bên trong của các đối tượng thành phần, các biểu đồ tương tác được được ứng dụng trong kiểm thử tương tác các lớp trong cấu phần. Biểu đồ hoạt động biểu diễn quan hệ giữa các thành phần trong cấu phần. Thực tế cho thấy phương pháp Phát triển phần mềm theo cấu phần đã làm giảm chi phí của dự án phát triển phần mềm. So với công nghệ truyền thống chuẩn, công nghệ phần mềm trên cơ sở cấu phần quan tâm đến cách xây dựng phần mềm nhiều hơn.
Thông qua việc sử dụng lại các cấu phần, vòng đời phát triển phần mềm được rút ngắn lại, đồng thời tăng tính mềm dẻo khi sử dụng và z 2 bảo trì phần mềm. Hơn nữa, phát triển phần mềm có khả năng làm tăng chất lượng phần mềm. Với tầm quan trọng như trên, đã có nhiều kết quả nghiên cứu lý thuyết và sản phẩm công cụ hỗ trợ phát triển phần mềm trên cơ sở cấu phần. Nội dung luận văn này nhằm mục tiêu khảo sát các vấn đề cơ bản và kỹ thuật phát triển phần mềm theo cấu phần.
Đặc biệt luận văn tập trung vào kỹ thuật kiểm thử phần mềm phát triển dựa theo cấu phần với mục đích hướng tới ứng dụng thực tế tại Việt Nam. Tình hình nghiên cứu trong và ngoài nước Năm 1975 Freed Brooks, một nhà quản lý dự án IBM, viết cuốn The Mythical Man-month. Bài luận ngắn trong trong cuốn sách này mô tả những khó khăn khi phát triển phần mềm phức tạp, Brooks viết một chương với tiêu đề là “No Silver Bullet” giải thích rằng các hệ thống phần mềm là phức tạp. Ông dự đoán sẽ không có kỹ thuật nào là duy nhất – no silver bullet – mà nó có thể cải thiện năng suất theo danh sách yêu cầu cho mọi hệ thống.
Trong chương này, Brooker trích dẫn ra các lý do gây nên “khủng hoảng phần mềm”, và khủng hoảng này sẽ còn tiếp tục cho đến khi một kỹ thuật mới như công nghệ phần mềm trên cơ sở cấu phần (CBSE – Component based software engineering) trở nên có tính khoa học và nó thực sự dựa trên tính khoa học. Và như thế, CBSE đã đưa ra được “Những bài học hay nhất” về sản phẩm công nghệ phần mềm trong suốt 30 năm tiếp theo. Brooks trình bày 2 phương pháp khả thi giúp giảm mức độ phức tạp của phần mềm đó là “Buy before Build” và “Reuse before Buy”. Các khái niệm mấu chốt được đưa ra nhằm giúp giảm được chi phí trong công nghệ phát triển phần mềm.
Trong hội nghị thảo luận năm 1968, NATO đã tham gia tranh luận về thuật ngữ khủng hoảng phần mềm. Thêm nhiều thuật ngữ khó hiểu như kẽ hở phần mềm, … các thuật ngữ này dần dần được làm rõ khi trong quá trình phát triển công nghệ phần mềm. Theo David và Fraser phát biểu năm 1968, “ Kẽ hở được phát hiện tại thời điểm khi mà hậu quả việc hỏng hóc phần mềm tăng theo mọi mức độ nghiêm trọng”. Để phát triển phần mềm trên cơ sở cấu phần chúng ta phải học cách xây dựng các cấu phần đó dựa vào các yêu cầu, hoặc dựa trên việc thiết kế các module thành phần hay các thiết kế trực tiếp các cấu phần.
Các khách hàng đặt hàng (các cấu phần) và việc tích hợp các cấu phần cung cấp bởi nhà sản xuất sẽ đảm bảo rằng nó đáp ứng được yêu cầu khách hàng với các mong muốn họ đưa ra. Khái niệm về mô hình của cấu phần phần mềm được phát triển rộng rãi bởi BradCox và đặt nền móng cho việc tạo một hạ tầng phát triển các cấu phần này z 3 dựa trên ngôn ngữ lập trình C (Nội dung được đúc kết trong cuốn sách Object- Oriented Programming – An Evolution Approach 1986) IBM tiên phong mở ra lối nghiên cứu về Mô hình đối tượng hệ thống ngay đầu những năm 1990. Một số các đóng góp được ứng dụng trong phần mềm cấu phần đó là OLE và COM. Mô hình cấu phần phần mềm vẫn tiếp tục thu được những thành quả đáng kể.
Mục tiêu của luận văn Luận văn này nhằm mục tiêu nghiên cứu khảo sát sơ bộ các kỹ thuật kiểm thử phần mềm, với giải pháp áp dụng các mô hình UML vào kiểm thử phần mềm trên cơ sở cấu phần. Từ đó, áp dụng các kết quả nghiên cứu lý thuyết vào thực nghiệm kiểm thử một thiết kế phần mềm cụ thể mà luận văn đưa ra. Nội dung nghiên cứu tập trung vào một số vấn đề sau: 1) Tổng quan về các vấn đề cơ bản của kiểm thử phần mềm, các nguyên tắc kiểm thử. Tổng quan về phát triển phần mềm dựa trên cấu phần, bao gồm các khái niệm cơ bản như cấu phần, chuẩn tương tác, chuẩn kết hợp, cài đặt mô hình cấu phần, các mô hình cấu phần - dịch vụ cấu phần, tiếp cận UML, và vai trò của UML đặc tả thiết kế, ứng dụng vào kiểm thử.
2) Nghiên cứu phương pháp luận kiểm thử phần mềm trên cơ sở cấu phần, bao gồm mô hình kiểm thử đối với phần mềm dựa trên cấu phần, kiểm thử tích hợp trên cơ sở các mô hình UML đối với phần mềm phát triển trên cấu phần. Xây dựng các biểu đồ UML hỗ trợ ca kiểm thử tích hợp. 3) Phát triển thực nghiệm kiểm thử phần mềm trên cơ sở sử dụng các cấu phần có sẵn dựa trên bài toán ứng dụng được đưa ra; xây dựng các pha phân tích, thiết kế và kiểm thử. z 4 Chương 2: Một số khái niệm cơ bản Lập trình hướng cấu phần (COP – Component oriented programming) và công nghệ phần mềm trên cơ sở cấu phần (CBSE – Component based software engineering) đôi khi có thể hiểu là một.
Tuy nhiên, CBSE là thuật ngữ rộng hơn, và COP chỉ là một phần trong đó. CBSE = COA + COD + COP + COM Trong đó COA (component oriented analysis), COD (Component oriented design) và COM (Component oriented management) thể hiện các thuật ngữ về phân tích hướng cấu phần, thiết kế hướng cấu phần và quản lý hướng cấu phần. Mục tiêu của CBSE là phát triển phần mềm một cách nhanh chóng, và giảm chi phí bằng cách xây dựng các hệ thống thông qua việc thu thập các cấu phần có sẵn. Thiết kế, phát triển, và duy trì các cấu phần nhằm mục đích sử dụng lại là một quy trình rất phức tạp, với các yêu cầu ở mức cao không chỉ đáp ứng được tính chức năng và mềm dẻo cấu phần mà còn đáp ứng việc phát triển phần mềm một cách có tổ chức.
CBSE bao gồm rất nhiều các nguyên tắc công nghệ phần mềm và các kỹ thuật khác nhau. Trong công nghệ phần mềm truyền thống, quy trình phát triển phần mềm bao gồm các hoạt động hoặc các trạng thái tuần tự, cách đặt tên, phân tích, thiết kế, ngôn ngữ lập trình, kiểm thử, và tích hợp. Trong CBSE, các giai đoạn phát triển chính vẫn tuân thủ theo các bước thực hiện như quy trình phát triển truyền thống, và bổ sung thêm bước tập hợp và lắp ghép các cấu phần. Ta có thể nhận thấy rằng, điểm nổi bật trong CBSE so với công nghệ phần mềm truyền thống chính nằm ở hướng thiết kế, bước thu thập và lắp ghép các cấu phần vào việc xây dựng một hệ thống hoàn thiện.
Dưới cách nhìn về các cấu phần, có 2 loại hoạt động căn bản đó là: Phát triển cấu phần để sử dụng lại (DF – Developing for reuse) và sử dụng lại các cấu phần đã có sẵn (DW - Developing with reuse). Với việc phát triển cấu phần để sử dụng lại có thể được tổ chức theo cách tiếp cận công nghệ phần mềm truyền thống, nhấn mạnh vào các chuẩn cấu phần. Mỗi cấu phần cung cấp 2 loại giao diện: (1) giao diện cung ứng – định nghĩa các dịch vụ quảng bá cấu phần này sẽ cung ứng và (2) giao diện yêu cầu – đặc tả các dịch vụ mà cấu phần cần đến để thể hiện khả năng làm việc. z 5 Theo các nhìn hướng quy trình công nghệ, có 5 cách định nghĩa khác nhau trong CBSE: 1.
Đặc tả cấu phần (Component specification): Nó thể hiện đơn vị đặc tả của phần mềm, mô tả hành vi của tập các đối tượng cấu phần và định nghĩa một đơn vị thực hiện. Hành vi được định nghĩa dưới dạng tập các giao diện. Một đặc tả cấu phần được nhận diện dưới dạng một thực thi cấu phần. Giao diện cấu phần (Component interface): Giao diện thể hiện định nghĩa tập các hành vi có thể được cung ứng thông qua một đối tượng cấu phần.