Software Supply Chain – Tìm hiểu về Chuỗi cung ứng Phần mềm

Tháng Mười Một 29, 2022
Nga Pham

Tóm tắt

– Việc phát triển phần mềm gần giống với một chuỗi cung ứng truyền thống.

– Các package mã nguồn mở đóng vai trò là các tổ hợp con và các bộ phận cấu thành.

– Các bộ phận này được lưu trữ trong các package registry và artifact repository đóng vai trò nhà kho lưu trữ.

– Các nhóm phát triển lắp ráp các bộ phận này thành một sản phẩm hoàn chỉnh – một ứng dụng hoặc dịch vụ phần mềm.

– Những sản phẩm này sau đó được “vận chuyển” đến khách hàng bằng các hệ thống tích hợp liên tục và dịch vụ lưu trữ dành cho các sản phẩm được lưu trữ trên web (web-hosted).

Tổng quan

Nếu bạn là một khách hàng của Sonatype, hoặc nếu bạn đang tìm hiểu các giải pháp của Sonatype, thì có lẽ bạn đã từng nghe cụm từ chuỗi cung ứng phần mềmquản lý chuỗi cung ứng. Bài đăng này sẽ định nghĩa và so sánh các thuật ngữ, đồng thời cung cấp cho bạn cái nhìn tổng quan về cách chuyển đổi chuỗi cung ứng truyền thống thành chuỗi cung ứng phần mềm.

Quản lý chuỗi cung ứng là gì?

Supply Chain Management – Quản lý chuỗi cung ứng là hành động quản lý luồng nguyên liệu thô, chưa qua xử lý cho đến khi chúng được chuyển thành hàng hoá hoàn chỉnh và giao cho người tiêu dùng. Quản lý chuỗi cung ứng chủ yếu liên quan đến luồng di chuyển vật liệu trên cả quy mô lớn (chẳng hạn như khi nguyên liệu thô đi qua đại dương) và quy mô nhỏ (khi các bộ phận di chuyển từ băng chuyền này sang băng chuyền khác).

Khái niệm quản lý chuỗi cung ứng không phải là mới lạ. Ngay cả những nền văn minh sớm nhất cũng đã quản lý chuỗi cung ứng của họ ở một mức độ nào đó – như câu nói Thành Rome không thể xây trong một ngày. Chắc hẳn người ta cũng không thể xây dựng nếu thiếu nguồn cung cấp bê tông ổn định.

Tuy nhiên, cho đến những năm 1980, khái niệm quản lý chuỗi cung ứng hiện đại mới ra đời. Toàn cầu hoá hứa hẹn đẩy nhanh quy trình sản xuất, nâng cao hiệu quả và tạo ra những sản phẩm chất lượng hơn, nhưng nó cũng kéo theo nhiều rủi ro nghiêm trọng. Quản lý chuỗi cung ứng được phát triển để tận dụng các lợi ích và giảm thiểu các rủi ro.

Chuyển động và dòng chảy

Như đã đề cập ở trên, quản lý chuỗi cung ứng chủ yếu liên quan đến luồng di chuyển hoặc dòng nguyên vật liệu. Đó là bởi vì phần lớn lợi ích về chất lượng và tốc độ nằm ở việc cải thiện cách vật liệu di chuyển từ giai đoạn sản xuất này sang giai đoạn sản xuất tiếp theo. Mất mát về chất lượng hoặc tốc độ thường xuất phát từ cùng một luồng.

Để hiểu tầm quan trọng của chuyển động và dòng chảy, hãy xem xét vài câu hỏi mà một chuyên gia sẽ đặt ra nếu họ được giao nhiệm vụ cải thiện hiệu quả một nhà máy sản xuất. Họ muốn biết nơi lưu trữ vật liệu, cách chúng đến nhà máy và mức độ tin cậy của các đối tác giao hàng. Họ cũng muốn biết tốc độ của mọi băng tải và công suât của tất cả máy lắp ráp. Ngoài ra, họ cũng có thể hỏi về tốc độ đóng gói thành phẩm vào xe tải và tốc độ giao hàng của xe tải.

