Computer-Aided Software Engineering

**Computer-Aided Software Engineering** (CASE) là hệ thống các công cụ được sử dụng để thiết kế và phát triển các phần mềm với sự trợ giúp của máy tính. Các công cụ CASE được lấy cảm hứng từ các công cụ CAD được sử dụng để thiết kế các sản phẩm phần cứng. Các công cụ CASE được sử dụng để phát triển phần mềm có chất lượng cao, không có khiếm khuyết và có khả năng duy trì được. Phần mềm CASE thường được kết hợp với các phương pháp phát triển hệ thống thông tin cùng với các công cụ tự động có thể được sử dụng trong quá trình phát triển phần mềm.

## Lịch sử
Dự án Thiết kế hệ thống thông tin và Tối ưu hệ thống (ISDOS) được bắt đầu vào năm 1968 tại Đại học Michigan đã thu hút nhiều sự quan tâm về các khái niệm liên quan tới việc sử dụng các hệ thống máy tính để giúp các nhà phân tích trong quá trình phân tích các yêu cầu và phát triển hệ thống. Một số bài viết của Daniel Teichroew đã thổi bùng lên ngọn lửa trong những người mang đầy nhiệt huyết với tiềm năng phát triển hệ thống tự động. Công cụ Ngôn ngữ phát biểu vấn đề/Bộ phân tích phát biểu vấn đề (PSL/PSA) do ông phát triển là một công cụ CASE mặc dù nó ra đời và tồn tại trước khi có thuật ngữ về CASE.

Thuật ngữ này được đặt ra lần đầu tiên bởi công ty phần mềm Nastec (Southfield, Michigan) vào năm 1982 với trình đồ họa tích hợp và soạn thảo văn bản đầu tiên GraphiText. Đây cũng là hệ thống dựa trên máy vi tính đầu tiên sử dụng các siêu liên kết tới chuỗi văn bản tham chiếu chéo trong các tài liệu – tiền thân của liên kết trang web ngày nay. Sản phẩm kế nhiệm của GraphiText là DesignAid - công cụ đầu tiên dựa trên bộ vi xử lý để đánh giá một cách logic, ngữ nghĩa những biểu đồ thiết kế phần mềm, hệ thống và xây dựng một từ điển dữ liệu.

Dưới sự hướng dẫn của Albert F. Case, Jr. - phó chủ tịch quản lý và tư vấn sản phẩm của công ty Nastec và Vaughn Frick -  giám đốc quản lý sản phẩm, bộ sản phẩm DesignAid được phát triển mở rộng để hỗ trợ phân tích trên phạm vi rộng các phương pháp phân tích và thiết kế có cấu trúc, bao gồm cả các phương pháp phân tích và thiết kế có cấu trúc của Ed Yourdon và Tom DeMarco, Chris Gane và Trish Sarson, Ward-Mellor (thời gian thực) SA/SD và Warnier-Orr.

Công cụ tiếp theo gia nhập vào thị trường là Excelerator của Công ty Index Technology (Cambridge, Massachusetts). Công ty đã giới thiệu công cụ Excelerator trên nền tảng PC/AT của IBM. Mặc dù vào thời điểm giới thiệu công cụ và trong nhiều năm sau, nền tảng IBM không hỗ trợ mạng hoặc cơ sở dữ liệu tập trung như các công nghệ Convergent Technologies hoặc Burroughs nhưng với sự hấp dẫn mạnh mẽ vốn có của IBM, Excelerator đã trở nên nổi bật. Theo sau Excelerator là sự bùng nổ của các công cụ từ các công ty như Knowledgeware (James Martin, Fran Tarkenton và Don Addington), công cụ IEF của Texas Instrument và Bộ công cụ FOUNDATION của Andersen Consulting (gồm DESIGN/1, INSTALL/1, FCP).

Các công cụ CASE đã đạt tới đỉnh cao vào đầu những năm 1990. Tại thời điểm đó, IBM đã đề xuất AD/Cycle - liên minh các nhà cung cấp phần mềm tập trung vào Kho phần mềm của IBM, sử dụng DB2 dành cho máy tính lớn và hệ điều hành OS/2.

