ĐẠi học quốc gia hà NỘi trường Đại học Công nghệ Nguyễn Việt Hà Bài giảng


Lập trình hướng hiệu quả thực hiện



tải về 454.68 Kb.
trang12/13
Chuyển đổi dữ liệu09.09.2017
Kích454.68 Kb.
#33014
1   ...   5   6   7   8   9   10   11   12   13

4.4 Lập trình hướng hiệu quả thực hiện

4.4.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 hóa 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.

4.4.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ả. Hạn chế bộ nhớ trong phát triển phần mềm 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 hóa 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ữ.

4.4.3 Hiệu quả vào/ra


Các thiết bị vào ra thường có tốc độ chậm hơn rất nhiều so với khả năng tính toán của máy tính và tốc độ truy cập bộ nhớ trong. Việc tối ưu vào ra có thể làm tăng đáng kể tốc độ thực hiện. 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 độ.



Tổng kết: Bước lập trình là một tiến trình dịch (chuyển hóa) thiết kế chi tiết thành chương 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 của ngôn ngữ lập trình có ảnh hưởng lớn đến quá trình xây dựng, kiểm thử cũng như bảo trì phần mềm. Phong cách lập trình quyết định tính dễ hiểu của chương trình gốc. 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. Lập trình cần hướng tới hiệu quả thực hiện, tức là tích kiệm tài nguyên phần cứng (mức độ sử dụng CPU, bộ nhớ...). 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 hoạt động hiệu quả mà lại không dễ hiểu dẫn đến khó bảo trì thì giá trị của nó cũng bị hạn chế.

Chương 5

Xác minh và thẩm định

5.1 Đại cương


Xác minh và thẩm định là sự kiểm tra việc phát triển phần mềm. Là công việc xuyên suốt quá trình phát triển phần mềm, chứ không chỉ ở khâu kiểm thử khi đã có mã nguồn. Xác minh (verification) là sự kiểm tra xem sản phầm có đúng với đặc tả không, chú trọng vào việc phát hiện lỗi lập trình. Thẩm định (validation) là sự kiểm tra xem sản phẩm có đáp ứng được nhu cầu người dùng không, có hoạt động hiệu quả không, tức là chú trọng vào việc phát hiện lỗi phân tích, lỗi thiết kế.

Tóm lại, mục đích của thẩm định và xác minh là

• Phát hiện và sửa lỗi phần mềm

• Đánh giá tính dùng được của phần mềm

Có hai khái niệm là thẩm định/xác minh tĩnh và thẩm định/xác minh động. Thẩm định và xác minh tĩnh là sự kiểm tra mà không thực hiện chương trình, ví dụ như xét duyệt thiết kế, xét duyệt yêu cầu, nghiên cứu mã nguồn, sử dụng các biến đổi hình thức (suy luận) để kiểm tra tính đúng đắn của chương trình. Thẩm định và xác minh tĩnh được tiến hành ở mọi khâu trong vòng đời phần mềm. Về lý thuyết, có thể phát hiện được hầu hết các lỗi lập trình, tuy nhiên phương pháp này không thể đánh giá được tính hiệu quả của chương trình.

Thẩm định và xác minh động là sự kiểm tra thông qua việc thực hiện chương trình, được tiến hành sau khi đã phát triển chương trình (mã nguồn). Hiện vẫn là kỹ thuật kiểm tra chính. Cả hai hướng nêu trên đều rất quan trọng và chúng bổ khuyết lẫn nhau. Trong chương này, chúng ta đi sâu vào tìm hiểu về thẩm định và xác minh động, gọi là sự thử nghiệm (kiểm thử) chương trình.

Có hai loại thử nghiệm (động) là:

• Thử nghiệm (tìm) khuyết tật: được thiết kế để phát hiện khuyết tật của hệ thống (đặc biệt là lỗi lập trình).

• Thử nghiệm thống kê: sử dụng các dữ liệu (thao tác) phổ biến của người dùng (dựa trên sự thống kê) để đánh giá tính dùng được của hệ thống.

Thử nghiệm cần phải có

• Tính lặp lại: thử nghiệm phải lặp lại được để phát hiện thêm lỗi và kiểm tra xem lỗi đã được sửa hay chưa. Bất cứ khi nào sửa mã chương trình chúng ta phải thử nghiệm lại (kể cả đối với các thử nghiệm đã thành công).

• Tính hệ thống: việc thử nghiệm phải tiến hành một cách có hệ thống để đảm bảo kiểm thử được mọi trường hợp, nếu tiến hành thử nghiệm một cách ngẫu nhiên thì không đảm bảo được điều này.

• Được lập tài liệu: để kiểm soát xem cái nào đã được thực hiện, kết quả như thế nào...

5.2 Khái niệm về phép thử


Một phép thử được gọi là thành công nếu nó phát hiện ra khiếm khuyết của phần mềm. Chú ý là phép thử chỉ chứng minh được sự tồn tại của lỗi trong hệ thống chứ không chứng minh được hệ thống không có lỗi. Một phép thử (ca thử nghiệm) bao gồm

- Tên của mô đun thử nghiệm

- Dữ liệu vào

- Dữ liệu ra mong muốn (đúng)

- Dữ liệu ra thực tế (khi đã tiến hành thử nghiệm)

