TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO THỰC TẬP KIẾN TRÚC SOURCE CODE PHẦN MỀM ANDROID Công ty thực tập SHub JSC Người phụ trách Lê Văn Tư Thực tập sinh Trần Minh Cường TP[.]
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ PHẦN MỀM BÁO CÁO THỰC TẬP KIẾN TRÚC SOURCE CODE PHẦN MỀM ANDROID Công ty thực tập : SHub JSC Người phụ trách : Lê Văn Tư Thực tập sinh : Trần Minh Cường TP Hồ Chí Minh, tháng 12 năm 2022 LỜI MỞ ĐẦU Xu hướng công nghệ ngày phát triển, thiết bị thông minh trọng Việc lập trình thiết bị di động xu Các thiết bị di động Android phổ biến, nắm bắt xu hướng nên em có định hướng phát triển thân lĩnh vực lập trình thiết bị di động (android) Sau ba năm học tập trường, mong muốn có thêm kinh nghiệm thực tế, muốn tham gia môi trường chuyên nghiệp, em có dự định thực tập hè Vì vậy, em định chọn Shub môi trường lý tưởng, đại, chuyên nghiệp – nơi giúp em thực dự định Trần Minh Cường LỜI CẢM ƠN Lời đầu tiên, em xin bày tỏ lòng biết ơn sâu sắc đến Ban giám hiệu, quý thầy cô trường Đại học Công nghệ thông tin – ĐHQG HCM nói chung q thầy khoa Cơng nghệ Phần mềm nói riêng Trải qua tháng thực tập Công ty Cổ phần Công nghệ Giáo dục SHub khơng dài lợi thời gian cho em trình viết báo cáo thực tập Và suốt trình thực báo cáo, em nhận nhiều giúp đỡ nhiệt tình anh chị Cơng ty Cổ phần Công nghệ Giáo dục SHub Cuối cùng, em xin gửi lời cảm ơn chân thành đến Ban lãnh đạo công ty, anh Nguyễn Đăng An – CEO Công ty Cổ phần Công nghệ Giáo dục SHub, anh Lê Văn Tư – Hướng dẫn trực tiếp đồng hành, hướng dẫn cho em suốt trình thực tập Cảm ơn tồn tập thể cơng ty hỗ trợ em nhiều trình thực hoàn thành thời gian thực tập Do thời gian thực tập trình độ cịn hạn chế, nên báo cáo thực tập không tránh khỏi sai sót Em mong nhận đóng góp, ý kiến q thầy để báo cáo hồn thiện Em xin chân thành cảm ơn Trần Minh Cường TP HCM, 22/12/2022 Trần Minh Cường NHẬN XÉT CỦA KHOA Trần Minh Cường Mục lục Chương 1: Giới thiệu công ty thực tập 1 Giới thiệu công ty SHub JSC Sản phẩm công ty Chương 2: Nội dung thực tập Tìm hiểu công ty kỹ công ty Nghiên cứu kỹ thuật 2.1 Các công cụ làm việc 2.2 Đọc source code tài liệu hướng dẫn 2.3 Tìm hiểu Jetpack compose coroutine Thực project Lịch làm việc Chương 3: Chi tiết xây dựng kiến trúc Android refactor code 10 Giới thiệu lý thực refactor 10 Thực 10 Kết hoạch 10 3.1 Thực refactor bảng tin 10 3.2 Thực refactor tài liệu 13 Chương 4: Kết đạt 14 TÀI LIỆU THAM KHẢO 15 TỔNG KẾT 15 Trần Minh Cường Chương 1: Giới thiệu công ty thực tập Giới thiệu công ty SHub JSC SHub Classroom nhiều dự án tên chung SHub sinh viên, cựu sinh viên Trường ĐH Khoa học tự nhiên, ĐH Quốc gia TP.HCM thực Hiện tại, SHub Classroom phát triển theo mơ hình startup Khu cơng nghệ phần mềm ĐH Quốc gia TP.HCM với 10 thành viên Định hướng nhóm sử dụng cơng nghệ tạo sản phẩm giúp hỗ trợ trình đổi giáo dục Việt Nam, đặc biệt hướng đến xây dựng cộng đồng học tập môi trường trực tuyến Hình Logo cơng ty SHub Classroom Thông tin công ty: Tên công ty: Công ty Cổ phần Công nghệ Giáo Dục SHub Người sáng lập: Nguyễn Đăng An Năm thành lập: 2019 Ý tưởng ban đầu: Ứng dụng hỗ trợ làm tập, sau phát triển lên thành phần mềm hỗ trợ giảng dạy học tập dành cho giáo viên Các thành tích đạt được: - Giải Nhất thi “Tri thức trẻ” - Top ứng dụng giáo dục thịnh hành Google Play - Hơn triệu lượt download app (tính tảng Android IOS, chưa tính website) Trần Minh Cường - Có triệu người dùng tính đến thời điểm - Có 200 trường trung tâm đào tạo tham gia sử dụng Địa cơng ty: Phịng I103, Nhà A, Khu công nghệ phần mềm, Ðường nội ÐHQG - TPHCM Sản phẩm công ty SHub Classroom tảng phục vụ nhà trường, giáo viên học sinh, tập trung vào việc giải khía cạnh như: Học tập, quản lý, giao tiếp, hỗ trợ giáo viên học sinh, kết nối cơng cụ tiện ích Đối với giáo viên Tách câu, đảo đề tự động: Ứng dụng trí tuệ nhân tạo, file đề không cần theo format cố định việc mã đề khác tự động tạo học sinh làm bài, giúp tăng tính minh bạch việc làm học sinh Hệ thống tự động nhận diện đảo thứ tự câu để tạo thành nhiều mã đề khác Chấm điểm tự luận trực tiếp hình ảnh: Giáo viên mô tả, nhận xét phần mà học sinh sai/ trực tiếp lên hình ảnh Bên cạnh đó, giáo viên nhận xét thêm phần tổng thể làm học sinh đính kèm với làm Tính phần thiếu để hỗ trợ giáo viên chấm tự luận cho học sinh làm kiểm tra online Tạo đề online: Với SHub, người dùng tạo tập trắc nghiệm tự luận trực tuyến Ngoài giáo viên cịn đăng tải đề theo nhiều cách: từ kho học liệu tạo, từ file sẵn có tạo nhiều mã đề tự động thơng qua tính tách câu từ file word Kho học liệu trực tuyến: Giáo viên xây dựng kho học liệu riêng Học liệu dùng để tạo tập, giảng, tài liệu cho lớp học tương lai Ngoài ra, SHub cịn tự động lưu trữ thơng tin giáo viên, lớp giảng hệ thống SHub Classroom, thông tin lớp học, bảng điểm học sinh sau làm tập hệ thống Những thông tin dễ dàng truy xuất qua file excel để người dùng dễ dàng quản lý chia sẻ Kiểm tra trực tuyến: với tính này, Shub cung cấp cho người dùng tiện ích tạo đề cung cấp mã đề cho học sinh Việc chấm điểm gửi kết cập nhập thông qua ứng dụng Đối với doanh nghiệp giáo dục: Quản lý lớp học giáo viên thuộc hệ thống trường Trần Minh Cường Quản lý hồ sơ học sinh, bao gồm (thông tin cá nhân, bảng điểm, ) Hỗ trợ Nhà trường triển khai kiểm tra tập trung, thảo luận, thông báo cho lớp, khối lớp hay toàn trường Bảo mật tối ưu toàn tài nguyên kho lưu trữ liệu Trung tâm Đại học Quốc gia TP HCM Điểm bật: Shub cung cấp miễn phí chức tạo quản lý lớp học, tạo đề kiểm tra thống kê điểm số, lưu trữ học liệu xuất file đủ để đáp ứng nhu cầu giáo viên việc tổ chức lớp học hệ thống Muốn cập nhập thêm tính ưu việt khác người dùng phải nâng cấp lên phiên Premium SHub Classroom hỗ trợ tạo tập từ file mà không cần soạn thảo Giúp giáo viên tiết kiệm đến 70% thời gian cho lớp học Việc học học sinh trở nên thú vị với SHub Classroom Sau làm xong, kết học sinh hiển thị Thông tin làm học sinh cập nhật liên tục cho giáo viên phụ huynh Hồn tồn miễn phí cho học sinh Chương 2: Nội dung thực tập Đợt thực tập với chủ đề “Kiến trúc Source Code phần mềm Android” nhằm mục đích giúp sinh viên thực tập đào tạo kiến thức kiến trúc source code Android, đồng thời rèn luyện kỹ mềm làm việc nhóm, giao tiếp với đồng nghiệp Tại cơng ty, sinh viên có hội học tập, khám phá làm việc mơi trường phát triển Tìm hiểu cơng ty kỹ công ty Thời gian: ngày Nội dung: Giới thiệu công ty, cách tổ chức công ty Được nghe người phụ trách giới thiệu cơng ty, q trình thành lập phát triển (như nhắc đến trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức cơng ty Ngồi ra, thực tập sinh cịn giới thiệu cách thức làm việc công ty thời gian làm, quy định cần phải tuân thủ, cách sử dụng email công việc… Kết : Hiểu thêm công ty Shub JSC, q trình thành lập phát triển Có thêm kỹ việc sử dụng email công việc, làm việc có kế hoạch, có kỷ luật, có trách nhiệm Trần Minh Cường Nghiên cứu kỹ thuật 2.1 Các công cụ làm việc Thời gian: ngày Nội dụng: Tìm hiểu cơng cụ sử dụng trình làm việc Trong thời gian này, mentor hướng dẫn thực tập sinh tìm hiểu cơng cụ giúp ích cho cơng việc sau Một số phần mềm như: - GitLab: trang web dựa DevOps mã nguồn mở phần mềm có chức nhiệm vụ quản lý phiên mã nguồn, cung cấp trình quản lý Gitrepository Trình quản lý có tiện ích wiki, theo dõi cố tích hợp liên tục Bên cạnh khả triển khai tính pipeline sử dụng license mã nguồn mở phát triển GitLab Inc - Trello: công cụ quản lý công việc ghi hướng dẫn hiệu tiện lợi - Android Studio – IDE hỗ trợ phát triển Android - Discord: Công cụ trao đổi công việc, meeting 2.2 Đọc source code tài liệu hướng dẫn Các kiến thức liên quan: ngôn ngữ Kotlin Android, Kiến trúc dự án Android Thời gian: tuần Nội dung: Đọc tài liệu hướng dẫn tìm hiểu cơng nghệ để xây dựng kiến trúc phần mềm Android - Định nghĩa Android: Android tập hợp phần mềm (software stack) dành cho thiết bị di động, bao gồm hệ điều hành, phần mềm trung gian (middleware)và ứng dụng chủ chốt (key applications) Google Inc mua lại phát triển ban đầu phần mềm từ Android Inc., năm 2005 Hệ điều hành di động Android dựa tảng Linux - Ngôn ngữ Kotlin mạnh vượt trội so với Java: Kotlin ngơn ngữ lập trình phát triển JetBrains Nó xuất lần đầu năm 2011 JetBrains công bố dự án họ mạng tên "Kotlin" Đây ngôn ngữ mã nguồn mở Trần Minh Cường Kotlin biên dịch thành JVM bytecode JavaScript - Giống Java, Bytecode format biên dịch cho Kotlin Bytecode nghĩa biên dịch, đoạn code chạy thơng qua máy ảo thay xử lý Bằng cách này, code chạy tảng nào, biên dịch chạy thông qua máy ảo Khi Kotlin chuyển đổi thành bytecode, truyền qua mạng thực JVM Kotlin sử dụng tất tảng thư viện Java có - Bất kể tảng cao cấp dựa xử lý annotation Điều quan trọng Kotlin dễ dàng tích hợp với Maven, Gradle hay hệ thống build khác Kotlin dễ học dễ tiếp cận Null-safety Kotlin: giúp thoát khỏi NullPointerException Giúp tránh exeption kiểu trỏ null Trong Kotlin, hệ thống từ chối biên dịch đoạn code gán hay trả giá trị null Review code khơng cịn vấn đề - Kotlin tập trung nhiều vào việc cú pháp dễ hiểu, dễ đọc để review, chúng hồn thành thành viên team chưa quen với ngôn ngữ - Kiến trúc phần mềm Android + Tìm hiểu Dependency Injection Theo nguyên lý cuối SOLID - Dependency inversion principle: Các module cấp cao không nên phụ thuộc vào modules cấp thấp Cả nên phụ thuộc vào abstraction Interface (abstraction) không nên phụ thuộc vào chi tiết, mà ngược lại.( Các class giao tiếp với thông qua interface, thông qua implementation.) Với cách code thông thường, module cấp cao gọi module cấp thấp Module cấp cao phụ thuộc module cấp thấp, điều tạo dependency Khi module cấp thấp thay đổi, module cấp cao phải thay đổi theo Một thay đổi kéo theo hàng loạt thay đổi, giảm khả bảo trì code Trần Minh Cường Chính tn theo Dependency Inversion principle, module phụ thuộc vào interface khơng đổi Ta dễ dàng thay thế, sửa đổi module cấp thấp mà không ảnh hưởng tới module cấp cao Từ ta có Dependency Injection: cách để thực Inversion of Control Pattern + Network: Hầu hết ứng dụng Android thị trường kết nối với Internet để thực số thao tác mạng Chẳng hạn truy xuất email, tin nhắn thông tin tương tự qua máy chủ phụ trợ Việc giúp đơn giản hoá trình tìm nạp liệu, đồng thời hỗ trợ ứng dụng tuân thủ phương pháp hay Android, chẳng hạn thực thao tác luồng chế độ Sử dụng thư viện Retrofit để kết nối với dịch vụ web REST Internet nhận phản hồi Sử dụng thư viện Moshi để phân tích cú pháp phản hồi JSON thành đối tượng liệu + Module: Nơi phân chia tính phần mềm, khái qt hố tính giúp việc phát triển mở rộng cách dễ dàng + UI Layer: Vai trò giao diện người dùng hiển thị liệu ứng dụng đóng vai trị điểm trình tương tác người dùng Bất liệu thay đổi, tương tác người dùng (chẳng hạn nhấn vào nút) đầu vào bên (chẳng hạn phản hồi mạng), giao diện người dùng cập nhật để phản ánh thay đổi Về mặt hiệu quả, giao diện người dùng đại diện trực quan trạng thái ứng dụng truy xuất từ lớp liệu + Domain Layer: Lớp miền chịu trách nhiệm việc tổng hợp logic nghiệp vụ phức tạp, logic nghiệp vụ đơn giản sử dụng lại nhiều ViewModel Lớp khơng bắt buộc khơng phải ứng dụng có yêu cầu Bạn nên sử dụng thuộc tính cần, ví dụ: để xử lý độ phức tạp ưa chuộng khả tái sử dụng + Data Layer: Trong lớp giao diện người dùng chứa trạng thái liên quan đến giao diện người dùng logic giao diện người dùng, lớp liệu chứa liệu ứng Trần Minh Cường dụng logic nghiệp vụ Logic nghiệp vụ mang lại giá trị cho ứng dụng—được tạo từ quy tắc nghiệp vụ giới thực xác định cách tạo, lưu trữ thay đổi liệu ứng dụng Thực hiện: - Đọc tài liệu hướng - Xem source code mẫu hiểu cách vận hành project công ty Kết quả: - Nâng cao kỹ lập trình với ngơn ngữ Kotlin - Biết cách kiến trúc phần mềm để dễ phát triển bảo trì 2.3 Tìm hiểu Jetpack compose coroutine Thời gian: tuần Nội dung: Các kiến thức vể Jetpack compose coroutine để xây dựng giao diện Android cách nhanh chóng so với XML quản lý đa luồng với coroutine - Khái niệm Jackpack Compose: Jetpack Compose công cụ đại, khuyên dùng cho Android để xây dựng giao diện người dùng gốc Cơng cụ đơn giản hố đẩy nhanh q trình phát triển giao diện người dùng Android Nhanh chóng đưa ứng dụng vào hoạt động với mã ngắn gọn hơn, công cụ mạnh mẽ API Kotlin trực quan - Lý sử dụng Jetpack Compose: Ít code hơn: Việc viết mã ảnh hưởng đến tất giai đoạn phát triển, tập trung vào vấn đề có, phải kiểm tra, gỡ lỗi xảy lỗi hơn; với tư cách người đánh giá người bảo trì, bạn có mã để đọc, hiểu, xem lại bảo trì Compose cho phép bạn làm nhiều việc mã hơn, so với việc sử dụng hệ thống Android View: nút, danh sách ảnh động Code viết viết Kotlin, thay tách mã Kotlin XML Mã viết Compose đơn giản dễ dàng để bảo trì thứ bạn xây dựng Trực quan: Compose sử dụng API khai báo, nghĩa tất cần làm mô tả giao diện người dùng Compose xử lý phần lại API trực quan Với Compose, tạo thành phần nhỏ, khơng có trạng thái không gắn với hoạt động Trần Minh Cường mảnh cụ thể Điều giúp dễ dàng sử dụng lại thử nghiệm chúng Trong Compose, trạng thái hoàn toàn rõ ràng chuyển tới nội dung kết hợp Bằng cách đó, có nguồn đáng tin cậy cho trạng thái gói gọn tách biệt Sau đó, trạng thái ứng dụng thay đổi, giao diện người dùng bạn tự động cập nhật Đẩy mạnh quy trình phát triển: Compose tương thích với tất mã có: gọi mã Compose từ Views Views từ Compose Hầu hết thư viện phổ biến Di chuyển, ViewModel coroutine Kotlin hoạt động với Compose, bạn bắt đầu áp dụng vào lúc nơi bạn muốn Mạnh mẽ: Compose cho phép tạo ứng dụng tuyệt đẹp có quyền truy cập trực tiếp vào API tảng Android khả hỗ trợ tích hợp dành cho Material Design, Giao diện tối, ảnh động nhiều ưu điểm khác Với Compose, việc mang lại chuyển động sống cho ứng dụng bạn thơng qua ảnh động thật nhanh chóng dễ dàng - Khái niệm Coroutine: Coroutine mẫu thiết kế cho chế xử lý đồng thời mà bạn dùng Android để đơn giản hố mã nguồn thực thi khơng đồng Coroutine thêm vào Kotlin phiên 1.3 dựa khái niệm sẵn có ngôn ngữ khác Trên Android, coroutine giúp quản lý tác vụ chạy thời gian dài chặn luồng khiến ứng dụng bạn khơng phản hồi Hơn 50% nhà phát triển chuyên nghiệp sử dụng coroutine cho biết suất làm việc họ tăng lên Chủ đề trình bày cách bạn sử dụng coroutine Kotlin để giải vấn đề này, qua cho phép bạn viết mã ứng dụng rõ ràng súc tích - Tính coroutine: Coroutine giải pháp đề xuất để lập trình khơng đồng Android Những tính đáng ý bao gồm: Dung lượng nhẹ, rị rỉ hơn, tích hợp sẳn tình hỗ trợ huỷ, tích hợp Jetpack Thực project Sau tuần đọc tài liệu mày mò thực hành, thực tập sinh nắm kiến thức Kotlin, Jetpack Compose, Android Trong tuần tiếp theo, thực tập sinh áp Trần Minh Cường dụng kiến thức học để thực Refactor ứng dụng kiến trúc Android Chi tiết đồ án nói phần sau Lịch làm việc Tuần Cơng việc - Tìm hiểu cơng ty, Người Mức độ Nhận xét hướng dẫn hoàn nguời hướng thành dẫn Lê Văn Tư 10 Lê Văn Tư 10 Lê Văn Tư 10 cách tổ chức công ty - Làm quen với công cụ làm việc công ty - Học cách trao đổi làm việc - Tìm hiểu ngơn ngữ lập trình Kotlin, Jetpack Compose Coroutine - Thực hành codelab hướng dẫn - Đọc tài liệu source code công ty 3,4 - Đọc tài liệu xây dựng kiến trúc cho dự án 5,6,7,8 Refactor Bảng tin Lê Văn Tư 10 7,8 Refactor Tài liệu Lê Văn Tư 10 Trần Minh Cường 10 9,10,11,12 Fix code tồn động Lê Văn Tư 10 Refactor Chương 3: Chi tiết xây dựng kiến trúc Android refactor code Giới thiệu lý thực refactor Do Soure code sử dụng XML Java sử dụng mơ hình MVC nhiều lỗi gây hay xảy crash hệ thống Khó bảo trì, phát triển tính Source code cần refactor, đặc biệt source code cần chuyển từ Java sang Kotlin Thực Trần Minh Cường, hỗ trợ Lê Văn Tư Kết hoạch 3.1 Thực refactor bảng tin - Đọc tài liệu, đọc source code, tìm hiểu tính phần thực - Take notes việc cần làm - Tìm hiểu api gọi - Tiến hành chuyển đổi từ giao diện XML sang Jetpack Compose áp dụng kiến trúc - Tối ưu, xây dựng giao diện đẹp mắt dễ bảo trì Kết quả: - Hồn tất task - Giao diện giống với design, tính ổn định Trần Minh Cường 11 Thêm loading vào trang giao diện Lúc đầu giao diện khơng có loading gây cảm giác chờ đợi cho người dùng Cập nhật thêm loading giúp cho trải nghiệm người dùng trở tốt Cập nhật lại giao diện Jetpack Compose Trần Minh Cường 12 Trần Minh Cường 13 Chuyển đổi giao diện từ giao diện cũ sang giao diện mới, thay đổi phần comment từ Comment Bottom Dialog sang Comment Screen 3.2 Thực refactor tài liệu - Chuyển đổi giao diện từ XML sang Jetpack Compose - Chuyển file java sang kotlin - Tối ưu hóa hàm Kết quả: - Hồn thành Task - fix bugs cịn tồn động Trần Minh Cường 14 Chương 4: Kết đạt So sánh phiên 2.9.3 so với 2.9.2 chưa refactor Sự cố lỗi tăng 777,35% lỗi ANR tăng 233,3 % So sánh phiên 2.9.4 so với 2.9.3 sau refactor Sự cố lỗi giảm 92,05% lỗi ANR tăng 26,93% giảm nhiều so với phiên trước Trần Minh Cường 15 TÀI LIỆU THAM KHẢO [1] "Shub Classroom", https://shub.edu.vn/ [2] "Cấu trúc ứng dụng | Android Developer", https://developer.android.com/topic/architecture/intro?fbclid=IwAR1SCaAqM1qycK tXSTqyN-P9HjiAhvZg17zMMvZJLw3Xyz6qA87RLgq2oXM [3] "Khóa học Kotlin Android Developer", https://developer.android.com/courses/android-basicskotlin/course?fbclid=IwAR2zpDAGWkxxMz4cgT7zeLfI1NTnfmVduFJdGAFXY1 DLUrwriarKYnINrmQ [4] "Tìm hiểu kiến trúc GitLab", https://viblo.asia/p/tim-hieu-kien-truc-gitlabBAQ3vVbZvbOr TỔNG KẾT Như vậy, vòng thời gian ngắn ngủi, thực tập sinh kịp hoàn thành refactor kiến trúc lại Source Code Sau refactor, đầy đủ tính thực tối ưu Chân thành cảm ơn giúp đỡ anh team SHub Classroom Cảm ơn tất thầy cô giúp em hoàn thành báo cáo Trần Minh Cường ... dung thực tập Đợt thực tập với chủ đề ? ?Kiến trúc Source Code phần mềm Android” nhằm mục đích giúp sinh viên thực tập đào tạo kiến thức kiến trúc source code Android, đồng thời rèn luyện kỹ mềm. .. cho em suốt trình thực tập Cảm ơn tồn tập thể cơng ty hỗ trợ em nhiều q trình thực hồn thành thời gian thực tập Do thời gian thực tập trình độ cịn hạn chế, nên báo cáo thực tập khơng tránh khỏi... khoa Công nghệ Phần mềm nói riêng Trải qua tháng thực tập Cơng ty Cổ phần Công nghệ Giáo dục SHub không dài lợi thời gian cho em trình viết báo cáo thực tập Và suốt trình thực báo cáo, em nhận