Câu chuyện lâu đài Winchester và kiến trúc phần mềm

ngày 07-03-2016

Lâu đài thế kỷ - Winchester

Lâu đài Winchester là một trong những điểm du lịch nổi tiếng ở Mỹ gần San Jose do Bà Sarah Winchester xây dựng vào những năm 1869. Theo truyền thuyết, do quá lo sợ trước nhiều biến cố xảy ra với mình, bà Sarah đã tìm đến một thầy bói và biết được rằng mình đã bị nguyền rủa bởi những linh hồn từng bị sát hại bởi súng do hãng Winchester của chồng bà sản xuất. Thầy bói nói Bà rằng chỉ có một cách duy nhất để hóa giải lời nguyền này là xây dựng liên tục một công trình nào đó, và chỉ khi nào bà vẫn còn xây dựng thì các linh hồn sẽ để cho bà yên. Thế là Bà quyết định xây ngay lập tức lâu đài mà không cần có kiến trúc sư thiết kế trước đó. Bà đã thuê 147 thợ xây để làm việc cùng lúc trên các hạng mục trong lâu đài, liên tục trong 38 năm cho đến khi bà qua đời. Kết quả của tòa lâu đài có một không hai này là:

   -  160 phòng, 40 phòng ngủ, 6 nhà bếp, 2 tầng hầm
   -  950 cửa, trong đó có 65 cửa mở ra là bức tường
   -  có 13 hệ thống cầu thang được xây dựng, có nhiều cái bị “lửng lơ”
   -  24 cửa sổ trần rải rác ở các tầng khác nhau. 


Lâu đài nổi tiếng sau đó một phần nhờ những câu chuyện thêu dệt xung quanh những cái lạ kỳ của công trình, nhưng có lẽ đây cũng là minh chứng rõ nét nhất cho sự lãng phí cho việc xây dựng mà không có kiến trúc, thực hiện mà không có kế hoạch cũng như lập trình mà không có kiến trúc phần mềm.

Kiến trúc phần mềm – những quyết định “sống-còn” của dự án

 
Bạn có thể thấy với tuổi đời non trẻ hơn nhiều so với những ngành khác nên khá nhiều ý tưởng trong ngành CNTT ít nhiều có được từ sự quan sát, chắt lọc từ các ý tưởng của các ngành khác, đặc biệt là ngành xây dựng. Nếu ở giai đoạn đầu của xây dựng, mọi người dễ dàng chấp nhận công trình mà xây đến đâu tính tiếp đến đó, không đúng thì đập, sửa cho phù hợp. Sau đó thì mọi người nhận ra để tránh lãng phí thì cần phải có thiết kế, và lúc này thì người kiến trúc sư sau khi tìm hiểu nhu cầu và mong muốn của khách hàng sẽ thực hiện các bản vẽ thiết kế, từ các thành phần quan trọng của ngôi nhà như nền móng, kết cấu tường, cột, mái nhà,… đến thiết kế nội thất từng phòng trong nhà. Điều đó giúp khách hàng dễ dàng hình dung và sửa đổi các chức năng, cách sắp xếp các phòng trong nhà để sau đó thì bộ phận thi công, xây dựng cứ dựa trên thiết kế mà thực hiện. Kết quả thường không khác nhiều lắm so với bản vẽ thiết kế và chi phí cũng được kiểm soát hiệu quả hơn.

Tương tự như vậy, trong thời gian đầu khi xây dựng phần mềm, người ta chủ yếu  tập trung vào các vấn đề chính rồi từ từ mở rộng ra, giải quyết các vấn đề khác, người ta nhận thấy cứ làm theo cách đó phần mềm rất khó bảo trì, sửa lỗi, nâng cấp…và rất lãng phí. Sau đó, người ta đưa vào quy trình xây dựng phần mềm các công việc thiết kế để đảm bảo phần mềm được thực hiện và kiểm soát, bảo trì hiệu quả hơn như: thiết kế kiến trúc phần mềm, thiết kế dữ liệu, thiết kế xử lý, thiết kế giao diện,… Trong đó, ở giai đoạn kiến trúc phần mềm, kiến trúc sư phần mềm phải xác định được bài toán và phạm vi của dự án thông qua việc phân tích hiện trạng và yêu cầu của khách hàng. Họ cũng cần xác định cả các yêu cầu chức năng cũng như phi chức năng, các ràng buộc của phần mềm. Thường thì các yêu cầu phi chức năng không được xác định rõ và không được đánh giá quan trọng trong giai đoạn đầu của của dự án nhưng đây lại là các yếu tố ảnh hưởng nhiều đến tiến độ dự án ở các giai đoạn sau, nhất là khi chuyển giao sản phẩm cho khách hàng sử dụng.  Có thể khách hàng đưa yêu cầu “Hệ thống phải chạy nhanh “, đó là yêu cầu phi chức năng nhưng rất mơ hồ nên nhiệm vụ của người phân tích làm sao phải hỏi rõ hơn, ví dụ như nhanh như thế nào? Nhanh nghĩa là sao? Nhanh trong bao nhiêu giây? … Ngoài ra, người kiến trúc sư phần mềm cần xem xét quy trình khai thác, giao diện tương tác, cách vận hành như thế nào dưới góc nhìn logic, góc nhìn vật lý và các yếu tố an ninh của hệ thống.

