ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM THỰC TẬP TỐT NGHIỆP ĐỀ TÀI Integrate AI Model to Flutter Công ty thực tập Vitalify Asia Co , Ltd Lớp SE501 N1[.]
Trang 1
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM
THỰC TẬP TỐT NGHIỆP
ĐỀ TÀI: Integrate AI Model to Flutter
Công ty thực tập: Vitalify Asia Co., Ltd
Lớp: SE501.N11.PMCL Sinh viên thực hiện: Bùi Thiện Nhân – 19521927
TP Hồ Chí Minh, ngày 26 tháng 12 năm 2022
Trang 2NHẬN XÉT
(Của giảng viên)
Trang 3
MỤC LỤC
CHƯƠNG 1: GIỚI THIỆU CÔNG TY THỰC TẬP 6
10 Tìm hiểu về Flutter Specific code với MethodChannel 26
CHƯƠNG 4: KẾT QUẢ ĐẠT ĐƯỢC QUA ĐỢT THỰC TẬP 32
Trang 4LỜI NÓI ĐẦU
Ngày nay, ngành công nghiệp phát triển ứng dụng web là một bộ phận không thể thiếu của ngành công nghiệp phần mềm Với tốc độ phát triển vô cùng mạnh mẽ, ngành phát triển ứng dụng web đã và đang là nhân tố kích thích sự phát triển của công nghệ thông tin thế giới, cả về phần cứng và phần mềm
Cùng với xu thế phát triển của thế giới, Việt Nam cũng không phải ngoại lệ Ngành công nghiệp phát triển web non trẻ Việt Nam đã và đang phát triển mạnh mẽ, để hòa nhập với những công ty hàng đầu về xây dựng nền tảng web trên thế giới Bên cạnh sự phát triển của web thì những ngành nghề được tiếp cận người dùng một cách nhanh chóng như những
gì ta có thể thấy là mạng xã hội hay những website bán hàng trực tuyến cũng đang rất thịnh hành trên cả thế giới lẫn Việt Nam
Sau ba năm học tập trên trường, do mong muốn có thêm kinh nghiệm thực tế, cũng như muốn được tìm hiểu, bổ sung kiến thức trong một môi trường chuyên nghiệp, em có
dự định là sẽ thực tập trong học kì Vì vậy, em quyết định chọn Công Ty TNHH Vitalify Asia - một môi trường lý tưởng, hiện đại, chuyên nghiệp - là nơi sẽ giúp em thực hiện được
dự định này
Trang 5LỜI CẢM ƠN
Em xin chân thành cảm ơn ban giám hiệu và quý thầy cô trường Đại học Công nghệ Thông tin đã cung cấp và bồi dưỡng cho em những kiến thức cơ bản trong suốt 4 năm ngồi trên giảng đường đại học, để từ đó em có nền tảng áp dụng vào đợt thực tập một cách hiệu quả nhất có thể
Em xin gửi lời cảm ơn quý Công Ty TNHH Vitalify Asia đã tạo điều kiện cho em thực tập tại công ty cũng như cung cấp, bổ sung cho em những kiến thức mà em còn thiếu sót Quý công ty đã hỗ trợ em rất nhiều trong suốt thời gian thực tập vừa qua, dạy em những
kỹ năng cần thiết, truyền đạt cho em những kinh nghiệm mà các anh chị đã trải qua trong quá trình làm việc, trao đổi với khách hàng, tác phong và tinh thần trách nhiệm trước công việc được giao, những suy nghĩ tích cực Các anh chị cũng đã tạo cho em nhiều điều kiện
để ứng dụng những kiến thức đã học vào thực tế để xây dựng những dự án thực tiễn đi từ lúc ban đầu, nâng cao trình độ, cũng như tốc độ lập trình và trí thức thêm một bậc Em xin chân thành cảm ơn
Vì kiến thức bản thân còn hạn chế cũng như là lần đầu tiên được va chạm và tiếp xúc với thực tế, áp dụng lý thuyết vào công việc nên bản thân còn bỡ ngỡ và lúng túng, không tránh khỏi những thiếu sót, mong quý Thầy (Cô) có thể đóng góp ý kiến để em có thể hoàn thiện hơn
Em xin chân thành cảm ơn!
Bùi Thiện Nhân
TP Hồ Chí Minh, ngày 26 tháng 12 năm 2022
Trang 6DANH MỤC CÁC CỤM TỪ VIẾT TẮT
TNHH : Trách nhiệm Hữu hạn
Trang 7CHƯƠNG 1: GIỚI THIỆU CÔNG TY THỰC TẬP
I Giới thiệu chung về công ty
- Tên đơn vị: CÔNG TY TNHH VITALIFY Á CHÂU (VITALIFY ASIA CO., LTD)
- Thời gian làm việc: Thứ 2 đến thứ 6: 08h30 - 17h35
- Vision: “Delivering Happiness Through the Internet”
- Value: Providing Value to User
Hình 1.1: Logo Công ty TNHH Vitalify Asia
- Vitalify Asia là một công ty phát triển ứng dụng web và di động Công ty cung cấp dịch vụ phát triển và cải tiến sản phẩm nhanh chóng trên cơ sở DevOps với nhóm cam kết cung cấp giá trị cho người dùng; sẽ giải quyết mọi thứ, từ lập kế hoạch đến triển khai dịch vụ nhanh chóng, cải tiến và tăng trưởng cho các doanh nghiệp doanh nghiệp
- Kể từ khi thành lập vào năm 2008, Vitalify Asia đã tham gia phát triển phần mềm tập trung vào thiết bị di động để đạt được tầm nhìn "Mang lại hạnh phúc thông qua Internet” Với mục tiêu trở thành một nhóm chuyên nghiệp thực sự có thể cạnh tranh trên phạm vi toàn cầu, mỗi kỹ sư/thành viên/PM đều mở rộng vai trò và phạm vi trách nhiệm của cá nhân và cam kết cung cấp giá trị cho người dùng với cấu trúc chia nhóm nhỏ ưu tú Bây giờ, hơn 10 năm sau khi thành lập, Vitalify Asia sắp thử thách một giai đoạn mới để nâng cao hơn nữa giá trị năng lực kỹ thuật của họ tại Việt Nam Công ty sẽ tạo ra nhiều sản phẩm "Made In Vietnam" và bán chúng trên
Trang 8khắp thế giới Để đạt được mục tiêu này, Vitalify Asia sẽ tiếp tục nỗ lực cải tiến hàng ngày
II Cơ cấu tổ chức
Vitalify Asia phát triển các ứng dụng web và di động để phù hợp với nhu cầu kinh doanh của bạn Nhóm đa quốc gia của công ty tại Thành phố Hồ Chí Minh, Việt Nam,
sẽ tham gia nhóm của khách hàng từ xa và cam kết mang lại giá trị cho người dùng cuối cũng như phát triển dịch vụ của khách hàng để đảm bảo triển khai dịch vụ nhanh chóng và những cải tiến tiếp theo
Với kinh nghiệm phát triển hệ thống cho nhiều ngành công nghiệp sử dụng các công nghệ mới nổi, Vitalify Asia chuyên về các hệ thống có khả năng di động và thời gian thực Công ty cũng có thể linh hoạt hỗ trợ trong giai đoạn lập kế hoạch, bàn giao hoạt động và phát triển dịch vụ
Vitalify Asia được chia ra thành nhiều lab, mỗi lab bao gồm nhiều nhóm dự án và mỗi nhóm dự án sẽ được tổ chức theo mô hình Agile Scrum
Về một số nguyên tắc trong công việc:
- Mỗi sprint sẽ kéo dài từ 1-2 tuần tuỳ vào dự án
- Ngày bắt đầu của sprint sẽ là thứ 2
- Mỗi ngày developer sẽ gửi lại bản báo cáo công việc cho các BPM quản lý trước 16h45
- Sprint retrospective sẽ được tổ chức linh hoạt sau khi hoàn thành xong mỗi phase
- Internal weekly meeting sẽ gồm có
- Code review
- Sprint review
- Sprint retrospective
- Estimate cho spr
III Tổng quan việc kinh doanh
Một số đặc điểm của Vitalify Asia:
- Sự phát triển của công ty tập trung vào sự phát triển của sản phẩm và cung cấp giá trị cho người dùng của khách hàng Với suy nghĩ này, đảm bảo chất lượng và cải thiện hiệu suất luôn được ưu tiên - từ phân tích kinh doanh đến
ra mắt sản phẩm thông qua xác định và triển khai yêu cầu Ngoài ra, để tiếp
Trang 9tục tăng trưởng sản phẩm sau khi phát hành, công ty sẽ giới thiệu một loạt các biện pháp để tăng hiệu quả đồng thời đáp ứng nhanh chóng và linh hoạt nhu cầu thị trường và phản hồi của người dùng
Vitalify Asia chuyên về hiệu suất di động, thời gian thực và phát triển hệ thống di động cho một số ngành:
- Chăm sóc sức khỏe (Telemedicine)
- Fintech
- VR/AR/MR, Metaverse
- Startup (from MVP)
- Mobile / Hyper-casual Games
Trong 13 năm qua, công ty có hơn 400 sản phẩm thành công Mặc dù nhiều thành tựu trong số này bị hạn chế bởi các thỏa thuận bảo mật, đây là một sản phẩm được
sự cho phép nhắc đến của khách hàng của công ty:
1 Hankyou Baizou Kun 反響倍増くん
Visit site: https://www.retechraas.com/hankyobaizokun/index.php
Hình 1.2 Hankyou Baizou Kun 反響倍増くん
Trang 114 MAL Face Emotion
Visit site: https://faceemotion.vitalify.asia/en/index.html
Hình 1.5 MAL Face Emotion
Trang 12CHƯƠNG 2: NỘI DUNG THỰC TẬP
I Công nghệ, giải pháp và quy trình áp dụng
1 Giới thiệu về Git
Hình 2.1: Mô hình công cụ Git
Git là tên gọi của một Hệ thống quản lý phiên bản phân tán (Distributed Version Control System – DVCS) là một trong những hệ thống quản lý phiên bản phân tán phổ
biến nhất hiện nay DVCS nghĩa là hệ thống giúp mỗi máy tính có thể lưu trữ nhiều phiên
bản khác nhau của một mã nguồn được nhân bản (clone) từ một kho chứa mã nguồn (repository), mỗi thay đổi vào mã nguồn trên máy tính sẽ có thể ủy thác (commit) rồi đưa
lên máy chủ nơi đặt kho chứa chính Và một máy tính khác (nếu họ có quyền truy cập) cũng có thể clone lại mã nguồn từ kho chứa hoặc clone lại một tập hợp các thay đổi mới
nhất trên máy tính kia Trong Git, thư mục làm việc trên máy tính gọi là Working Tree
Trang 13Hình 2.2: Sơ đồ liên hệ giữa các máy tính
Ngoài ra, có một cách hiểu khác về Git đơn giản hơn đó là nó sẽ giúp bạn lưu lại các phiên bản của những lần thay đổi vào mã nguồn và có thể dễ dàng khôi phục lại dễ dàng mà không cần copy lại mã nguồn rồi cất vào đâu đó Và một người khác có thể xem các thay đổi của bạn ở từng phiên bản, họ cũng có thể đối chiếu các thay đổi của bạn rồi
Trang 14gộp phiên bản của bạn vào phiên bản của họ Cuối cùng là tất cả có thể đưa các thay đổi vào mã nguồn của mình lên một kho chứa mã nguồn
Cơ chế lưu trữ phiên bản của Git là nó sẽ tạo ra một “ảnh chụp” (snapshot) trên mỗi tập tin và thư mục sau khi commit, từ đó nó có thể cho phép bạn tái sử dụng lại một ảnh chụp nào đó mà bạn có thể hiểu đó là một phiên bản Đây cũng chính là lợi thế của Git so với các DVCS khác khi nó không “lưu cứng” dữ liệu mà sẽ lưu với dạng snapshot
Hình 2.3: Sơ đồ cơ cấu của Git
- Master: là nhánh chính, run trên production
- Dev: là nhánh replica cho nhánh master cộng với các nhánh feature đang được phát triển
- Feature: được tách từ nhánh dev, chức năng sau khi được phát triển sẽ được merge vào dev trước khi merge vào master
Trang 15Hình 2.4: Git branching
2 Giới thiệu về VSCode
Hình 2.5: Chương trình VSCode
Visual Studio Code là sản phẩm của Microsoft, ra mắt vào tháng 4 năm 2015 ở hội nghị
Build Đặc điểm nổi bật là đơn giản, gọn nhẹ, dễ dàng cài đặt
Trang 16Visual Studio Code có thể cài đặt được trên cả Windows, Linux và Mac OS và hỗ trợ
nhiều ngôn ngữ khác nhau
Hình ảnh giao diện ban đầu của VSCode như sau:
Hình 2.6: Giao diện ban đầu của VSCode
Nhìn sang thanh sidebar ta thấy 4 biểu tượng, đầu tiên là hai tờ giấy xếp chồng lên nhau, đây là cây thư mục chứ những file mà chúng ta đang làm việc Hình chiếc kính lúp
hỗ trợ chức năng tìm kiếm Một điểm đặc biệt là Visual Studio Code được tính hợp luôn git, rất tiện cho việc quản lý code của chúng ta
Biểu tượng thứ 4 là diệt con bọ, chính là chức năng hỗ trợ chúng ta fix bug Hình vuông cuối cùng là nơi cho phép chúng ta cài thêm các phần extensions mà Microsoft và cộng đồng viết thêm cho chúng ta, hỗ trợ quá trình code
Trang 173 Giới thiệu về mô hình làm việc Agile – Scrum
● Tại sao cần Agile?
Sự khác nhau giữa phương pháp làm việc truyền thống-Waterfall và Agile có thể tổng kết trong 2 từ: cứng nhắc và linh hoạt Trong khi Waterfall là 1 process khá cứng nhắc và
nguyên tắc, thì Agile lại rất linh hoạt và không ngừng thay đổi sao cho phù hợp với thời đại và ý kiến của khách hàng Chi tiết hơn về sự khác nhau như sau:
- Waterfall là quy trình có cấu trúc, bạn không thể bắt đầu công đoạn mới cho đến khi công đoạn trước đấy được hoàn thành Agile là quy trình linh hoạt, cho phép bạn chạy dự án theo cách mà bạn muốn Waterfall là tuần tự, và Agile thì không
ép buộc vào 1 quy trình tuần tự nào
- Các dự án theo quy trình Waterfall thường cần define cụ thể yêu cầu của dự án, trong khi các yêu cầu trong các dự án Agile có thể thay đổi và phát triển
- Trong các dự án Waterfall, bạn không thể thay đổi những thứ bạn đã làm trong những công đoạn trước, tuy nhiên Agile rất phù hợp và có thể đáp ứng được các thay đổi
Hình 2.7: Mô hình Agile và Waterfall
Một cách tổng quát, khi một sản phẩm được xây dựng theo mô hình Waterfall, thì các
công việc trong dự án được xác định theo nguyên tắc lúc ban đầu, và không tiếp thu được
Trang 18ý kiến của người sử dụng trong quá trình hình thành sản phẩm Việc giành quá nhiều thời gian cho một sản phẩm mà không biết được rằng mức độ khả thi cũng như những điều mà người sử dụng quan tâm sẽ gây ảnh hưởng rất nhiều đến chất lượng sản phẩm
Trong khi đó, Agile giúp các nhà phát triển có thể nhận dạng, điều chỉnh các vấn đề và khiếm khuyết một cách nhanh chóng Các điểm mạnh của Agile là:
- Thực hiện thay đổi dễ dàng: Bởi vì dự án được chia thành các phần nhỏ, riêng
biệt, không phụ thuộc lẫn nhau, nên những thay đổi được thực hiện rất dễ dàng,
ở bất kỳ giai đoạn nào của dự án
- Không cần phải nắm mọi thông tin ngay từ đầu: Phù hợp với những dự án
chưa xác định được mục tiêu cuối cùng rõ ràng, vì việc này không quá cần thiết trong giai đoạn đầu
- Bàn giao nhanh hơn: Việc chia nhỏ dự án cho phép đội ngũ có thể tiến hành
kiểm tra theo từng phần, xác định và sửa chữa vấn đề nhanh hơn, nhờ đó việc bàn giao công việc sẽ nhất quán và thành công hơn
- Chú ý đến phản hồi của khách hàng và người dùng: Cả khách hàng và người
dùng cuối đều có cơ hội để đóng góp các ý kiến và phản hồi, từ đó họ sẽ có ảnh hưởng một cách mạnh mẽ và tích cực tới sản phẩm cuối cùng
- Cải tiến liên tục: Agile khuyến khích thành viên trong đội ngũ làm việc và khách
hàng cung cấp phản hồi của mình, khi đó các giai đoạn khác nhau của sản phẩm cuối có thể được kiểm tra và cải thiện lại nhiều lần nếu cần
Trong ngành công nghiệp phần mềm, phương thức sản xuất phần mềm có một vai trò
vô cùng quan trọng, nó quyết định cấu trúc tổ chức, qui trình phát triển, khả năng thành
công của các dự án Trong những năm gần đây Agile- Scrum nổi lên và thay thế mô hình thác nước (Water fall ) truyền thống như một phương thức tổ chức sản xuất ưu việt được nhiều công ty phần mềm áp dụng và thành công Quản lý dự án theo nguyên tắc Agile nổi
lên như một sự thay thế tối ưu cho bất kì dự án nào
Trang 19Hình 2.8: Quy trình Agile
● Định nghĩa mô hình Agile
Khái niệm Agile (viết tắt của Agile Software Development) có nghĩa là phương thức
phát triển phần mềm linh hoạt, được ứng dụng trong quy trình phát triển phần mềm với
mục tiêu là đưa sản phẩm đến tay người dùng càng nhanh càng tốt Nguyên tắc phát triển
mô hình là phân đoạn lặp (iterative) và tăng trưởng (incremental), theo đó nhu cầu và
giải pháp tiến hóa thông qua sự hợp tác giữa các nhóm tự quản và liên chức năng
Rất nhiều nơi định nghĩa Agile như một phương pháp Thực chất, Agile giống như một phương pháp luận, một triết lý dựa trên hơn nguyên tắc phân đoạn vòng lặp (iterative) và tăng trưởng (incremental)
Ngày nay, triết lí Agile đã vượt xa khỏi khu vực truyền thống của mình là phát triển phần mềm để đóng góp sự thay đổi trong cách thức làm việc, quản lí, sản xuất ở các ngành khác như sản xuất, dịch vụ, sales, marketing, giáo dục và trở thành một phương thức quản
lý dự án phổ biến nhất hiện nay với nhiều đại diện được gọi là các phương pháp “họ Agile”
● 4 tôn chỉ trong Agile
Trang 20- Cá nhân và sự tương hỗ quan trọng hơn quy trình và công cụ: Trọng tâm đặt lên con người, xây dựng tương tác và hỗ trợ giữa các thành viên trong nhóm Những thành viên có năng lực, chịu tương trợ nhau trong công việc sẽ mang đến thành công cho dự án
- Sản phẩm dùng được tốt hơn tài liệu đầy đủ: Tập trung thời gian để làm ra phần mềm hoàn chỉnh đáp ứng hoàn hảo yêu cầu khách hàng
- Cộng tác với khách hàng quan trọng hơn đàm phán hợp đồng: Hiểu được khách hàng cần gì để tư vấn và điều chỉnh sản phẩm thay vì chỉ dựa vào các điều khoản trong hợp đồng
- Phản hồi thay đổi hơn là bám sát kế hoạch: Agile khuyến khích thích nghi với sự thay đổi, đó có thể là thay đổi về công nghệ, nhân sự, deadline,
● 12 Nguyên tắc
- Đáp ứng toàn diện nhu cầu khách hàng thông qua việc giao hàng sớm và sản phẩm có giá trị
- Thay đổi yêu cầu được chào đón, thậm chí là rất muộn trong quá trình phát triển
- Giao phần mềm chạy được cho khách hàng một cách thường xuyên
- Nhà kinh doanh và các kỹ sư phần mềm cần làm việc cùng nhau trong suốt dự
án
- Xây dựng dự án xung quanh các cá nhân có động lực Cung cấp sự hỗ trợ cần thiết, môi trường làm việc và niềm tin để hoàn thành công việc
- Trao đổi trực tiếp là cách truyền đạt thông tin hiệu quả nhất
- Thước đo chính của tiến độ là phần mềm chạy tốt
- Phát triển liên tục và bền vững
- Cải tiến sự linh hoạt bằng cách quan tâm đến kỹ thuật và thiết kế
- Nghệ thuật tối đa hóa lượng công việc chưa xong - Sự đơn giản là cần thiết
- Nhóm tự tổ chức
- Thích ứng thường xuyên với những thay đổi
● Các bước làm việc theo Agile - Scrum
Scrum định nghĩa quy tắc cho bốn sự kiện chủ chốt nhằm tạo môi trường và quy cách
hoạt động và cộng tác cho các thành viên trong dự án Các sự kiện này diễn ra trước khi Sprint bắt đầu (là sự kiện lập kế hoạch – Sprint Planning), trong khi Sprint diễn ra (sự kiện Daily Scrum) và sau khi Sprint kết thúc (sự kiện Sprint Review và Sprint Retrospective)
- Sprint Planning (Họp Kế hoạch Sprint- Iteration): Nhóm phát triển gặp gỡ với
Product Owner để lên kế hoạch làm việc cho một Sprint (xem thêm phần Sprint