Chuỗi cung ứng phần mềm là gì?

Chuỗi cung ứng phần mềm là quá trình các thành phần – các đoạn mã nhỏ được tạo sẵn – di chuyển trong quy trình phát triển và được chuyển đổi thành phần mềm hoàn chỉnh, sau đó được phân phối cho khách hàng. Quá trình này tương tự cách nguyên vật liệu thô được biến đổi thành sản phẩm hoàn chỉnh, sau đó được vận chuyển đến các kệ hàng.

Cụm từ chuỗi cung ứng phần mềm tương đối mới, ra đời vào khoảng năm 2014 do nhận thức ngày càng nâng cao về các thành phần nguồn mở trong vòng đời phát triển phần mềm. Sonatype là một trong những công ty đầu tiên áp dụng cụm từ này, cùng với phần mở rộng tự nhiên của nó – quản lý chuỗi cung ứng phần mềm.

Chuyển chuỗi cung ứng truyền thống thành chuỗi cung ứng phần mềm

Quản lý chuỗi cung ứng đôi khi chia quá trình sản xuất thành bốn giai đoạn: thu mua, sản xuất, phân phối và giao diện khách hàng. Chuỗi cung ứng phần mềm có các phần tương ứng với cả bốn giai đoạn này.

Thu mua – Tìm nguồn cung ứng

Trong giai đoạn Thu mua (Procurement), nguyên liệu thô được tìm thấy từ các nhà cung cấp, chuyển đến địa điểm lưu trữ cho đến khi chúng sẵn sàng để sử dụng. Đó là một phần chiến lược của chuỗi cung ứng. Chi phí là một vấn đề, nhưng tốc độ và chất lượng cũng quan trọng không kém. Các mối quan hệ cũng quan trọng. Đối tác tốt nhất là một nhà cung cấp đề cao tính minh bạch và khiến bạn tin tưởng.

Trong chuỗi cung ứng phần mềm, đây là giai đoạn Tìm nguồn cung ứng (Sourcing), khi các thành phần nguồn mở được lấy từ các repository và đưa vào môi trường development. Các thành phần nguồn mở là miễn phí (xem thêm bài đăng về Phần mềm mã nguồn mở) nhưng chi phí vẫn là một yếu tố chiến lược, vì thời gian phát triển càng lâu thì càng tốn chi phí, và bạn cần thêm thời gian khắc phục nếu có các thành phần dễ bị tổn thương hay chất lượng thấp. Các tổ chức phần mềm thành công đều cân nhắc kỹ lưỡng để lựa chọn các thành phần nguồn mở tốt nhất. Họ có một vài nguồn đáng tin cậy và chỉ lựa chọn những thành phần có chất lượng cao nhất.

Việc sử dụng các thành phần mã nguồn mở trong phát triển phần mềm đã là xu hướng trong nhiều năm, và xu hướng này vẫn ngày càng gia tăng. Theo Báo cáo Trạng thái Chuỗi cung ứng Phần mềm năm 2021 của Sonatype, ước tính lượt tải xuống các thành phần Python đã tăng 92% và lượt tải xuống các thành phần Java tăng 71% trong khoảng thời gian từ năm 2020 đến năm 2021.

Sản xuất – Phát triển

Trong giai đoạn Sản xuất (Production), nguyên liệu thô được chuyển thành trạng thái hoàn chỉnh và lưu trữ cho đến khi sẵn sàng để phân phối. Công đoạn này giống như nhà xưởng, nơi các băng tải chuyển các bộ phận vào máy để lắp ráp. Giai đoạn này phụ thuộc vào chất lượng của nguyên liệu thô và hiệu quả của máy móc thực hiện vận chuyển và lắp ráp sản phẩm.

