Hệ sinh thái .NET (1)


1         Hệ sinh thái .NET


Hiểu nôm na, hệ sinh thái hay hệ sinh thái công nghệ (ecoSystem) là một khái niệm ám chỉ một mạng lưới rộng khắp các thiết bị và dịch vụ có khả năng liên kết chặt chẽ với nhau, trải dài từ phần cứng đến phần mềm. Khả năng đồng bộ dễ dàng, mang đến nhiều lợi ích cho người dùng trong công việc và giải trí.

Vậy hệ sinh thái .NET gồm những gì?

Xem hình minh họa sau[1]:



Từ hình trên có thể thấy hệ sinh thái .NET gồm:

– Common Infrastructure[2]

– .NET Standard Library

– Các framework (.NET Framework, .NET Core, Mono).

.NET Framework, .NET Core và Mono có thể xem là ba phiên bản .NET khác nhau. Trong đó,

– .NET Framework: chỉ hoạt động trên Windows, cung cấp các nền tảng để tạo ứng dụng như: WPF, Winforms, ASP.NET

– .NET Core: hoạt động theo hướng đa nền tảng, gồm Universal Windows Platform và ASP.NET Core

– Mono là phiên bản cộng đồng, nhằm đem .NET đến các nền tảng ngoài Windows. Mono gồm: Unity Game và Xamarin.

Áp dụng trong thực tế:

– Nếu làm ứng dụng chạy trên Windows (Desktop Application) thì sử dụng .NET Framework

– Nếu làm game dựa trên Unity hoặc ứng dụng di động dựa trên Xamarin thì sử dụng Mono

– Nếu làm web, ứng dụng web thì sử dụng .NET Framework hoặc .NET Core đều được

Xem hình minh họa[3],



2         .NET Framework


Xem hình minh họa[4]:



Theo wiki:

– .NET Framework là một nền tảng lập trình và cũng là một nền tảng thực thi ứng dụng chủ yếu trên hệ điều hành Microsoft Windows, được Microsoft tạo ra. Các chương trình viết trên nền .NET Framework sẽ không chạy trực tiếp trên môi trường phần cứng, mà nó sẽ chạy thông qua một cái máy ảo có tên là CLR (Common Language Runtime). CLR sẽ chịu trách nhiệm liên quan đến an toàn phần mềm (security), quản lý bộ nhớ (memory management) và xử lý lỗi (exception handling).

– .NET Framework gồm các thư viện lập trình. Các thư viện này hỗ trợ việc lập trình giao diện, làm việc với cơ sở dữ liệu, ứng dụng web, giải thuật, cấu trúc dữ liệu, giao tiếp mạng. Các thư viện lập trình này cùng với CLR là hai thành phần chính của .NET Framework.

– .NET Framework giúp việc lập trình đơn giản hơn nhờ vào các thành phần được thiết kế sẵn. Người lập trình chỉ cần sử dụng các thành phần được thiết kế sẵn để tạo ra ứng dụng.

– Visual Studio là IDE do Microsoft tạo ra, giúp người lập trình phát triển phần mềm dựa trên .NET Framework.

Một số phiên bản Visual Studio và Framework .NET[5]

Visual Studio
Phiên bản
.NET framework
Năm ra đời
Visual Studio 2019
16.0
3.5 – 4.8
April 2, 2019
Visual Studio 2017
15.0
3.5 – 4.7
March 7, 2017
Visual Studio 2015
14.0
2.0 – 4.6
July 20, 2015
Visual Studio 2013
12.0
2.0 – 4.5.2
October 17, 2013
Visual Studio 2012
11.0
2.0 – 4.5.2
September 12, 2012
Visual Studio 2010
10.0
2.0 – 4.0
April 12, 2010
Visual Studio 2008
9.0
2.0, 3.0, 3.5
November 19, 2007
Visual Studio 2005
8.0
2.0, 3.0
November 7, 2005
Visual Studio .NET 2003
7.1
1.1
April 24, 2003
Visual Studio .NET (2002)
7.0
1.0
February 13, 2002
Visual Studio 6.0
6.0
N/A
June 1998
Visual Studio 97
5.0
N/A
February 1997
----------
Cập nhật, 24/09/2019

----------

Scrum


Bài viết trước: Agile
-----

1         Scrum


1.1       Scrum là gì?


Scrum (n): cuộc đấu tranh hỗn độn; nên hiểu theo nghĩa "chung vai gánh vác". Vào youtube gõ từ khóa “scrum rugby” để xem các cầu thủ thực hiện “scrum”. Hoặc xem hình sau:



Có vẻ khi làm phần mềm, dự án, người ta lấy ý tưởng của các cầu thủ thực hiện “scrum” để làm việc.

