Công nghệ phần mềm - Chương 2: Các kỹ thuật xây dựng phần mềm

2.1. Thiết kế chương trình

2.2. Các kỹ thuật phân chia, thiết kế, xây dựng

hàm/thủ tục

2.3. Các kỹ thuật bẫy lỗi và lập trình phòng ngừa

(defensive programming)

pdf21 trang | Chuyên mục: Công Nghệ Phần Mềm | Chia sẻ: dkS00TYs | Lượt xem: 1973 | Lượt tải: 1download
Tóm tắt nội dung Công nghệ phần mềm - Chương 2: Các kỹ thuật xây dựng phần mềm, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
1 
IT3124- ĐỒ ÁN TIN HỌC 
 (SOFTWARE PROJECT) 
LỚP KSCLC – K56, NĂM HỌC 2013-2014 
Giảng viên: PGS. TS.Huỳnh Quyết Thắng 
BM Công nghệ phần mềm 
Viện CNTT-TT, ĐHBK HN 
Chƣơng II - CÁC KỸ THUẬT XÂY DỰNG PHẦN MÊM 
2.1. Thiết kế chương trình 
2.2. Các kỹ thuật phân chia, thiết kế, xây dựng 
hàm/thủ tục 
2.3. Các kỹ thuật bẫy lỗi và lập trình phòng ngừa 
(defensive programming) 
QUÁ TRÌNH THIẾT KẾ CHƢƠNG TRÌNH 
1. Xác định các thành phần chương trình cần thiết 
 - Hàm/Functions, đối tượng/object 
lớp/classes, xử lý sự kiện/event handlers, 
etc. 
2. Xây dựng các giao diện 
- Sử dụng nguyên lý encapsulation và 
generalization 
QUÁ TRÌNH THIẾT KẾ CHƢƠNG TRÌNH 
3. Xây dựng các kịch bản thử nghiệm (đầu 
vào/đầu ra) 
4. Viết mã nguồn tất cả các thành phần 
phần mềm (hàm/lớp/gói). Kiểm thử và 
gỡ rối từng mô-đun 
5. Viết mô-đun chính của chương trình 
6. Kiểm thử và gỡ rối theo kịch bản 
5 
2.1. Thiết kế chương trình 
Các kỹ thuật thiết kế 
 Các cấp độ thiết kế 
 Level 1: Software System 
 Level 2: Division into Subsystems or Packages 
 Level 3: Division into Classes 
 Level 4: Division into Routines 
 Level 5: Internal Routine Design 
6 
3.1. Thiết kế chương trình 
Các kỹ thuật thiết kế/Design Practices 
1. Iterate 
2. Divide and Conquer 
3. Top-Down and Bottom-Up Design Approaches 
 Argument for Top Down 
 Argument for Bottom Up 
4. Experimental Prototyping 
5. Collaborative Design 
7 
2.1. Thiết kế chương trình 
Các quyết định quan trọng trong thiết kế: 
 Lựa chọn ngôn ngữ lập trình (Choice of 
Programming Language) 
 Các quy ước/quy định về lập trình 
(Programming Conventions) 
 Lựa chọn Technology Platform 
 Áp dụng các nguyên lý thiết kế và xây dựng 
chương trình (Selection of Major 
Construction Practices) 
8 
2.1. Thiết kế chương trình 
Một số điểm lưu ý: 
 Mỗi ngôn ngữ lập trình đều có điểm mạnh/yếu. Việc lựa chọn 
ngôn ngữ phùhợp là rất quan trọng 
 Cần đƣa ra các quy định/quy ƣớc về lập trình trƣớc khi bắt đầu 
lập trình 
 Cần áp dụng các nguyên lý thiết kế và xây dựng phù hợp trong 
từng dự án 
 Luôn đặt câu hỏi cho bản thân là các kỹ thuật lập trình tiêu 
biểu của từng công cụ là gì. Không phải kỹ thuật nào cũng áp 
dụng trong từng ngôn ngữ đƣợc. 
 Cần có lựa chọn công nghệ phù hợp với ứng dụng cần xây 
dựng. 
9 
Các câu hỏi thường xuyên (từ Code Complete) 
1. Coding (Developer) 
 Have you defined how much design will be done 
up front and how much will be done at the 
keyboard, while the code is being written? 
 Have you defined coding conventions for names, 
comments, and layout? 
 Have you defined specific coding practices that 
are implied by the architecture? 
 Have you identified your location on the 
technology wave and adjusted your approach to 
match? 
10 
2.1. Thiết kế chương trình 
2. Teamwork 
 Have you defined an integration procedure—that is, 
have you defined the specific steps a programmer 
must go through before checking code into the master 
sources? 
 Will programmers program in pairs, or individually, 
or some combination of the two? 
11 
2.1. Thiết kế chương trình 
3. Quality Assurance 
 Will programmers write test cases for their code 
before writing the code itself? 
 Will programmers write unit tests for their code 
regardless of whether they write them first or last? 
 Will programmers step through their code in the 
debugger before they check it in? 
 Will programmers integration-test their code before 
