Tự động hóa - Người trợ thủ đắc lực của dự án

Tự động hóa - Người trợ thủ đắc lực của dự án

Nếu như có một thành viên không đòi lương cao mỗi tháng, không phàn nàn, làm việc nhiệt tình, chính xác, không gây lỗi khi tham gia vào dự án thì bạn sẽ làm gì? Tất nhiên là sẽ nhiệt liệt hoan nghênh rồi phải không?

Chỉ cần bạn cố gắng một chút xíu thôi, thành viên ấy sẽ có mặt. Thật vậy, nếu như bạn thực hiện “Tự động hóa” thì điều đó sẽ trở thành sự thật.

Ưu điểm của chiếc máy vi tính ngày ngày đồng hành với chúng ta là thực hiện chính xác những chỉ thị, thao tác được giao. Ngược lại, ưu điểm của con người là hoạt động xử lý linh hoạt trước những tình huống khó khăn ngoài dự kiến hoặc tạo ra những thứ mới mẻ.

Tuy nhiên, từ trước đến giờ, trong dự án, bạn đã từng nhìn thấy con người đảm nhận những “công việc mang tính cố định” mà đáng lẽ thuộc lĩnh vực ưu thế của máy vi tính hay chưa? Liệu các bạn có đang tưởng tượng ra cảnh ngày ngày ngồi click vào cùng 1 chỗ, nhập những chữ cái giống nhau, thỉnh thoảng lỡ nhập sai lại phải nhập lại từ đầu…? Nếu bỏ đi quãng thời gian này để con người có thể thực hiện những hoạt động mang tính sáng tạo (đây chính là phần sinh ra giá trị) vốn dĩ thuộc lĩnh vực ưu thế của họ thì sao? Ngoài ra, các bạn hãy thử tưởng tượng cảm giác yên tâm có được khi những lỗi sai do con người tạo ra được loại bỏ.

Đầu tiên, tôi muốn các bạn thử hình dung, trong khi thực hiện dự án, việc tạo ra môi trường xúc tiến tự động hóa, nơi mà “ máy móc làm những việc của máy móc, con người làm những việc của con người” sẽ mang đến giá trị tương đương như khi chúng ta tuyển dụng một thành viên mới.

Năm ngoái, do hoàn cảnh đưa đẩy, tác giả là tôi đã thực hiện phát triển một dự án về ứng dụng web một mình trong vòng một năm. Trong tình huống phải tự mình thực hiện từ coding đến testing, từ server đến client, từ xây dựng cơ sở hạ tầng đến vận hành và duy trì, nếu không có trợ thủ đắc lực “giấu mặt” là “tự động hóa” thì chắc có lẽ tôi đã không thể hoàn thành nhiệm vụ. (Trong Hình 1 và Hình 2, tôi đưa ra ví dụ về tự động hóa mà tôi đã cấu hình khi đó).

Picture1.png

Hình 1. Automation task list dùng cho ứng dụng web. Hầu hết các công việc cố định như build tool phát triển, deploy các loại chương trình, backup data base, môi trường ảo, UT, UI test, end-to-end test trên từng loại môi trường: môi trường thật, môi trường staging đều được tự động hóa.

2.png

Hình 2. Một phần của build pipeline trong phát triển ứng dụng web. Các task được tự động hóa được gọi lần lượt và hơn nữa, tự động hóa được thực hiện trên 1 luồng lớn.

Có một quy tắc được trích trong tác phẩm cổ điển nổi tiếng của Frederick Brooks - “The Mythical Man-Month” mà ngày nay được biết đến với tên gọi “Brook’s law”: “Adding manpower to a late software project makes it later.” (Việc thêm người vào dự án phần mềm đang bị chậm chỉ làm dự án đó chậm thêm). Ở phần trên tôi có viết là “sẽ mang đến giá trị tương đương như khi chúng ta tuyển dụng một thành viên mới”, nhưng người bạn tự động hóa cũng tuân theo quy tắc này. Nghĩa là, nếu dự án rơi vào trạng thái death march (overload nghiêm trọng) mới áp dụng tự động hóa thì đã quá muộn. Tuy nhiên, cũng không cần phải tự động hóa toàn bộ ngay từ đầu. Tiến hành tự động hóa từ những việc có thể tự động hóa được, thực hiện dần dần từng chút một cũng được. Làm như vậy cùng với sự tiến triển của dự án, bạn sẽ dần cảm nhận được hệ thống tự động hóa đang cùng trưởng thành từng ngày với chúng ta và trở thành một thành viên nhóm đáng tin cậy.