Tuy nhiên, với sự suy giảm của máy tính lớn, AD/Cycle và các công cụ Big CASE đã không thể tiếp tục tồn tại, điều đó mở ra thị trường cho các công cụ CASE hiện nay. Nhiều công cụ CASE hàng đầu trên thị trường vào đầu những năm 1990 đã được mua lại bởi Computer Associates bao gồm: IEW, IEF, ADW, Cayenne và Learms & Burchett Management Systems (LBMS). Một xu hướng khác dẫn đến sự phát triển của các công cụ CASE là sự gia tăng của các phương pháp và công cụ hướng đối tượng. Hầu hết các nhà cung cấp công cụ đều cung cấp thêm một số hỗ trợ cho các phương pháp và các công cụ hướng đối tượng. Ngoài ra, các sản phẩm mới cũng được thiết kế theo phương pháp thiết kế từ dưới lên (Bottom – Up Design) để hỗ trợ phương pháp tiếp cận hướng đối tượng. Ví dụ như Andersen đã phát triển dự án Eagle như một giải pháp thay thế cho bộ công cụ Foundation. Một số nhà lãnh đạo tư tưởng trong phát triển hướng đối tượng cũng phát triển phương pháp và bộ công cụ CASE của riêng họ như: Jacobsen, Rumbaugh, Booch,... Cuối cùng, những bộ công cụ và phương pháp này đã được hợp nhất thông qua các tiêu chuẩn do Nhóm quản lý đối tượng (OMG) dẫn đầu. Ngôn ngữ mô hình hóa thống nhất của OMG hiện đang được chấp nhận rộng rãi như một tiêu chuẩn của ngành mô hình hướng đối tượng.

## Mục đích
Về cơ bản, phần mềm CASE được sử dụng nhằm phát triển tốt các hệ thống:
* Đảm bảo (tăng cường sử dụng) tiêu chuẩn về các công cụ và giải pháp phát triển.
* Đảm bảo việc hỗ trợ quản lý dự án cho chuyên viên thiết kế cũng như các nhà quản lý.
* Cải thiện việc tái sử dụng các phần mềm đã được phát triển.
* Giảm thiểu chi phí duy trì phần mềm trong tương lai.

## Phân loại phần mềm CASE
Alfonso Fuggetta đã phân loại phần mềm CASE thành ba loại:
# Các công cụ (Tools) hỗ trợ các tác vụ cụ thể trong vòng đời của phần mềm.
# Các bàn làm việc (Workbenches) phối hợp hai hoặc nhiều công cụ tập trung vào một phần cụ thể của vòng đời phần mềm.
# Các môi trường (Environments) phối hợp hai hoặc nhiều công cụ hoặc nhiều bàn làm việc và hỗ trợ vòng đời phần mềm hoàn chỉnh.

### Các công cụ (Tools)
Các công cụ CASE hỗ trợ các công việc cụ thể trong chu trình phát triển phần mềm. Chúng có thể được chia thành các loại sau:
# Mô hình kinh doanh và phân tích. Các công cụ mô hình đồ họa. Ví dụ: mô hình E/R, mô hình đối tượng,...
# Phát triển. Các giai đoạn thiết kế và xây dựng của vòng đời. Gỡ lỗi môi trường. Ví dụ: Trình gỡ lỗi GNU (GNU Debugger).
# Xác minh và xác nhận. Phân tích mã và các thông số kỹ thuật về tính chính xác, hiệu suất,...
# Quản lý cấu hình. Kiểm soát việc đăng ký, kiểm tra các đối tượng lưu trữ và các tệp tin. Ví dụ: SCCS, CMS.
# Chỉ số và đo lường. Phân tích mã cho tính phức tạp, mô đun, hiệu suất,...
# Quản lý dự án. Quản lý kế hoạch dự án, phân công nhiệm vụ, lên kế hoạch.
Một cách phổ biến khác để phân biệt các công cụ CASE là sự khác biệt giữa Upper CASE (công cụ ý tưởng) và Lower CASE (công cụ chỉ hỗ trợ lập trình). Các công cụ Upper CASE hỗ trợ mô hình kinh doanh và phân tích. Các công cụ Lower CASE hỗ trợ các hoạt động phát triển, như thiết kế vật lý, gỡ lỗi, xây dựng, thử nghiệm, tích hợp thành phần, bảo trì và công nghệ đảo ngược.