Scrum là một trong các quy trình phát triển phần mềm (sản phẩm) theo phương pháp Agile. Ngoài Scrum còn nhiều quy trình khác dựa trên tuyên ngôn agile như[1]: ASD (Adaptive software development), Agile Modeling, AUP (Agile unified process), Kanban, XP (Extreme programming).

Scrum là một khung làm việc dựa trên Agile. Scrum được xây dựng dựa trên thuyết thực nghiệm. Thuyết này cho rằng "mọi tri thức đều đến từ kinh nghiệm đã trải qua, mọi quyết định đều dựa trên những gì mình đã hiểu biết, điều này giúp giảm thiểu rủi ro, tăng tính chính xác của từng bước trong một tiến trình, đặc biệt trong môi trường nhiều biến động ".

Yếu tố quan trọng là quan sát và thích nghi. Do vậy, nhóm Scrum liên tục thăm dò và điều chỉnh hoạt động của mình, để giảm thiểu các rủi ro.


1.2       Khung làm việc của Scrum


Xem hình minh họa[2] về khung làm việc của Scrum,



Trong Scrum, đội tham gia phát triển gồm 3 thành phần: product owner, scrum master và development team.

– Product owner: người định nghĩa các yêu cầu của sản phẩm, đánh giá sản phẩm đầu ra

– Scrum master: vận hành nhóm làm việc theo Scrum

– Development team: nhóm liên chức năng, thực hiện các yêu cầu trong Product backlog nhằm tạo ra sản phẩm.

– Product Backlog: chứa các yêu cầu của sản phẩm, với các mục được sắp theo thứ tự ưu tiên.

– Lập kế hoạch Sprint: là cuộc họp nhóm diễn ra ở đầu mỗi Sprint, nhằm phân rã hạng mục công việc trong Product Backlog thành các việc cụ thể hơn.

– Sprint Backlog: danh sách các công việc cụ thể cần làm, đây là kết quả của cuộc họp Lập kết hoạch Sprint

– Sprint: là một chu kì làm việc của nhóm, thường có thời gian từ 1 đến 4 tuần

– Scrum hàng ngày: là cuộc trao đổi ngắn mà nhóm Phát triển thực hiện hàng ngày, nhằm trao đổi và cập nhật tình hình công việc giữa các thành viên

– Làm mịn Product Backlog: là hoạt động thêm vào các chi tiết, thay đổi trình tự các mục trong Product Backlog. Quá trình làm mịn thường được thực hiện vào giữa Sprint hiện tại, để chuẩn bị yêu cầu cho Sprint tiếp theo.

– Phần tăng trưởng chuyển giao được của sản phẩm: kết quả đạt được sau mỗi Sprint

– Sơ kết Sprint: cuộc họp cuối của mỗi Sprint, xem sản phẩm, tổng kết Sprint

– Cải tiến Sprint: diễn ra sau cuộc họp Sơ kết Sprint, xem xét và cải tiến các vấn đề liên quan đến Sprint (con người, truyền thông, quy trình, công cụ)


1.3       Lợi ích khi dùng Scrum[3]


– Cải thiện chất lượng sản phẩm

– Rút ngắn thời gian phát triển

– Nâng cao tinh thần đồng đội

– Gia tăng tỉ suất hoàn vốn đầu tư (ROI)

– Tăng mức độ hài lòng của khách

– Kiểm soát dự án tốt

– Giảm thiểu rủi ro


1.4       Ba trụ cột của Scrum


Scrum có ba trụ cột :

– Minh bạch: tất cả các khía cạnh của tiến trình phải được cung cấp rõ ràng cho mọi thành viên có liên quan đến việc phát triển sản phẩm. Điều này giúp: giảm rủi ro, nâng cao chất lượng, tăng tin cậy, ra quyết định chính xác.

– Thanh tra: người sử dụng Scrum phải thường xuyên kiểm tra lại công việc và tiến độ để đạt được tiến độ Sprint, đồng thời phát hiện ra điểm bất thường ngoài dự định.

– Thích nghi: nếu tại bước thanh tra có phát hiện ra các bất thường có ảnh hưởng lớn đến sản phẩm thì cần càng nhanh càng tốt điều chỉnh lại quy trình/tài liệu thực hiện. Tương tự như vậy, nếu có các ý tưởng mới có ảnh hưởng lớn đến sản phẩm thì cũng thực hiện điều chỉnh lại quy trình/tài liệu. 


1.5       Năm giá trị của Scrum[4]


– Tập trung

– Dũng cảm

– Cam kết

– Cởi mở

– Tôn trọng


Agile


1         Agile là gì?


1.1       Thực trạng


– Do việc thu thập đầy đủ và chính xác các yêu cầu của sản phẩm ngay từ giai đoạn đầu của dự án thường khó khăn, nên việc lập kế hoạch sẽ không chính xác và không đầy đủ.