they check it in? 
 Will programmers review or inspect each other's 
code? 
12 
2.1. Thiết kế chương trình 
4. Tools 
 Have you selected a revision control tool? 
 Have you selected a language and language version or 
compiler version? 
 Have you selected a framework such as J2EE or 
Microsoft .NET or explicitly decided not to use a 
framework? 
 Have you decided whether to allow use of nonstandard 
language features? 
 Have you identified and acquired other tools you'll be 
using—editor, refactoring tool, debugger, test 
framework, syntax checker, and so on? 
13 
2.2. Các kỹ thuật xây dựng hàm/thủ tục 
1. Tại sao phải xây dựng hàm/thủ tục 
 Loại bỏ trùng mã/Avoid duplicate code 
 Hỗ trợ phân chia lớp/Support subclassing 
 Che dấu thứ tự thực hiện / Hide sequences 
 Tăng cƣờng chất lƣợng khả chuyển/ Improve 
portability 
 Tăng cƣờng hiệu quả thực thi / Improve 
performance 
14 
2.2. Các kỹ thuật xây dựng hàm/thủ tục 
2. Design at the Routine Level 
3. Good Routine Names 
4. How Long Can a Routine Be? 
5. How to Use Routine Parameters 
6. Special Considerations in the Use of 
Functions 
7. Macro Routines and Inline Routines 
15 
2.2. Các kỹ thuật xây dựng hàm/thủ tục 
 The most important reason for creating a routine is to 
improve the intellectual manageability of a program, and 
you can create a routine for many other good reasons. 
 Sometimes the operation that most benefits from being 
put into a routine of its own is a simple one. 
 You can classify routines into various kinds of cohesion, 
but you can make most routines functionally cohesive, 
which is best. 
 The name of a routine is an indication of its quality. 
 Functions should be used only when the primary 
purpose of the function is to return the specific value 
described by the function's name. 
 Careful programmers use macro routines with care and 
only as a last resort. 
16 
Các câu hỏi cần thiết khi xây dựng hàm/thủ tục (Code Complete) 
1. Big-Picture Issues 
 Is the reason for creating the routine sufficient? 
 Have all parts of the routine that would benefit from being put 
into routines of their own been put into routines of their own? 
 Is the routine's name a strong, clear verb-plus-object name for 
a procedure or a description of the return value for a function? 
 Does the routine's name describe everything the routine does? 
 Have you established naming conventions for common 
operations? 
 Does the routine have strong, functional cohesion—doing one 
and only one thing and doing it well? 
 Do the routines have loose coupling—are the routine's 
connections to other routines small, intimate, visible, and 
flexible? 
 Is the length of the routine determined naturally by its function 
and logic, rather than by an artificial coding standard? 
17 
Các câu hỏi cần thiết khi xây dựng hàm/thủ tục (Code Complete) 
2. Parameter-Passing Issues 
 Does the routine's parameter list, taken as a whole, 
present a consistent interface abstraction? 
 Are the routine's parameters in a sensible order, 
including matching the order of parameters in similar 
routines? 
 Are interface assumptions documented? 
 Does the routine have seven or fewer parameters? 
 Is each input parameter used? 
 Is each output parameter used? 
 Does the routine avoid using input parameters as 
working variables? 
 If the routine is a function, does it return a valid value 
under all possible circumstances? 
18 
2.3. Các kỹ thuật bẫy lỗi và lập trình phòng ngừa 
1. Đảm bảo loại bỏ lỗi nhập liệu 
Các quy tắc (Code Complete): 
- QT1. Check the values of all data from external 
sources 
- QT2. Check the values of all routine input parameters 
- QT3. Decide how to handle bad inputs 
19 
2.3. Các kỹ thuật bẫy lỗi và lập trình phòng ngừa 
1. Đảm bảo loại bỏ lỗi nhập liệu 
Các quy tắc (Code Complete): 
- QT1. Check the values of all data from external 
sources 
- QT2. Check the values of all routine input parameters 
- QT3. Decide how to handle bad inputs 
20 
2.3. Các kỹ thuật bẫy lỗi và lập trình phòng ngừa 
2. Assertions (kiểm soát/khẳng định) 
Định nghĩa: An assertion is code that's used during 
development—usually a routine or macro—that 
allows a program to check itself as it runs 
Các quy tắc (Code Complete): 
- QT1. Use error-handling code for conditions you 
expect to occur; use assertions for conditions that 
should never occur 
- QT2. Avoid putting executable code into assertions 
- QT3. Use assertions to document and verify 
preconditions and post-conditions 
21 
2.3. Các kỹ thuật bẫy lỗi và lập trình phòng ngừa 
2. Assertions (kiểm soát/khẳng định) 
 C++ Example of an Assertion Macro 
#define ASSERT( condition, message ) 
{ \ if ( !(condition) ) 
{ \ LogError( "Assertion failed: ", \ 
#condition, message ); 
\ exit( EXIT_FAILURE ); \ } \ } 

File đính kèm:

  • pdfCông nghệ phần mềm - Chương 2 Các kỹ thuật xây dựng phần mềm.pdf