### Các bàn làm việc (Workbenches)
Các bàn làm việc tích hợp hai hoặc nhiều công cụ CASE và hỗ trợ các hoạt động xử lý phần mềm cụ thể. Do đó nó đạt được:
* Một giao diện thống nhất, nhất quán (tích hợp giao diện).
* Tích hợp liền mạch các công cụ và chuỗi công cụ (kiểm soát và tích hợp dữ liệu).
Một ví dụ về bàn làm việc là môi trường lập trình Visual Basic của Microsoft. Nó kết hợp nhiều công cụ phát triển: trình tạo giao diện đồ họa người dùng, trình biên tập mã thông minh, trình gỡ lỗi,... Hầu hết các sản phẩm CASE thương mại có xu hướng là những bàn làm việc tích hợp liền mạch hai hoặc nhiều công cụ. Các bàn làm việc cũng có thể được phân loại theo cách thức phân loại các công cụ như: tập trung vào phân tích, phát triển, xác minh... hay tập trung vào Upper CASE, Lower CASE hoặc các quy trình như quản lý cấu hình kéo dài suốt vòng đời phần mềm.

### Các môi trường (Environments)
Một môi trường là một tập hợp các công cụ CASE hoặc các bàn làm việc, hỗ trợ quy trình phần mềm hoàn chỉnh trong khi các công cụ CASE chỉ tập trung vào một nhiệm vụ cụ thể hoặc một phần cụ thể của vòng đời. Các môi trường CASE được phân loại bởi A.Fuggetta như sau:
# Bộ công cụ. Bộ sưu tập các công cụ ghép nối lỏng lẻo với nhau. Chúng thường được xây dựng trên các bàn làm việc của hệ điều hành như Unix Programmer's Workbench hoặc VMS VAX. 
# Thế hệ thứ tư. Những môi trường này còn được gọi là 4GL – viết tắt của thuật ngữ "môi trường ngôn ngữ thế hệ thứ tư". Đây là những môi trường đầu tiên cung cấp tích hợp sâu các công cụ. Thông thường các môi trường này tập trung vào các loại ứng dụng cụ thể. Ví dụ: Informix 4GL, Focus...
# Ngôn ngữ làm trung tâm. Các môi trường này dựa trên một ngôn ngữ hướng đối tượng duy nhất như môi trường Symbolics Lisp Genera hoặc VisualWorks Smalltalk từ Parcplace. Trong các môi trường này tất cả tài nguyên hệ điều hành là các đối tượng trong ngôn ngữ hướng đối tượng. Điều này cung cấp cơ hội gỡ lỗi và đồ họa mạnh mẽ nhưng có nhược điểm là phần lớn mã chương trình được phát triển bị giới hạn đối với ngôn ngữ cụ thể. Vì lý do trên, các môi trường này chủ yếu là các môi trường ngách trong CASE. Việc sử dụng chúng chủ yếu dành cho các dự án R&D. 
# Tích hợp. Những môi trường này là một ví dụ về những gì mà hầu hết những người làm trong ngành công nghệ thông tin thường nghĩ đến khi nghĩ tới CASE. Ví dụ như: môi trường AD/Cycle của IBM, FOUNDATION của Andersen Consulting, hệ thống ICL CADES và DEC Cohesion. Các môi trường này cố gắng bao phủ toàn bộ vòng đời phần mềm từ phân tích đến bảo trì và cung cấp một kho cơ sở dữ liệu tích hợp để lưu trữ tất cả các kết quả của quy trình phần mềm. Kho phần mềm tích hợp là một điểm đặc biệt để phân định rõ loại công cụ này. Họ cung cấp nhiều mô hình thiết kế khác nhau cũng như hỗ trợ cho các mã ngôn ngữ khác nhau. Một trong các mục tiêu chính của những môi trường này là kỹ thuật khứ hồi (Round-trip engineering). Những môi trường này cũng thường được kết hợp với một phương pháp luận đặc biệt cho phát triển phần mềm. Ví dụ, bộ công cụ FOUNDATION của Andersen gắn chặt với phương pháp Andersen Method /1.
# Quy trình tập trung. Đây là phương pháp tích hợp tham vọng nhất. Các môi trường này không chỉ xác định chính xác các đối tượng cần phân tích và thiết kế của quy trình phần mềm mà còn sử dụng quy trình chính thức để kiểm soát và hướng dẫn các dự án phần mềm. Ví dụ như East, Enterprise II, Process Wise, Process Weaver, và Arcadia. 
Trong thực tế, sự khác biệt giữa bàn làm việc và môi trường rất linh hoạt. Ví dụ: Visual Basic là một bàn làm việc lập trình nhưng cũng được coi là một môi trường 4GL đối với nhiều người. Các tính năng để phân biệt các bàn làm việc và các môi trường là: khả năng tích hợp sâu thông qua một kho chứa dùng chung; ngôn ngữ phổ biến và một số phương pháp luận (môi trường tích hợp và trung tâm xử lý) hoặc tên miền (4GL) đặc trưng.