Các ca thử nghiệm nên được thiết kế khi chúng ta tạo các tài liệu phân tích và thiết kế, chứ không phải là khi đã viết xong mã nguồn.


5.3 Thử nghiệm chức năng và thử nghiệm cấu trúc


Có hai kỹ thuật thử nghiệm tìm khuyết tật chính là thử nghiệm chức năng và thử nghiệm cấu trúc.

5.3.1 Thử nghiệm chức năng


Thử ngiệm chức năng (functional testing) còn gọi là thử nghiệm hộp đen (black box testing) là sự thử nghiệm sử dụng các ca thử nghiệm được thiết kế dựa trên đặc tả yêu cầu, tài liệu người dùng nhằm mục đích phát hiện ra các khiếm khuyết. Thử nghiệm chức năng nhìn nhận mô đun được thử nghiệm như là một hộp đen, và chỉ quan tâm đến chức năng (hành vi) của mô đun, tức là kiểm tra xem có hoạt động đúng với đặc tả hay không. Các ca kiểm thử bao gồm các trường hợp bình thường và không bình thường (dữ liệu không hợp lệ...) của mô đun. Thông thường, không thể thử nghiệm với mọi dữ liệu, chiến lược chung khi thiết kế dữ liệu thử nghiệm là phân hoạch (dữ liệu) tương đương. Phân hoạch tương đương chia miền dữ liệu vào ra thành các vùng, mà mỗi vùng chứa các dữ liệu có cùng hành vi. Do đó, đối với mỗi vùng dữ liệu chỉ cần xây dựng một ca thử nghiệm. Thêm vào đó là các ca sử dụng đối với biên giới của các vùng. Theo kinh nghiệm, các sai sót về lập trình thường sảy ra đối với các dữ liệu biên.

Ví dụ, đối với hàm tính trị tuyệt đối của số nguyên, có thể chia miền đối số thành 2 vùng:

- Vùng dữ liệu = 0

- Vùng dữ liệu < 0

Do đó các dữ liệu đầu vào để kiếm thử có thể là 100, ư20, và 0.

Ngoài các ca thử nghiệm trên, thông thường còn cần kiểm tra với các dữ liệu đặc thù như:

- Biên của số trong máy tính (ví dụ ư32768, 32767)

- 0, số âm, số thập phân

- Không có input

- Input ngẫu nhiên

- Input sai kiểu...

Thử nghiệm chức năng có thể giúp chúng ta

- Phát hiện sự thiếu sót chức năng

- Phát hiện khiếm khuyết

- Sai sót về giao diện giữa các mô đun

- Sự không hiệu quả của chương trình

- Lỗi khởi tạo, lỗi kết thúc

Tuy nhiên thử nghiệm chức năng chỉ dựa trên đặc tả nên không thể kiểm thử được các trường hợp không được khai báo trong đặc tả, không đảm bảo thử hết được các khối mã nguồn của mô đun.

Thử nghiệm chức năng cũng không phát hiện được các đoạn mã yếu (có khả năng sinh lỗi với một trạng thái đặc biệt nào đó của hệ thống), và trong nhiều trường hợp việc đảm bảo xây dựng đầy đủ các ca thử nghiệm là khó khăn.

Ví dụ, hàm tính trị tuyệt đối sau có thể thoát được thử nghiệm chức năng tuy có lỗi.

int abs(int n)

{

if (n>0) return n;



else (n<0) return ưn;

}

5.3.2 Thử nghiệm cấu trúc


Thử nghiệm cấu trúc (structural testing) là sự thử nghiệm dựa trên phân tích chương trình. Kỹ thuật chính ở đây là xác định đường đi (path) của chương trình (điều khiển) từ input đến output. Mục đích của thử nghiệm cấu trúc là kiểm tra tất cả các đường đi có thể. Tức là đảm bảo mọi lệnh đều được thực hiện ít nhất một lần trong một ca thử nghiệm nào đó. Thử nghiệm cấu trúc chú trọng vào phân tích các cấu trúc rẽ nhánh và các vòng lặp.

Ví dụ:


int max(int x, int y, int z)

{

if (x>y) {



if (x>z) return x;

else return z;

}

else {


if (y > z) return y;

else return z;

}

}

Trong ví dụ trên có 4 đường đi có thể do đó cần ít nhất 4 ca thử nghiệm để thử nghiệm tất cả các đường đi này. Thử nghiệm cấu trúc xem xét chương trình ở mức độ chi tiết và phù hợp khi kiểm tra các mô đun nhỏ. Tuy nhiên thử nghiệm cấu trúc có thể không đầy đủ vì kiểm thử hết các lệnh không chứng tỏ là chúng ta đã kiểm thử hết các trường hợp có thể. Có khả năng tồn tại các tổ hợp lệnh khác nhau gây lỗi. Ngoài ra, chúng ta không thể kiểm thử hết các đường đi đối với các vòng lặp lớn.



Tóm lại, thử nghiệm chức năng và thử nghiệm cấu trúc đều rất quan trọng và chúng bổ khuyết lẫn nhau.



tải về 454.68 Kb.

Chia sẻ với bạn bè của bạn:
1   ...   5   6   7   8   9   10   11   12   13




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương