Chơng IV -
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
89Chơ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.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
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
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
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ữ đó
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
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
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
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ự 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
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.
đ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),
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
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ì
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.
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
Chơng IV -
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
99
các môi trờng lập trình.
iii) Môi trờng công trình phần mềm: Nó trợ giúp sản sinh ra các hệ thống lớn, thọ mà
chi phí cho việc bảo trì còn vợt quá chi phí phát triển và đợc sản sinh ra bởi một
đội chứ không phải là một ngời lập trình riêng rẽ. Nó trợ giúp cho tất cả mọi hoạt
động phát triển và bảo trì.
Thực tế biên giới giữa các loại đó không rõ ràng.
B.Các môi trờng lập trình.
Các môi trờng lập trình có thể đợc nhóm lại thành các lớp sau:
i) Các môi trờngmục đích khái quát.
ii) Các môi trờng hớng ngôn ngữ.
Môi trờng lập trình có thể có các công cụ sau:
i) Phần mềm giao tiếp máy chủ máy mục tiêu.
ii) Phần mềm bắt chớc máy mục tiêu.
iii) Các bộ biên dịch chéo.
iv) Các công cụ thử nghiệm và gỡ lỗi.
v) Các công cụ quản lý cấu hình.
vi) Các công cụ giao tiếp.
C.Bàn thợ CASE
Các thành phần điển hình của bàn thợ CASE là:
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
100
chơng trình.
Việc lựa chọn các tên gọi định danh có nghĩa chính là điều chủ chốt cho việc hiểu chơng trình.
Những ngôn ngữ giới hạn tên biến hay nhãn chỉ trong vài kí tự tự nó đã mang nghĩa mơ hồ. Cho dù
một chơng trình nhỏ thì một tên gọi có nghĩa cũng làm tăng tính dễ hiểu. Theo ngôn từ của mô
hình cú pháp/ngữ nghĩa tên có ý nghĩa làm đơn giản hoá việc chuyển đổi từ cú pháp chơng trình
sang cấu trúc ngữ nghĩa bên trong.
Một điều rõ ràng là: phần mềm phải chứa tài liệu bên trong. Lời chú thích cung cấp cho ngời
phát triển một ý nghĩa truyền thông với các độc giả khác về chơng trình gốc. Lời chú thích có thể
cung cấp một hớng dẫn rõ rệt để hiểu trong pha cuối cùng của kĩ nghệ phần mềm-bảo trì.
Có nhiều hớng dẫn đã đợc đề nghị cho việc viết lời chú thích. Các chú thích mở đầu và chú
thích chức năng là hai phạm trù đòi hỏi cách tiếp cận có hơi khác.
+Lời chú thích mở đầu nên xuất hiện ở ngay đầu của mọi modul. Định dạng cho lời chú thích
nh thế là:
1. Một phát biểu về mục đích chỉ rõ chức năng mô đun.
2. Mô tả giao diện bao gồm:
a) Một mẫu dãy lời gọi.
b) Mô tả về mọi đối tợng.
c) Danh sách tất cả các mô đun thuộc cấp.
3. Thảo luận về dữ liệu thích hợp (nh các biến quan trọng và những hạn chế, giới hạn về cách
dùng chúng) và các thông tin quan trọng khác.
4. Lịch sử phát triển bao gồm:
a) Tên ngời thiết kế modul (tác giả).
b) Tên ngời xét duyệt (kiểm toán) và ngày tháng.
c) Ngày tháng sửa đổi và mô tả sửa đổi.
+Các chú thích chức năng đợc nhúng vào bên trong thân của chơng trình gốc và đợc dùng
để mô tả cho các hàm xử lý. Bên cạnh đó, lời chú thích mô tả nên :
Mô tả các khối chơng trình thay vì chú thích cho từng dòng.
Dùng dòng trống hay tụt lề để cho lời chú thích có thể đợc phân biệt với chơng trình.
INTEGER,REAL,DOUBLE PRECISION,
2. Mọi khối dữ liệu toàn cục: COMMON/tên khối/
3. Mọi mảng cục bộ: DIMENSION tên mảng và chiều
4. Mọi khai báo tệp: DEFINE FILE,OPEN,CLOSE
Thứ tự tạo ra các thuộc tính để dễ tìm, cho phép xúc tiến kiểm thử ,gỡ lỗi và bảo trì.
Khi có nhiều tên biến đợc khai báo trong một câu lệnh thì việc sắp xếp theo trật tự chữ cái
cho các tên gọi đó cũng có giá trị. Tơng tự, dữ liệu toàn cục có nhãn (nh khối chung trong
FOTRAN) cũng nên đợc lập thứ tự theo bảng chữ.
Nếu thiết kế có mô tả trớc cấu trúc dữ liệu phức tạp thì nên dùng việc chú thích những điểm
đặc thù cố hữu trong việc cài đặt ngôn ngữ lập trình. Chẳng hạn, cấu trúc dữ liệu danh sách móc nối
trong C hay kiểu dữ liệu ngời dùng xác định trong PASCAL có thể yêu cầu tài liệu bổ sung có chứa
trong lời chú thích của nó.
IV.3.3.Xây dựng câu lệnh
Việc xây dựng luồng logic phần mềm đợc thiết lập trong khi thiết kế. Việc xây dựng từng
câu lệnh tuy nhiên lại là một phần của bớc lập trình. Việc xây dựng câu lệnh nên tuân theo một qui
tắc quan trọng hơn cả: mỗi câu lệnh nên đơn giản và trực tiếp; chơng trình không nên bị xoắn xít
để đạt tính hiệu quả.
Nhiều ngôn ngữ lập trình cho phép nhiều câu lệnh trên một dòng.Khía cạnh tiết kiệm không
gian của tình năng này khó mà biện minh bởi tính khó đọc nảy sinh.
Cấu trúc chu trình và các phép toán điều kiện đợc chứa trong đoạn trên đều bị che lấp bởi
cách xây dựng nhiều câu lệnh trên một dòng.
Cách xây dựng câu lệnh đơn và việc tụt lề minh hoạ cho các đặc trng logic và chức năng
của đoạn này. Các câu lệnh chơng trình gốc riêng lẻ có thể đợc đơn giản hoá bởi:
Việc tránh dùng các phép kiểm tra điều kiện phức tạp
Khử bỏ các phép kiểm tra điều kiện phủ định
Tránh lồng nhau nhiều giữa các điều kiện hay chu trình
Dùng dấu ngoặc để làm sáng tỏ các biểu thức logic hay số học
Dùng dấu cách và/ hoặc các kí hiệu dễ đọc để làm sáng tỏ nội dung câu lệnh
Chỉ dùng các tính năng chuẩn ANSI
Trong hệ thống kĩ nghệ tốt, có một khuynh hớng tự nhiên để dùng các tài nguyên chủ chốt
một cách hiệu quả. Các chu trình bộ xử lí và vị trí bộ nhớ thờng đợc coi nh các tài nguyên chủ
chốt. Thứ nhất, tính hiệu quả là một yêu cầu hoàn thiện và do đó nên đợc thiết lập trong phân tích
yêu cầu phần mềm. Thứ hai là tính hiệu quả đợc cải thiện với thiết kế tốt. Thứ ba là tính hiệu quả
của chơng trình và tính đơn giản của chơng trình đi đôi với nhau. Nói chung, không nên gạt bỏ
tính rõ ràng, dễ đọc hay tính đúng đắn chỉ để có đợc sự cải thiện nho nhỏ về tính hiệu quả.
IV.4.1.Kỹ thuật lập trình hớng hiệu quả
Lập trình là một nghề thủ công. Nó phụ thuộc vào kĩ xảo cá nhân, sự chú ý đến các chi
tiết và kiến thức về việc làm nh thế nào để sử dụng các công cụ sẵn có theo cách thức tốt nhất.
Trong phần này chỉ tập trung vào một vài kĩ thuật chuyên biệt đợc dùng nhằm đạt đợc một hệ
thống tin cậy đợc, chuyển đợc và dùng lại đợc các thành phần.
Nhu cầu các hệ thống đáng tin là đang tăng lên hiển nhiên là vì các hệ thống máy tính đã
lan khắp nơi. Hiện thời có hai kĩ thuật để viết các chơng trình đáng tin: tránh lỗi và thứ lỗi.
A) Tránh 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 nhất thiết là các phần mềm luôn luôn hành xử nh ngời dùng dự
đoán.
Chi phí
nó là bớc đầu tiên bớc từ cách tiếp cận không khuôn phép tới phát triển phần mềm.
Lập trình có cấu trúc buộc ngời lập trình phải nghĩ cẩn thận về chơng trình của họ,
và vì vậy nó ít tạo ra sai lầm trong khi phát triển. Lập trình có cấu trúc làm cho chơng trình có thể
đợc đọc một cách tuần tự và do đó dễ hiểu và dễ thanh tra. Tuy nhiên nó chỉ là bớc đầu tiên trong
việc lập trình nhằm đạt độ tin cậy tốt. Năm 1968 Dijjkstra đã nhận thấy rằng phát biểu goto là một
cấu trúc lập trình hay sai. Có một vài cấu trúc khác cũng thế, chúng hay dẫn tới các lỗi trong hệ
thống:
i) Các số thực dấu chấm động.
ii) Các con trỏ.
iii) Song song.
iv) Đệ quy.
v) Các ngắt.
Các cấu trúc này có ích, nhng ngời lập trình nên dùng chúng một cách cẩn thận.
Phân quyền truy cập dữ liệu:
Nguyên lý an ninh đợc thừa nhận bởi các tổ chức vũ trang là nguyên lý nhu cầu để
biết. Chỉ có các cá nhân có nhu cầu biết một mẩu thông tin nào đó mới đợc tiến hành các nhiệm vụ
cho các thông tin đó. Các thông tin không trực tiếp liên quan đến công việc của họ thì phải bị khớc
từ.
Khi lập trình ngời ta cũng tuân theo một nguyên lý tơng tự cho việc truy cập dữ liệu hệ
thống. Mỗi thành phần chơng trình chỉ đợc phép truy cập đến dữ liệu nào cần thiết để thực hiện
chức năng của nó.
Ưu điểm của việc che dấu thông tin là các thông tin bị che dấu không thể bị sập đổ bởi
các thành phần chơng trình mà đợc xem rằng không dùng thông tin đó. Biểu diễn dữ liệu có thể
đợc thay đổi mà không phải thay đổi các thành phần khác có sử dụng thông tin đó.
B) Thứ lỗi
Ngay với một hệ vô lỗi thì vẫn cần một tiện ích thứ lỗi: đó là vì có thể có các lỗi đặc tả. Một
tiện ích thứ lỗi là cần thiết cho một hệ thống đáng tin.
Có bốn hoạt động cần phải tiến hành nếu hệ thống là thứ lỗi:
Nói chung một lỗi gây ra một sự sụp đổ trạng thái: các biến trạng thái đợc gán các trị
không hợp luật. Ngôn ngữ lập trình nh Ada cho phép phát hiện ra các lỗi đó ngay trong thời gian
biên dịch. Tuy nhiên việc kiểm tra biên dịch chỉ hạn chế cho các giá trị tĩnh và một vài phép kiểm
tra thời gian thực là không thể tránh đợc. Một cách để phát hiện lỗi trong chơng trình Ada là dùng
cơ chế xử lý bất thờng kết hợp với đặc tả miền trị.
Hồi phục lỗi là một quá trình cải biên không gian trạng thái của hệ thống sao cho hiệu
ứng của lỗi là nhỏ nhất và hệ thống có thể tiếp tục vận hành, có lẽ là trong một mức suy giảm. Hồi
phục tiến liên quan đến việc cố gắng chỉnh lại trạng thái hệ thống. Hồi phục lùi liên quan đến việc
lu trạng thái của hệ thống ở một trạng thái đúng đã biết.
Hồi phục tiến thờng là một chuyên biệt ứng dụng. Có hai tình thế chung mà khi đó hồi
phục tiến có thể thành công:
1) Khi dữ liệu mã bị sụp. Việc sử dụng kỹ thuật mã hoá thích hợp bằng cách thêm các
dữ liệu d thừa vào dữ liệu cho phép sửa sai khi phát hiện lỗi.
2) Khi cấu trúc nối bị sụp. Nếu các con trỏ tiến và lùi đã có trong cấu trúc dữ liệu thì
cấu trúc đó có thể tái tạo nếu nh còn đủ các con trỏ cha bị sụp. Kỹ thuật này thờng đợc dùng
cho việc sửa chữa hệ thống tệp và cơ sở dữ liệu.
Hồi phục lùi là một kỹ thuật đơn giản liên quan đến việc duy trì các chi tiết của trạng thái
an toàn và cất giữ trạng thái đó khi mà sai lầm đã bị phát hiện. Hầu hết các hệ quản trị cơ sở dữ liệu
đều có bộ hồi phục lỗi. CSDL chỉ cập nhật dữ liệu một khi giao dịch đã hoàn tất và không phát hiện
đợc vấn đề gì. Nếu giao dịch thất bại thì CSDL không đợc cập nhật.
Một kỹ thuật khác là thiết lập các điểm kiểm tra thờng kỳ mà chúng là các bản sao của
trạng thái hệ thống. Khi mà một lỗi đợc phát hiện thì trạng thái an toàn đó đợc tái lu kho từ điểm
kiểm tra gần nhất.
Trờng hợp hệ thống dính líu tới nhiều quá trình hợp tác thì dãy các giao tiếp có thể là
các điểm kiểm tra của các quá trình đó không đồng bộ và để hồi phục thì mỗi quá trình phải trở lại
trạng thái ban đầu của nó.
Chơng IV -
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
ờng miễn cỡng ủng hộ chi phí
để dùng laị vì các khó khăn trong định lợng các u đ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 ra còn có 5
u điểm nữa:
i) Độ tin cậy của hệ thống đợc tăng lên.
ii) Các rủi ro là giảm đi.
iii) Sử dụng hiệu quả các chuyên gia ứng dụng.
iv) Các chuẩn tổ chức có thể đợc bao 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 -
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
106
máy bay có thể rất, rất hiếm thất bại. Nhng nếu chúng có thất bại gây ra tai nạn máy bay thì những
ngời bị nạn và các thân nhân ngời bị nạn không thể xem hệ đó là đáng tin.
Độ 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
mềm và xác định mẫu đó liên quan đến việc phát hiện các lớp thông tin vào của
chơng trình và ớc tính xác suất của chúng.
ii) Chọn hoặc sinh ra một tập các dữ liệu thử tơng ứng với trắc đồ đó.
iii) áp dụng các trờng hợp thử chơng trình, ghi lại độ dài thời gian thi hành giữa mỗi cặp
thất bại quan sát đợc, thích hợp hơn là dùng thời gian thô, với đơn vị thời gian thích
hợp cho độ đo mức tin cậy.
iv) Tính toán độ đo mức tin cậy sau một số đáng kể (về mặt thông kê) các thất bại đã quan
sát đợc.
E) An toàn hệ thống.
Có những hệ thống mà thất bại của nó có thể gây ra một mối đe doạ tính mạng con
ngời. Ví dụ về hệ thống an toàn sinh mệnh nh vậy là hệ thống điều khiển máy 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 -
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
107
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 mệnh thứ cấp: là các phần mềm có thể gián tiếp gây ra
thơng vong. Ví dụ hệ thống phần mềm trợ giúp thiết kế kỹ thuật, hệ thống CSDL y tế liên quan đến
các chất độc bảng A.
F) Thử nghiệm khiếm khuyết.
Thử nghiệm chơng trình có hai mục đích: thứ nhất là chỉ ra rằng hệ thống là phù
hợp với các đặc tả của nó. Thứ hai là thực hành hệ thống theo một cách sao cho các khuyết tật đợc
phơi ra. Các thử nghiệm với mục đích thứ nhất chính là các thẩm định, nó là các thử nghiệm để chấp
nhận. Các thử nghiệm cho mục đích thứ hai lại khác hẳn: thử nghiệm thành công nhất là thử nghiệm
phơi ra đợc nhiều khuyết tật nhất. Các thử nghiệm có thể đợc phát triển song song với việc thiết
Nhiều trình biên dịch có tính năng tối u tự động sinh ra chơng trình hiệu quả bằng cách
dồn nén các biểu thức lặp,thực hiện tính chu trình,dùng số học nhanh và áp dụng các thuật toán có
hiệu quả liên quan khác. Với những ứng dụng trong đó tính hiệu quả có ý nghĩa quan trọng, những
trình biên dịch nh thế là công cụ lập trình không thể thiếu đợc.
2.Hiệu quả bộ nhớ
Tính hiệu quả bộ nhớ phải đợc tính vào đặc trng phân trang của hệ điều hành.Nói
chung, tính cục bộ của chơng trình hay việc bảo trì lĩnh vực chức năng qua các kết cấu có cấu trúc
là một phơng pháp tuyệt vời làm giảm việc phân trang và do đó làm tăng tính hiệu quả.
Chơng IV -
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
108
Hạn chế bộ nhớ trong thế giới bộ vi xử lí nhúng là mối quan tâm rất thực tế,mặc dầu bộ
nhớ giá thấp, mật độ cao vẫn đang tiến hoá nhanh chóng. Nếu yêu cầu hệ thống cần tới bộ nhớ tối
thiểu (nh sản phẩm giá thấp, khối lợng lớn) thì trình biên dịch ngôn ngữ cấp cao phải đợc trù
tính cẩn thận với tính năng nén bộ nhớ, hay nh một phơng kế cuối cùng, có thể phải dùng tới hợp
ngữ.
Không giống nh nhiều đặc trng hệ thống khác phải trả giá lẫn nhau, các kĩ thuật cho
hiệu quả về thời gian thực hiện đôi khi có thể dẫn tới hiệu quả bộ nhớ. Chẳng hạn, giới hạn việc
dùng các mảng ba hay bốn chiều làm nảy sinh thuật toán thâm nhập phần tử đơn, thuật toán nhanh
và ngắn nhất. Lần nữa, chìa khoá cho tính hiệu quả bộ nhớ là giữ cho đơn giản.
3.Hiệu quả vào / ra.
Cái vào do ngời dùng cung cấp và cái ra đợc tạo ra cho ngời dùng là hiệu quả khi
thông tin có thể đợc cung cấp hay đợc hiêủ với một mức độ tiết kiệm nỗ lực trí tuệ.
Một số hớng dẫn đơn giản để tăng cờng hiệu quả vào/ra:
Số các yêu cầu vào/ra nên giữ mức tối thiểu
Mọi việc vào /ra nên qua bộ đệm để làm giảm phí tổn liên lạc.
Với bộ nhớ phụ (nh đĩa) nên lựa chọn và dùng phơng pháp thâm nhập đơn giản nhất chấp
IV.5.2 Sơ lợc về tiến trình thử nghiệm
*Quá trình thử nghiệm:
Trừ các hệ nhỏ, nói chung không nên thử hệ thống nguyên cả khối. Quá trình thử có thể chia
Chơng IV -
Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi Lê Đình Phùng
109
làm 5 giai đoạn:
1) Thử đơn vị.
2) Thử modul ( chức năng ).
3) Thử hệ con.
4) Thử hệ thống.
5) Thử sau lng (alpha) và thử điều tra (beta).
*Kế hoạch thử nghiệm.
Thử hệ thống là rất đắt, đối với một vài hệ thời gian thực có các ràng buộc thời gian phức tạp
thì việc thử có thể ngốn hết khoảng nửa tổng chi phí phát triển. Vì thế mà phải lập kế hoạch thử và
khống chế chi phí thử.
Việc thử liên quan nhiều đến việc thiết lập ra các mẫu cho quá trình thử nhiều hơn là mô tả
các phép thử.
*Chiến lợc thử nghiệm.
Có các chiến lợc thử nh sau:
1) Thử từ - trên - xuống: nên dùng cho các phát triển từ - trên - xuống.
2) Thử từ dới lên: việc thử từ dới lên luôn luôn là cần thiết cho các thành phần hệ thống
mức thấp.
3) Thử luồn sợi: dùng cho các hệ thời gian thực.
4) Thử gay cấn (áp lực): cho những hệ thống có giới hạn tải, và phép thử tăng dần tải cho
tới khi hệ thống sập đổ để xác định độ chịu tải thực sự.
Tóm tắt
2. Nền tảng của ngôn ngữ lập trình? (định kiểu dữ liệu , cơ chế chơng trình con, cấu trúc điều
khiển và cách tiếp cận hớng đối tợng)
3. Sơ lợc về các yếu tố trong phong cách lập trình?
4. Sơ lợc về kỹ thuật lập trình hớng hiệu quả?
5. Sơ lợc về những nội dung quan trọng về độ tin cậy phần mềm ?
6. Nêu ra một vài hớng dẫn lập trình hớng hiệu quả?
7. Mục tiêu, ý nghĩa, vai trò và nội dung của việc thẩm định và xác minh?
8. Sơ lợc về tiến trình thử nghiệm ?(quá trình, kế hoạch, chiến lợc)