Sau khi nắm rõ các yêu cầu chức năng và phi chức năng, kiến trúc sư phần mềm phải biết kết hợp các yêu cầu này vào các phân hệ cần thực hiện. Kiến trúc sư phần mềm cũng quyết định công nghệ nào được dùng, mô hình triển khai nào là phù hợp, thành phần nào là tự xây dựng, thành phần nào sẽ được mua từ nhà cung cấp hay được khoán ngoài dựa trên các yếu tố như chi phí, thời gian, dịch vụ hỗ trợ từ nhà cung cấp, môi trường người dùng …. Những quyết định này rất quan trọng và kiến trúc sư phần mềm phải phân tích, cân nhắc sao cho vừa giảm thiểu rủi ro vừa đảm bảo dự án có thể được thực hiện trong ngưỡng chi phí và thời hạn như cam kết với khách hàng. Quyết định cuối cùng thường có sự thống nhất giữa kiến trúc sư phần mềm, người lãnh đạo, người quản lí dự án và cả với đại diện khách hàng.
Với các hệ thống phần mềm lớn và phức tạp, vấn đề khó là làm sao cho mọi người tham gia, có liên quan hiểu rõ dự án, các vấn đề cần giải quyết, việc phối hợp giữa các thành phần chức năng như thế nào trong hệ thống. Để làm được điều đó, kiến trúc sư phần mềm phải dùng các công cụ như Unified Modeling Language (UML) để truyền đạt kiến trúc cho mọi người tham gia dự án, bao gồm các nhóm hỗ trợ như nhóm testing, chuyên gia cơ sở dữ liệu, chuyên gia an ninh… cũng như cấp quản lí và khách hàng. Dĩ nhiên ở mỗi vai trò việc hiểu dự án có thể khác nhau, nhưng điều quan trọng là mọi người đều biết hệ thống sẽ được triển khai như thế nào để đảm bảo ai cũng thực hiện và hỗ trợ đúng những gì hệ thống cần, đảm bảo chất lượng của hệ thống theo yêu cầu của KH.

Sau khi kiến trúc phần mềm được chấp thuận, bước tiếp theo là thiết kế chi tiết cho từng phân hệ của hệ thống. Mặc dầu kiến trúc sư phần mềm không tham gia vào thiết kế chi tiết chức năng và viết mã lệnh cho từng chức năng nhưng công việc này dựa trên những kết quả có được trong giai đoạn kiến trúc phần mềm. Người kiến trúc sư phần mềm sẽ cân nhắc, lựa chọn và kết hợp các loại kiến trúc phần mềm phù hợp để triển khai dự án trong số các loại kiến trúc phần mềm thông dụng hiện nay như: Client/Server, n-tier, kiến trúc hướng đối tượng, kiến trúc hướng dịch vụ,…  
Tư tưởng chính của SOA là chia nhỏ hệ thống ra thành nhiều dịch vụ độc lập, trọn vẹn, giúp cả doanh nghiệp và người phát triển phần mềm xây dựng hệ thống có tính linh động cao, dễ dàng “tháo lắp”, nâng cấp, mở rộng và nhất là đáp ứng nhanh chóng với các thay đổi trong thực tế của khách hàng. Hay nói cách khác thì hệ thống SOA là một tập hợp các dịch vụ được chuẩn hoá để có thể trao đổi với nhau trong môi trường thực hiện nghiệp vụ. Do đó, kiến trúc hướng dịch vụ (Service-Oriented Architecture) ngày càng được sử dụng rộng rãi và được các hãng lớn đưa vào hỗ trợ người lập trình như: Microsoft, IBM, Oracle, ,… và đã được ứng dụng trong thực tế xây dựng các hệ thống core banking của ngân hàng, quản trị doanh nghiệp, hệ thống đặt hàng – thanh toán,…

Đặc biệt, sau thời gian tìm hiểu và triển khai, từ khóa 09/03/2015, Trung Tâm Tin Học sẽ đưa vào giảng dạy mô hình kiến trúc phần mềm hướng dịch vụ trên nền tảng .NET với môn đầu tiên là Nền tảng và Lập trình hướng đối tượng với C # 5.0
 


Cho thành công của bạn!