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[.]
Trang 1TRƯỜ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
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
Trang 2LỜI MỞ ĐẦU
Xu hướng công nghệ đang ngày càng phát triển, các thiết bị thông minh càng được chú trọng hơn Việc lập trình trên thiết bị di động đang là xu thế hiện nay Các thiết bị di động Android rất phổ biến, nắm bắt xu hướng nên em có định hướng phát triển bản thân trong lĩnh vực lập trình trên thiết bị di động (android)
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 tham gia trong một môi trường chuyên nghiệp, em có dự định là sẽ thực tập trong
hè Vì vậy, em quyết định chọn Shub 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 3LỜ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 và quý thầy cô khoa Công nghệ Phần mềm nói riêng
Trải qua 3 tháng thực tập tại Công ty Cổ phần Công nghệ Giáo dục SHub tuy không dài nhưng đó là một lợi thế về thời gian cho em trong quá trình viết báo cáo thực tập Và trong suốt quá trình thực hiện báo cáo, em đã nhận được rất nhiều sự giúp đỡ nhiệt tình của các anh chị tại 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
đã luôn đồng hành, hướng dẫn cho em trong suốt quá trình thực tập Cảm ơn toàn bộ tập thể công ty cũng đã hỗ trợ em rất nhiều trong quá trình thực hiện và hoàn thành thời gian thực tập
Do thời gian thực tập và trình độ vẫn còn hạn chế, nên báo cáo thực tập sẽ không tránh khỏi những sai sót Em rất mong nhận được những đóng góp, ý kiến của quý thầy cô để bài báo cáo hoàn thiện hơn
Em xin chân thành cảm ơn
Trần Minh Cường
TP HCM, 22/12/2022
Trang 4NHẬN XÉT CỦA KHOA
Trang 5Mục lục
Chương 1: Giới thiệu công ty thực tập 1
1 Giới thiệu công ty SHub JSC 1
2 Sản phẩm của công ty 2
Chương 2: Nội dung thực tập 3
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 3
2 Nghiên cứu kỹ thuật 4
2.1 Các công cụ làm việc 4
2.2 Đọc source code và tài liệu hướng dẫn 4
2.3 Tìm hiểu về Jetpack compose và coroutine 7
3 Thực hiện project 8
4 Lịch làm việc 9
Chương 3: Chi tiết về xây dựng kiến trúc Android và refactor code 10
1 Giới thiệu về lý do thực hiện refactor 10
2 Thực hiện 10
3 Kết hoạch 10
3.1 Thực hiện refactor bảng tin 10
3.2 Thực hiện refactor tài liệu 13
Chương 4: Kết quả đạt được 14
TÀI LIỆU THAM KHẢO 15
TỔNG KẾT 15
Trang 6Chương 1: Giới thiệu công ty thực tập
1 Giới thiệu công ty SHub JSC
SHub Classroom là một trong nhiều dự án dưới tên chung SHub do các 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 Hiện tại, SHub Classroom đang phát triển theo mô hình startup tại Khu công nghệ phần mềm ĐH Quốc gia TP.HCM với hơn 10 thành viên Định hướng hiện nay của nhóm là sử dụng công nghệ tạo ra các sản phẩm giúp hỗ trợ những quá trình đổi mớ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 trên môi trường trực tuyến
Hình 1 Logo của 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 bài tập, sau phát triển lên thành phần mềm hỗ trợ giảng dạy và học tập dành cho giáo viên
Các thành tích đạt được: - Giải Nhất cuộc thi “Tri thức trẻ”
- Top 4 ứng dụng giáo dục thịnh hành trên Google Play
- Hơn 3 triệu lượt download app (tính trên cả nền tảng Android và IOS, chưa tính trên website)
Trang 7- Có hơn 5 triệu người dùng tính đến thời điểm hiện tại - Có hơn 200 trường và các trung tâm đào tạo tham gia sử dụng Địa chỉ công ty: Phòng I103, Nhà A, Khu công nghệ phần mềm, Ðường nội bộ ÐHQG - TPHCM
2 Sản phẩm của công ty
SHub Classroom là một nền tảng phục vụ cả nhà trường, giáo viên và học sinh, tập trung vào việc giải quyết những khía cạnh như: Học tập, quản lý, giao tiếp, hỗ trợ giáo viên và học sinh, kết nối và các 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 đề bài không cần theo format
cố định bằng việc các mã đề khác nhau được tự động tạo khi học sinh làm bài, giúp tăng tính minh bạch trong việc làm bài của học sinh Hệ thống sẽ tự động nhận diện và đảo thứ tự các câu để tạo thành nhiều mã đề khác nhau Chấm điểm tự luận trực tiếp trên hình ảnh: Giáo viên có thể mô tả, nhận xét phần mà học
sinh sai/ đúng trực tiếp lên hình ảnh Bên cạnh đó, giáo viên có thể nhận xét thêm về các phần và tổng thể bài làm của học sinh được đính kèm với bài làm Tính năng này chính
là một phần không thể thiếu để hỗ trợ giáo viên chấm bài tự luận cho học sinh khi làm kiểm tra online Tạo đề online: Với SHub, người dùng có thể tạo bài tập trắc nghiệm và
tự luận trực tuyến Ngoài ra giáo viên còn có thể đăng tải đề theo nhiều cách: từ kho học liệu đã tạo, từ file sẵn có bất kỳ hoặc tạo nhiều mã đề mới tự động thông qua tính năng tách câu từ file word
Kho học liệu trực tuyến: Giáo viên có thể xây dựng kho học liệu của riêng mình Học liệu sẽ được dùng để tạo bài tập, bài giảng, tài liệu cho các lớp học trong tương lai Ngoài ra, SHub còn tự động lưu trữ thông tin giáo viên, các lớp và bài giảng trên hệ thống SHub
Classroom, thông tin lớp học, bảng điểm của học sinh sau khi làm bài tập trên hệ thống Những thông tin này có thể dễ dàng truy xuất qua file excel để người dùng dễ dàng quản
lý và chia sẻ Kiểm tra trực tuyến: với tính năng này, Shub cung cấp cho người dùng tiện ích tạo đề và cung cấp mã đề cho từng học sinh Việc chấm điểm và gửi kết quả cũng sẽ được cập nhập thông qua ứng dụng
Đối với các doanh nghiệp giáo dục:
Quản lý các lớp học và giáo viên thuộc hệ thống của trường
Trang 8Quản lý hồ sơ của các 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 từng lớp, khối lớp hay toàn trường Bảo mật tối ưu toàn bộ tài nguyên tại kho lưu trữ dữ liệu Trung tâm Đại học Quốc gia TP HCM
Điểm nổi bật: Shub cung cấp miễn phí những chức năng cơ bản như tạo và quản lý lớp học, tạo đề kiểm tra và thống kê điểm số, lưu trữ học liệu và xuất file đủ để đáp ứng nhu cầu của giáo viên trong việc tổ chức một lớp học trên hệ thống Muốn cập nhập thêm những tính năng ưu việt khác người dùng sẽ phải nâng cấp lên phiên bản Premium SHub Classroom hỗ trợ tạo bài tập từ file bất kỳ 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 của mình Việc học của học sinh trở nên thú vị hơn với SHub Classroom Sau khi làm bài xong, kết quả của học sinh sẽ được hiển thị ngay lập tức Thông tin làm bài của học sinh được cập nhật liên tục cho giáo viên và phụ huynh Hoàn toà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 được đào tạo về kiến thức kiến trúc source code Android, đồng thời rèn luyện những kỹ năng mềm như làm việc nhóm, giao tiếp với đồng nghiệp Tại công ty, sinh viên có cơ hội được học tập, khám phá và làm việc trong môi trường phát triển
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian: 1 ngày
Nội dung: Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và 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ủa công
ty
Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email trong công việc…
Kết quả : Hiểu thêm về công ty Shub JSC, quá trình thành lập và phát triển Có thêm các
kỹ năng về việc sử dụng email trong công việc, làm việc có kế hoạch, có kỷ luật, có trách nhiệm hơn
Trang 92 Nghiên cứu kỹ thuật
2.1 Các công cụ làm việc
Thời gian: 3 ngày
Nội dụng: Tìm hiểu về các công cụ sẽ được sử dụng trong quá 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 về các công cụ
sẽ giúp ích cho trong công việc sau này Một số phần mềm trong đó như:
- GitLab: là một trang web dựa trên DevOps mã nguồn mở và là một phần mềm có chức năng và nhiệm vụ quản lý phiên bản mã nguồn, cung cấp một trình quản lý Git-repository Trình quản lý này có các tiện ích như wiki, theo dõi sự cố và tích hợp liên tục Bên cạnh đó là khả năng triển khai các tính năng pipeline và sử dụng license mã nguồn mở được phát triển bởi GitLab Inc
- Trello: công cụ quản lý công việc cũng như ghi chú các hướng dẫn hiệu quả và 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 và tài liệu hướng dẫn
Các kiến thức liên quan: ngôn ngữ Kotlin trong Android, Kiến trúc dự án Android Thời gian: 1 tuần
Nội dung: Đọc tài liệu hướng dẫn và tìm hiểu công nghệ để xây dựng kiến trúc phần mềm Android
- Định nghĩa về Android:
Android là một tập hợp phần mềm (software stack) dành cho các thiết bị di động, bao gồm hệ điều hành, phần mềm trung gian (middleware)và các ứng
dụng chủ chốt (key applications) Google Inc đã mua lại phát triển ban đầu
của phần mềm từ Android Inc., năm 2005 Hệ điều hành di động của
Android dựa trên nền tảng Linux
- Ngôn ngữ Kotlin và các thế mạnh vượt trội so với Java:
Kotlin là ngôn ngữ lập trình được phát triển bởi JetBrains Nó xuất hiện lần đầu năm 2011 khi JetBrains công bố dự án của họ mạng tên "Kotlin" Đây
là một ngôn ngữ mã nguồn mở
Trang 10Kotlin biên dịch thành JVM bytecode hoặc JavaScript - Giống như Java,
Bytecode cũng là format biên dịch cho Kotlin Bytecode nghĩa là một khi
đã biên dịch, các đoạn code sẽ chạy thông qua một máy ảo thay vì một bộ
xử lý Bằng cách này, code có thể chạy trên bất kỳ nền tảng nào, khi nó
được biên dịch và chạy thông qua máy ảo Khi Kotlin được chuyển đổi
thành bytecode, nó có thể truyền được qua mạng và thực hiện bởi JVM
Kotlin có thể sử dụng tất cả các nền tảng và thư viện Java hiện có - Bất kể
là nền tảng cao cấp dựa trên xử lý annotation Điều quan trọng là Kotlin dễ
dàng tích hợp với Maven, Gradle hay các hệ thống build khác
Kotlin dễ học và dễ tiếp cận Null-safety của Kotlin: giúp chúng ta thoát
khỏi NullPointerException Giúp chúng ta tránh những exeption kiểu con
trỏ null Trong Kotlin, hệ thống sẽ từ chối biên dịch đoạn code đang gán
hay trả về giá trị null
Review code không còn là vấn đề - Kotlin tập trung nhiều hơn vào việc cú
pháp dễ hiểu, dễ đọc để review, chúng có thể hoàn thành bởi những thành
viên team chưa quen với ngôn ngữ này
- Kiến trúc phần mềm Android
+ Tìm hiểu về Dependency Injection Theo như trong nguyên lý cuối cùng của SOLID - Dependency inversion
principle:
1 Các module cấp cao không nên phụ thuộc vào các modules cấp thấp Cả 2 nên phụ thuộc vào abstraction
2 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 nhau thông qua interface, không phải thông qua implementation.)
Với cách code thông thường, các module cấp cao sẽ gọi các module cấp thấp
Module cấp cao sẽ phụ thuộc và module cấp thấp, điều đó tạo ra các dependency Khi module cấp thấp thay đổi, module cấp cao phải thay đổi theo Một thay đổi sẽ kéo theo hàng loạt thay đổi, giảm khả năng bảo trì của code
Trang 11Chính vì vậy nếu tuân theo Dependency Inversion principle, các module cùng phụ thuộc vào 1 interface không đổi Ta có thể dễ dàng thay thế, sửa đổi module cấp thấp
mà không ảnh hưởng gì tới module cấp cao
Từ đó ta có Dependency Injection: đây là một cách để hiện thực Inversion of Control Pattern
+ Network: Hầu hết ứng dụng Android trên thị trường đều kết nối với Internet để thực hiện một số thao tác mạng Chẳng hạn như truy xuất email, tin nhắn hoặc thông tin tương tự qua một máy chủ phụ trợ Việc này giúp đơn giản hoá quá trình tìm nạp
dữ liệu, đồng thời hỗ trợ ứng dụng tuân thủ các phương pháp hay nhất của Android, chẳng hạn như thực hiện thao tác trên một luồng ở chế độ nền
Sử dụng thư viện Retrofit để kết nối với một dịch vụ web REST trên Internet và 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 dữ liệu
+ Module: Nơi phân chia các tính năng của phần mềm, khái quát hoá các tính năng giúp việc phát triển và mở rộng một cách dễ dàng
+ UI Layer: Vai trò của giao diện người dùng là hiển thị dữ liệu ứng dụng trên màn hình cũng như đóng vai trò là điểm chính trong quá trình tương tác của người dùng Bất cứ khi nào dữ liệu thay đổi, do sự tương tác của người dùng (chẳng hạn như nhấn vào một nút) hoặc đầu vào bên ngoài (chẳng hạn như phản hồi mạng), giao diện người dùng sẽ cập nhật để phản ánh các thay đổi đó Về mặt hiệu quả, giao diện người dùng là đại diện trực quan của trạng thái ứng dụng như được truy xuất từ lớp
dữ liệu
+ Domain Layer: Lớp miền chịu trách nhiệm về việc tổng hợp các logic nghiệp vụ phức tạp, hoặc logic nghiệp vụ đơn giản được sử dụng lại trong nhiều ViewModel Lớp này là không bắt buộc vì không phải ứng dụng nào cũng có những yêu cầu này Bạn chỉ nên sử dụng thuộc tính này khi cần, ví dụ: để xử lý độ phức tạp hoặc ưa chuộng khả năng tái sử dụng
+ Data Layer: Trong khi 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 và logic giao diện người dùng, thì lớp dữ liệu chứa dữ liệu ứng
Trang 12dụng và logic nghiệp vụ Logic nghiệp vụ là những gì mang lại giá trị cho ứng
dụng—được tạo ra từ các quy tắc nghiệp vụ trong thế giới thực xác định cách tạo, lưu trữ và thay đổi dữ liệu ứng dụng
Thực hiện:
- Đọc tài liệu hướng
- Xem source code mẫu và hiểu cách vận hành project của công ty
Kết quả:
- Nâng cao kỹ năng lập trình với ngôn ngữ Kotlin
- Biết được cách kiến trúc phần mềm để dễ phát triển và bảo trì
2.3 Tìm hiểu về Jetpack compose và coroutine
Thời gian: 1 tuần
Nội dung: Các kiến thức cơ bản vể Jetpack compose và coroutine để xây dựng giao diện Android một cách nhanh chóng hơn so với XML và quản lý đa luồng với
coroutine
- Khái niệm cơ bản về Jackpack Compose:
Jetpack Compose là một bộ công cụ hiện đại, được khuyên dùng cho Android để xây dựng giao diện người dùng gốc Công cụ này đơn giản hoá và đẩy nhanh quá trình phát triển giao diện người dùng trên Android Nhanh chóng đưa ứng dụng vào hoạt động với mã ngắn gọn hơn, các công cụ mạnh mẽ và API Kotlin trực quan
- Lý do sử dụng Jetpack Compose:
Ít code hơn: Việc viết ít mã hơn sẽ ảnh hưởng đến tất cả các giai đoạn phát triển,
sẽ tập trung vào vấn đề hiện có, ít phải kiểm tra, gỡ lỗi và ít xảy ra lỗi hơn; với tư cách là người đánh giá hoặc người bảo trì, bạn có ít mã để đọc, hiểu, xem lại và bảo trì Compose cho phép bạn làm được nhiều việc hơn bằng ít mã hơn, so với việc sử dụng hệ thống Android View: các nút, danh sách hoặc ảnh động Code đang viết chỉ được viết bằng Kotlin, thay vì tách mã giữa Kotlin và XML Mã được viết bằng Compose rất đơn giản và dễ dàng để bảo trì mọi thứ bạn đang xây dựng
Trực quan: Compose sử dụng API khai báo, nghĩa là tất cả những gì cần làm là
mô tả giao diện người dùng Compose sẽ xử lý phần còn lại API rất trực quan Với Compose, tạo các thành phần nhỏ, không có trạng thái không gắn với một hoạt động