Thiết kế kiến trúc phần mềm

Kiến trúc của một hệ thống phần mềm (Software Architecture) mô tả các thành phần chính của nó, các mối quan hệ của các thành phần và cách chúng tương tác với nhau.

Kiến trúc phần mềm và thiết kế phần mềm phụ thuộc một số yếu tố như Chiến lược kinh doanh, thuộc tính chất lượng, nguồn nhân lực, thiết kế và môi trường CNTT.

Chúng ta có thể tách Kiến trúc và Thiết kế phần mềm thành hai giai đoạn riêng biệt: Kiến trúc phần mềm và Thiết kế phần mềm.

Trong Kiến trúc phần mềm, các quyết định phi chức năng được đúc kết và tách biệt bởi các yêu cầu chức năng.

Trong Thiết kế phần mềm, các yêu cầu chức năng được hoàn thành.

Kiến trúc phần mềm (Software Architecture)

Kiến trúc đóng vai trò như một bản thiết kế cho một hệ thống . Nó cung cấp một sự trừu tượng để quản lý độ phức tạp của hệ thống và thiết lập một cơ chế giao tiếp và phối hợp giữa các thành phần.

Nó xác định một giải pháp có cấu trúc để đáp ứng tất cả các yêu cầu kỹ thuật và vận hành, đồng thời tối ưu hóa các thuộc tính chất lượng chung như hiệu suất và bảo mật.Hơn nữa, nó liên quan đến một tập hợp các quyết định quan trọng về tổ chức liên quan đến phát triển phần mềm và mỗi quyết định này có thể có tác động đáng kể đến chất lượng, khả năng bảo trì, hiệu suất và sự thành công chung của sản phẩm cuối cùng.

Những quyết định này bao gồm:

Lựa chọn các phần tử cấu trúc và các giao diện của chúng mà hệ thống được cấu thành.Hành vi như được chỉ định trong sự hợp tác giữa các yếu tố đó.Các yếu tố cấu trúc và hành vi này kết hợp thành hệ thống con lớn.Các quyết định về kiến ​​trúc phù hợp với các mục tiêu kinh doanh.Phong cách kiến ​​trúc hướng dẫn tổ chức.

Thiết kế phần mềm (Software Design)

Thiết kế phần mềm cung cấp một kế hoạch thiết kế mô tả các phần tử của hệ thống, cách chúng phù hợp và làm việc cùng nhau để đáp ứng yêu cầu của hệ thống. Các mục tiêu là:

  • Để dễ dàng thương lượng các yêu cầu phần mềm và khoanh vùng phạm vi kỳ vọng với khách hàng, nhân viên tiếp thị và quản lý.
  • Đóng vai trò như một bản thiết kế chuẩn dùng làm quy chiếu cho toàn bộ quá trình phát triển.
  • Hướng dẫn các tác vụ triển khai, bao gồm thiết kế chi tiết, mã hóa, tích hợp và thử nghiệm.
     

Quy trình xây dựng Software Architecture được triển khai trước khi thiết kế chi tiết, viết code, tích hợp và thử nghiệm, và là khâu thứ hai sau khi đã phân tích nghiệp vụ, phân tích yêu cầu và phân tích rủi ro.

Mục tiêu của Software Architecture

Mục tiêu

Mục tiêu chính của Software Architecture là xác định các yêu cầu ảnh hưởng đến cấu trúc của ứng dụng. Một kiến ​​trúc bài bản giúp giảm rủi ro liên quan đến việc xây dựng giải pháp kỹ thuật và xây dựng cầu nối giữa yêu cầu nghiệp vụ và kỹ thuật.

Một số mục tiêu khác như sau:

  • Đưa ra cấu trúc của hệ thống, nhưng ẩn các chi tiết triển khai của nó.
  • Nhận ra tất cả các trường hợp sử dụng và tình huống sử dụng.
  • Cố gắng giải quyết các yêu cầu của các bên liên quan khác nhau.
  • Xử lý cả các yêu cầu về chức năng và chất lượng.
  • Cải thiện chất lượng và chức năng của hệ thống
  • Tăng uy tín cho hệ thống phần mềm trước các đối tác.

Hạn chế

Kiến trúc phần mềm vẫn là một ngành học mới trong ngành kỹ thuật phần mềm. Tuy vậy nó có những hạn chế sau:

  • Thiếu các công cụ và cách thức tiêu chuẩn hóa để biểu diễn kiến ​​trúc.
  • Thiếu các phương pháp phân tích để dự đoán liệu kiến ​​trúc có dẫn đến việc triển khai đáp ứng các yêu cầu hay không.
  • Thiếu nhận thức về tầm quan trọng của thiết kế kiến ​​trúc đối với phát triển phần mềm.
  • Thiếu hiểu biết về vai trò của kiến ​​trúc sư phần mềm và giao tiếp kém giữa các bên liên quan.
  • Thiếu hiểu biết về quy trình thiết kế, kinh nghiệm thiết kế và đánh giá thiết kế.

Vai trò của kiến ​​trúc sư phần mềm (Software Architect)

Kiến trúc sư phần mềm cung cấp giải pháp mà nhóm kỹ thuật có thể tạo và thiết kế cho toàn bộ ứng dụng. Một kiến ​​trúc sư phần mềm nên có chuyên môn trong các lĩnh vực sau:

