Bài giảng Kỹ nghệ phần mềm (Nhập môn) - Nguyễn Quốc Toản - Chương 4: Lập trình hiệu quả
IV.1.Các đặc tr-ng ngôn ngữ lập trình
IV.1.1.Đặc tr-ng 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
ơ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 kế và thực hiện bởi những ng−ời không dính dáng tới việc thiết kế. IV.4.3.Tính di chuyển đ−ợc của hệ ứng dụng Tốc độ thay đổi công nghệ phần cứng nhanh đến mức mà máy tính là bị lỗi thời tr−ớc cá ch−ơng trình thi hành trên cái máy tính đó. Vậy là các hệ thống ứng dụng phải di chuyển đ−ợc sang các máy tính khác, trên môi tr−ờng khác. Độ di chuyển đ−ợc của một ứng dụng là tỷ lệ với khối l−ợng công việc cần phải tiến hành để ứng dụng đó thi hành đ−ợc trong một môi tr−ờng mới. Tính di chuyển đ−ợc có hai khía cạnh: -Tính vận chuyển: sự hoạt động của mã ch−ơng trình và dữ liệu kết hợp đ−ợc chuyển từ một môi tr−ờng này sang một môi tr−ờng khác. -Tính thích nghi; những thay đổi ch−ơng trình cần thiết để ch−ơng trình hoạt động trong một môi tr−ờng mới. IV.4.4.Một vài h−ớng dẫn lập trình h−ớng hiệu quả 1.Tính hiệu quả ch−ơng trình. Tính hiệu quả của ch−ơng trình gốc có liên hệ trực tiếp với tính hiệu quả của thuật toán đ−ợc xác định trong thiết kế chi tiết. Tuy nhiên, phong cách lập trình có thể có một tác động đến tốc độ thực hiện và yêu cầu bộ nhớ. Tập hợp các h−ớng dẫn sau đây bao giờ cũng có thể áp dụng đ−ợc khi thiết kế chi tiết đ−ợc dịch thành ch−ơng trình: • Đơn giản hoá các biểu thức số học và lôgic tr−ớc khi đi vào lập trình. • Tính cẩn thận từng chu kì lồng nhau để xác định liệu các câu lệnh hay biểu thức có thể đ−ợc chuyển ra ngoài hay không. • Khi có thể, hãy tránh dùng mảng nhiều chiều • Khi có thể hãy tránh việc dùng con trỏ và danh sách phức tạp. • Dùng các phép toán số học “nhanh”. • Không trộn lẫn các kiểu dữ liệu, cho dù ngôn ngữ có cho phép điều đó. • Dùng các biểu thức số học và logic bất kì khi nào có thể đ−ợc. 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 tr−ng “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 tr−ng 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 nhận đ−ợc. • Nên xếp khối vào/ra với các thiết bị bộ nhớ phụ. • Việc vào/ ra với thiết bị cuối hay máy in nên nhận diện các tính năng của thiết bị có thể cải tiến chất l−ợng hay tốc độ. • Hãy nhớ rằng “siêu hiệu quả” của vào/ra là vô nghĩa nếu nó không đ−ợc hiểu rõ. Thiết kế vào/ra lập nên phong cách và cuối cùng chi phối tính hiệu quả. Những h−ớng dẫn trình bày trê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á trình kéo dài suốt vòng đời. Nó bắt đầu khi duyệt xét yêu cầu. Xác minh và thẩm định có hai mục tiêu: i) Phát hiện các khuyết tật trong hệ thống. ii) Đánh giá xem hệ thống có dùng đ−ợc hay không ?. Sự khác nhau giữa xác minh và thẩm định là: i) Thẩm định: xét xem cái đ−ợc xây dựng có là sản phẩm đúng không ? ii) Xác minh: Xét xem cái đ−ợc xây dựng có đúng là sản phẩm không ? Nh− vậy xác minh là kiểm tra xem ch−ơng trình có phù hợp với đặc tả hay không. Còn thẩm định là kiểm tra xem ch−ơng trình có đ−ợc nh− mong đợi của ng−ời dùng hay không . Có hai loại phép thử: i) Phép thử thống kê: để phản ánh tần suất các input của ng−ời dùng thực và sau khi vận hành máy có thể cho ra một đánh giá độ tin cậy thao tác của hệ thống. ii) Phép thử khuyết tật: để bộc lộ các khuyết tật trong hệ thống. 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 l−ng (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 B−ớc lập trình của kĩ nghệ phần mềm là một tiến trình dịch/chuyển hoá. Thiết kế chi tiết đ−ợc dịch sang một ngôn ngữ lập trình mà cuối cùng đ−ợc biến đổi thành các lệnh mã máy thực hiện đ−ợc. Các đặc tr−ng tâm lí và kĩ thuật của ngôn ngữ lập trình có ảnh h−ởng lớn đến quá trình dịch và kiểm thử cũng nh− bảo trì phần mềm. Các đặc tr−ng này có thể đ−ợc áp dụng vào ngôn ngữ lập trình thuộc một trong 4 thế hệ ngôn ngữ. Phong cách là một đặc tính quan trọng của ch−ơng trình gốc và có thể xác định ra tính dễ đọc của ch−ơng trình.Các yếu tố của phong cách bao gồm việc làm tài liệu bên trong, ph−ơng pháp khai báo dữ liệu, thủ tục xây dựng câu lệnh, và kĩ thuật lập trình vào/ra.Trong mọi tr−ờng hợp, tính đơn giản và rõ ràng là các đặc tr−ng chính. Một nhân tố của phong cách lập trình là thời gian thực hiện và/hoặc tính hiệu quả bộ nhớ cần đạt tới. Mặc dầu tính hiệu quả có thể là yêu cầu cực kì quan trọng, chúng ta nên nhớ rằng một ch−ơng trình “hiệu quả” mà lại không dễ đọc thì cũng mang một giá trị đáng hoài nghi. Lập trình là cốt lõi của tiến trình phần mềm. Các b−ớc quan trọng chủ chốt phải hoàn tất r−ớc lập trình nh− phân tích, xác định yêu cầu và đặc tả thiết kế chi tiết. ? Củng cố Ch−ơng IV - Nguyễn Quốc Toản- Nguyên văn Vỵ - Vu Đức Thi – Lê Đình Phùng 110 1. Tóm l−ợc các đặc tr−ng của ngôn ngữ lập trình? 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)
File đính kèm:
- Bài giảng Kỹ nghệ phần mềm (Nhập môn) - Nguyễn Quốc Toản - Chương 4 Lập trình hiệu quả.pdf