GOOGLE ĐÃ TẠO RA FRAMEWORK CHO WEB CỦA HỌ NHƯ THẾ NÀO?

12-03-2018 16:55

Repository được Google dùng để lưu trữ và chia sẻ tất cả 2 tỷ dòng code của hãng – với hương thức trunk-based development – phát triển từ một nhánh mã nguồn chính.

Codebased của Google được dùng bởi hơn 25000 nhân viên lập trình của hãng từ tất cả các chi nhánh. Một ngày trung bình hơn 16000 dòng code được chỉnh sửa.

Ngôn ngữ AngularDart sẽ được tập trung nói đến trong bài viết này. Đây là một mã nguồn mở chạy trên đa nền tảng như Window, Mac OS X và Linux OS(s).

Khi cả đội ngũ tập trung vào việc phát triển một nhánh chính của mã nguồn thì tức là họ đang làm việc với phiên bản duy nhất. Có nghĩa là bạn không thể dùng các ứng dụng mà có web frame work phiên bản khác nhau được. Các ứng dụng đều phải được chạy trên cùng một phiên bản của web frame work.

Lập trình ứng dụng di động Android

Khóa học Kiểm thử phần mềm Tester

Chính vì thế mà đôi khi Google nói là tất cả các phần mềm của hãng đều chạy trên phiên bản frame work mới nhất. Điều này cũng có nghĩa là đôi khi những phiên bản quá mới thường không được ổn định và tồn tại nhiều lỗi.

 

 

Việc tất cả các phần mềm đều dựa trên một nhánh nguồn chính là rất nguy hiểm nếu có lỗi xảy ra. Nhưng hóa ra lại không đơn giản như vậy.

Google sẽ test tới 76000 lần trước mỗi lần thay đổi 1 dòng code

Khi thay đổi một dòng code trong reponsitory của Google thì hệ thống sẽ tự động test tất cả các ứng dụng đang sử dụng trên framework đó luôn. Con số test hiện tại là 76000 lần. Một thay đổi nhỏ thuật toán trong mã nhánh nguồn chính của google sau đây sẽ giúp bạn có thể hình dung một cách dễ nhất (Thêm dòng ‘&& random.nextDouble() > .05’ vào dòng code này). Kết quả là hơn 1601 bài test được diễn ra và hàng tá các ứng dụng cũng như các client bị lỗi.

Quan trọng là các bài test đều chạy dựa trên các app của người dùng. Nó phản ánh các mã nguồn được sử dụng bởi các developer. Đây là điều cực kỳ quan trọng bởi nó giúp google có thể hiểu được mã nguồn của họ bởi các developer sử dụng như thế nào.

Nhờ mà nó giúp cho các app ứng dụng có tính đồng nhất cao. Đó là điều khác biệt giữa việc app được phát triển bởi chỉ một cá nhân với framework tự tạo và một app có tính tương thích cao nhờ vào sự phát triển bởi hàng ngàn người. Vì vậy để phát triển các ứng dụng web thì chúng ta phải sử dụng lựa chọn thứ hai : cùng dùng một web framework.

Nếu một lúc nào đó mã nguồn mở của web bị lỗi thì sao?

Khi mà các nhà lập trình của AngularDart đưa ra bất cứ thay đổi nào thì họ cũng phải sửa những lỗi xảy ra bởi sự thay đổi đó cho người dùng. Bởi vì tất cả mọi thứ của Google đều thuộc trên một mã nguồn chính nên phải xác định được app ứng dụng nào bị lỗi và sửa ngay luôn.

Khi một thay đổi được diễn ra thì tất cả các ứng dụng cũng được update các bản patch và sửa đổi để có thể chạy được trên phiên bản framework đó. Quá trình vừa thay đổi vừa chỉnh sửa diễn ra liên tục và tuần hoàn sau khi được kiểm tra kĩ lưỡng từ nhiều nhóm developer khác nhau.

Ví dụ, khi một thành viên từ nhóm AngularDart muốn thực hiện một sửa đổi gây ảnh hưởng đến ứng dụng Appwork thì nhóm phải vào tận mã nguồn để chỉnh sửa cho ứng dụng đó luôn. Sau đó nhóm phải chạy test để kiểm tra. Chỉ khi bảo đảm được kết quả thì mới lập một danh sách liệt kê các thay đổi và yêu cầu sự chấp thuận từ cả 2 nhóm developer của ứng dụng Appwork và AngularDart. Nếu được thông qua thì thay đổi mới thật sự được thực hiện.  

Mỗi ngày, các developer của AngularDart framework thường tiếp xúc với hàng triệu dòng code từ các ứng dụng được phát triển trên framework của họ. Vậy nên việc phát triển framework sẽ chở nên hiệu quả hơn.

Tuy vậy, việc update các ứng dụng của người dùng sẽ khiến việc phát triển bị chậm lại.  Điều đó có lợi và hại tùy vào mục đích sử dụng framework của mỗi người.