## Ưu điểm
Một số lợi ích tổ chức có thể đạt được khi sử dụng phần mềm CASE:
* Khi tổ chức chỉ tập trung vào việc thiết kế lại hoặc thử nghiệm, chi phí trong suốt tuổi thọ dự kiến của sản phẩm sẽ giảm đáng kể.
* Cải thiện chất lượng tổng thể của sản phẩm.
* Tăng khả năng đáp ứng các yêu cầu thực tế của người dùng.
Như vậy, phần mềm CASE gián tiếp cung cấp lợi thế cạnh tranh cho tổ chức thông qua việc hỗ trợ, đảm bảo sự phát triển của các sản phẩm phần mềm có chất lượng cao.

## Các nhân tố rủi ro
Một số nhân tố rủi ro quan trọng nhất đối với các tổ chức sử dụng công nghệ CASE bao gồm:
* Tiêu chuẩn hoá không đầy đủ. Các tổ chức thường phải điều chỉnh, áp dụng các phương pháp và các công cụ theo những yêu cầu cụ thể của họ. Điều đó đòi hỏi một nỗ lực đáng kể để tích hợp các công nghệ cũng như các phương pháp khác nhau. 
* Kỳ vọng không thực tế. Những người đề xướng về công nghệ của CASE - đặc biệt là các nhà cung cấp tiếp thị các bộ công cụ đắt tiền - thường thổi phồng rằng cách tiếp cận mới sẽ là phương pháp đơn giản nhất giúp giải quyết mọi vấn đề. Trong thực tế, không có công nghệ nào có thể làm điều đó và nếu các tổ chức tiếp cận CASE với kỳ vọng không thực tế, chắc chắn họ sẽ thất vọng.
* Đào tạo không đầy đủ. Như với bất kỳ công nghệ mới nào, CASE đòi hỏi phải có thời gian để đào tạo mọi người về cách sử dụng các công cụ và biết được đầy đủ thông tin về chúng. Các dự án CASE có thể thất bại nếu các học viên không có đủ thời gian cho việc đào tạo hoặc nếu đó là dự án đầu tiên thử nghiệm công nghệ mới thì đó chính là một nhiệm vụ khó khăn và đầy rủi ro.
* Kiểm soát quá trình không đầy đủ. CASE cung cấp các khả năng mới trong việc sử dụng các loại công cụ mới theo cách sáng tạo. Tuy nhiên nếu không có hướng dẫn quy trình thích hợp và không kiểm soát những khả năng này thì có thể sẽ tạo nên những vấn đề nghiêm trọng mới.

## Xem thêm
* Công nghệ phần mềm
* Kiến trúc định hướng mô hình
* Ngôn ngữ lập trình

## Tham khảo