– Rất nhiều yếu tố ảnh hưởng đến sản phẩm luôn biến động và thay đổi theo thời gian (ví dụ: xu hướng, ý tưởng, công nghệ, thị trường, con người, thời gian, phản hồi)

– Tính phức tạp và luôn thay đổi là bản chất của tổ chức/của quá trình phát triển sản phẩm

– Quản lý sản xuất dựa trên sự tiên lượng có rủi ro rất lớn

– Những hạn chế của một số phương pháp quản lý truyền thống về: chia sẻ, cộng tác, kĩ thuật, công cụ, mở rộng, hướng phát triển

Từ thực trạng trên, một số nhà quản lý đã đưa ra phương pháp giúp cải thiện các thực trạng trên. Họ đưa ra tuyên ngôn Agile, từ đây, nhiều phương pháp phát triển sản phẩm đã dựa trên bản tuyên ngôn này.


1.2       Tuyên ngôn Agile


Agile [ædʒaɪl /$ ˈædʒəl]: nghĩa là linh hoạt/nhanh gọn.

Agile là một phương pháp/nguyên lý phát triển phần mềm (sản phẩm) linh hoạt, nhằm đưa sản phẩm đến người dùng nhanh nhất có thể.

Đây là tuyên ngôn Agile (Agile manifesto)



Đọc thêm:

– Diễn giải về Agile (01_Dien-giai-ve-Agile.pdf)

Ba luật quan trọng của Agile:

­– Luật của nhóm nhỏ: về nguyên tắc, công việc nên được hoàn thành trong những nhóm nhỏ liên chức năng, tự chủ, trong những chu kì ngắn, với lượng công việc tương đối nhỏ và liên tục thu nhận phản hồi từ khách hàng hoặc người dùng cuối.

– Luật của khách hàng: theo đuổi việc cung cấp giá trị tới khách hàng.

– Luật của mạng lưới: xem một tổ chức như một mạng lưới thông minh và minh bạch của những thành viên đang hợp tác, nhằm hướng tới mục tiêu chung là làm hài lòng khách hàng.

Vậy Agile là phương pháp (method), triết lý (philosophy), hay phương pháp luận (methodology)?

Mindset (mind + set) là thứ định hình niềm tin, suy nghĩ và hành động của con người. Tư duy đông cứng (fixed mindset), tư duy phát triển (growth mindset).

Agile mindset có gốc là từ growth mindset (thay growth bằng Agile).

Mục đích của Agile mindset là học từ sai lầm và thành công.


1.3       Mười hai nguyên tắc của tuyên ngôn Agile[1]


Chúng tôi tuân theo các nguyên tắc sau đây:

(1). Ưu tiên cao nhất của chúng tôi là thỏa mãn khách hàng thông qua việc chuyển giao sớm và liên tục các phần mềm có giá trị.

(2). Chào đón việc thay đổi các yêu cầu, thậm chí muộn, trong quá trình phát triển. Các quy trình Agile khai thác sự thay đổi cho các lợi thế cạnh tranh của khách hàng.

(3). Thường xuyên chuyển giao phần mềm chạy tốt tới khách hàng, từ vài tuần đến vài tháng, ưu tiên cho các khoảng thời gian ngắn hơn.

(4). Nhà kinh doanh và nhà phát triển phần mềm phải làm việc cùng nhau hàng ngày trong suốt dự án.

(5). Xây dựng các dự án xung quanh những cá nhân có động lực. Cung cấp cho họ môi trường và sự hỗ trợ cần thiết, và tin tưởng họ để hoàn thành công việc.

(6). Phương pháp hiệu quả nhất để truyền đạt thông tin tới nhóm phát triển và trong nội bộ nhóm phát triển là trao đổi trực tiếp

(7). Phần mềm chạy tốt là thước đo chính của sự tiến triển.

(8). Các quy trình Agile chú trọng tới sự phát triển bền vững. Các nhà đầu tư, nhà phát triển và người dùng cần duy trì một nhịp độ phát triển đều nhau.

(9). Liên tục quan tâm đến các kĩ thuật và thiết kế tốt để gia tăng sự linh hoạt.

(10). Sự đơn giản – nghệ thuật tối đa hóa lượng công việc chưa xong – là căn bản

(11). Các kiến trúc tốt nhất, yêu cầu tốt nhất, và thiết kế tốt nhất sẽ được làm ra bởi các nhóm tự tổ chức.

(12). Nhóm phát triển sẽ thường xuyên suy nghĩ về việc làm sao để trở nên hiệu quả hơn, sau đó họ sẽ điều chỉnh và thay đổi các hành vi của mình cho phù hợp.
--------
Cập nhật: 07/09/2019