Thế nên khi nghe Google nói là họ đã update một phiên bản alpha của library ổn định và bắt đầu áp dụng vào mã nguồn chính thì bạn đã hiểu ý họ là sao rồi nhé.

Lập trình Python & Odoo Framework với IziSolution

Lập trình CC++ với FPT Software

Nếu các bản cập nhật lớn xảy ra

Các bạn chắc sẽ thắc mắc rằng đối với các bản cập nhật lớn với sự thay đổi gần như là tất cả khiến cho 76000 bài test đều hiển thì lỗi thì AngularDart phải làm gì? Liệu AngularDart sửa được hết lỗi?

Tất nhiên rồi!

AngularDart sử dụng một hệ thống được gọi là Sound Dart – có thể tự sửa đổi tự động mà không cần tới sự xác nhận của developer. Để dễ hình dung thì khi developer muốn thay một đoạn code ‘bar()’ thành ‘baz ()’ thì thay vì cứ phải thực hiện thao tác thủ công lập đi lập lại thì developer sẽ sử dụng Sound type system của Dart và tất cả các đoạn code ‘bar ()’ sẽ tự động đổi thành ‘baz ()’. Vì vậy nếu không có sự trợ giúp của Sound type thì ngay cả một thay đổi nhỏ cũng cực kì nguy hiểm.

Ngoài ra, Google cũng thường sử dụng dart_style để bảo đảm việc update trên diện rộng. Nói cách khác các dòng code của Dart đều được để ở định dạng trên. Nhờ vậy mà việc thay đổi luôn đồng nhất và không bị lỗi.

Chỉ số hiệu suất

Test là một tính năng rất có lợi ích cho AngularDart. Nhưng nó còn giúp cung cấp thông tin về hiệu suất của app. Điều mà Google luôn rất chú trọng vì thế mà hầu như tất cả các app đều có bảng ghi chép lại hiệu suất của chúng.

Vì thế mà khi AngularDart đưa ra các bản thay đổi cập nhật khiến cho AdWords bị chậm load lại khoảng 1% thì họ đã biết kết quả trước khi việc thay đổi xảy ra rồi. Vậy nên khi họ đưa ra thông tin rằng các ứng dụng chạy trên AngularDart nhẹ hơn 40% và nhanh hơn 10% so với 2 tháng trước. Thì đó là số liệu thực tiễn từ các app với hàng triệu người sử dụng.

Công cụ build Hermetic

Vậy trong số hơn 76 ngàn bài test đó thì test nào là quan trọng nhất để các developer theo dõi? Mà cũng không thể chọn từng loại test thích hợp để kiểm tra cho từng thay đổi được? Giải pháp nằm ở một phần mềm gọi là Bazel.

Với hơn 2 tỉ dòng code thì bạn không thể chỉ đơn giản lên từng script được nữa bởi nó quá tốn thời gian. Vì vậy mà bạn phải dùng Hermetic build tool.

“Hermetic” ở đây có nghĩa gần giống như Pure function. Khi mà các bước bạn thực hiện một build không được phép có side effect (như temp files, thay thành PATH etc.) và Input giống nhau thì output cũng phải giống nhau. Nói cách khác, bạn có thể chạy nhiều build khác nhau, từ các máy khác nhau, từ bất kì thời điểm nào mà vẫn có output nhất quán.

Google đã bỏ nhiều năm để tạo ra một tool như vậy. Đó chính là Bazel.

Nhờ đó, các chương trình test cũa hãng có thể chọn build hoặc bài test phù hợp với từng thời điểm và loại thay đổi.

5 mẹo giúp cải thiện tư duy cho lập trình viên

Chỉ ra 5 ngôn ngữ lập trình mà bạn không nên học

Làm thế nào để bắt đầu một ngôn ngữ mới thật hiệu quả

Điều đó có nghĩa là gì?

AngularDart được tạo ra bởi Google với mục đích trở thành mã nguồn mở hiệu quả nhất, tốt nhất với độ tin cậy cao trong việc lập trình tạo website. Việc này cũng giải thích vì sao mà các app của google như AdWords và AdSense đều phải sử dụng framework này. Bởi tính tin cậy cao cho người dùng.

Nói cách khác, bởi có lượng lớn khổng lồ các ứng dụng chạy trên AngularDart  mà việc sửa đổi cập nhật lớn sẽ không diễn ra thường xuyên nhằm bảo đảm tính ổn định. Nhờ vậy mà mã nguồn mở cũng trở nên đáng tin cậy hơn bởi mọi thay đổi đều được tính toán kĩ lưỡng.

Điều làm nên sự thành công của một mã nguồn đến từ sự bảo trì thường xuyên. Vì vậy điều vui mừng nhất là khi Dart có sự tập trung kĩ lưỡng vào các mã nguồn của họ. Bởi nó đều đi theo model của Google trong kinh doanh – tập trung vào chất lượng.

Ban Truyền thông ITPlus Academy

Bài viết cùng chủ đề