Triển khai phần mềm
Trong chương này, chúng ta sẽ nghiên cứu về các phương pháp lập trình, tài liệu và những thách thức trong việc triển khai phần mềm.
Lập trình có cấu trúc
Trong quá trình mã hóa, các dòng mã liên tục nhân lên, do đó, kích thước của phần mềm tăng lên. Dần dần, nó trở nên không thể nhớ dòng chương trình. Nếu một người quên cách phần mềm và các chương trình, tệp, thủ tục cơ bản của nó được xây dựng thì sẽ rất khó chia sẻ, gỡ lỗi và sửa đổi chương trình. Giải pháp cho điều này là lập trình có cấu trúc. Nó khuyến khích nhà phát triển sử dụng các chương trình con và vòng lặp thay vì sử dụng các bước nhảy đơn giản trong mã, do đó mang lại sự rõ ràng trong mã và nâng cao hiệu quả của nó. Lập trình có cấu trúc cũng giúp lập trình viên giảm thời gian viết mã và tổ chức mã hợp lý.
Lập trình có cấu trúc cho biết chương trình sẽ được mã hóa như thế nào. Lập trình có cấu trúc sử dụng ba khái niệm chính:
Top-down analysis- Một phần mềm luôn được tạo ra để thực hiện một số công việc hợp lý. Công việc hợp lý này được gọi là vấn đề trong cách nói của phần mềm. Vì vậy, điều rất quan trọng là chúng ta phải hiểu cách giải quyết vấn đề. Theo phân tích từ trên xuống, vấn đề được chia thành nhiều phần nhỏ mà mỗi phần đều có ý nghĩa nhất định. Mỗi vấn đề được giải quyết riêng lẻ và các bước được nêu rõ ràng về cách giải quyết vấn đề.
Modular Programming- Trong khi lập trình, mã được chia thành các nhóm lệnh nhỏ hơn. Các nhóm này được gọi là mô-đun, chương trình con hoặc chương trình con. Lập trình mô-đun dựa trên sự hiểu biết về phân tích từ trên xuống. Nó không khuyến khích việc nhảy bằng câu lệnh 'goto' trong chương trình, điều này thường làm cho dòng chương trình không thể theo dõi. Nhảy bị cấm và định dạng mô-đun được khuyến khích trong lập trình có cấu trúc.
Structured Coding - Tham chiếu với phân tích từ trên xuống, mã hóa có cấu trúc chia nhỏ các mô-đun thành các đơn vị mã nhỏ hơn theo thứ tự thực thi của chúng. Lập trình có cấu trúc sử dụng cấu trúc điều khiển, điều khiển luồng chương trình, trong khi mã hóa có cấu trúc sử dụng cấu trúc điều khiển để tổ chức các lệnh của nó theo các mẫu có thể xác định được.
Lập trình chức năng
Lập trình hàm là phong cách của ngôn ngữ lập trình, sử dụng các khái niệm của các hàm toán học. Một hàm trong toán học phải luôn tạo ra cùng một kết quả khi nhận cùng một đối số. Trong các ngôn ngữ thủ tục, luồng chương trình chạy qua các thủ tục, tức là quyền điều khiển chương trình được chuyển sang thủ tục được gọi. Trong khi luồng điều khiển đang chuyển từ thủ tục này sang thủ tục khác, chương trình sẽ thay đổi trạng thái của nó.
Trong lập trình thủ tục, một thủ tục có thể tạo ra các kết quả khác nhau khi nó được gọi với cùng một đối số, vì bản thân chương trình có thể ở trạng thái khác khi gọi nó. Đây là một thuộc tính cũng như một nhược điểm của lập trình thủ tục, trong đó trình tự hoặc thời gian thực hiện thủ tục trở nên quan trọng.
Lập trình hàm cung cấp các phương tiện tính toán như các hàm toán học, tạo ra kết quả bất kể trạng thái chương trình. Điều này làm cho nó có thể dự đoán hành vi của chương trình.
Lập trình hàm sử dụng các khái niệm sau:
First class and High-order functions - Các hàm này có khả năng chấp nhận một hàm khác làm đối số hoặc chúng trả về các hàm khác dưới dạng kết quả.
Pure functions - Các chức năng này không bao gồm các cập nhật phá hoại, nghĩa là chúng không ảnh hưởng đến bất kỳ I / O hoặc bộ nhớ nào và nếu chúng không được sử dụng, chúng có thể dễ dàng bị xóa mà không cản trở phần còn lại của chương trình.
Recursion- Đệ quy là một kỹ thuật lập trình trong đó một hàm gọi chính nó và lặp lại mã chương trình trong đó trừ khi một số điều kiện xác định trước phù hợp. Đệ quy là cách tạo vòng lặp trong lập trình hàm.
Strict evaluation- Nó là một phương pháp đánh giá biểu thức được truyền cho một hàm như một đối số. Lập trình chức năng có hai loại phương pháp đánh giá, nghiêm ngặt (háo hức) hoặc không nghiêm ngặt (lười biếng). Đánh giá nghiêm ngặt luôn đánh giá biểu thức trước khi gọi hàm. Đánh giá không nghiêm ngặt không đánh giá biểu hiện trừ khi nó là cần thiết.
λ-calculus- Hầu hết các ngôn ngữ lập trình hàm sử dụng λ-tích làm hệ thống kiểu của chúng. Biểu thức λ được thực thi bằng cách đánh giá chúng khi chúng xuất hiện.
Lisp, Scala, Haskell, Erlang và F # là một số ví dụ về ngôn ngữ lập trình chức năng.
Phong cách lập trình
Phong cách lập trình là tập hợp các quy tắc mã hóa được tuân theo bởi tất cả các lập trình viên để viết mã. Khi nhiều lập trình viên làm việc trên cùng một dự án phần mềm, họ thường xuyên phải làm việc với mã chương trình do một số nhà phát triển khác viết. Điều này trở nên tẻ nhạt hoặc đôi khi là không thể, nếu tất cả các nhà phát triển không tuân theo một số phong cách lập trình tiêu chuẩn để viết mã chương trình.
Một phong cách lập trình thích hợp bao gồm sử dụng hàm và tên biến có liên quan đến nhiệm vụ dự định, sử dụng thụt lề được đặt đúng vị trí, mã chú thích để thuận tiện cho người đọc và trình bày tổng thể mã. Điều này làm cho mã chương trình có thể đọc được và hiểu được bởi tất cả mọi người, do đó làm cho việc gỡ lỗi và giải quyết lỗi dễ dàng hơn. Ngoài ra, phong cách mã hóa phù hợp giúp dễ dàng cập nhật và lập tài liệu.
Nguyên tắc mã hóa
Thực hành về phong cách mã hóa thay đổi tùy theo tổ chức, hệ điều hành và ngôn ngữ viết mã.
Các yếu tố mã hóa sau đây có thể được xác định theo hướng dẫn mã hóa của một tổ chức:
Naming conventions - Phần này định nghĩa cách đặt tên cho hàm, biến, hằng và biến toàn cục.
Indenting - Đây là khoảng trống ở đầu dòng, thường là 2-8 khoảng trắng hoặc tab đơn.
Whitespace - Nó thường bị bỏ qua ở cuối dòng.
Operators- Nêu quy tắc viết toán tử, phép gán và toán tử logic. Ví dụ, toán tử gán '=' phải có khoảng trắng trước và sau nó, như trong “x = 2”.
Control Structures - Các quy tắc viết if-then-else, case-switch, while-Until và cho các câu lệnh luồng điều khiển chỉ và theo kiểu lồng nhau.
Line length and wrapping- Xác định có bao nhiêu ký tự trong một dòng, chủ yếu là một dòng dài 80 ký tự. Wrapping xác định cách một dòng sẽ được quấn, nếu quá dài.
Functions - Điều này xác định cách các hàm nên được khai báo và gọi, có và không có tham số.
Variables - Điều này đề cập đến cách các biến của các kiểu dữ liệu khác nhau được khai báo và định nghĩa.
Comments- Đây là một trong những thành phần mã hóa quan trọng, vì các chú thích trong mã mô tả những gì mã thực sự làm và tất cả các mô tả liên quan khác. Phần này cũng giúp tạo tài liệu trợ giúp cho các nhà phát triển khác.
Tài liệu phần mềm
Tài liệu phần mềm là một phần quan trọng của quy trình phần mềm. Một tài liệu được viết tốt cung cấp một công cụ tuyệt vời và phương tiện lưu trữ thông tin cần thiết để biết về quy trình phần mềm. Tài liệu phần mềm cũng cung cấp thông tin về cách sử dụng sản phẩm.
Một tài liệu được duy trì tốt phải bao gồm các tài liệu sau:
Requirement documentation - Tài liệu này hoạt động như một công cụ chính cho nhà thiết kế phần mềm, nhà phát triển và nhóm thử nghiệm để thực hiện các nhiệm vụ tương ứng của họ. Tài liệu này chứa tất cả các mô tả chức năng, phi chức năng và hành vi của phần mềm dự kiến.
Nguồn của tài liệu này có thể được lưu trữ trước đó dữ liệu về phần mềm, phần mềm đã chạy ở cuối khách hàng, cuộc phỏng vấn của khách hàng, bảng câu hỏi và nghiên cứu. Nói chung nó được lưu trữ dưới dạng bảng tính hoặc tài liệu xử lý văn bản với nhóm quản lý phần mềm cao cấp.
Tài liệu này làm nền tảng cho phần mềm được phát triển và chủ yếu được sử dụng trong các giai đoạn xác minh và xác nhận. Hầu hết các trường hợp thử nghiệm được xây dựng trực tiếp từ tài liệu yêu cầu.
Software Design documentation - Các tài liệu này chứa tất cả các thông tin cần thiết, cần thiết để xây dựng phần mềm. Nó chứa:(a) Kiến trúc phần mềm cấp cao, (b) Chi tiết thiết kế phần mềm, (c) Sơ đồ luồng dữ liệu, (d) Thiết kế cơ sở dữ liệu
Các tài liệu này hoạt động như một kho lưu trữ cho các nhà phát triển để triển khai phần mềm. Mặc dù các tài liệu này không cung cấp bất kỳ chi tiết nào về cách viết mã chương trình, nhưng chúng cung cấp tất cả các thông tin cần thiết cần thiết cho việc viết mã và triển khai.
Technical documentation- Các tài liệu này được duy trì bởi các nhà phát triển và lập trình viên thực tế. Nhìn chung, các tài liệu này đại diện cho thông tin về mã. Trong khi viết mã, các lập trình viên cũng đề cập đến mục tiêu của mã, ai đã viết nó, nó sẽ được yêu cầu ở đâu, nó làm gì và nó hoạt động như thế nào, những tài nguyên nào khác mà mã sử dụng, v.v.
Tài liệu kỹ thuật làm tăng sự hiểu biết giữa các lập trình viên khác nhau làm việc trên cùng một mã. Nó nâng cao khả năng tái sử dụng của mã. Nó giúp cho việc gỡ lỗi trở nên dễ dàng và có thể theo dõi.
Có sẵn nhiều công cụ tự động khác nhau và một số đi kèm với chính ngôn ngữ lập trình. Ví dụ, java có công cụ JavaDoc để tạo tài liệu kỹ thuật về mã.
User documentation- Tài liệu này khác với tất cả những gì đã giải thích ở trên. Tất cả các tài liệu trước đó được duy trì để cung cấp thông tin về phần mềm và quá trình phát triển của nó. Nhưng tài liệu hướng dẫn sử dụng giải thích cách sản phẩm phần mềm hoạt động và cách sử dụng nó để có được kết quả mong muốn.
Các tài liệu này có thể bao gồm, quy trình cài đặt phần mềm, hướng dẫn cách thực hiện, hướng dẫn sử dụng, phương pháp gỡ cài đặt và các tài liệu tham khảo đặc biệt để có thêm thông tin như cập nhật giấy phép, v.v.
Thách thức triển khai phần mềm
Có một số thách thức mà nhóm phát triển phải đối mặt trong khi triển khai phần mềm. Một số trong số chúng được đề cập dưới đây:
Code-reuse- Giao diện lập trình của các ngôn ngữ ngày nay rất phức tạp và được trang bị các chức năng thư viện khổng lồ. Tuy nhiên, để giảm giá thành của sản phẩm cuối cùng, ban quản lý tổ chức muốn sử dụng lại mã, mã đã được tạo trước đó cho một số phần mềm khác. Có rất nhiều vấn đề mà các lập trình viên phải đối mặt để kiểm tra tính tương thích và quyết định sử dụng lại bao nhiêu mã.
Version Management- Mỗi khi một phần mềm mới được phát hành cho khách hàng, các nhà phát triển phải duy trì phiên bản và tài liệu liên quan đến cấu hình. Tài liệu này cần phải có độ chính xác cao và có sẵn đúng hạn.
Target-Host- Chương trình phần mềm đang được phát triển trong tổ chức cần được thiết kế cho các máy chủ ở cuối khách hàng. Nhưng đôi khi, không thể thiết kế một phần mềm hoạt động trên các máy mục tiêu.