Phương pháp lập trình - Hướng dẫn nhanh
Khi các chương trình được phát triển để giải quyết các vấn đề thực tế như quản lý hàng tồn kho, xử lý bảng lương, tuyển sinh, xử lý kết quả thi, v.v. thì chúng có xu hướng rất lớn và phức tạp. Cách tiếp cận để phân tích các vấn đề phức tạp như vậy, lập kế hoạch phát triển phần mềm và kiểm soát quá trình phát triển được gọi làprogramming methodology.
Các loại phương pháp lập trình
Có nhiều loại phương pháp lập trình phổ biến trong giới phát triển phần mềm -
Lập trình thủ tục
Vấn đề được chia thành các thủ tục hoặc các khối mã thực hiện một nhiệm vụ mỗi thứ. Tất cả các thủ tục được thực hiện cùng nhau tạo thành toàn bộ chương trình. Nó chỉ thích hợp cho các chương trình nhỏ có mức độ phức tạp thấp.
Example- Đối với một chương trình máy tính thực hiện các phép tính cộng, trừ, nhân, chia, căn bậc hai và so sánh, mỗi phép toán này có thể được phát triển thành các thủ tục riêng biệt. Trong chương trình chính, mỗi thủ tục sẽ được gọi trên cơ sở lựa chọn của người dùng.
Lập trình hướng đối tượng
Ở đây, giải pháp xoay quanh các thực thể hoặc đối tượng là một phần của vấn đề. Giải pháp đề cập đến cách lưu trữ dữ liệu liên quan đến các thực thể, cách các thực thể hoạt động và cách chúng tương tác với nhau để đưa ra một giải pháp gắn kết.
Example - Nếu chúng ta phải phát triển một hệ thống quản lý tiền lương, chúng ta sẽ có các thực thể như nhân viên, cơ cấu tiền lương, quy tắc nghỉ việc, ... xung quanh đó phải xây dựng giải pháp.
Lập trình chức năng
Ở đây, vấn đề, hoặc giải pháp mong muốn, được chia thành các đơn vị chức năng. Mỗi đơn vị thực hiện nhiệm vụ riêng và tự túc. Các đơn vị này sau đó được ghép lại với nhau để tạo thành giải pháp hoàn chỉnh.
Example - Xử lý bảng lương có thể có các đơn vị chức năng như duy trì dữ liệu nhân viên, tính lương cơ bản, tính lương gộp, xử lý nghỉ việc, xử lý trả nợ, v.v.
Lập trình logic
Ở đây vấn đề được chia nhỏ thành các đơn vị logic hơn là các đơn vị chức năng. Example:Trong hệ thống quản lý trường học, người dùng có các vai trò rất rõ ràng như giáo viên chủ nhiệm lớp, giáo viên bộ môn, trợ lý phòng thí nghiệm, điều phối viên, phụ trách học tập, ... Vì vậy, phần mềm có thể được chia thành các đơn vị tùy theo vai trò của người dùng. Mỗi người dùng có thể có giao diện, quyền hạn khác nhau, v.v.
Các nhà phát triển phần mềm có thể chọn một hoặc kết hợp nhiều hơn một trong các phương pháp này để phát triển một phần mềm. Lưu ý rằng trong mỗi phương pháp luận được thảo luận, vấn đề phải được chia thành các đơn vị nhỏ hơn. Để làm điều này, các nhà phát triển sử dụng bất kỳ cách nào trong hai cách tiếp cận sau:
- Cách tiếp cận từ trên xuống
- Cách tiếp cận từ dưới lên
Cách tiếp cận từ trên xuống hoặc theo mô-đun
Vấn đề được chia thành các đơn vị nhỏ hơn, có thể tiếp tục được chia thành các đơn vị thậm chí nhỏ hơn. Mỗi đơn vị được gọi làmodule. Mỗi mô-đun là một đơn vị tự cung tự cấp có mọi thứ cần thiết để thực hiện nhiệm vụ của nó.
Hình minh họa sau đây cho thấy một ví dụ về cách bạn có thể làm theo phương pháp mô-đun để tạo các mô-đun khác nhau trong khi phát triển chương trình xử lý tính lương.
Phương pháp tiếp cận từ dưới lên
Trong cách tiếp cận từ dưới lên, thiết kế hệ thống bắt đầu với các thành phần cấp thấp nhất, sau đó các thành phần này được kết nối với nhau để có được các thành phần cấp cao hơn. Quá trình này tiếp tục cho đến khi tạo ra một hệ thống phân cấp của tất cả các thành phần hệ thống. Tuy nhiên, trong kịch bản thực tế, rất khó để biết tất cả các thành phần cấp thấp nhất ngay từ đầu. Vì vậy, cách tiếp cận từ đáy lên chỉ được sử dụng cho những vấn đề rất đơn giản.
Chúng ta hãy xem xét các thành phần của một chương trình máy tính.
Quy trình phát triển phần mềm điển hình tuân theo các bước sau:
- Thu thập các yêu cầu
- Định nghĩa vấn đề
- Thiết kế hệ thống
- Implementation
- Testing
- Documentation
- Đào tạo và hỗ trợ
- Maintenance
Hai bước đầu tiên giúp nhóm hiểu vấn đề, bước đầu tiên quan trọng nhất để tìm ra giải pháp. Người chịu trách nhiệm thu thập yêu cầu, xác định vấn đề và thiết kế hệ thống được gọi làsystem analyst.
Thu thập các yêu cầu
Thông thường, khách hàng hoặc người dùng không thể xác định rõ ràng các vấn đề hoặc yêu cầu của họ. Họ có một ý tưởng mơ hồ về những gì họ muốn. Vì vậy các nhà phát triển hệ thống cần thu thập các yêu cầu của khách hàng để hiểu vấn đề cần được giải quyết, hoặc những gì cần được chuyển giao. Chỉ có thể hiểu chi tiết về vấn đề bằng cách hiểu đầu tiên về lĩnh vực kinh doanh mà giải pháp đang được phát triển. Một số câu hỏi chính giúp hiểu doanh nghiệp bao gồm:
- Những gì đang được thực hiện?
- Nó đang được thực hiện như thế nào?
- Tần suất của một nhiệm vụ là gì?
- Khối lượng của các quyết định hoặc giao dịch là gì?
- Những vấn đề đang gặp phải là gì?
Một số kỹ thuật giúp thu thập thông tin này là:
- Interviews
- Questionnaires
- Nghiên cứu tài liệu hệ thống hiện có
- Phân tích dữ liệu kinh doanh
Các nhà phân tích hệ thống cần tạo tài liệu yêu cầu rõ ràng và ngắn gọn nhưng kỹ lưỡng để xác định các yêu cầu SMART - cụ thể, có thể đo lường, được thống nhất, thực tế và dựa trên thời gian. Nếu không làm như vậy dẫn đến -
- Định nghĩa vấn đề không đầy đủ
- Mục tiêu chương trình không chính xác
- Làm việc lại để cung cấp kết quả cần thiết cho khách hàng
- Tăng chi phí
- Giao hàng chậm trễ
Do độ sâu của thông tin cần thiết, thu thập yêu cầu còn được gọi là detailed investigation.
Định nghĩa vấn đề
Sau khi thu thập các yêu cầu và phân tích chúng, vấn đề phải được nêu rõ ràng. Định nghĩa vấn đề phải nêu rõ ràng vấn đề hoặc vấn đề cần giải quyết. Có một tuyên bố vấn đề rõ ràng là cần thiết để -
- Xác định phạm vi dự án
- Giữ cho nhóm tập trung
- Giữ cho dự án đi đúng hướng
- Xác nhận rằng kết quả mong muốn đã đạt được khi kết thúc dự án
Thông thường, mã hóa được coi là phần thiết yếu nhất của bất kỳ quy trình phát triển phần mềm nào. Tuy nhiên, mã hóa chỉ là một phần của quá trình và thực sự có thể mất một lượng thời gian tối thiểu nếu hệ thống được thiết kế chính xác. Trước khi hệ thống có thể được thiết kế, một giải pháp phải được xác định cho vấn đề hiện tại.
Điều đầu tiên cần lưu ý về việc thiết kế một hệ thống là ban đầu người phân tích hệ thống có thể đưa ra nhiều giải pháp. Nhưng giải pháp cuối cùng hoặc sản phẩm chỉ có thể là một. Phân tích sâu về dữ liệu thu thập được trong giai đoạn thu thập yêu cầu có thể giúp đưa ra giải pháp duy nhất. Xác định đúng vấn đề cũng rất quan trọng để đi đến giải pháp.
Khi đối mặt với vấn đề có nhiều giải pháp, các nhà phân tích tìm đến các công cụ hỗ trợ trực quan như sơ đồ, sơ đồ luồng dữ liệu, sơ đồ mối quan hệ thực thể, v.v. để hiểu sâu từng giải pháp.
Chảy ra
Flowcharting là quá trình minh họa quy trình làm việc và luồng dữ liệu trong hệ thống thông qua các ký hiệu và sơ đồ. Nó là một công cụ quan trọng để hỗ trợ nhà phân tích hệ thống xác định giải pháp cho vấn đề. Nó mô tả các thành phần của hệ thống một cách trực quan.
Đây là những lợi thế của tăng áp -
Biểu diễn trực quan giúp hiểu logic chương trình
Chúng hoạt động như bản thiết kế để mã hóa chương trình thực tế
Lưu đồ rất quan trọng đối với tài liệu chương trình
Lưu đồ là một trợ giúp quan trọng trong quá trình bảo trì chương trình
Đây là những nhược điểm của tăng áp -
Không thể mô tả logic phức tạp bằng sơ đồ
Trong trường hợp có bất kỳ thay đổi nào về logic hoặc dữ liệu / luồng công việc, lưu đồ phải được vẽ lại hoàn toàn
Sơ đồ luồng dữ liệu
Sơ đồ luồng dữ liệu hoặc DFD là một biểu diễn đồ họa của luồng dữ liệu thông qua một hệ thống hoặc hệ thống con. Mỗi quy trình có luồng dữ liệu riêng và có các mức sơ đồ luồng dữ liệu. Mức 0 thể hiện dữ liệu đầu vào và đầu ra của toàn hệ thống. Sau đó, hệ thống được chia nhỏ thành các mô-đun và DFD mức 1 hiển thị luồng dữ liệu cho từng mô-đun riêng biệt. Các mô-đun có thể được chia nhỏ thành các mô-đun con nếu được yêu cầu và rút DFD cấp 2.
Mã giả
Sau khi hệ thống được thiết kế, nó được bàn giao cho người quản lý dự án để thực hiện, tức là viết mã. Việc viết mã thực tế của một chương trình được thực hiện bằng một ngôn ngữ lập trình mà chỉ những lập trình viên được đào tạo về ngôn ngữ đó mới có thể hiểu được. Tuy nhiên, trước khi mã hóa thực sự xảy ra, các nguyên tắc hoạt động cơ bản, luồng công việc và luồng dữ liệu của chương trình được viết bằng ký hiệu tương tự như ngôn ngữ lập trình được sử dụng. Kí hiệu như vậy được gọi làpseudocode.
Đây là một ví dụ về mã giả trong C ++. Người lập trình chỉ cần dịch từng câu lệnh sang cú pháp C ++ để lấy mã chương trình.
Xác định các phép toán
Tất cả các hướng dẫn cho máy tính cuối cùng được thực hiện dưới dạng các phép toán số học và logic ở cấp độ máy. Các thao tác này rất quan trọng vì chúng -
- Chiếm không gian bộ nhớ
- Dành thời gian thực hiện
- Xác định hiệu quả phần mềm
- Ảnh hưởng đến hiệu suất phần mềm tổng thể
Các nhà phân tích hệ thống cố gắng xác định tất cả các phép toán chính trong khi xác định giải pháp duy nhất cho vấn đề trong tầm tay.
Một vấn đề trong đời thực rất phức tạp và lớn lao. Nếu một giải pháp nguyên khối được phát triển, nó sẽ đặt ra những vấn đề sau:
Khó viết, thử nghiệm và triển khai một chương trình lớn
Việc sửa đổi sau khi sản phẩm cuối cùng được giao gần như là không thể
Bảo trì chương trình rất khó khăn
Một lỗi có thể khiến toàn bộ hệ thống ngừng hoạt động
Để khắc phục những vấn đề này, giải pháp nên được chia thành các phần nhỏ hơn gọi là modules. Kỹ thuật chia nhỏ một giải pháp lớn thành các mô-đun nhỏ hơn để dễ phát triển, thực hiện, sửa đổi và bảo trì được gọi làmodular technique lập trình hoặc phát triển phần mềm.
Ưu điểm của lập trình mô-đun
Lập trình mô-đun mang lại những lợi thế sau:
Cho phép phát triển nhanh hơn vì mỗi mô-đun có thể được phát triển song song
Các mô-đun có thể được sử dụng lại
Vì mỗi mô-đun sẽ được kiểm tra độc lập, việc kiểm tra nhanh hơn và mạnh mẽ hơn
Gỡ lỗi và bảo trì toàn bộ chương trình dễ dàng hơn
Các mô-đun nhỏ hơn và có mức độ phức tạp thấp hơn nên dễ hiểu
Xác định các mô-đun
Xác định các mô-đun trong một phần mềm là một nhiệm vụ khó hiểu vì không thể có một cách chính xác để làm như vậy. Dưới đây là một số gợi ý để xác định các mô-đun -
Nếu dữ liệu là yếu tố quan trọng nhất của hệ thống, hãy tạo các mô-đun xử lý dữ liệu liên quan.
Nếu dịch vụ do hệ thống cung cấp là đa dạng, hãy chia nhỏ hệ thống thành các phân hệ chức năng.
Nếu vẫn thất bại, hãy chia hệ thống thành các mô-đun logic theo hiểu biết của bạn về hệ thống trong giai đoạn thu thập yêu cầu.
Đối với mã hóa, mỗi mô-đun phải được chia nhỏ lại thành các mô-đun nhỏ hơn để dễ lập trình. Điều này một lần nữa có thể được thực hiện bằng cách sử dụng ba mẹo được chia sẻ ở trên, kết hợp với các quy tắc lập trình cụ thể. Ví dụ, đối với một ngôn ngữ lập trình hướng đối tượng như C ++ và Java, mỗi lớp với dữ liệu và phương thức của nó có thể tạo thành một mô-đun duy nhất.
Giải pháp từng bước
Để triển khai các mô-đun, quy trình xử lý của từng mô-đun phải được mô tả theo từng bước. Giải pháp từng bước có thể được phát triển bằng cách sử dụngalgorithms hoặc là pseudocodes. Cung cấp giải pháp từng bước mang lại những lợi thế sau:
Bất kỳ ai đọc giải pháp đều có thể hiểu cả vấn đề và giải pháp.
Đó là điều dễ hiểu như nhau bởi người lập trình và người không lập trình.
Trong quá trình viết mã, mỗi câu lệnh chỉ cần được chuyển đổi thành một câu lệnh chương trình.
Nó có thể là một phần của tài liệu và hỗ trợ trong việc bảo trì chương trình.
Các chi tiết ở cấp độ vi mô như tên mã định danh, các thao tác bắt buộc, v.v. được xử lý tự động
Hãy xem một ví dụ.
Cấu trúc điều khiển
Như bạn có thể thấy trong ví dụ trên, không nhất thiết phải chạy logic chương trình sequentially. Trong ngôn ngữ lập trình,control structuresđưa ra quyết định về luồng chương trình dựa trên các tham số đã cho. Chúng là những yếu tố rất quan trọng của bất kỳ phần mềm nào và phải được xác định trước khi bắt đầu viết mã.
Thuật toán và pseudocodes trợ giúp các nhà phân tích và lập trình trong việc xác định nơi cần có cấu trúc điều khiển.
Cấu trúc điều khiển có ba loại sau:
Cấu trúc kiểm soát quyết định
Cấu trúc kiểm soát quyết định được sử dụng khi bước tiếp theo được thực hiện phụ thuộc vào một tiêu chí. Tiêu chí này thường là một hoặc nhiều biểu thức Boolean phải được đánh giá. Biểu thức Boolean luôn đánh giá là "true" hoặc "false". Một tập hợp các câu lệnh được thực thi nếu tiêu chí là "đúng" và một tập hợp khác được thực thi nếu tiêu chí đánh giá là "sai". Ví dụ, câu lệnh if
Các cấu trúc kiểm soát lựa chọn
Cấu trúc điều khiển lựa chọn được sử dụng khi trình tự chương trình phụ thuộc vào câu trả lời cho một câu hỏi cụ thể. Ví dụ, một chương trình có nhiều tùy chọn cho người dùng. Câu lệnh được thực hiện tiếp theo sẽ phụ thuộc vào tùy chọn được chọn. Ví dụ,switch tuyên bố, case tuyên bố.
Cấu trúc điều khiển lặp / lặp lại
Cấu trúc điều khiển lặp được sử dụng khi một tập hợp các câu lệnh được lặp lại nhiều lần. Số lần lặp lại có thể được biết trước khi nó bắt đầu hoặc có thể phụ thuộc vào giá trị của một biểu thức. Ví dụ,for tuyên bố, while tuyên bố, do while tuyên bố, v.v.
Như bạn có thể thấy trong hình trên, cả cấu trúc lựa chọn và quyết định đều được thực hiện tương tự nhau trong một sơ đồ. Kiểm soát lựa chọn không là gì ngoài một loạt các tuyên bố quyết định được thực hiện tuần tự.
Dưới đây là một số ví dụ từ các chương trình để hiển thị cách các câu lệnh này hoạt động -
Một tập hợp hữu hạn các bước phải được tuân theo để giải quyết bất kỳ vấn đề nào được gọi là algorithm. Thuật toán thường được phát triển trước khi mã hóa thực sự được thực hiện. Nó được viết bằng ngôn ngữ giống như tiếng Anh để có thể dễ dàng hiểu được ngay cả những người không phải là lập trình viên.
Đôi khi các thuật toán được viết bằng cách sử dụng pseudocodes, tức là một ngôn ngữ tương tự như ngôn ngữ lập trình sẽ được sử dụng. Viết thuật toán để giải quyết một vấn đề mang lại những lợi thế sau:
Thúc đẩy giao tiếp hiệu quả giữa các thành viên trong nhóm
Cho phép phân tích vấn đề trong tầm tay
Hoạt động như kế hoạch chi tiết cho mã hóa
Hỗ trợ gỡ lỗi
Trở thành một phần của tài liệu phần mềm để tham khảo trong tương lai trong giai đoạn bảo trì
Đây là những đặc điểm của một thuật toán tốt và chính xác -
Có một bộ đầu vào
Các bước được xác định duy nhất
Có số bước hữu hạn
Tạo ra đầu ra mong muốn
Các thuật toán ví dụ
Đầu tiên chúng ta hãy lấy một ví dụ về một tình huống thực tế để tạo thuật toán. Đây là thuật toán để đi chợ mua bút.
Bước 4 trong thuật toán này tự nó là một nhiệm vụ hoàn chỉnh và thuật toán riêng có thể được viết cho nó. Bây giờ chúng ta hãy tạo một thuật toán để kiểm tra xem một số là số dương hay số âm.
Flowchartlà biểu diễn dạng sơ đồ trình tự các bước logic của chương trình. Lưu đồ sử dụng các hình dạng hình học đơn giản để mô tả các quy trình và các mũi tên để hiển thị các mối quan hệ và quy trình / luồng dữ liệu.
Biểu tượng lưu đồ
Đây là biểu đồ cho một số ký hiệu phổ biến được sử dụng trong các lưu đồ vẽ.
Biểu tượng | Tên ký hiệu | Mục đích |
---|---|---|
|
Băt đâu dưng | Được sử dụng ở đầu và cuối của thuật toán để hiển thị bắt đầu và kết thúc chương trình. |
|
Quá trình | Chỉ ra các quy trình giống như các phép toán. |
|
Đầu ra đầu vào | Được sử dụng để biểu thị đầu vào và đầu ra của chương trình. |
|
Phán quyết | Viết tắt của các tuyên bố quyết định trong một chương trình, trong đó câu trả lời thường là Có hoặc Không. |
|
Mũi tên | Hiển thị mối quan hệ giữa các hình dạng khác nhau. |
|
Trình kết nối trên trang | Kết nối hai hoặc nhiều phần của một sơ đồ trên cùng một trang. |
|
Trình kết nối ngoài trang | Kết nối hai phần của một sơ đồ được trải rộng trên các trang khác nhau. |
Hướng dẫn phát triển lưu đồ
Đây là một số điểm cần lưu ý khi phát triển sơ đồ -
Lưu đồ chỉ có thể có một biểu tượng bắt đầu và một điểm dừng
Các trình kết nối trên trang được tham chiếu bằng số
Các trình kết nối ngoài trang được tham chiếu bằng bảng chữ cái
Quy trình chung là từ trên xuống dưới hoặc từ trái sang phải
Các mũi tên không được cắt nhau
Lưu đồ mẫu
Đây là sơ đồ để đi chợ mua bút.
Đây là một sơ đồ để tính giá trị trung bình của hai số.
Như bạn đã biết, máy tính không có trí thông minh của riêng nó; nó chỉ đơn giản theo sauinstructions do người dùng đưa ra. Instructionslà các khối xây dựng của một chương trình máy tính và do đó là một phần mềm. Đưa ra các hướng dẫn rõ ràng là rất quan trọng để xây dựng một chương trình thành công. Là một lập trình viên hoặc nhà phát triển phần mềm, bạn nên có thói quen viết các hướng dẫn rõ ràng. Đây là hai cách để làm điều đó.
Sự rõ ràng của các biểu thức
Biểu thức trong chương trình là một chuỗi các toán tử và toán hạng để thực hiện một phép tính số học hoặc logic. Dưới đây là một số ví dụ về các biểu thức hợp lệ -
- So sánh hai giá trị
- Định nghĩa một biến, đối tượng hoặc lớp
- Tính toán số học sử dụng một hoặc nhiều biến
- Lấy dữ liệu từ cơ sở dữ liệu
- Cập nhật giá trị trong cơ sở dữ liệu
Viết các biểu thức rõ ràng là một kỹ năng phải được phát triển bởi mọi lập trình viên. Dưới đây là một số điểm cần lưu ý khi viết các biểu thức như vậy -
Kết quả rõ ràng
Đánh giá biểu thức phải cho một kết quả rõ ràng. Ví dụ, các toán tử đơn phân nên được sử dụng một cách thận trọng.
Tránh các biểu thức phức tạp
Đừng cố gắng đạt được nhiều thứ trong một biểu hiện duy nhất. Chia thành hai hoặc nhiều biểu thức vào thời điểm mọi thứ bắt đầu trở nên phức tạp.
Hướng dẫn đơn giản
Nó không chỉ dành cho máy tính mà bạn cần phải viết hướng dẫn rõ ràng. Bất kỳ ai đọc chương trình sau đó (ngay cả chính bạn !!) sẽ có thể hiểu những gì hướng dẫn đang cố gắng đạt được. Việc các lập trình viên không bị treo chương trình của riêng họ là điều rất bình thường khi họ truy cập lại nó sau một thời gian đã trôi qua. Điều này cho thấy rằng việc bảo trì và sửa đổi các chương trình như vậy sẽ khá khó khăn.
Viết hướng dẫn đơn giản giúp tránh vấn đề này. Dưới đây là một số mẹo để viết các hướng dẫn đơn giản -
Avoid clever instructions - Các hướng dẫn thông minh có thể không thông minh sau này nếu không ai có thể hiểu nó đúng cách.
One instruction per task - Cố gắng làm nhiều việc cùng một lúc sẽ làm phức tạp các hướng dẫn.
Use standards- Mọi ngôn ngữ đều có tiêu chuẩn của nó, hãy làm theo chúng. Hãy nhớ rằng bạn không làm việc một mình trong dự án; tuân theo các tiêu chuẩn dự án và hướng dẫn về mã hóa.
Trong chương này, chúng tôi sẽ trình bày cách viết một chương trình tốt. Nhưng trước khi làm điều đó, chúng ta hãy xem các đặc điểm của một chương trình tốt là gì -
Portable- Chương trình hoặc phần mềm phải chạy trên tất cả các máy tính cùng loại. Cùng loại, chúng tôi muốn nói một phần mềm được phát triển cho máy tính cá nhân sẽ chạy trên tất cả các PC. Hoặc một phần mềm được viết cho máy tính bảng phải chạy trên tất cả các máy tính bảng có thông số kỹ thuật phù hợp.
Efficient- Một phần mềm thực hiện các công việc được giao một cách nhanh chóng được cho là hiệu quả. Tối ưu hóa mã và tối ưu hóa bộ nhớ là một số cách để nâng cao hiệu quả chương trình.
Effective- Phần mềm sẽ hỗ trợ giải quyết vấn đề trong tầm tay. Một phần mềm làm được điều đó được cho là hiệu quả.
Reliable - Chương trình phải đưa ra cùng một đầu ra mỗi khi cùng một bộ đầu vào được đưa ra.
User friendly - Giao diện chương trình, các liên kết và biểu tượng có thể nhấp được, ... phải thân thiện với người dùng.
Self-documenting - Bất kỳ chương trình hoặc phần mềm nào có tên định danh, tên mô-đun, v.v. có thể tự mô tả do sử dụng tên rõ ràng.
Dưới đây là một số cách để viết các chương trình tốt.
Tên định danh thích hợp
Tên xác định bất kỳ biến, đối tượng, hàm, lớp hoặc phương thức nào được gọi là identifier. Đặt tên định danh thích hợp làm cho chương trình tự ghi lại. Điều này có nghĩa là tên của đối tượng sẽ cho biết nó làm gì hoặc nó lưu trữ thông tin gì. Hãy lấy một ví dụ về hướng dẫn SQL này:
Nhìn vào dòng 10. Nó cho bất kỳ ai đọc chương trình biết rằng ID, tên và số cuộn của học sinh sẽ được chọn. Tên của các biến làm cho điều này tự giải thích. Đây là một số mẹo để tạo tên định danh thích hợp -
Sử dụng nguyên tắc ngôn ngữ
Đừng ngại đặt tên dài để duy trì sự rõ ràng
Sử dụng chữ hoa và chữ thường
Không đặt cùng tên cho hai số nhận dạng ngay cả khi ngôn ngữ đó cho phép
Không đặt tên giống nhau cho nhiều số nhận dạng ngay cả khi chúng có phạm vi loại trừ lẫn nhau
Bình luận
Trong hình trên, nhìn vào dòng 8. Nó cho người đọc biết rằng vài dòng mã tiếp theo sẽ truy xuất danh sách học sinh có phiếu điểm sẽ được tạo. Dòng này không phải là một phần của mã mà chỉ được đưa ra để làm cho chương trình thân thiện hơn với người dùng.
Một biểu thức như vậy không được biên dịch nhưng được viết dưới dạng ghi chú hoặc giải thích cho người lập trình được gọi là comment. Nhìn vào các bình luận trong phân đoạn chương trình sau đây. Nhận xét bắt đầu bằng //.
Nhận xét có thể được chèn vào -
Mở đầu chương trình để giải thích mục tiêu của nó
Ở đầu và / hoặc cuối của khối logic hoặc khối chức năng
Ghi chú về các trường hợp đặc biệt hoặc ngoại lệ
Bạn nên tránh thêm các bình luận thừa vì điều đó có thể phản tác dụng bằng cách phá vỡ dòng mã trong khi đọc. Trình biên dịch có thể bỏ qua các bình luận và thụt lề nhưng người đọc có xu hướng đọc từng bình luận trong số đó.
Thụt lề
Khoảng cách của văn bản từ lề trái hoặc lề phải được gọi là indent. Trong các chương trình, thụt lề được sử dụng để phân tách các khối mã được phân tách một cách hợp lý. Đây là một ví dụ về phân đoạn chương trình được thụt lề:
Như bạn thấy, chương trình thụt lề dễ hiểu hơn. Luồng kiểm soát từfor loop đến if và quay lại forlà rất rõ ràng. Thụt lề đặc biệt hữu ích trong trường hợp cấu trúc điều khiển.
Chèn dấu cách hoặc dòng trống cũng là một phần của thụt lề. Dưới đây là một số tình huống mà bạn có thể và nên sử dụng tính năng thụt lề -
Dòng trống giữa các khối mã logic hoặc chức năng trong chương trình
Khoảng trống xung quanh các toán tử
Các tab ở đầu cấu trúc điều khiển mới
Xác định và loại bỏ lỗi khỏi chương trình hoặc phần mềm được gọi là debugging. Gỡ lỗi về mặt lý tưởng là một phần của quá trình thử nghiệm nhưng trên thực tế, nó được thực hiện ở mọi bước lập trình. Người viết mã nên gỡ lỗi mô-đun nhỏ nhất của họ trước khi tiếp tục. Điều này làm giảm số lượng lỗi phát sinh trong giai đoạn thử nghiệm và giảm đáng kể thời gian và nỗ lực thử nghiệm. Chúng ta hãy xem xét các loại lỗi có thể xuất hiện trong một chương trình.
Lỗi cú pháp
Syntax errorslà những lỗi ngữ pháp trong một chương trình. Mọi ngôn ngữ đều có bộ quy tắc riêng, như tạo mã định danh, viết biểu thức, v.v. để viết chương trình. Khi các quy tắc này bị vi phạm, các lỗi được gọi làsyntax errors. Nhiều hiện đạiintegrated development environmentscó thể xác định các lỗi cú pháp khi bạn nhập chương trình của mình. Khác, nó sẽ được hiển thị khi bạn biên dịch chương trình. Hãy để chúng tôi lấy một ví dụ -
Trong chương trình này, biến prod chưa được khai báo, biến này được trình biên dịch đưa lên.
Lỗi ngữ nghĩa
Semantic errors cũng được gọi là logical errors. Câu lệnh không có lỗi cú pháp, vì vậy nó sẽ biên dịch và chạy chính xác. Tuy nhiên, nó sẽ không cho đầu ra mong muốn vì logic không đúng. Chúng ta hãy lấy một ví dụ.
Nhìn vào dòng 13. Ở đây lập trình viên muốn kiểm tra xem số chia có phải là 0 hay không, để tránh chia cho 0. Tuy nhiên, thay vì sử dụng toán tử so sánh ==, toán tử gán = đã được sử dụng. Bây giờ mỗi khi biểu thức “if” sẽ đánh giá thành true và chương trình sẽ đưa ra kết quả là “Bạn không thể chia cho 0”. Chắc chắn không phải những gì dự định !!
Các lỗi logic không thể được phát hiện bởi bất kỳ chương trình nào; chúng phải được nhận dạng bởi chính lập trình viên khi không đạt được kết quả đầu ra mong muốn.
Lỗi thời gian chạy
Lỗi thời gian chạy là lỗi xảy ra trong khi thực hiện chương trình. Điều này ngụ ý rằng chương trình không có lỗi cú pháp. Một số lỗi thời gian chạy phổ biến nhất mà chương trình của bạn có thể gặp phải là:
- Vòng lặp vô hạn
- Chia cho '0'
- Giá trị do người dùng nhập sai (giả sử, chuỗi thay vì số nguyên)
Tối ưu hóa mã
Bất kỳ phương pháp nào mà mã được sửa đổi để cải thiện chất lượng và hiệu quả được gọi là code optimization. Code qualityxác định tuổi thọ của mã. Nếu mã có thể được sử dụng và duy trì trong một thời gian dài, được chuyển từ sản phẩm này sang sản phẩm khác, chất lượng của nó được coi là cao và tuổi thọ lâu hơn. Ngược lại, nếu một đoạn mã chỉ có thể được sử dụng và duy trì trong thời gian ngắn, chẳng hạn như cho đến khi một phiên bản còn hiệu lực, nó được coi là có chất lượng thấp và có tuổi thọ ngắn.
Độ tin cậy và tốc độ của mã quyết định code efficiency. Hiệu quả mã là một yếu tố quan trọng trong việc đảm bảo hiệu suất cao của một phần mềm.
Có hai cách tiếp cận để tối ưu hóa mã -
Intuition based optimization (IBO)- Ở đây lập trình viên cố gắng tối ưu hóa chương trình dựa trên kỹ năng và kinh nghiệm của chính mình. Điều này có thể hoạt động đối với các chương trình nhỏ nhưng không thành công khi độ phức tạp của chương trình tăng lên.
Evidence based optimization (EBO)- Tại đây các công cụ tự động được sử dụng để tìm ra các điểm nghẽn về hiệu suất và sau đó tối ưu hóa các phần có liên quan cho phù hợp. Mỗi ngôn ngữ lập trình đều có bộ công cụ tối ưu hóa mã riêng. Ví dụ, PMD, FindBug và Clover được sử dụng để tối ưu hóa mã Java.
Mã được tối ưu hóa cho thời gian thực thi và tiêu thụ bộ nhớ vì thời gian khan hiếm và bộ nhớ đắt tiền. Phải có sự cân bằng giữa hai điều này. Nếutime optimization tăng tải trên bộ nhớ hoặc memory optimization làm cho mã chậm hơn, mục đích tối ưu hóa sẽ bị mất.
Tối ưu hóa thời gian thực thi
Tối ưu hóa mã cho thời gian thực thi là cần thiết để cung cấp dịch vụ nhanh chóng cho người dùng. Dưới đây là một số mẹo để tối ưu hóa thời gian thực thi -
Sử dụng các lệnh có tích hợp tối ưu hóa thời gian thực thi
Sử dụng công tắc thay vì điều kiện if
Giảm thiểu các lệnh gọi hàm trong cấu trúc vòng lặp
Tối ưu hóa cấu trúc dữ liệu được sử dụng trong chương trình
Tối ưu hóa bộ nhớ
Như bạn đã biết, dữ liệu và hướng dẫn sử dụng bộ nhớ. Khi chúng ta nói dữ liệu, nó cũng đề cập đến dữ liệu tạm thời là kết quả của các biểu thức. Chúng tôi cũng cần theo dõi có bao nhiêu hướng dẫn đang tạo nên chương trình hoặc mô-đun mà chúng tôi đang cố gắng tối ưu hóa. Đây là một số mẹo chomemory optimization -
Sử dụng các lệnh có tối ưu hóa bộ nhớ tích hợp
Giữ cho việc sử dụng các biến cần được lưu trữ trong thanh ghi ở mức tối thiểu
Tránh khai báo các biến toàn cục bên trong các vòng lặp được thực thi nhiều lần
Tránh sử dụng các hàm chuyên sâu của CPU như sqrt ()
Bất kỳ văn bản, hình ảnh minh họa hoặc video nào mô tả một phần mềm hoặc chương trình cho người dùng của nó được gọi là program or software document. Người dùng có thể là bất kỳ ai từ lập trình viên, nhà phân tích hệ thống và quản trị viên đến người dùng cuối. Ở các giai đoạn phát triển khác nhau, nhiều tài liệu có thể được tạo cho những người dùng khác nhau. Trong thực tế,software documentation là một quá trình quan trọng trong quá trình phát triển phần mềm tổng thể.
Trong tài liệu lập trình mô-đun thậm chí còn trở nên quan trọng hơn vì các mô-đun khác nhau của phần mềm được phát triển bởi các nhóm khác nhau. Nếu bất kỳ ai khác ngoài nhóm phát triển muốn hoặc cần hiểu một mô-đun, tài liệu tốt và chi tiết sẽ làm cho nhiệm vụ dễ dàng hơn.
Đây là một số hướng dẫn để tạo tài liệu -
Tài liệu phải từ quan điểm của người đọc
Tài liệu phải rõ ràng
Không nên lặp lại
Các tiêu chuẩn công nghiệp nên được sử dụng
Tài liệu phải luôn được cập nhật
Bất kỳ tài liệu lỗi thời nào nên được loại bỏ sau khi ghi lại quá trình loại bỏ
Ưu điểm của Tài liệu
Đây là một số lợi thế của việc cung cấp tài liệu chương trình -
Theo dõi tất cả các phần của một phần mềm hoặc chương trình
Bảo trì dễ dàng hơn
Các lập trình viên không phải là nhà phát triển có thể hiểu tất cả các khía cạnh của phần mềm
Cải thiện chất lượng tổng thể của phần mềm
Hỗ trợ đào tạo người dùng
Đảm bảo không tập trung hóa kiến thức, cắt giảm chi phí và nỗ lực nếu mọi người rời khỏi hệ thống đột ngột
Tài liệu Ví dụ
Một phần mềm có thể có nhiều loại tài liệu liên kết với nó. Một số điều quan trọng bao gồm:
User manual - Nó mô tả các hướng dẫn và thủ tục để người dùng cuối sử dụng các tính năng khác nhau của phần mềm.
Operational manual - Nó liệt kê và mô tả tất cả các hoạt động đang được thực hiện và sự phụ thuộc lẫn nhau của chúng.
Design Document- Nó giới thiệu tổng quan về phần mềm và mô tả chi tiết các yếu tố thiết kế. Nó ghi chi tiết nhưdata flow diagrams, entity relationship diagrams, Vân vân.
Requirements Document- Nó có một danh sách tất cả các yêu cầu của hệ thống cũng như phân tích khả năng tồn tại của các yêu cầu. Nó có thể có các trường hợp người dùng, các tình huống thực tế, v.v.
Technical Documentation - Nó là tài liệu về các thành phần lập trình thực tế như thuật toán, sơ đồ, mã chương trình, mô-đun chức năng, v.v.
Testing Document - Nó ghi lại kế hoạch kiểm thử, các trường hợp kiểm thử, kế hoạch xác nhận, kế hoạch xác minh, kết quả kiểm tra, v.v. Kiểm thử là một giai đoạn phát triển phần mềm cần tài liệu chuyên sâu.
List of Known Bugs- Mọi phần mềm đều có lỗi hoặc lỗi không thể loại bỏ được vì chúng được phát hiện rất muộn hoặc vô hại hoặc sẽ tốn nhiều công sức và thời gian hơn mức cần thiết để sửa chữa. Những lỗi này được liệt kê cùng với tài liệu chương trình để chúng có thể được gỡ bỏ vào một ngày sau đó. Ngoài ra, họ cũng giúp người dùng, người triển khai và người bảo trì nếu lỗi được kích hoạt.
Program maintenance là quá trình sửa đổi phần mềm hoặc chương trình sau khi phân phối để đạt được bất kỳ kết quả nào sau đây -
- Sửa lỗi
- Cải thiện hiệu quả làm việc
- Thêm chức năng
- Loại bỏ các phần lỗi thời
Mặc dù nhận thức chung rằng cần phải bảo trì để sửa các lỗi phát sinh sau khi phần mềm đi vào hoạt động, trên thực tế, hầu hết các công việc bảo trì đều liên quan đến việc thêm các khả năng nhỏ hoặc chính vào các mô-đun hiện có. Ví dụ: một số dữ liệu mới được thêm vào báo cáo, trường mới được thêm vào biểu mẫu nhập, mã được sửa đổi để kết hợp các luật của chính phủ đã thay đổi, v.v.
Các loại bảo trì
Các hoạt động bảo trì có thể được phân loại theo bốn tiêu đề:
Corrective maintenance- Tại đây các lỗi phát sinh sau khi thực hiện tại chỗ đã được sửa. Các lỗi có thể do người dùng tự chỉ ra.
Preventive maintenance - Các sửa đổi được thực hiện để tránh lỗi trong tương lai được gọi là bảo trì phòng ngừa.
Adaptive maintenance- Những thay đổi trong môi trường làm việc đôi khi cần có những sửa đổi trong phần mềm. Đây được gọi là bảo trì thích ứng. Ví dụ, nếu chính sách giáo dục của chính phủ thay đổi, các thay đổi tương ứng phải được thực hiện trong mô-đun xử lý kết quả học sinh của phần mềm quản lý trường học.
Perfective maintenance- Những thay đổi được thực hiện trong phần mềm hiện có để kết hợp các yêu cầu mới từ khách hàng được gọi là bảo trì hoàn hảo. Mục tiêu ở đây là luôn cập nhật công nghệ mới nhất.
Công cụ bảo trì
Các nhà phát triển phần mềm và lập trình viên sử dụng nhiều công cụ để hỗ trợ họ trong việc bảo trì phần mềm. Dưới đây là một số cách được sử dụng rộng rãi nhất -
Program slicer - chọn một phần của chương trình sẽ bị ảnh hưởng bởi sự thay đổi
Data flow analyzer - theo dõi tất cả các luồng dữ liệu có thể có trong phần mềm
Dynamic analyzer - dấu vết đường dẫn thực thi chương trình
Static analyzer - cho phép xem tổng quát và tóm tắt chương trình
Dependency analyzer - hỗ trợ hiểu và phân tích sự phụ thuộc lẫn nhau của các phần khác nhau của chương trình