Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 22 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
22
Dung lượng
427,69 KB
Nội dung
http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 89 Chơng IV lập trình hiệu quả IV.1.Các đặc trng ngôn ngữ lập trình IV.1.1.Đặc trng tâm lí IV.1.2.Mô hình cú pháp/ngữ nghĩa IV.1.3.Hớng quan điểm kỹ nghệ IV.1.4.Việc chọn ngôn ngữ IV.1.5.Ngôn ngữ lập trình và kỹ nghệ phần mềm IV.2.Nền tảng của ngôn ngữ lập trình IV.2.1.Kiểu dữ liệu và định kiểu dữ liệu IV.2.2 .Chơng trình con IV.2.3.Cấu trúc điều khiển IV.2.4.Cách tiếp cận hớng đối tợng IV.2.5.Các lớp ngôn ngữ IV.2.6.Các công cụ lập trình IV.3.Phong cách lập trình IV.3.1.Tài liệu chơng trình IV.3.2.Khai báo dữ liệu IV.3.3.Xây dựng câu lệnh IV.3.4.Vào/ra IV.4.Tính hiệu quả IV.4.1.Kỹ thuật lập trình hớng hiệu quả IV.4.2.Độ tin cậy của phần mềm IV.4.3.Tính di chuyển đợc của hệ ứng dụng IV.4.4.Một vài hớng dẫn lập trình hớng hiệu quả IV.5.Thẩm định v xác minh IV.5.1.Đại cơng về việc thẩm định và xác minh IV.4.2.Sơ lợc về tiến trình thử nghiệm http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 90 Chơng IV lập trình hiệu quả IV.1.Các đặc trng ngôn ngữ lập trình Ngôn ngữ lập trình là phơng tiện để liên lạc giữa con ngời và máy tính. Tiến trình lập trình - sự liên lạc thông qua ngôn ngữ lập trình - là một hoạt động con ngời. Lập trình là bớc cốt lõi trong tiến trình kĩ nghệ phần mềm. IV.1.1.Đặc trng tâm lí Trong cuốn sách Tâm lí phần mềm,Ben Shneiderman đã viết về vai trò của nhà tâm lí phần mềm: tập trung vào mối quan tâm của con ngời nh tính dễ dùng, đơn giản khi học, nâng cao độ tin cậy, giảm tần suất lỗi và tăng sự thoả mãn với ngời dùng, trong khi không quên về tính hiệu quả của máy, khả năng phần mềm và sự ràng buộc phần cứng. Một nhà tâm lí học phần mềm khác, Gerald Weinberg gợi ý rằng chúng ta có thể mở rộng chuyện ngụ ngôn Ngời thợ may thiên tài thành câu chuyện về ngời thiết kế thiên tài. Ngời thiết kế ngôn ngữ lập trình thờng bóp cách tiếp cận tới vấn đề sao cho cách tiếp cận sẽ khớp với những ràng buộc do ngôn ngữ lập trình riêng áp đặt. Vì nhân tố con ngời có tầm quan trong chủ chốt trong thiết kế lập trình nên các đặc trng tâm lý của ngôn ngữ có tác động mạnh mẽ lên sự thành công của thiết kế để dịch và cài đặt. Một số đặc trng của tâm lý xuất hiện nh kết quả của thiết kế ngôn ngữ lập trình. Mặc dầu những đặc trng này không đo đợc theo bất cứ cách thức định lợng nào, chúng ta thừa nhận biểu hiện của chúng trong mọi ngôn ngữ lập trình. Tính đồng đều: chỉ ra mức độ theo đó ngôn ngữ kí pháp nhất quán . Tính mơ hồ: ngôn ngữ lập trình đợc ngời lập trình cảm nhận. Trình biên dịch bao giờ cũng diễn giải một câu lệnh theo một cách, nhng độc giả con ngời có thể hiểu câu lệnh đó theo cách khác. Tại đây có sự mơ hồ tâm lý. Việc thiếu tính đồng đều và sự xuất hiện sự mơ hồ tâm lý thờng đi kèm nhau. Nếu ngôn ngữ lập trình để lộ ra những khía cạnh tiêu cực của các đặc trng này thì chơng trình gốc sẽ khó đọc và việc dịch từ thiết kế ra dễ sinh lỗi nhiều hơn. Tính gọn gàng: chỉ dẫn về khối lợng thông tin h ớng chơng trình mà trí nhớ con ngời phải ghi nhớ. Trong các thuộc tính ngôn ngữ đo tính gọn gàng có: Mức độ ngôn ngữ hỗ trợ cho các kết cấu có cấu trúc và giải quyết việc khó theo lôgic . Loại từ khoá và cách viết tắt có thể đợc dùng Sự phong phú của các kiểu dữ liệu và đặc trng mặc định Số các phép toán logic và số học Số các hàm có sẵn Apl là một ngôn ngữ lập trình gọn gàng ngoại lệ (thành khó đọc và khó hiểu). Các đặc trng của ký ức con ngời có một tác động mạnh lên cách ta dùng ngôn ngữ. Kí ức con ngời và việc nhận dạng con ngời và việc nhận dạng con ngời có thể đợc chia thành các lĩnh vực toàn thái và tuần tự. Kí ức toàn thái cho phép chúng ta nhớ và nhận lại mọi thứ nh một tổng thể. Chẳng hạn ta nhận ra khuôn mặt ngời ngay tức thì; chúng ta không tính toán có ý thức về từng phần riêng biệt của khuôn mặt trớc khi nhận dạng. Kí ức tuần tự cung cấp một phơng tiện để nhớ lại phần tử tiếp trong một dãy (nh dòng tiếp theo trong bài hát, khi đợc cho những dòng trớc đó). Mỗi đặc trng này đều có ảnh hởng tới đặc trng ngôn ngữ lập trình vẫn đợc gọi là tính cục bộ và http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 91 tính tuyến tính. Tính cục bộ là đặc trng toàn thái của ngôn ngữ lập trình.Tính cục bộ đợc làm nổi bật khi các câu lệnh có thể đợc tổ hợp thành các khối, khi các kết cấu có cấu trúc có thể đợc cài đặt trực tiếp, và khi thiết kế và chơng trình gốc đều mang tính mô đun và cố kết cao độ. Một đặc trng cuả ngôn ngữ hỗ trợ hay khuyến khích cho xử lí biệt lệ (nh xử lý điều kiện ON trong PL/1 hay ERR= trong bản mở rộng của FOTRAN) đều vi phạm vào tính cục bộ này. Tính tuyến tính là một đặc trng tâm lý có liên quan chặt chẽ với khái niệm bảo trì của lĩnh vực chức năng. Tức là, nhận biết con ngời đợc thuận lợi khi gặp một dãy tuyến tính các thao tác lôgic. Những nhánh nhảy xa (các chu trình lớn) vi phạm tính tuyến tính của xử lý. Một lần nữa, việc cài đặt thông tin trực tiếp cho các kết cấu có cấu trúc trợ giúp cho tính tuyến tính của ngôn ngữ lập trình. Khả năng của chúng ta học một ngôn ngữ mới bị ảnh hởng bởi truyền thống. Các kết cấu là tơng tự nhau, hình dạng thì tơng thích và cảm giác về định dạng ngôn ngữ lập trình đợc bảo toàn. Truyền thống cũng ảnh hởng tới mức độ đổi mới trong thiết kế của ngôn ngữ lập trình mới. Mặc dầu ngôn ngữ lập trình mới thờng đợc tiến hoá không ngừng. Chẳng hạn, PASCALkhá gần với ALGOL. Tuy nhiên, một cải tiến chủ yếu trong ngôn ngữ PASCAL là việc cài đặt kiểu dữ liệu trừu tợng, một dạng không tồn tại trong các ngôn ngữ trớc đó có gắn với PASCALtheo truyền thống. Ada, một ngôn ngữ đã trởng thành từ truyền thốngALGOL-PASCAL, mở rộng cả hai ngôn ngữ này với nhiều cấu trúc và kiểu đổi mới . Các đặc trng tâm lý của ngôn ngữ lập trình có ý nghĩa quan trọng tới khả năng của chúng ta trong việc học, áp dụng và duy trì chúng. Tóm lại, ngôn ngữ lập trình tạo ra mầu sắc cho chúng ta cách nghĩ về chơng trình và giới hạn cố hữu cách chúng ta liên lạc với máy tính. IV.1.2.Mô hình cú pháp/ngữ nghĩa Shniderman đã phát triển một mô hình cú pháp - ngữ nghĩa cho tiến trình lập trình có liên quan đến việc xem xét các bớc lập trình. Khi ngời lập trình áp dụng các phơng pháp kĩ nghệ phần mềm (nh phân tích yêu cầu,thiết kế) vốn độc lập với ngôn ngữ lập trình thì động tới vấn đề tri thức ngữ nghĩa. Tri thức ngữ nghĩa mặt khác lại là độc lập với ngôn ngữ, tập trung vào các đặc trng của một ngôn ngữ xác định. Về các kiểu tri thức này, tri thức ngữ nghĩa là khó thu nhận đợc hơn cả và đòi hỏi dùng nhiều trí tuệ. Tất cả các bớc kĩ nghệ phần mềm trớc phần lập trình đều dùng rất nhiều tri thức ngữ nghĩa. Bớc lập trình áp dụng tri thức cú pháp vốn là bất kỳ và theo lệnh đợc học theo kiểu vẹt. Khi học một ngôn ngữ lập trình mới thì thông tin cú pháp mới đợc thêm vào kí ức Một ngôn ngữ lập trình mới có thể buộc ngời kĩ s phần mềm phải học thông tin ngữ nghĩa mới. Nhiều vấn đề liên quan tới phần mềm máy tính đã không là quan trọng do việc thiếu tri thức cú pháp, nhng lại quan trọng trong phạm vi tri thức ngữ nghĩa và khả năng của chúng ta để áp dụng nó. Mục tiêu của kĩ nghệ phần mềm là mở rộng tri thức về ngữ nghĩa của việc phát triển phần mềm. IV.1.3.Hớng quan điểm kỹ nghệ Cách nhìn kĩ nghệ phần mềm về các đặc trng của ngôn ngữ lập trình tập trung vào nhu cầu xác định dự án phát triển phần mềm riêng. Mặc dầu ngời ta vẫn cần các yêu cầu riêng cho chơng trình gốc, có thể thiết lập đợc một tập hợp tổng quát những đặc trng kĩ nghệ: (1) dễ dịch thiết kế sang chơng trình, (2) có trình biên dịch hiệu quả, (3) khả chuyển chơng trình gốc, (4) có sẵn công cụ phát triển, (5) dễ bảo trì. Bớc lập trình bắt đầu sau khi thiết kế chi tiết đã đợc xác định, xét duyệt và sửa đổi nếu cần. Về lý thuyết, việc sinh chơng trình gốc từ một đặc tả chi tiết nên là trực tiếp. Dễ dịch thiết kế sang ch ơng trình đa ra một chỉ dẫn về việc một ngôn ngữ lập trình phản xạ gần gũi đến mức nào http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 92 cho một biểu diễn thiết kế. Một ngôn ngữ cài đặt trực tiếp cho các kết cấu có cấu trúc, các cấu trúc dữ liệu phức tạp, vào/ ra đặc biệt, khả năng thao tác bit, và các kết cấu hớng sự vật sẽ làm cho việc dịch từ thiết kế sang chơng trình gốc dễ hơn nhiều (nếu các thuộc tính này đợc xác định trong thiết kế). Mặc dầu những tiến bộ nhanh chóng trong tốc độ xử lý và mật độ nhớ đã bắt đầu làm giảm nhẹ nhu câù chơng trình siêu hiệu quả, nhiều ứng dụng vẫn còn đòi hỏi các chơng trình chạy nhanh, gọn (yêu cầu bộ nhớ thấp). Các ngôn ngữ với trình biên dịch tối u có thể là hấp dẫn nếu hiệu năng phần mềm là yêu cầu chủ chốt. Tính khả chuyển chơng trình gốc là một đặc trng ngôn ngữ lập trình có thể đợc hiểu theo ba cách khác nhau: 1. Chơng trình gốc có thể đợc chuyển từ bộ xử lý này sang bộ xử lý khác và từ trình biên dịch nọ sang trình biên dịch kia với rất ít hoặc không phải sửa đổi gì. 2. Chơng trình gốc vẫn không thay đổi ngay cả khi môi trờng của nó thay đổi (nh việc cài đặt bản mới của hệ điều hành ). 3. Chơng trình gốc có thể đợc tích hợp vào trong các bộ trình phần mềm khác nhau với ít hay không cần thay đổi gì vì các đặc trng của ngôn ngữ lập trình. Trong số ba cách hiểu về tính khả chuyển này thì cách thứ nhất là thông dụng nhất.Việc chuẩn hoá (do tổ chức tiêu chuẩn quốc tế IFO và /hoặc Viện tiêu chuẩn quốc gia Mĩ-ANSI) nhằm nâng cao tính khả chuyển ngôn ngữ lập trình. Tính sẵn có của công cụ phát triển có thể làm ngắn bớt thời gian cần để sinh ra chơng trình gốc và có thể cải thiện chất lợng của chơng trình. Nhiều ngôn ngữ lập trình có thể cần tới một loạt công cụ kể cả trình biên dịch gỡ lỗi, trợ giúp định dạng chơng trình gốc, các tiện nghi soạn thảo có sẵn, các công cụ kiểm soát chơng trình gốc ,th viện chơng trình con mở rộng trong nhiều lĩnh vực ứng dụng, các trình duyệt , trình biên dịch chéo cho phát triển bộ vi xử lý, khả năng bộ xử lý macro,công cụ kĩ nghệ ngợc và những công cụ khác. Trong thực tế, khái niệm về môi trờng phát triển phần mềm tốt (bao hàm cả các công cụ) đã đợc thừa nhận nh nhân tố đóng góp chính cho kĩ nghệ phần mềm thành công. Tính dễ bảo trì của chơng trình gốc có tầm quạn trọng chủ chốt cho tất cả các nỗ lực phát triển phần mềm không tầm thờng. Việc bảo trì không thể đợc tiến hành chừng nào ngời ta còn cha hiểu đợc phần mềm. Các yếu tố của cấu hình phần mềm (nh tài liệu thiết kế ) đa ra một nền tảng cho việc hiểu biết, nhng cuối cùng thì chơng trình gốc vẫn phải đợc đọc và sửa đổi theo những thay đổi trong thiết kế . Tính dễ dịch thiết kế sang chơng trình là một yếu tố quan trọng để dễ bảo trì chơng trình gốc. Bên cạnh đó, các đặc trng tự làm tài liệu của ngôn ngữ (nh chiều dài đợc phép của tên gọi, định dạng nhãn, định nghĩa kiểu, cấu trúc dữ liệu) có ảnh hởng mạnh đến tính dễ bảo trì. IV.1.4.Việc chọn ngôn ngữ Việc chọn ngôn ngữ lập trình cho một dự án riêng phải tính tới cả các đặc trng kĩ nghệ và tâm lý. Tuy nhiên, vấn đề liên quan đến việc chọn lựa có thể bàn tới chỉ nếu một ngôn ngữ là có sẵn hay đợc quy định bởi ngời yêu cầu. Meek gợi ý một quan điểm tổng quát khi phải chọn một ngôn ngữ lập trình: " nghệ thuật chọn ngôn ngữ là bắt đầu từ vấn đề, quyết định xem cái gì là yêu cầu của nó và tầm quan trọng tơng đối của chúng, vì có thể sẽ không thể nào thoả mãn đợc chúng nh nhau (với một ngôn ngữ ) các ngôn ngữ có sẵn nên đợc sánh với danh sách các yêu cầu " Các tiêu chuẩn đợc áp dụng khi đánh giá về ngôn ngữ có sẵn. Miền ứng dụng của dự án là một tiêu chuẩn hay đợc áp dụng nhất trong việc lựa chọn các ngôn ngữ . C thờng là một ngôn ngôn ngữ hay đợc chọn cho việc phát triển hệ thống phần mềm,trong khi các ngôn ngữ nh Ada,C,Modula-2 (cùng với FOTRAN và hợp ngữ) hay gặp trong ứng dụng thời gian thực. COBOL là ngôn ngữ cho ứng dụng kinh doanh nhng việc ngày càng dùng nhiều các ngôn ngữ thế hệ thứ t đã thay thế dần nó ở vị trí trội vợt. Trong lĩnh vực kĩ nghệ /khoa học thì FOTRAN vẫn còn là ngôn ngữ thống trị (mặc dầu ALGOL, PL/1,PASCAL và C cũng đợc dùng rộng rãi). Những ứng dụng phần mềm nhúng dùng cùng các ngôn ngữ đợc áp dụng trong các hệ thống http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 93 và ứng dụng thời gian thực. Ngôn ngữ thống trị cho ngời dùng máy tính cá nhân vẫn là BASIC nhng ngôn ngữ đó hiếm khi đợc những ngời phát triển C, dùng. Các ứng dụng trí tuệ nhân tạo dùng các ngôn ngữ nh LISP, PROLOG hay OPS5 mặc dầu nhiều ngôn ngữ lập trình qui ớc khác cũng đợc dùng. Xu hớng phát triển phần mềm hớng đối tợng xuyên suốt phần lớn các miền ứng dụng đã mở ra nhiều ngôn ngữ mới và các dị bản ngôn ngữ qui ớc. Các ngôn ngữ lập trình hớng đối tợng đợc dùng rộng rãi nhất là Smalltalk ,C+ +Objective C. Ngoài ra còn có Eiffel,Object- PASCAL,Flavos và nhiều ngôn ngữ khác. Sự phát triển gia tăng của các ngôn ngữ lập trìnhmới và tốt hơn vẫn tiếp tục. Mặc dầu nhiều ngôn ngữ này khá hấp dẫn, đôi khi tốt hơn cả vẫn là chọn ngôn ngữ yếu hơn (cũ) đã có tài liệu chắc chắn và phần mềm hỗ trợ, quen thuộc với nhiều ngời trong nhóm phát triển phần mềm và đã từng áp dụng thành công trong quá khứ. Tuy nhiên, nên có đánh giá kĩ càng về các ngôn ngữ mới và việc chuyển dịch từ ngôn ngữ cũ sang ngôn ngữ mới nếu có, với việc thừa nhận sự kháng cự về tâm lý đối với thay đổi thờng hay gặp phải trong mọi tổ chức. IV.1.5.Ngôn ngữ lập trình và kỹ nghệ phần mềm Bất kể đến khuôn cảnh kĩ nghệ phần mềm, ngôn ngữ lập trình sẽ có tác động tới việc vạch kế hoạch dự án, phân tích, thiết kế, lập trình, kiểm thử và bảo trì. Trong khi lập kế hoạch dự án, hiếm khi ngời ta tiến hành xem xét các đặc trng kĩ thuật của ngôn ngữ lập trình. Tuy nhiên, việc lập kế hoạch cho các công cụ hỗ trợ có liên quan tới tài nguyên cần có, có thể yêu cầu rằng một trình biên dịch chuyên dụng (và phần mềm liên kết) hay môi trờng lập trình đợc xác định. Một khi các yêu cầu phần mềm đã đợc thiết lập, thì các đặc trng của ngôn ngữ lập trình ứng cử viên trở thành quan trọng hơn. Nếu cần tới cấu trúc dữ liệu phức tạp thì ngôn ngữ với sự hỗ trợ cho các cấu trúc dữ liệu phức tạp (nh Pascal hay các ngôn ngữ khác) nên đợc tính tới một cách cẩn thận. Nếu cần khả năng cao, thời gian thực thì ngôn ngữ đợc thiết kế cho ứng dụng thời gian thực (nh Ada) hay hiệu quả về tốc độ nhớ (nh C) có thể đợc xác định. Nếu cần đa ra nhiều báo cáo và thao tác tệp thì các ngôn ngữ nh COBOL hay RPG có thể thích hợp. Một cách lý tởng, các yêu cầu phần mềm nên kết tinh việc chọn lựa ngôn ngữ thích hợp nhất cho việc xử lý cần thực hiện. Tuy nhiên trong thực hành, một ngôn ngữ thờng đợc chọn lựa bởi vìnó là ngôn ngữ duy nhất mà chúng ta có chạy trên máy của mình !. Chất lợng của thiết kế phần mềm đợc thiết lập theo cách độc lập với các đặc trng ngôn ngữ lập trình (một ngoại lệ đáng đợc lu ý là thiết kế hớng sự vật). Tuy nhiên thuộc tính ngôn ngữ đóng một vai trò trong chất lợng của thiết kế đợc cài đặt và ảnh hởng (cả có ý thức lẫn vô thức) tới cách thiết kế đ ợc xác định.Một số độ đo định tính và định lợng của thiết kế tốt. Các khái niệm về tính modul và sự độc lập modul cũng đợc nhấn mạnh.Các đặc trng kĩ thuật của nhiều ngôn ngữ lập trình có thể ảnh hởng tới những khái niệm này trong việc cài đặt thiết kế. Thiết kế dữ liệu cũng có thể bị ảnh hởng bởi các đặc trng ngôn ngữ. Các ngôn ngữ lập trình nh Ada, C++, Smalltalk đều hỗ trợ cho khái niệm về kiểu dữ liệu trừu tợng một công cụ quan trọng trong thiết kế và đặc tả dữ liệu. Các ngôn ngữ thông dụng khác, nh PASCAL, cho phép định nghĩa các kiểu dữ liệu do ngời dùng xác định và việc cài đặt trực tiếp danh sách móc nối và những cấu trúc dữ liệu khác. Các tính năng này cung cấp cho ngời thiết kế phạm vi rộng hơn trong các bớc thiết kế sơ bộ và chi tiết ảnh hởng của các đặc trng ngôn ngữ tới các bớc thiết kế bao gồm khó khăn trong việc đánh giá kiểm thử phần mềm. Các ngôn ngữ trực tiếp hỗ trợ cho các kết cấu có cấu trúc có khuynh hớng giảm bớt độ phức tạp của chơng trình, do đó một cách nào đó làm cho nó dễ dàng kiểm thử. Các ngôn ngữ hỗ trợ cho việc đặc tả các chơng trình con và thủ tục ngoài (nh FOTRAN) thờng làm cho việc kiểm thử tích hợp ít sinh lỗi hơn. Mặt khác một số đặc trng kĩ thuật của ngôn ngữ có thể gây trở ngại cho việc kiểm thử. Chẳng hạn cấu trúc khối trong ALGOL có thể đợc xác định theo cách làm mất dữ liệu trung gian khi việc ra khỏi khối xuất hiện, do đó làm cho trạng thái của chơng trình khó xác nhận hơn. Giống nh kiểm thử, hiệu quả cuả các đặc trng http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 94 ngôn ngữ lập trình về mặt bảo trì phần mềm cũng cha đợc hiểu thật đầy đủ . IV.2.Nền tảng của ngôn ngữ lập trình Nền tảng của ngôn ngữ lập trình đợc thể hiện trong ngữ cảnh bốn chủ đề đại thể: định kiểu, cơ chế chơng trình con, cấu trúc điều khiển và hỗ trợ cho cách tiếp cận hớng đối tợng. Mọi ngôn ngữ lập trình đều có thể đợc đặc trng theo những chủ đề này và chất lợng toàn bộ của một ngôn ngữ lập trình có thể đợc đánh giá theo điểm mạnh và điểm yếu có liên quan đến từng chủ đề. IV.2.1.Kiểu dữ liệu và định kiểu dữ liệu Ngày nay, ích lợi của các ngôn ngữ lập trình đợc đánh gía không chỉ ở cú pháp và sự phóng khoáng của các kết cấu thủ tục của nó. Định kiểu dữ liệu ,và các kiểu dữ liệu đặc biệt đợc ngôn ngữ lập trình hỗ trợ là khía cạnh quan trọng của chất lợng ngôn ngữ. Pratt mô tả kiểu dữ liệu và định kiểu dữ liệu là một lớp các đối tợng dữ liệu cùng với một tập các phép toán để tạo ra và thao tác trên chúng". Một đối tợng dữ liệu kế thừa một tập các thuộc tính nền tảng của kiểu dữ liệu mà nó thuộc vào. Một đối tợng dữ liệu có thể lấy một giá trị nằm bên trong miền giá trị hợp lệ cho kiểu dữ liệu đó và có thể bị các phép toán của kiểu dữ liệu đó thao tác. Các kiểu dữ liệu đơn trải trên một miền rộng bao gồm các kiểu số (nh nguyên, phức, số dấu phẩy động), kiểu liệt kê (nh kiểu dữ liệu do ngời dùng định nghĩa có trong PASCAL), kiểu logic (nh true hay false) và kiểu xâu string (nh dữ liệu chữ số). Các kiểu dữ liệu phức tạp hơn bao gồm các cấu trúc dữ liệu trải qua hết từ mảng một chiều đơn giả (vectơ) cho tới các cấu trúc danh sách tới các mảng và bản ghi đa tạp phức tạp. Các phép toán có thể đợc thực hiện trên một kiểu dữ liệu đặc biệt và theo cách thức mà trong đó các kiểu khác nhau có thể đợc thao tác trong cùng câu lệnh sẽ đợc điều khiển bởi việc kiểm tra kiểu vốn đợc cài đặt bên trong trình biên dịch hay thông dịch ngôn ngữ lập trình. Fairley đa ra năm mức kiểm tra kiểu thờng gặp trong các ngôn ngữ lập trình: Mức 0: Phi kiểu Mức 1: Bó buộc kiểu tự động Mức 2: Kiểu hỗn hợp Mức 3: Kiểm tra kiểu giả mạnh Mức 4: Kiểm tra kiểu mạnh Ngôn ngữ lập trình phi kiểu không có ý nghĩa tờng minh đối với việc định kiểu và do đó không buộc việc kiểm tra kiểu. Các ngôn ngữ nh BASIC, APL, LISP và ngay cả COBOL đều rơi vào phạm trù này. Mặc dầu từng ngôn ngữ đều có thể cho phép ngời dùng định nghĩa ra cấu trúc dữ liệu nhng biểu diẽn của dữ liệu đợc chứa trong từng sự vật dữ liệu là định sẵn. Bó buộc kiểu tự động là một cơ chế kiểm tra kiểu cho phép ngời lập trình trộn lẫn nhiều kiểu dữ liệu, nhng rồi tự chuyển các toán hạng về kiểu tơng hợp, do vậy cho phép các phép toán cần có xuất hiện. Chẳng hạn, PL/1 gán giá trị số 0 cho giá trị logic false và giá trị số 1 cho giá trị true. Do đó các phép toán số học (thông thờng đợc áp dụng cho các kiểu dữ liệu số ) có thể đợc áp dụng cho kiểu dữ liệu boolean trong PL/1. Chuyển đổi mốt kiểu hỗn hợp tơng tự về nhiều phơng diện với bó buộc kiểu tự đọng. Các kiểu dữ liệu khác nhau bên trong cùng phạm trù kiểu (nh hai kiểu số khác nhau) đợc chuyển đổi thành một kiểu đích để có thể ứng dụng đợc một phép toán xác định. Số học hỗn hợp của FORTRAN (một tính năng nên tránh nhất) có thể làm cho các số nguyên và thực đợc dùng trong một câu lệnh ngôn ngữ lập trình. Kiểm tra kiểu giả mạnh có tất cả các đặc trng của kiểm tra kiểu mạnh nhng đợc cài đặt theo cách đa ra một hay nhiều lỗ hổng. Chẳng hạn, mặc dầu PASCAL kiểm tra tính tơng hợp giao diện bên trong một chơng trình đã biên dịch, nó không làm nh vậy cho các thủ tục đợc dịch tách biệt (mô đun)- do đó, có một lỗ hổng trong việc bắt buộc kiểm tra kiểu mạnh. IV.2.2 .Chơng trình con Chơng trình con là một thành phần của chơng trình dịch đợc tách biệt có chứa dữ liệu và cấu http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 95 trúc điều khiển. Mô đun là cách biểu hiện tổng quát của chơng trình con. Tuỳ theo ngôn ngữ lập trình mà một chơng trình con có thể đợc gọi là trình con, thủ tục, hàm hay bất kì tên gọi đặc biệt nào. Bất kể đến tên của nó, chơng trình con vẫn bộc lộ ra một tập các đặc trng tổng quát: (1) Phần mô tả có chứa tên của nó và mô tả giao điện ; (2) Phần cài đặt có chứa dữ liệu và cấu trúc điều khiển; (3) Một cơ chế kích hoạt làm cho chơng trình con đợc gọi tới từ một nơi nào đó khác trong chơng trình. Trong các ngôn ngữ lập trình qui ớc ,mỗi chơng trình con bản thân nó đều là một thực thể, vận hành trên dữ liệu theo một cách đợc chỉ đạo bởi cấu trúc điều khiển của chơng trình lớn hơn. Trong các ngôn ngữ lập trình hớng đối tợng, cách nhìn lớp chơng trình con đợc thay thế bởi đối tợng. IV.2.3.Cấu trúc điều khiển Tại mức cơ bản ,mọi ngôn ngữ lập trình hiện đại đều cho phép ngời lập trình biểu diễn sự tuần tự, tuyển chọn và lặp - các kết cấu logic lập trình có cấu trúc.Phần lớn các ngôn ngữ hiện đại đều đa ra một cú pháp cho đặc tả trực tiếp về if-then-else ,do-while repeat-until (cũng nh CASE). Các ngôn ngữ khác nh LISP và APL đòi hỏi ngời lập trình phải mô phỏng các kết cấu bên trong giới hạn cú pháp của ngôn ngữ đó. Bên cạnh các kết cấu thủ tục cơ sở của lập trình có cấu trúc, các cấu trúc điều khiển khác cũng có thể có. Đệ qui tạo ra sự kích hoạt lần thứ hai của chơng trình con trong lần kích hoạt thứ nhất. Tức là, chơng trình con gọi tới hay kích hoạt bản thân nó nh một phần của thủ tục đã xác định. Tơng tranh đa ra sự hỗ trợ cho việc tạo ra nhiều nhiệm vụ, đồng bộ hoá các nhiệm vụ này và liên lạc nói chung giữa các nhiệm vụ ấy. Tính năng ngôn ngữ này là vô giá khi phải thực hiện các ứng dụng hệ thống hay thời gian thực. Có tính năng ngôn ngữ lập trình đặt bẫy các điều kiện lỗi hệ thống hay của ngời dùng rồi truyền điều khiển cho bộ điều khiển đặc biệt để xử lý. IV.2.4.Cách tiếp cận hớng đối tợng Về lý thuyết, việc tạo ra các đối t ợng và kết cấu của phần mềm hớng đối tợng có thể đợc thực hiện bằng cách dùng bất kì ngôn ngữ lập trình qui ớc nào (nh C hay PASCAL). Nhng trong thực tế, việc hỗ trợ cho các cách tiếp cận hớng đối tợng nên đợc xây dựng trực tiếp bên trong ngôn ngữ lập trình sẽ đợc dùng để cài đặt thiết kế hớng đối tợng. Ngôn ngữ lập trình hớng đối tợng nên cung cấp sự hỗ trợ trực tiếp cho định nghĩa lớp, kế thừa, bao bọc và truyền thông báo. Định nghĩa về lớp là cơ sở cho cách tiếp cận hớng đối tợng. Ngôn ngữ lập trình hớng đối tợng định nghĩa tên một lớp và xác định các thành phần chung và riêng của lớp đó. Một lớp mới có thể đợc suy dẫn từ định nghĩa lớp cơ sở. Các đối tợng đợc suy từ lớp mới có thể dùng tất cả các phơng pháp đợc xác định cho lớp cha. Định nghĩa về lớp bao quát cả trừu tợng dữ liệu và thành phần chơng trình (phơng pháp) vận hành trên chúng. Các chi tiết cài đặt và thuật ngữ cho định nghĩa lớp, kế thừa, bao bọc và truyền thông báo sẽ thay đổi từ ngôn ngữ nọ sang ngôn ngữ kia, nhng khái niệm nền tảng về lớp vẫn không thay đổi. Tơng tự kế thừa, bao bọc và truyền thông báo đợc cài đặt với với một cú pháp khác, nhng cùng nền tảng. Mỗi kết cấu sẽ có sẵn trong bất kì ngôn ngữ nào thực sự hớng đối tợng. IV.2.5.Các lớp ngôn ngữ Có hàng trăm ngôn ngữ lập trình đã đợc sử dụng vào lúc này lúc khác trong những nỗ lực phát triển phần mềm nghiêm chỉnh. Có bốn thế hệ ngôn ngữ lập trình đại diện: 1.Ngôn ngữ thế hệ thứ nhất. Thế hệ ngôn ngữ thứ nhất lập trình theo mức mã máy (một số công việc với ngôn ngữ thế hệ thứ nhất vẫn còn tiếp tục đến ngày nay). Chơng trình mã máy và dạng tơng đơng của nó dễ đọc http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 96 hơn cho con ngời. Hợp ngữ biểu thị cho thế hệ ngôn ngữ thứ nhất. Các ngôn ngữ phụ thuộc máy này trng bầy mức độ trừu tợng thấp nhất mà một chơng trình có thể đợc biểu diễn. Có nhiều hợp ngữ nh các kiến trúc bộ xử lý với tập lệnh rút gọn theo yêu cầu. Từ quan điểm của kĩ nghệ phần mềm, những ngôn ngữ nh vậy chỉ nên dùng khi ngôn ngữ cấp cao không thể đáp ứng đợc hay không đợc hỗ trợ. 2.Ngôn ngữ thế hệ hai. Ngôn ngữ thế hệ hai đã đợc phát triển từ cuối những năm 1950 và đầu những năm 1960 và phục vụ nh nền tảng cho mọi ngôn ngữ lập trình hiện đại (thế hệ ba). Các ngôn ngữ thế hệ hai đợc đặc trng bởi việc sử dụng rộng rãi một th viện phần mềm quen thuộc. FOFTRAN, COBOL, ALGOL và BASIC là các ngôn ngữ nền tảng. Với những ứng dụng chỉ sử dụng số thì FORTRAN vẫn là ngôn ngữ đợc lựa chọn, nhng với các ứng dụng hệ thống, thời gian thực hay phần mềm sản phẩm nhúng thì các ngôn ngữ khác có u thế cạnh tranh hơn hẳn. COBOL, giống nh FORTRAN, đã đạt tới độ chín muồi và là ngôn ngữ chuẩn đợc chấp nhận cho các ứng dụng xử lí dữ liệu thơng mại. Mặc dầu ngôn ngữ này đôi khi cũng bị chỉ trích là thiếu tính gọn gàng, nó vẫn có những khả năng định nghĩa dữ liệu tuyệt vời và có khả năng tự làm dữ liệu. ALGOL là ngời tiên phong trong nhiều ngôn ngữ lập trình thế hệ ba và đa ra một kho cực kì phong phú các kết cấu thủ tục và định kiểu dữ liệu. Ngôn ngữ này đợc hỗ trợ cho khái niệm cấu trúc khối, cấp phát bộ nhớ động, đệ qui và những đặc trng khác có ảnh hởng mạnh lên các ngôn ngữ hiện đại theo sau. BASIC là ngôn ngữ ban đầu đợc thiết kế để dạy lập trình. Ngôn ngữ này đã lạc hậu vào đầu những năm 1970, nhng rồi lại tái sinh mạnh mẽ với sự kiện các hệ thống máy tính cá nhân. 3.Ngôn ngữ thế hệ ba (Ngôn ngữ lập trình có cấu trúc) Ngôn ngữ thế hệ ba đợc đặc trng bởi khả năng cấu trúc dữ liệu và thủ tục mạnh. Các ngôn ngữ lớp này có thể đợc chia thành ba phạm trù lớn: ngôn ngữ cấp cao vạn năng, ngôn ngữ cấp cao hớng đối tợng và ngôn ngữ chuyên dụng. + Ngôn ngữ cấp cao vạn năng: bao gồm PL/1,PASCAL,MODULA-2,C Ngôn ngữ cấp cao vạn năng đầu tiên ALGOL (cũng là ngôn ngữ nền tảng) đã phục vụ nh một mô hình cho các ngôn ngữ khác trong phạm trù này. Hậu thế của nó, PL/1, PSACAL, Modula-2, C và Ada đã đợc chấp nhận nh những ngôn ngữ có tiềm năng cho các ứng dụng phổ rộng (nh để dùng trong kĩ nghệ/khoa học, các sản phẩm nhúng, các miến ứng dụng thơng mại hoặc hệ thống). PL/1 là ngôn ngữ phổ rộng đúng nghĩa đầu tiên, đợc xây dựng với một phạm vi rộng các tính năng làm cho nó đợc dùng trong nhiều lĩnh vực ứng dụng khác nhau. PL/1 cung cấp sự hỗ trợ cho các ứng dụng kĩ nghệ/khoa học qui ớc và kinh doanh trong khi đồng thời cho phép đặc tả các cấu trúc dữ liệu phức tạp, đa nhiệm, vào/ra phức tạp, xử lí danh sách và nhiều tính năng khác. Ngời ta đã xây dựng tập con của ngôn ngữ này để dạy lập trình (PL/C), để dùng trong các ứng dụng bộ vi xử lí (PL/M), và để lập trình hệ thống (PL/S). PASCAL là ngôn ngữ lập trình hiện đại đã đợc phát triển vào đầu những năm 1970 nh một ngôn ngữ để dạy kĩ thuật hiện đại (nh lập trình có cấu trúc) trong phát triển phần mềm. PASCAL đợc dùng một cách rộng rãi cho các ứng dụng kĩ nghệ/khoa học và lập trình hệ thống. PASCAL là một con cháu trực tiếp của ALGOL và chứa nhiều tính năng cũ: cấu trúc khối, định kiểu dữ liệu mạnh, hỗ trợ trực tiếp cho đệ qui và các tính năng phụ khác. Nó đã đợc cài đặt trên máy tính đủ các cỡ. Modula-2 là một sự trởng thành cách mạng của PASCAL và là một phơng án có thể cho ngôn ngữ lập trình Ada. Modula-2 nối trực tiếp việc cài đặt các tính năng thiết kế nh che dấu thông tin , trừu tợng và kiểm tra kiểu mạnh với các cấu trúc điều khiển để hỗ trợ cho đệ qui và tơng tranh. Hiện tại, việc dùng Modula-2 cho các ứng dụng công nghiệp đã bị hạn chế. Ngôn ngữ lập trình C ban đầu đợc phát triển nh một ngôn ngữ cho ngời cài đặt hệ điều hành. Hệ điều hành UNIX đợc cài đặt trong C. Tuy nhiên ngày nay một lợng rất lớn các sản phẩm phần mềm, các ứng dụng nhúng và phần mềm hệ thống đã đợc xây dựng trong ngôn ngữ C. C đã đợc phát triển cho kĩ nghệ phần mềm phức tạp và chứa các tính năng mạnh làm cho nó mềm dẻo đáng kể. Giống nh các ngôn ngữ khác trong phạm trù này, C hỗ trợ cho các cấu trúc dữ liệu phức tạp và có các đặc trng định kiểu hợp lí, cho phép dùng nhiều con trỏ và có một tập phong phú các toán tử để tính toán và thao tác dữ liệu. + Các ngôn ngữ hớng đối tợng: Các ngôn ngữ hớng đối tợng làm cho ngời kĩ s phần mềm cài đặt đợc các mô hình phân tích và thiết kế đợc tạo ra bằng cách dùng OOA và OOD. Mặc dầu hàng chục ngôn ngữ hớng đối tợng đã đợc đa ra trong thập kỉ qua nhng chỉ có vài ngôn ngữ có đợc chỗ đứng có ý nghĩa trên thị trờng nh: dị bản của C (nh C++, Objective-C), http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 97 Smalltalk và Eiffel. Các dị bản hớng đối tợng của C thu đợc việc sử dụng rộng rãi qua cộng đồng UNIX và với nhiều ngời phát triển các hệ thống hớng đối tợng lần đầu tiên. Xây dựng dựa trên sức mạnh của C, các dị bản hớng sự vật tạo ra việc chuyển nhịp nhàng từ ngôn ngữ cấp cao, vạn năng đợc sử dụng rộng rãi này. Smalltalk là một ngôn ngữ hớng đối tợng nền tảng, ban đầu đợc phát triển vào đầu những năm 1970 để thám hiểm các khái niệm hớng đối tợng. Ngày nay các bản Smalltalk đã có trên mọi máy tính, mặc dầu việc sử dụng ngôn ngữ này cho việc phát triển các sản phẩm và hệ thống mang tính công nghiệp bị hạn chế. Eiffel là một trong những ngôn ngữ hớng đối tợng mới đủ mạnh cho ứng dụng công nghiệp. Giống nh các dị bản của C và Smalltalk, Eiffel cũng đa ra sự hỗ trợ trực tiếp cho các định nghĩa lớp, kế thừa, bao bọc và truyền thông báo. +Các ngôn ngữ chuyên dụng: Các ngôn ngữ chuyên dụng đợc đặc trng bởi các dạng cú pháp bất thờng đã đợc đặc biệt thiết kế cho một ứng dụng riêng. Trong hàng trăm ngôn ngữ chuyên dụng đang đợc dùng, có một số các ngôn ngữ phổ biến trong kĩ nghệ phần mềm là: LISP, PROLOG, APL và FORTH. LISP là một ngôn ngữ đặc biệt thích hợp cho thao tác kí hiệu và xử lý danh sách hay gặp trong các bài toán tổ hợp. Đợc dùng gần nh riêng cho cộng đồng trí tuệ nhân tạo, ngôn ngữ này đặc biệt thích hợp cho việc chứng minh định lí, tìm kiếm theo cây, và các hoạt động giải quyết vấn đề khác. Các chơng trình con đợc cài đặt nh các hàm dùng đệ qui rất nhiều. Vì mỗi hàm LISP đều là một thực thể riêng biệt, nên có thể đạt tới việc dùng lại bằng cách tạo ra th viện các hàm nguyên thuỷ. Trong những năm gần đây, LIST đã đợc dùng để phát triển một phạm vi rộng các hệ chuyên gia và trình biên dịch hệ chuyên gia. PROLOG là một ngôn ngữ lập trình khác đã tìm đợc sự sử dụng rộng rãi trong xây dựng hệ chuyên gia. Giống nh LISP, PROLOG đa ra các tính năng hỗ trợ cho biểu diễn tri thức. Bên trong ngôn ngữ này, một cấu trúc dữ liệu thống nhất gọi là term đợc dùng để xây dựng mọi dữ liệu và mọi chơng trình. Mỗi chơng trình bao gồm một tập các mệnh đề biểu diễn cho sự kiện, qui tắc và suy diễn. Cả LIST và PROLOG đều đặc biệt tuân theo các vấn đề xử lý đối tợng và mối quan hệ của chúng. Bởi lí do này, một số ngời coi LIST và PROLOG nh các ngôn ngữ hớng đối tợng. Bên cạnh đó, bản chất hớng đối tợng của LIST và PROLOG làm cho mỗi ngôn ngữ đều có thể đợc áp dụng bên trong hoàn cảnh của khuôn cảnh làm bản mẫu đối với kĩ nghệ phần mềm. APL là một ngôn ngữ mạnh và cực kì chính xác để thao tác mảng và véc tơ. Ngôn ngữ này gần nh không hỗ trợ cho các kết có cấu trúc hay định kiểu dữ liệu. APL đa ra một tập hợp phong phú các toán tử tính toán và đã thu đợc một số nhỏ ngời khao khát giải quyết các bài toán toán học. RORTH là một ngôn ngữ đợc thiết kế cho phát triển phần mềm bộ vi xử lí. Ngôn ngữ này hỗ trợ cho định nghĩa các hàm do ngời dùng xác định đợc thực hiện theo cách thức hớng chồng (stack) để có hiệu quả về tốc độ và bộ nhớ. 4.Ngôn ngữ thế hệ thứ t: Trong toàn bộ lịch sử phát triển phần mềm, chúng ta đã có ý định phát sinh ra chơng trình máy tính ở mức trừu tợng ngày càng cao. Các ngôn ngữ thế hệ thứ nhất làm việc ở mức tập lệnh máy, mức trừu tợng thấp nhất có thể. Các ngôn ngữ lập trình thế hệ hai và ba đã nâng mức độ biểu diễn chơng trình máy tính, nhng vẫn còn phải xác định thủ tục thuật toán chi tiết hoàn toàn và phân biệt. Trong thập kỉ qua, ngôn ngữ thế hệ thứ t (4GL) đã nâng mức độ trừu tợng lên cao hơn nữa. Ngôn ngữ thế hệ thứ t, giống nh mọi ngôn ngữ nhân tạo khác, đều có chứa một cú pháp phân biệt để biểu diễn điều khiển và cấu trúc dữ liệu. Một 4GL biểu thị những cấu trúc này ở mức độ trừu tợng cao hơn bằng cách xoá bỏ yêu cầu xác định chi tiết thuật toán. Các ngôn ngữ thế hệ bốn tổ hợp các đặc trng thủ tục và phi thủ tục. Tức là, ngôn ngữ có khả năng cho phép ngời dùng xác định các điều kiện và hành động tơng ứng (thành phần thủ tục) trong khi đồng thời cổ vũ ngời dùng chỉ ra kết quả mong muốn (thành phần phi thủ tục) và rồi áp dụng tri thức chuyên lĩnh vực để điền các chi tiết thủ tục. Martin giới thiệu những phạm trù đại thể của 4GL: +Ngôn ngữ vấn đáp: Ngày nay, đại đa số các 4GL đều đã đợc phát triển để dùng kèm với các ứng dụng CSDL. Những ngôn ngữ vấn đáp nh thế cho phép ngời dùng thao tác thông tin chứa trong CSDL có sẵn theo một cách phức tạp. Một số ngôn ngữ vấn đáp yêu cầu một cú pháp phức tạp không đơn giản hơn (và trong một số trờng hợp còn tồi hơn) ngôn ngữ thế hệ thứ ba. +Bộ sinh chơng trình: Bộ sinh chơng trình biểu thị cho một lớp các 4GL khác, hơi phức tạp hơn. Thay vì http://www.ebook.edu.vn Chơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng 98 dựa trên CSDL có sẵn nh một điểm tập trung, bộ sinh chơng trình cho phép ngời dùng tạo ra các chơng trình ngôn ngữ thế hệ thứ ba hoàn chỉnh bằng cách dùng một vài câu lệnh cỡ lớn. Các ngôn ngữ lập trình mức rất cao này dùng rất nhiều trừu tợng dữ liệu và thủ tục. Phần lớn các bộ sinh chơng trình ngày nay chỉ hoàn toàn tập trung vào các ứng dụng hệ thông tin và sinh ra chơng trình trong COBOL. + Các 4GL khác: Mặc dầu ngôn ngữ vấn đáp và bộ sinh chơng trình là các 4GL thông dụng nhất song vẫn tồn tại các phạm trù khác nh sau: - Ngôn ngữ hỗ trợ quyết định: cho phép ngời không biết lập trìnhthực hiện nhiều cách phân tích cái gì xảy ra nếu thay đổi từ mô hình trang tính hai chiều đơn giản cho tới các hệ thống mô hình thống kê phức tạp hay hệ thống mô hình nghiên cứu tác nghiệp. - Ngôn ngữ làm bản mẫu: đợc phát triển để trợ giúp cho việc tạo ra các bản mẫu bằng cách tạo điều kiện thuận tiện cho việc tạo ra giao diện và đối thoại ngời dùng và đa ra một phơng tiện làm mô hình hoá dữ liệu. - Các ngôn ngữ đặc tả hình thức : có thể đợc xem xét nh 4GL khi ngôn ngữ đó tạo ra phần mềm máy thực hiện đợc . - Các công cụ đợc dùng trong môi trờng máy tính cá nhân: cho phép ngời dùng lập trình ở mức trừu tợng cao hơn những mức hiện có. IV. 2.6 Các công cụ lập trình. IV. 2.6.1 Công trình phần mềm có máy tính trợ giúp. CASE là bốn chữ cái đầu của cụm từ tiếng Anh nghĩa là công trình phần mềm đợc trợ giúp bởi máy tính. Hiện nay đã có rất nhiều công cụ CASE. Có hai cách để phân loại các công cụ CASE: i) Hớng hoạt động: dựa trên các hoạt động của quá trình nh: đặc tả yêu cầu, thiết kế, thực hiện ii) Hớng chức năng: dựa trên chức năng của các công cụ đó chứ không phải là dựa trên các mục tiêu trợ giúp. IV2.6.2 Môi trờng phát triển phần mềm. A.Đại cơng Một môi trờng phát triển phần mềm là một bộ các công cụ phần cứng và phần mềm chúng đợc kết lại để trợ giúp cho việc sản sinh ra một hệ thống phần mềm trong một miền ứng dụng chuyên biệt. Có hai điểm quan trọng: i) Môi trờng phát triển phần mềm có thể bao gồm các công cụ phần cứng. ii) Môi trờng phát triển phần mềm thờng chuyên dụng hơn là khái quát. Môi trờng phát triển phần mềm vận hành trên một hệ thống máy tính host (hoặc mạng) và phần mềm đợc phát triển nhằm vào một máy tính mục tiêu. có vài lý do vì sao mô hình máy chủ máy mục tiêu lại thích hợp nhất với môi trờng phát triển phần mềm: i) Trong một số trờng hợp phần mềm ứng dụng đang đợc phát triển có thể là dành cho một máy không có các tiện ích phát triển phần mềm. ii) Máy mục tiêu có thể là hớng ứng dụng nó không thích hợp với các môi trờng phát triển phần mềm. iii) Máy mục tiêu có thể đợc dành cho việc vận hành một ứng dụng đặc biệt và nó phải là có tính u tiên trên sự phát triển phần mềm (chẳng hạn nh hệ xử lý giao tác). Ưu điểm của cách thức máy chủ - máy mục tiêu là các tiện ích và các thành phần cho ngời phát triển dùng môi trờng đó không thể hợp tác với nhau trong hệ thống ứng dụng đợc phân phối. Có thể phân loại các môi trờng phát triển phần mềm nh sau: i) Môi trờng lập trình: Trợ giúp cho lập trình, thử nghiệm, gỡ lỗi. Hạn chế việc xác định yêu cầu, đặc tả, thiết kế phần mềm. ii) Bàn thợ CASE : Đây là các môi trờng chủ yếu hớng về đặc tả phần mềm và thiết kế. Nó thờng chỉ cung cấp một sự trợ giúp lập trình thô sơ (chẳng hạn các ngôn ngữ lập trình thế hệ thứ t ). Nó thờng thích hợp với các máy tính cá nhân và kết hợp với [...]... tin cậy là một đặc trng động của hệ thống, nó là một hàm của số các thất bại phần mềm Một thất bại phần mềm là một sự kiện thi hành mà khi đó phần mềm x ử lý không nh ngời ta mong đợi Chú ý rằng một thất bại phần mềm (failure) khác một h hỏng (fault) phần mềm H hỏng phần mềm là một đặc trng tĩnh, và nó sẽ gây ra thất bại phần mềm khi mà mã lỗi đợc thi hành với một tập hợp đặc biệt các thông tin vào Các... bay Có hai lớp phần mềm an toàn sinh mệnh: i) Các phần mềm an toàn sinh mệnh sơ cấp: là các phần mềm lồng nhúng trong một hệ phần cứng dùng để điều khiển quá trình khác mà sự làm việc sai sót của nó có thể trực tiếp gây ra Chơng IV - 106 Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng http://www.ebook.edu.vn thơng vong hoặc phá huỷ môi trờng sống của con ngời ii) Các phần mềm an toàn sinh... gồm trong các thành phần dùng lại đợc v) Thời gian phát triển phần mềm có thể đợc rút gọn IV .4. 2.Độ tin cậy của phần mềm A) Khái niệm về độ tin cậy: Độ tin cậy của một hệ phần mềm là độ đo về mức độ tốt của các dịch vụ mà hệ cung cấp cho máy tính Ngời dùng không xem rằng các dịch vụ là quan trọng nh nhau: chẳng hạn một hệ điều khiển Chơng IV - 105 Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình... một phát biểu đơn giản và khái quát về độ tin cậy phần mềm Các h hỏng phần mềm không phải là các khuyết tật (defect) của chơng trình Một hành xử bất ngờ có thể xảy ra khi mà phần mềm phù hợp với các yêu cầu của nó, nhng mà chính các yêu cầu đó lại không đầy đủ Các sai sót trong các t liệu phần mềm cũng có thể dẫn đến các hành vi bất ngờ mặc dầu rằng phần mềm không có khiếm khuyết Có công trình nghiên... lỗi: Tất cả các kĩ s phần mềm hẳn đều muốn làm ra các phần mềm không có lỗi Một quá trình phát triển chỉ dựa vào việc phát hiện lỗi và khử lỗi chứ không để ý đến tránh lỗi là một qúa trình cha thật tốt Phần mềm không có lỗi nói ở đây là phần mềm tuân theo đúng đặc tả Nói chung, nó có thể có lỗi trong đặc tả hoặc có thể không phản ánh đúng các nhu cầu của ngời sử dụng Vậy là phần mềm không có lỗi không... thành phần phần mềm với t liệu đợc phổ biến rộng rãi đợc dùng để thiết kế phần mềm Tuy vậy, chúng ta cần quan tâm đến những vấn đề sau đây: Phân loại thành phần dùng lại đợc i) Các hệ ứng dụng ii) Các hệ con Thí dụ hệ đọ mẫu đợc phát triển nh là một phần của hệ xử lý văn bản có thể đợc dùng lại trong một hệ quản trị cơ sở dữ liệu iii) Các mô đun hoặc các đối tợng iv) Các hàm Phát triển phần mềm để... điểm trong tơng lai của một th viện các thành phần dùng lại đợc Để đánh giá độ dùng lại đợc cần phải đặt ra hai câu hỏi sau đây: i) Thành phần này biểu diễn một sự khái quát lĩnh vực ứng dụng tốt nh thế nào? ii) Thành phần đã đợc viết ra có là khái quát và thích nghi đợc hay không ? Phát triển phần mềm có thành phần dùng lại đợc Phát triển phần mềm có thành phần tái sử dụng là giảm đợc chi phí và ngoài... bại kế tiếp nhau 4) Độ đo mức sẵn sàng hoạt động của hệ C) Đặc tả độ tin cậy phần mềm Các bớc đặc tả độ tin cậy phần mềm là: 1) Phân tích hệ quả của các thất bại 2) Chia các thất bại thành các nhóm khác nhau 3) Thiết lập các yêu cầu về độ tin cậy bằng cách sử dụng các độ đo thích hợp cho từng loại D) Thử nghiệm tĩnh Mục tiêu chủ yếu của phần mềm tĩnh là xác định độ tin cậy của phần mềm chứ không phải... phân phối Chơng IV - 102 Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng http://www.ebook.edu.vn Tránh lỗi và phát triển phần mềm vô lỗi dựa trên: i) Sản phẩm của một đặc tả hệ thống chính xác ii) Chấp nhận một cách tiếp cận thiết kế phần mềm dựa trên việc che dấu thông tin và bao gói thông tin iii) Tăng cờng duyệt lại trong quá trình phát triển và thẩm định hệ thống phần mềm iv) Chấp nhận... đây là áp dụng đợc cho cả các bớc thiết kế và lập trình cho tiến trình kĩ nghệ phần mềm IV.5.Thẩm định và xác minh IV.5.1 Đại cơng về việc thẩm định và xác minh Xác minh và thẩm định một hệ phần mềm là quá trình liên tục xuyên suốt mọi giai đoạn của quá trình phần mềm Xác minh và thẩm định mang tính quá trình nhằm đảm bảo phần mềm thoả mãn các yêu cầu của khách hàng Xác minh và thẩm định là một quá . dựng câu lệnh IV.3 .4. Vào/ra IV .4. Tính hiệu quả IV .4. 1 .Kỹ thuật lập trình hớng hiệu quả IV .4. 2.Độ tin cậy của phần mềm IV .4. 3.Tính di chuyển đợc của hệ ứng dụng IV .4. 4.Một vài hớng dẫn. áp dụng nó. Mục tiêu của kĩ nghệ phần mềm là mở rộng tri thức về ngữ nghĩa của việc phát triển phần mềm. IV.1.3.Hớng quan điểm kỹ nghệ Cách nhìn kĩ nghệ phần mềm về các đặc trng của ngôn. bại phần mềm. Một thất bại phần mềm là một sự kiện thi hành mà khi đó phần mềm x ử lý không nh ngời ta mong đợi. Chú ý rằng một thất bại phần mềm (failure) khác một h hỏng (fault) phần mềm.