Trong chuỗi cung ứng phần mềm, phần mềm được xây dựng trong giai đoạn Phát triển (Development). Chúng ta không thể quan sát quá trình phát triển phần mềm giống như quá trình sản xuất trong một nhà máy, nhưng các khái niệm tương tự vẫn được áp dụng. Các thành phần là nguyên liệu thô, được chuyển đến các nhà phát triển để họ lắp ráp thành các ứng dụng hoàn chỉnh, sau đó được lưu trữ cho đến khi sẵn sàng phân phối. Sự khác biệt duy nhất là các nhà phát triển viết mã của riêng họ khi cần để xây dựng các tính năng quan trọng hoặc cần khiến cho các thành phần “ăn khớp” với nhau. Giống như công việc trong nhà máy, giai đoạn này phụ thuộc vào chất lượng thành phần và hiệu quả của quá trình di chuyển và xây dựng ứng dụng.

Phân phối – DevOps

Mục tiêu của giai đoạn Phân phối (Distribution) là đảm bảo hàng hoá đến tay người tiêu dùng một cách nhanh chóng và an toàn. Trong quy trình quản lý chuỗi cung ứng truyền thống, đây là lúc đội xe tải của công ty đóng gói cẩn thận và vận chuyển hàng hoá tới đích đến cuối cùng. Đó là một nhiệm vụ phức tạp và phụ thuộc chặt chẽ vào các yếu tố bên ngoài như thời tiết và giá xăng. Các yếu tố quan trọng nhất của giai đoạn này là tính nhất quán và tốc độ. Giao hàng thường xuyên, nhanh chóng là mục tiêu hàng đầu.

Vòng đời phát triển phần mềm hiện đại và nhanh chóng khác với các phương thức phân phối truyền thống trong quản lý chuỗi cung ứng. Cải tiến liên tục và Phân phối thường xuyên (Continuous Improvement/Continuous Delivery – CI/CD) có nghĩa là hàng hoá liên tục được trả lại cho bộ phận phát triển để tinh chỉnh thêm, sau đó lại được giao cho người tiêu dùng. Đó là một chu kỳ luôn hoạt động không ngừng mà một đội xe tải đơn giản không thể thực hiện được.

Tuy nhiên, tất cả những lo ngại về giai đoạn Phân phối trong chuỗi cung ứng truyền thống vẫn đúng trong trường hợp chuỗi cung ứng phần mềm. DevOps quan tâm đến vấn đề tối ưu hoá tốc độ và tính nhất quán trong phân phối phần mềm. Theo Sonatype, nguyên tắc của DevOps là: “Tất cả đều hoạt động hướng tới mục tiêu chung là rút ngắn chu kỳ phân phối phần mềm và cải thiện tính ổn định của quá trình triển khai.”

Giao diện khách hàng – Thành công của khách hàng

Giai đoạn Giao diện khách hàng (Customer Interface) trong quản lý chuỗi cung ứng liên quan đến tương tác của người tiêu dùng với thành phẩm. Giao diện khách hàng tốt đòi hỏi một kế hoạch được xây dựng cẩn thận. Sản phẩm có đáp ứng được nhu cầu của người tiêu dùng hay không? Nó có dễ sử dụng không? Người tiêu dùng có thể tìm thấy sự trợ giúp khi cần không? Những câu hỏi cơ bản này và nhiều câu hỏi tương tự khác phải được xem xét và cân nhắc lâu dài trước khi sản phẩm đến đích cuối cùng.

Trong chuỗi cung ứng phần mềm, giai đoạn này được gọi là Thành công của Khách hàng (Customer Success), tuy nhiên mối quan tâm chính ở đây vẫn là cách người tiêu dùng tương tác với thành phẩm, cụ thể là sản phẩm có đáp ứng nhu cầu của khách hàng hay không. Các công ty và người dùng cá nhân thường mua phần mềm để đáp ứng một mục tiêu chiến lược cụ thể và phần mềm mang đến thành công cho khách hàng là phần mềm giúp họ đạt được mục tiêu đó.

Theo Sonatype