Có thể áp dụng tự động hóa vào tất cả các hoạt động trong dự án nhưng nên bắt đầu từ đâu thì tốt đây? Việc này tùy vào tình hình nên tôi không thể viết ra đây một câu trả lời rõ ràng được. Tuy nhiên, tôi sẽ nêu ra gợi ý cho các bạn. Nếu bạn là kỹ sư phát triển thực hiện design, thực thi và build thì việc tự động hóa có thể thực hiện trong build process, UT, nếu bạn là kỹ sư vận hành thì nên áp dụng với deploy, nếu là kỹ sư kiểm thử thì có thể thực hiện smoke test hoặc function test tự động hóa. Ồ, bạn không viết Unit test à? những người có suy nghĩ như thế thì hãy đọc bài về assert của Narita-san trước nhé.

Khi suy nghĩ, cân nhắc nên “Làm gì?”, “Làm như thế nào?” để việc tự động hóa có thể đạt được hiệu quả tốt nhất (là phần sáng tạo mà con người cần phải làm), tên của tool không phải là vấn đề chính nhưng xét về tính chất của tự động hóa, tôi xin giới thiệu với các bạn một số tool hoặc hệ thống tự động hóa ấn tượng trong năm 2015.

● CI Tool: Jenkins Đầu tiên phải kể đến Jenkins. Đây là tool có thể sử dụng trong việc quản lý hầu hết các task một cách tự động. Nó là một công cụ có nhiều plugin phù hợp với nhiều tình huống, không chỉ tự động hóa build intergration – thứ mà Continuous Integration hướng tới, mà còn có thể sử dụng trong việc quản lý các job chạy định kỳ, tiêu biểu như backup job trong GUI font end của Cron command. Hình 1/Hình 2 mà tôi đã nêu ở phần trước chính là màn hình của Jenkins.

● Ngôn ngữ build: Rake, Make, Ant, Cmake…. Ngôn ngữ build là những ngôn ngữ nổi tiếng từ xưa như Make hay Ant nhưng ngôn ngữ mà tôi muốn khuyên các bạn dùng là Rake. Rake được thực thi như một DSL nội bộ của Ruby. Thế mạnh của việc dùng ngôn ngữ này là có thể kiểm soát phần còn thiếu trong chức năng của Rake bằng việc sử dụng khả năng ghi mạnh mẽ của Ruby.

● Shell-script: bash script, Windows bat…

Ngôn ngữ build chuyên dùng như Make/Rake rất tiện lợi và mạnh mẽ nhưng nếu muốn thực hiện tự động hóa thì cần phải thông thạo script sh hay Bash trên hệ điều hành Unix, cần giỏi về bat hay wsh nếu là hệ điều hành Windows. Trên Web hay các tài liệu có rất nhiều thông tin về những nội dung này nên các bạn chỉ cần nhớ từ khóa là được.

● Kĩ thuật liên quan đến giả lập: Docker, Chef solo, Puppet, Vagrant,... Đây là lĩnh vực rất thu hút trong những năm gần đây. Đặc biệt việc giả lập dạng container nhẹ hơn nhiều so với kỹ thuật giả lập dạng hypervisor generate Virtual Machine mà không cần phải generate process khi khởi động và tính tương đồng khá cao so với tự động hóa. Cũng có vài tool giả lập dạng container nhưng hiện nay, nếu giả lập môi trường Linux thì cần nên dùng đến Docker. Các framework cấu trúc môi trường như Chef solo hay Puppet cũng có thể hỗ trợ việc thực hiện tự động hóa của các bạn.

●Framework tự động hóa thao tác: Selenium, Appium, Robotium, .... Framework tự động hóa thao tác chủ yếu giúp ích nhiều trong tự động hóa UI test. Nếu thực hiện tự động hóa thao tác cho ứng dụng web hay nói cách khác là tự động hóa thao tác browser thì nên sử dụng framework có tên là Selenium, đối với các ứng dụng trên smartphone chạy Android hay iOS, các bạn có thể sử dụng Appium hoặc Robotium chẳng hạn (ngoài ra còn có các sự lựa chọn khác, các bạn hãy thử tìm hiểu nhé). Trong khi phát triển ứng dụng Web mà tôi đã giới thiệu ở phần trước, tôi đã sử dụng Selenium để thực hiện tự động hóa cho UI test và end-to-end test. Khi sử dụng Selenium, tôi có thể kiểm chứng hoạt động trên các loại trình duyệt (Firefox, Chrome,…) mỗi khi có thay đổi source code.

Đọc đến đây, chắc các bạn cũng muốn thực hiện tự động hóa! Từ bài báo này, chúng ta hãy cùng bắt đầu cuộc sống vui vẻ với tự động hóa nhé!