Chuyên môn thiết kế

Chuyên môn về thiết kế phần mềm, bao gồm các phương pháp và cách tiếp cận đa dạng như thiết kế hướng đối tượng, thiết kế hướng sự kiện, v.v. Lãnh đạo nhóm phát triển và điều phối các nỗ lực phát triển vì tính toàn vẹn của thiết kế. Nên có thể xem xét các đề xuất thiết kế và đánh đổi giữa chúng.

Chuyên môn về nghiệp vụ (business domain)

Bao gồm chuyên môn về hệ thống được phát triển và lập kế hoạch phát triển phần mềm. Hỗ trợ trong quá trình điều tra yêu cầu, đảm bảo tính đầy đủ và nhất quán. Phối hợp định nghĩa mô hình miền (business domain) cho hệ thống đang được phát triển.

Chuyên môn công nghệ

Chuyên môn về các công nghệ sẵn có giúp triển khai hệ thống.Phối hợp lựa chọn ngôn ngữ lập trình, khuôn khổ, nền tảng, cơ sở dữ liệu, v.v.

Chuyên môn về mô hình, quy trình phát triển

  • Chuyên môn về các phương pháp luận phát triển phần mềm có thể được áp dụng trong SDLC (Software Development Life Cycle - Vòng đời phát triển phần mềm).
  • Chọn các cách tiếp cận thích hợp để phát triển giúp ích cho toàn bộ nhóm.

Vai trò tiềm ẩn của Software Architect

Tạo điều kiện thuận lợi cho công việc kỹ thuật giữa các thành viên trong nhóm và củng cố mối quan hệ tin cậy trong nhóm.Chuyên gia thông tin chia sẻ kiến ​​thức và có nhiều kinh nghiệm.Bảo vệ các thành viên trong nhóm khỏi các lực lượng bên ngoài có thể làm họ mất tập trung và mang lại ít giá trị hơn cho dự án.

Sản phẩm của Software Architect

  • Tập hợp các mục tiêu chức năng rõ ràng, đầy đủ, nhất quán và có thể đạt được
  • Mô tả chức năng của hệ thống.
  • Khái niệm và các thuật ngữ (glossary) của hệ thống.
  • Mô tả thiết kế dưới dạng hệ thống.
  • Khái niệm về thời gian, các thuộc tính của người vận hành và các kế hoạch thực hiện và hoạt động.
  • Một tài liệu hoặc quy trình đảm bảo tuân theo sự phân rã chức năng và hình thức giao diện được kiểm soát.

Thuộc tính chất lượng

Chất lượng là thước đo sự xuất sắc hoặc trạng thái không có thiếu sót hoặc khiếm khuyết. Thuộc tính chất lượng là các thuộc tính của hệ thống tách biệt với chức năng của hệ thống.

Việc triển khai các thuộc tính chất lượng giúp dễ dàng phân biệt hệ thống tốt với hệ thống xấu. Thuộc tính là các yếu tố tổng thể ảnh hưởng đến thời gian chạy, thiết kế hệ thống và trải nghiệm người dùng.

Chúng có thể được phân loại là:

  • Thuộc tính chất lượng tĩnh.
  • Thuộc tính chất lượng động.

Thuộc tính chất lượng tĩnh

Phản ánh cấu trúc của một hệ thống và tổ chức, liên quan trực tiếp đến kiến ​​trúc, thiết kế và mã nguồn. Chúng vô hình đối với người dùng cuối, nhưng ảnh hưởng đến chi phí phát triển và bảo trì, ví dụ: tính mô-đun, khả năng kiểm tra, khả năng bảo trì, v.v.

Thuộc tính chất lượng động

Phản ánh hành vi của hệ thống trong quá trình thực thi. Chúng liên quan trực tiếp đến kiến ​​trúc, thiết kế, mã nguồn, cấu hình, tham số triển khai, môi trường và nền tảng của hệ thống.

Chúng được hiển thị cho người dùng cuối và tồn tại trong thời gian chạy, ví dụ như thông lượng, độ mạnh mẽ, khả năng mở rộng, v.v.

Kịch bản chất lượng

Các kịch bản chất lượng chỉ rõ cách ngăn lỗi trở thành lỗi. Chúng có thể được chia thành sáu phần dựa trên đặc điểm thuộc tính của chúng:

  • Source - Một thực thể bên trong hoặc bên ngoài như con người, phần cứng, phần mềm hoặc cơ sở hạ tầng vật lý tạo ra tác động.
  • Stimulus - Một điều kiện cần được xem xét khi nó xuất hiện trên một hệ thống.
  • Environment - Tác động xảy ra trong những điều kiện nhất định.
  • Artifact - Toàn bộ hệ thống hoặc một số phần của nó như bộ xử lý, kênh giao tiếp, lưu trữ liên tục, quy trình, v.v.
  • Response - Một hoạt động được thực hiện sau khi xuất hiện tác động như phát hiện lỗi, khôi phục lỗi, tắt nguồn sự kiện, v.v.
  • Response measure - Nên đo lường các phản hồi đã xảy ra để các yêu cầu có thể được kiểm tra.

 

Tổng hợp

Category