Giới thiệu về Software Architecture: Kiến trúc và thiết kế

Giới thiệu về Software Architecture: Kiến trúc và thiết kế

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.

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

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.

TrongKiế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 của việc có một kế hoạch thiết kế như sau:

  • Để thương lượng các yêu cầu hệ thống và đặt kỳ vọng với khách hàng, nhân viên tiếp thị và quản lý.
  • Hoạt động như một bản thiết kế trong 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.

Nó xảy ra trước khi thiết kế chi tiết, viết code, tích hợp và thử nghiệm, sau khi đã phân tích miền, phân tích yêu cầu và phân tích rủi ro.

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

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.
  • Giảm mục tiêu sở hữu và nâng cao vị thế thị trường của tổ chức.
  • Cải thiện chất lượng và chức năng do hệ thống cung cấp.
  • Cải thiện niềm tin bên ngoài vào tổ chức hoặc hệ thống.

Hạn chế

Kiến trúc phần mềm vẫn là một ngành học mới nổi trong ngành kỹ thuật phần mềm. 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ề miền

  • Chuyên môn về hệ thống đang đượ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 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 phương pháp

  • 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

  • Một 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
  • Một khái niệm cho 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 khuyết tậ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.

Các thuộc tính chất lượng chung

Bảng sau liệt kê các thuộc tính chất lượng chung mà Software Architecture phải có:

Phân loại Thuộc tính chất lượng Sự miêu tả
Chất lượng thiết kế Tính toàn vẹn Xác định tính nhất quán và mạch lạc của thiết kế tổng thể. Điều này bao gồm cách các thành phần hoặc mô-đun được thiết kế.
Khả năng bảo trì Xác định khả năng thay đổi, cập nhật, nâng cấp hệ thống một cách dễ dàng.
Khả năng tái sử dụng Xác định khả năng các thành phần hệ thống phù hợp để sử dụng trong các ứng dụng khác.
Chất lượng thời gian thực thi Khả năng tương tác Xác định khả năng hệ thống dễ dàng giao tiếp và trao đổi thông tin với các hệ thống bên thứ 3.
Khả năng quản lý Xác định mức độ dễ dàng quản trị hệ thống trong việc quản lý ứng dụng.
Độ tin cậy Xác định khả năng duy trì hoạt động theo thời gian của một hệ thống.
Khả năng mở rộng Xác định khả năng có thể xử lý việc tăng tải mà không ảnh hưởng đến hiệu suất của hệ thống hoặc khả năng dễ dàng mở rộng.
Khả năng bảo vệ Khả năng của một hệ thống để ngăn chặn các hành động phá hoại hoặc nằm ngoài cách sử dụng được thiết kế.
Hiệu suất Khả năng đáp ứng của hệ thống để thực hiện bất kỳ hành động nào trong một khoảng thời gian nhất định.
Tính khả dụng Xác định tỷ lệ thời gian hệ thống hoạt động, được đo bằng phần trăm của tổng thời gian ngừng hoạt động của hệ thống trong một khoảng thời gian xác định trước.
Chất lượng hệ thống Khả năng hỗ trợ Khả năng của hệ thống cung cấp thông tin hữu ích để xác định và giải quyết các vấn đề khi hệ thống không hoạt động chính xác.
Khả năng kiểm tra Đo lường mức độ dễ dàng tạo ra các tiêu chí kiểm tra cho hệ thống và các thành phần của nó.
Phẩm chất người dùng Khả năng sử dụng Xác định mức độ ứng dụng đáp ứng các yêu cầu của người dùng.
Chất lượng kiến trúc Tính đúng đắn Trách nhiệm giải trình để đáp ứng tất cả các yêu cầu của hệ thống.
Chất lượng non-runtime Tính di động Khả năng của hệ thống chạy trong các môi trường điện toán khác nhau.
Tính tích hợp Khả năng làm cho các thành phần được phát triển riêng biệt của hệ thống hoạt động chính xác với nhau.
Khả năng sửa đổi Khả năng dễ dàng thay đổi, sửa đổi, nâng cấp hệ thống phần mềm.
Chất lượng kinh doanh Chi phí và lịch trình Chi phí của hệ thống liên quan đến thời gian đưa ra thị trường, thời gian tồn tại của dự án và việc sử dụng di sản.
Khả năng tiếp thị Sử dụng hệ thống đối với cạnh tranh thị trường.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *