TỔNG QUAN
Lý do chọn đề tài
Sự bùng nổ công nghệ thông tin, cùng với những sản phẩm công nghệ, đã ảnh hưởng sâu sắc đến cuộc sống hàng ngày, đặc biệt là trong bối cảnh dịch Covid-19 Nhiều người đã mất đi thói quen sinh hoạt thường nhật và gặp khó khăn trong việc khôi phục lại những thói quen đã mất.
Theo khảo sát, nhu cầu theo dõi thói quen hàng ngày đang gia tăng, đặc biệt ở học sinh và sinh viên Việc này không chỉ giúp người dùng có động lực và tự nhắc nhở bản thân mà còn thúc đẩy sự hoàn thiện cá nhân qua từng ngày Bên cạnh đó, việc duy trì thói quen tốt còn góp phần nâng cao chất lượng cuộc sống.
Nhóm đã nhận thấy nhu cầu theo dõi thói quen hàng ngày và quyết định phát triển ứng dụng "Theo dõi thói quen trên Android" Ứng dụng này nhằm phục vụ người dùng ở mọi lứa tuổi, giúp họ dễ dàng quản lý và ghi lại hành vi thói quen của mình chỉ với chiếc điện thoại thông minh.
Mục tiêu đề tài
Xây dựng ứng dụng đáp ứng nhu cầu theo dõi thói quen hằng ngày của người dùng
Ứng dung đáp ứng được các chức năng sau:
Khởi tạo người dùng trên thiết bị mới
Hiển thị danh sách các thói quen đang theo dõi theo ngày
Thống kê các thói quen theo ngày
Thống kê một thói quen theo tháng
Thống kê các thói quen không thực hiện theo tuần
Đếm ngược thời gian giống phương pháp Pomodoro
Phương pháp nghiên cứu
Phương pháp tổng hợp cơ sở từ lý thuyết:
Học hỏi và tìm hiểu các tài liệu, các ứng dụng liên quan đến các công nghệ đang tìm hiểu
Đánh giá và lựa chọn công nghệ
Phương pháp tham khảo ý kiến từ chuyên gia
Để đảm bảo tính chính xác và khoa học cho đề tài, cần tham khảo ý kiến đóng góp từ giảng viên, cũng như từ những người có kinh nghiệm trong lĩnh vực công nghệ và thực tiễn liên quan.
CƠ SỞ LÝ THUYẾT
Android
Android là hệ điều hành phát triển trên nền tảng Linux 2.6, được tối ưu hóa cho các thiết bị di động có màn hình cảm ứng như smartphone và tablet.
Android, ban đầu được phát triển bởi công ty Android Inc., đã được Google mua lại vào năm 2005 và ra mắt dưới dạng mã nguồn mở vào năm 2007 Hiện nay, Android trở thành một trong những hệ điều hành phổ biến nhất toàn cầu.
2.1.2Lịch sử các phiên bản Android
Dưới đây là danh sách tóm tắt các bản Android cùng tên và ngày phát hành
Bảng : Lịch sử các phiên bản Android
Phiên bản Tên Ngày phát hành
2.1.3Cấu trúc hệ điều hành Android
Hình : Cấu trúc hệ điều hành Android
Tầng thấp nhất của hệ điều hành là Linux Kernel, đóng vai trò quan trọng trong việc quản lý và xử lý các thiết bị ngoại vi như màn hình, máy ảnh, và bàn phím Ngoài ra, kernel còn đảm nhiệm việc xử lý mạng kết nối và điều khiển các thiết bị, đảm bảo hệ thống hoạt động ổn định và hiệu quả.
Tầng thư viện gốc bao gồm Webkit hỗ trợ trình duyệt, SQLite cho cơ sở dữ liệu, FreeType cho phông chữ, và các thư viện SSL đảm bảo bảo mật Internet.
Về các thư viện lõi, một số thư viện chính của Android:
android.app – Cấp quyền truy cập vào ứng dụng
android.content – Cấp quyền truy cập nội dung (content), truyền tải thông điệp giữa các ứng dụng
android.database – Được sử dụng để truy cập dữ liệu của content provider và các lớp quản lý cơ sở dữ liệu SQLite
android.opengl -Một Java interface để sử dụng OpenGL
Android.os cung cấp các ứng dụng với quyền truy cập vào các dịch vụ chuẩn của hệ điều hành, bao gồm thông báo, dịch vụ hệ thống và giao tiếp nội tiến trình.
android.text – Để hiển thị và thao tác chữ trên màn hình
android.view – Các thành phần cơ bản trong xây dựng UI của ứng dụng
android.widget - Tập thành phần UI đã được xây dựng sẵn như button, label, list view, radio button,
android.webkit - Tập các lớp cho phép duyệt web được xây dựng trong các ứng dụng
Tầng thứ hai từ dưới lên trong kiến trúc Android chứa Dalvik Virtual Machine, một loại Java Virtual Machine được tối ưu hóa cho Android, mang lại hiệu suất cao hơn Tầng này cũng bao gồm các thư viện lõi quan trọng đã được đề cập trước đó.
DVM tận dụng các tính năng của Linux Kernel như quản lý bộ nhớ và hỗ trợ đa luồng, cho phép các ứng dụng Android hoạt động trong các tiến trình riêng biệt.
Android Runtime cũng cung cấp các thư viện chính giúp các nhà phát triển ứng dụng Android có thể viết ứng dụng Android bằng Java
Lớp Android Framework bao gồm các API của Android như UI, điện thoại
Android Framework bao gồm các dịch vụ chính sau:
Activity Manager: Kiểm soát tất cả mọi mặt của vòng đời ứng dụng và ngăn xếp các Activity
Content Providers: Cho phép các ứng dụng chia sẻ dữ liệu với nhau
Resource Manager: Quyền truy cập các tài nguyên như chuỗi, màu sắc, layout UI
Notifications Manager: Hiển thị cảnh báo và các thông báo cho người dùng
View System: Các thành phần giao diện (view) được sử dụng để tạo UI
RX Java là một thư viện nổi bật trong lập trình Reactive, hay lập trình phản ứng, giúp phát triển ứng dụng hiệu quả.
RX Java là thư viện giúp đơn giản hóa các tác vụ đồng thời và không đồng thời trong lập trình di động trên Android Những đặc điểm nổi bật của RX Java bao gồm khả năng xử lý dữ liệu linh hoạt, quản lý luồng sự kiện hiệu quả và hỗ trợ lập trình phản ứng, giúp lập trình viên dễ dàng phát triển ứng dụng mượt mà và hiệu quả hơn.
RX sử dụng cùng kiểu synxtax cho các tác vụ liên quan tới (action- descriptions) với synxtax của các ngôn ngữ lập trình như Java Stream
Người lập trình có thể mở rộng thư viện RX bằng cách tự custom các extension method
Người lập trình có thể dễ dàng kết hợp các hàm (operator) trong Rx Java, để thực hiện các hàm phức tạp hơn
Các hàm trong RxJava có thể chuyển đổi kiểu dữ liệu thông qua việc phân loại (filtering), xử lý (processing), và mở rộng (expanding) các luồng dữ liệu
Người lập trình có thể mô tả yêu cầu của chương trình ở mức độ trừu tượng cao hơn
Nhiều ứng dụng Android yêu cầu khởi tạo các đối tượng cần thiết cho các phụ thuộc Chẳng hạn, một Client API của Twitter có thể được xây dựng với các thư viện networking như Gson Dagger hỗ trợ phân tích các phụ thuộc và tự động tạo ra mã để kết nối chúng.
Dagger hoạt động dựa vào các annotation processor và kiểm tra tại thời điểm biên dịch để phân tích và xác thực các phụ thuộc Khác với các framework khác, Dagger không bị ràng buộc bởi XML và không gặp phải vấn đề về hiệu năng khi khởi động.
Những ưu điểm của Android:
Giá cả thiết bị di động Android:
Thị trường di động với hệ điều hành Android rất phong phú, cung cấp nhiều lựa chọn về giá cả từ thấp đến cao Các sản phẩm này không chỉ đa dạng mà còn đảm bảo đầy đủ các chức năng cần thiết cho người sử dụng.
Với 8 mạnh phần cứng vượt trội, sản phẩm này đáp ứng nhu cầu của đa số người tiêu dùng Điều này cho thấy việc phát triển ứng dụng cho Android là một chiến lược thông minh, bởi tiềm năng người dùng trên nền tảng này rất lớn và đa dạng.
Điện thoại Android được sản xuất bởi nhiều thương hiệu như Samsung, Sony Ericsson và Lenovo, mang đến sự đa dạng về cấu hình và giá cả cạnh tranh Trong khi đó, điện thoại sử dụng hệ điều hành iOS chỉ có từ Apple, với mức giá thường rất cao, khiến cho người tiêu dùng khó có thể sở hữu nếu không đủ ngân sách Sự khác biệt này tạo ra một thị trường điện thoại phong phú cho người dùng lựa chọn.
Khác với iOS, hệ điều hành đóng và khó tùy biến, Android là một nền tảng mở, cho phép người dùng tự do tùy chỉnh thiết bị của mình bằng cách sử dụng các phần mềm bên ngoài.
Springboot
Java Spring Boot là một công cụ mã nguồn mở giúp đơn giản hóa việc phát triển ứng dụng web và microservices dựa trên Java Microservices được coi là một phương pháp hiện đại trong kiến trúc phần mềm, cho phép phân chia ứng dụng thành các dịch vụ nhỏ, kết hợp lỏng lẻo để đáp ứng linh hoạt các yêu cầu kinh doanh Spring Boot được phát triển bởi đội ngũ Pivotal.
Spring Boot cho phép phát triển ứng dụng Spring một cách nhanh chóng mà không cần cấu hình XML, giảm thiểu việc viết mã và sử dụng chú thích (annotation).
Spring Boot, được phát triển vào đầu năm 2013 theo yêu cầu của khách hàng Mike Youngstrom, nhằm khởi động Spring framework để ứng dụng có thể chạy ngay lập tức Mike đã gửi một lá thư qua Jira, một ứng dụng quản lý dự án, đề xuất ý tưởng này Hiện nay, Spring Boot chủ yếu được sử dụng để phát triển REST API.
2.2.2Lịch sử các phiên bản Spring Boot
Bảng : Các phiên bản Spring Boot
STT Phiên bản Nâng cấp đáng chú ý Ngày phát hành
1 3.1.x Đảm bảo Flyway mặc định sử dụng SLF4J và cung cấp config property để override setting
Thêm Reference cho Tor Spring Boot Starter
3 2.7.12 Bug fixes và tối ưu 19/05/2022
2.2.3Kiến trúc của Spring Boot
Spring boot là một module của Spring Framework, được sử dụng để tạo ra các ứng dụng Spring based độc lập mà không cần tốn quá nhiều nỗ lực
Spring Boot được xây dựng theo kiến trúc phân lớp, trong đó mỗi tầng có khả năng giao tiếp trực tiếp với các tầng phía trên hoặc phía dưới.
Hình : Kiến trúc Spring Boot
Có 4 tầng chính trong kiến trúc Spring Boot:
The Presentation Layer processes HTTP requests, converts JSON parameters into objects, validates requests, and forwards them to the business layer In summary, the Presentation Layer encompasses the views and components of the front end.
Tầng Business chịu trách nhiệm xử lý các logic kinh doanh, bao gồm các lớp dịch vụ và tận dụng các dịch vụ từ tầng truy cập dữ liệu Ngoài ra, nó còn đảm nhiệm vai trò ủy quyền và xác thực, đảm bảo tính chính xác và bảo mật trong quá trình xử lý thông tin.
The Persistence Layer encompasses all storage logic, transforming it into business objects and subsequently mapping these objects to rows in the database.
Database: Trong tầng Database, các chức năng CRUD (Create, Retrieve,
Update, Delete) được hoạt động
2.2.3.1 Workflow của kiến trúc Spring Boot
Hình ': Workflow kiến trúc Spring Boot
Phương thức hoạt và workflow của kiến trúc Spring boot:
Tập hợp các lớp xác thực (validator), lớp view, lớp đa dụng (utility)
Spring Boot tích hợp tất cả các module của Spring, bao gồm Spring MVC và Spring Data Kiến trúc của Spring Boot tương tự như Spring MVC, nhưng điểm khác biệt chính là không cần khai báo lớp DAO và lớp DAOImpl trong Spring Boot.
Tạo ra một tầng data access và thực hiên chức năng CRUD
Client gửi các yêu cầu HTTP (PUT và GET)
Yêu cầu được gửi thẳng tới controller, và controller thực hiện việc map các yêu cầu và xử lý nó Sau đó, controller sẽ gọi service logic nếu cần
Ở tầng Service, tất cả các logic nghiệp vụ (business) được thực hiện Tầng Service thực hiện logic trên dữ liệu được map cho JPA với các lớp model
Một trang JSP được trả về cho người dùng nếu không có lỗi xảy ra
Spring Boot Framework có các chức năng chính như sau:
Tự cấu hình (Auto-configuration) là một phương pháp tự động thiết lập ứng dụng Spring dựa trên các dependencies có sẵn Nhờ vào autoconfiguration, thời gian phát triển phần mềm được rút ngắn và quy trình phát triển trở nên đơn giản hơn, vì không cần phải định nghĩa các beans một cách thủ công.
Phát triển web: Lập trình viên có thể sử dụng Spring Boot Starter Web Module để tạo và khởi chạy web một cách nhanh chóng
Spring Boot utilizes events to manage various tasks, enabling developers to create factory files for adding listeners effectively.
Spring Boot cung cấp các công cụ hỗ trợ quyền quản trị viên cho ứng dụng, cho phép truy cập và quản lý ứng dụng từ xa một cách hiệu quả.
Các ứng dụng Spring Boot có tính bảo mật cao nhờ vào việc kế thừa các ứng dụng web cơ sở của Spring, với cơ chế xác thực cơ bản được áp dụng mặc định cho tất cả các điểm endpoint của HTTP.
Spring Boot hỗ trợ cấu hình bên ngoài, cho phép người dùng tùy chỉnh theo nhu cầu, giúp lập trình viên làm việc với cùng một ứng dụng trên nhiều môi trường khác nhau.
2.2.5Ưu điểm của Spring Boot
Những ưu điểm chính của Spring Boot:
Môi trường cấu an toàn và nhanh cho việc phát triển phần mềm:
Điều này cho phép lập trình viên bắt tay vào việc phát triển ứng dụng ngay lập tức, tiết kiệm thời gian quý báu mà không cần phải lo lắng về việc cấu hình các bộ công cụ hay framework.
Giảm tải độ dài của code, và đơn giản hóa tiến trình phát tiển:
Spring Boot sử dụng chú thích (Annotation) để nâng cao khả năng hiểu mã nguồn, đồng thời cung cấp tính năng cấu hình soạn sẵn (Boilerplate configuration) giúp tự động hóa việc sao chép các đoạn mã cho những chức năng lặp lại.
Hỗ trợ máy chủ nhúng (embedded) HTTP, như Tomcat hay Jetty để kiểm thử ứng dụng
Làm đơn giản hóa việc quản lý các phụ thuộc (dependencies):
Room Database
Room is a Persistence Library introduced by Google at the Google I/O event, serving as an abstraction layer that facilitates data access and manipulation within SQLite databases.
Các ứng dụng có thể sử dụng Room Database để lưu trữ dữ liệu trên local, cho phép cache thông tin quan trọng Điều này giúp người dùng truy cập dữ liệu ngay cả khi không có kết nối internet Tất cả dữ liệu được tạo ra hoặc thay đổi bởi người dùng sẽ được tự động đồng bộ với server khi kết nối internet được khôi phục.
Bảng ': Lịch sử các phiên bản Room
STT Phiên bản Nâng cấp đáng chú ý Ngày phát hành
Hỗ trợ giá trị lớp cho KSP &
Room-runtime được chuyển đổi từ Java sang Kotlin
5 2.4.1 Thêm hỗ trợ cho các internal 12/1/2022
15 properties từ các nguồn Kotlin
Hình /: Cấu trúc của Room Database
Cấu trúc của Room Database bao gồm:
Entity đại diện cho một lớp chứa một hàng trong cơ sở dữ liệu Mỗi thực thể sẽ tạo ra một bảng cơ sở dữ liệu để lưu trữ các mục tương ứng.
DAO (Data Access Objects) là lớp hoặc giao diện đại diện cho các đối tượng truy cập dữ liệu, đóng vai trò quan trọng trong Room DAO đảm bảo tính bảo mật và hiệu quả trong các phương thức truy cập cơ sở dữ liệu.
Để tạo ra chủ sở hữu cho cơ sở dữ liệu, Annotation sẽ cung cấp danh sách các thực thi và lớp nội dung, từ đó định nghĩa danh sách các DAO (CSDL truy cập đối tượng) cho cơ sở dữ liệu Đây cũng chính là điểm truy cập chính để kết nối với cơ sở dữ liệu phía dưới.
Những chức năng chính của Room:
Cung cấp tầng Abstraction trên SQLite
Cache những dữ liệu quan trọng
Cho phép kết nối cơ sở dữ liệu một cách trơn chu trong khi khai thác được toàn bộ sức mạng của SQLite
Những ưu điểm của Room:
Tài liệu chi tiết về cách sử dụng
Đẩy dự liệu lớn lên server dễ dàng
Khuyết điểm lớn nhất của Room là sự thiếu phổ biến trong cộng đồng lập trình viên, dẫn đến khó khăn trong việc tìm kiếm tài liệu và các nguồn thông tin liên quan.
Room DB được sử dụng trong cho một số công ty như SWORD Health, BestDoctor, INEX Digital, beNext
Ngôn ngữ lập trình Java
Java là ngôn ngữ lập trình bậc cao, dựa trên cấu trúc class và hướng đối tượng, được thiết kế để giảm thiểu tối đa các phụ thuộc trong quá trình triển khai Với tính bảo mật cao, Java không chỉ là một ngôn ngữ lập trình mà còn là một nền tảng (platform) mạnh mẽ cho phát triển ứng dụng.
Nền tảng (Platform) là bất kỳ môi trường phần cứng hoặc phần mềm nào mà trong đó một chương trình có thể hoạt động Java được xem là một nền tảng nhờ vào môi trường runtime riêng (JRE) và API của nó.
Java là ngôn ngữ lập trình đa mục đích với phương châm "Viết một lần, chạy mọi nơi", cho phép lập trình viên viết chương trình một lần và thực thi trên nhiều hệ thống hỗ trợ Java Chẳng hạn, bạn có thể phát triển ứng dụng trên Windows và chương trình đó vẫn có thể chạy trên Linux, Android, và các thiết bị J2ME.
Các ứng dụng Java thường được biên dịch thành các bytecode, có thể chạy trên bất kỳ máy tính ảo Java (Java Virtual Machine-JVM)
Java là một trong những ngôn ngữ lập trình phổ biến nhất toàn cầu, được sử dụng rộng rãi trong việc phát triển ứng dụng di động, ứng dụng cho máy tính để bàn và laptop, cũng như trong lĩnh vực phát triển trò chơi điện tử.
Ngôn ngữ lập trình Java được thiết kế vào đầu những năm 90 tại công ty Sun Microsystems, INC dưới sự dẫn dắt của James Gosling, nhằm kết nối và giao tiếp giữa các thiết bị điện tử Quá trình phát triển bắt đầu từ năm 1991 và được công bố chính thức vào ngày 23 tháng 5 năm 1993 Đến năm 2009, Sun Microsystems, INC đã bị Oracle mua lại, dẫn đến việc ngôn ngữ Java hiện nay thuộc quyền sở hữu của Oracle.
2.4.2Các phiên bản ngôn ngữ lập trình Java
Bảng /: Lịch sử các phiên bản Java
Phiên bản Java Ngày Phát Hành
Java SE 6 ngày 11 tháng 12 năm 2006
Java SE 7 ngày 28 tháng 7 năm 2011
Java SE 8 ngày 18 tháng 3 năm 2014
Java SE 9 ngày 21 tháng 9 năm 2017
Java SE 10 ngày 20 tháng 3 năm 2018
Java SE 11 ngày 25 tháng 9 năm 2018
Java SE 12 ngày 19 tháng 3 năm 2019
Java SE 13 ngày 17 tháng 9 năm 2019
Java SE 14 ngày 17 tháng 3 năm 2020 Java SE 15 ngày 15 tháng 9 năm 2020 Java SE 16 ngày 16 tháng 3 năm 2021 Java SE 17 ngày 14 tháng 9 năm 2021
Cấu trúc của Java bao gồm các thành phần chính như JVM, JRE và JDK, tích hợp vào các quy trình thông dịch và biên soạn Kiến trúc Java định nghĩa toàn bộ các bước liên quan đến việc phát triển chương trình Java.
Phát hiện tiến trình biên soạn và thông dịch trong Java
Java compiler thực hiện việc chuyển đổi code Java ra thành byte code
JVM chuyển đổi byte code thành machine code
Machine code được thực hiện bởi máy tính
Dựa theo hình ảnh trên, ta có thể liệt kê ra được những thành phần chính của cấu trúc Java bao gồm:
Chức năng chính của Java là WORA, viết tắt của "Write Once Run Anywhere" Điều này có nghĩa là lập trình viên chỉ cần viết mã một lần và có thể chạy nó trên bất kỳ hệ điều hành nào.
Chương trình Java có khả năng chạy trên mọi hệ thống nhờ vào JVM, một thành phần thiết yếu của hệ thống Java JVM cung cấp môi trường thực thi cho các chương trình Java, với nhiệm vụ chính là chuyển đổi byte code thành machine code để máy tính có thể thực hiện.
JVM hoạt động bằng cách tải mã vào bộ nhớ và xác thực chúng, sau đó thực thi các dòng mã và cung cấp môi trường runtime.
JVM có một cấu trúc dành riêng cho nó
Bao gồm các thành phần:
Class Loader: Là một subsystem được dùng cho việc load các file lớp
ClassLoader sẽ load các đoạn code Java bất cứ khi nào ta chạy chương trình
Khu vực phương thức lớp là một phần trong bộ nhớ, nơi lưu trữ dữ liệu của lớp trong suốt quá trình thực thi mã Khu vực này chứa thông tin về các biến tĩnh, các khối tĩnh, cũng như các phương thức thể hiện và phương thức tĩnh.
Stack, hay còn gọi là thread stack, là khu vực bộ nhớ được tạo ra cho một thread thực thi Khu vực này được sử dụng để lưu trữ các phần tử như biến cục bộ, dữ liệu cần thiết cho các phương thức gọi và giá trị trả về.
Khu vực Heap trong JVM là một phần quan trọng của bộ nhớ, được khởi tạo khi JVM hoạt động Kích thước của Heap không cố định, mà có khả năng tăng hoặc giảm trong quá trình thực thi chương trình.
Native Stack: Nó chứa thông tin cả tất cả native method được sử dụng trong chương trình của người dùng
Execution Engine là thành phần quan trọng nhất của JVM, có nhiệm vụ chính là thực thi bytecode và các lớp Java Nó bao gồm ba thành phần chính, giúp thực hiện các lớp Java một cách hiệu quả.
Interpreter: Thực hiện việc đổi byte code thành native code và thực thi nó
Interpreter thực thi các đoạn code tuần tự và liên tục, ngay cả khi gặp lại cùng một phương thức nhiều lần, điều này có thể làm giảm hiệu năng của hệ thống Để khắc phục vấn đề này, JIT Compiler đã được giới thiệu.
JIT Compiler: JIT Compiler đóng vai trò xóa bỏ đi khuyết điểm chính của interpreter bằng việc tăng tốc độ xử lý và cải thiện hiệu năng
Garbage Collector là một chương trình viết bằng Java, có chức năng quản lý bộ nhớ hiệu quả Quá trình hoạt động của nó bao gồm hai giai đoạn chính: Mark và Sweep Trong giai đoạn Mark, Garbage Collector xác định các đối tượng còn được sử dụng, trong khi giai đoạn Sweep sẽ thu dọn các đối tượng không còn cần thiết, giúp tối ưu hóa bộ nhớ.
Collector thực hiện việc xác định những khối bộ nhớ đã và chưa sử dụng
Và Sweep xóa đi các đối tượng được xác định khỏi Mark
Java Native Interface: Được xem như là một trung gian giữa việc gọi Java
Method và các thư viện Native
MongoDB
MongoDB là một hệ thống quản lý cơ sở dữ liệu NoSQL mã nguồn mở, cung cấp giải pháp thay thế cho các hệ thống dữ liệu quan hệ truyền thống Với khả năng xử lý khối lượng lớn dữ liệu phân phối, MongoDB là công cụ lý tưởng để quản lý thông tin theo định dạng tài liệu, giúp người dùng dễ dàng lưu trữ và truy xuất dữ liệu hiệu quả.
MongoDB là lựa chọn phổ biến cho việc quản lý dữ liệu lớn, giúp doanh nghiệp và tập đoàn lưu trữ khối lượng dữ liệu khổng lồ mà vẫn duy trì hiệu suất làm việc nhanh chóng.
Thay vì sử dụng bảng và dòng như trong cơ sở dữ liệu quan hệ truyền thống, MongoDB sử dụng kiến trúc gồm các collections và documents Documents là các cặp giá trị khóa, được coi là đơn vị dữ liệu cơ bản của MongoDB Collections tương đương với các bảng trong SQL, dùng để chứa các bộ tài liệu.
MongoDB hỗ trợ nhiều ngôn ngữ lập trình khác nhau như C, C++, C#, Java, Python hay Swift
MongoDB được phát triển bởi Eliot Horowitz và Dwight Merriman, nhằm khắc phục những hạn chế trong quá trình phát triển và khả năng mở rộng của các ứng dụng web khi áp dụng phương pháp quản lý dữ liệu quan hệ truyền thống.
2.5.2Các phiên bản của MongoDB
Bảng 6: Lịch sử các phiên bản MongoDB
STT Phiên bản Ngày phát hành
Mỗi cơ sở dữ liệu trong MongoDB sẽ được lưu trữ trong một bộ file riêng biệt trên hệ thống tệp, cho phép nhiều cơ sở dữ liệu khác nhau cùng tồn tại trên một server duy nhất.
Collection là một nhóm các tài liệu trong cơ sở dữ liệu, không yêu cầu schema Trong một collection, có nhiều trường khác nhau, nhưng các tài liệu thường chia sẻ cùng một mục đích hoặc phục vụ cho một mục tiêu chung.
Document là tập hợp các cặp giá trị khóa (Key-Value) được gán cho một document Các Document này liên kết với các dynamic schema, cho phép mỗi document trong một collection không cần phải có cùng kiến trúc hay các trường (field) giống nhau Lợi ích của việc sử dụng dynamic schema là tính linh hoạt trong việc quản lý và lưu trữ dữ liệu.
Các chức năng chính của MongoDB:
MongoDB hỗ trợ cả mở rộng chiều ngang và chiều dọc Mở rộng chiều dọc tập trung vào việc nâng cấp phần cứng như CPU, RAM và Storage, trong khi mở rộng chiều ngang tăng cường khả năng chịu tải của hệ thống thông qua việc thêm Node hoặc Server.
MongoDB là một cơ sở dữ liệu không cần schema, cho phép quản lý dữ liệu linh hoạt mà không cần bản thiết kế chi tiết.
Mongo DB xử lý vấn đề load cân bằng mà không cần sử dụng một bộ load balancer riêng biệt và chuyên dụng
Dữ liệu trong MongoDB được lưu trữ dưới dạng các documents với các cặp giá trị khóa (key-value), mang lại tính linh hoạt cao hơn so với các cơ sở dữ liệu SQL truyền thống, nơi dữ liệu được tổ chức theo các cột và hàng.
Bất kỳ các trường nào trong Document đều có thể được lập chỉ mục (indexed)
MongoDB hỗ trợ ad-hoc queries và document-based queries
MongoDB hỗ trợ chế độ sao chép Master-Slave, cho phép quản lý nhiều bản sao dữ liệu thông qua các ứng dụng gốc Điều này giúp giảm thiểu thời gian ngừng hoạt động (downtime) trong quá trình vận hành cơ sở dữ liệu.
MongoDB có thể chạy trên nhiều server Dữ liệu được sao lưu lại để phòng ngừa trường hợp thiết bị phần cứng không may gặp vấn đề
Tiến trình phân phối dữ liệu qua các phân đoạn vật lý (shard) trong MongoDB cho phép hệ thống tự động thực hiện load cân bằng.
Chức năng GridFS chia các file ra thành những phần nhỏ và lưu trữ chúng thành các document riêng biệt
Những ưu điểm chính của MongoDB:
Là nền tảng phân phối dữ liệu:
MongoDB đảm bảo tính khả dụng và khả năng mở rộng
Nền tảng MongoDB cho phép người lập trình linh hoạt xử lý các dữ liệu với sự ổn định tốt nhất
MongoDB linh hoạt trong việc xử lý khối lượng và thông lượng dữ liệu, giúp giảm thiểu thời gian ngừng hoạt động (downtime) mà không cần phải thay đổi ứng dụng nhiều để đảm bảo tính tương thích.
Quá trình phát triển nhanh và lặp đi lặp lại: (Fast and Iterative):
Thay đổi các yêu cầu kinh doanh sẽ không còn ảnh hưởng tới việc thành công khi phân phối dự án trong doanh nghiệp
Không cần phải sử dụng các Static Schema hay các operation phức tạp từ RDMBS
Mô hình dữ liệu linh hoạt với schema động, kết hợp với bộ công cụ GUI và command line mạnh mẽ, cho phép lập trình viên xây dựng và nâng cấp ứng dụng một cách nhanh chóng và hiệu quả.
Mô hình dữ liệu linh hoạt:
MongoDB lưu trữ dữ liệu dưới dạng các JSON-like document linh hoạt, giúp đảm bảo tính bền vững và kết hợp đơn giản của dữ liệu
Do hạn chế đi Downtime, người lập trình có thể linh động chỉnh sửa schema
Chính vì sự linh hoạt của MongoDB, người lập trình không cần phải quá bận tâm với việc thao tác dữ liệu (Data manipulation)
Giảm thiểu chi phí TCO (Total Cost of Ownership):
Team vận hành (Operation Team) có thể thực hiện công việc mình tốt hơn, nhờ có hệ thống điện toán đám mây Atlas Cloud service
Chi phí rẻ hơn rất nhiều do MongoDB có thể chạy trên các thiết bị phần cứng có cấu hình tầm trung
Các lập trình viên ứng dụng có thể làm việc tốt hơn nhiều khi MongoDB được sử dụng
Hỗ trợ lâu dài từ nhà phát triển:
MongoDB đã có hơn 30 triệu lượt tải về, hơn 5000 khách hàng và hơn 1000 đối tác
Những khuyết điểm chính của MongoDB:
Sử dụng bộ nhớ rất nhiều cho việc lưu trữ dữ liệu
Kích cỡ Document có giới hạn
Tính linh hoạt thấp đối với querying
Vì luôn cập nhật thường xuyên, nên đôi khi nhà phát triển không ghi cụ thể thông tin cập nhật
MongoDB là một cơ sở dữ liệu NoSQL, do đó không tuân thủ các nguyên tắc ACID (Atomicity, Consistency, Isolation, Durability) Điều này có nghĩa là MongoDB không phù hợp cho các ứng dụng yêu cầu giao dịch cấp cơ sở dữ liệu, nơi mà cơ chế ACID là cần thiết.
Mongo DB không có các điều khoản (provisions) cho stored-procedure
Những ứng dụng chính của MongoDB:
Cho các ứng dụng mobile Android/IOS
Dịch vụ điện toán đám mây như Alibaba Cloud
Cho các ứng dụng web
KHẢO SÁT HIỆN TRẠNG & XÁC ĐỊNH YÊU CẦU
Khảo sát hiện trạng
3.1.1Nhu cầu Để khảo sát nhu cầu theo dõi thói quen, tạo lập thói quen của người dùng Nhóm đã tạo khảo sát dựa vào các câu hỏi như:
Có bao giờ bạn nghĩ về việc theo dõi hành vi hằng ngày của mình không ?
Bạn có biết tới ứng dụng Habit Tracker không ?
Bạn có nhu cầu lập thói quen không ?
Nếu có một ứng dụng hỗ trợ việc theo dõi lập thói quen, bạn có ủng hộ hay không ?
Kết quả khảo sát trên 49 câu trả lời:
Hình ' : Kết quả độ tuổi của người khảo sát
Hình ' : Kết quả khảo sát Có/Không về việc theo dõi hành vi
Hình '.': Kết quả khảo sát Bạn có biết đến Habit Tracker không ?
Hình './: Kết quả khảo sát bạn có nhu cầu lập thói quen tốt không
Hình '.6: Kết quả khảo sát sự ủng hộ đối với một App hỗ trợ việc theo dõi thói quen
Hiện nay có một số ứng dụng habit tracker như:
Các ứng dụng này đều đạt đánh giá cao của người dùng nên nhóm quyết định sẽ khảo sát trên các ứng dụng này
3.1.2.1 Ứng dụng Rabit a) Giới thiệu Ứng dụng Rabit được xây dựng nhằm theo dõi thói quen của người dùng Giúp hình thành nên thói quen tốt cho người dùng thông qua việc thông báo đến giờ thực hiện thói quen cho người dùng Ứng dụng sẽ theo sát tiến độ thực hiện các công việc của người dùng trong 1 ngày Tích cực thống kê các hoạt động diễn ra theo ngày, tuần và tháng Nếu người dùng cập nhật liên tục trạng thái thói quen thì ứng dụng sẽ hình thành các loại cây trồng tương ứng Mục đích sử dụng các loại cây trồng để tạo nên sự kiên trì cho người sử dụng Vì nếu người sử dụng thất bại trong việc giữ vững thói quen, thì cây sẽ chết
Hình '.7: Giao diện Streak map, tạo thói quen của Rabit
Hình '.:: Giao diện quản lý habit của Rabit
Hình ' Q Giao diện thống kê Streak của Rabit
Bao gồm các chức năng như:
Thống kê thói quen theo ngày, tuần, tháng
Lập danh sách To Do List
Có theme Trắng và Đen
Có thể tạo ra một streak bằng việc hoàng thành các mục tiêu được đề ra hằng ngày
Bạn có thể nâng cấp lên Premium Membership để truy cập các chức năng bổ sung, như xem chi tiết thông tin từ những ngày trước và đồng bộ dữ liệu trên cloud Việc này mang lại nhiều lợi ích cho người dùng.
Thiết kế thân thiện, gần gũi với thiên nhiên
Ý tưởng trồng cây dựa theo việc hoàn thành các thói quen hằng ngày là một ý tưởng khá độc nhất và thú vị
Chức năng thêm, sửa, xóa đơn giản thực hiện dễ dàng
Thói quen được phân loại rõ ràng dễ quan sát
Thống kê trình bày đơn giản thân thiện với người dùng
Trồng cây để duy trì thói quen
Chức năng count down để bám sát thói quen
Hỗ trợ đa ngôn ngữ e) Nhược điểm
Những nhược điểm của ứng dụng Rabit:
Âm lượng âm thanh khi sử dụng hơi thấp hơn so với tiêu chuẩn bình thường
Phải trả phí mỗi tháng để mở khóa một số tính năng quan trọng để xem thông tin trong quá khứ, hay để đồng bộ dữ liệu
Một số lỗi nhỏ còn tồn động
3.1.2.2 Habitbull a) Giới thiệu Ứng dụng được xây dựng nhằm theo dõi thói quen của người dùng với phương châm “Dễ dàng phá bỏ các thói quen xấu như hút thuốc, uống rượu hoặc cắn móng tay hoặc xây dựng các thói quen tích cực như tập thể dục, thiền hoặc đọc sách”
Là ứng dụng đa nền tảng đầy mạnh mẽ, giúp theo dõi các thói quen hằng Hỗ trợ cả IOS và Android b) Giao diện
Hình '.R: Giao diện chính của Habit Bull
Hình ' T: Giao diện thêm thói quen của Habit Bull
Hình ' : Giao diện cộng đồng của Habit Bull
Bao gồm các chức năng như:
Thêm thói quen theo các loại thói quen, chọn mức độ thực hiện
Thống kê dữ liệu bằng biểu đồ, các số liệu
Thảo luận cùng người dùng khác
Đồng bộ với nhiều loại thiết bị
Có thể xuất dữ liệu ra file CSV format d) Ưu điểm
Có phân loại các loại thói quen
Thói quen được đo bằng các đơn vị khác nhau
Thống kê đơn giản dễ hiểu
Trồng cây để duy trì thói quen
Có hỗ trợ thảo luận giữa các người dùng
Có cộng đồng hỗ trợ
Một số hình ảnh tạo động lực tốt
Có đội ngũ hỗ trợ khi gặp vấn đề
Có hướng dẫn rõ ràng khi sử dụng e) Nhược điểm
Những nhược điểm của ứng dụng:
Giao diện UI phần thảo luận thiết kế chưa được đẹp khiến bố cục bị rối
Cách phối màu chưa hợp lý
Vẫn cần phải trả phí hằng tháng, hay hằng năm để unlock một số tính năng quan trọng
Nếu lỡ xóa App, thì tất cả dữ liệu thói quen sẽ mất hết
Vài lỗi liên quan tới quá trình đồng bộ với các thiết bị khác, khiến quá trình đồng bộ không thành công
Xác định yêu cầu
Những ai có nhu cầu theo dõi hành vi hằng ngày hay tạo thói quen
Hiển thị thông tin của các habits đã được người dùng thêm vào
Thuận tiện cho việc xây dựng thói quen và theo dõi hành vi hằng ngày
Mang đến cho người dùng trải nghiệm tốt nhất về dịch vụ theo dõi hành vi.
Đánh giá và lựa chọn công nghệ
Xây dựng giao diện trên môi trường Android Studio bằng ngôn ngữ Java
Thiết kế giao diện trên Figma
Xây dựng hệ thống trên môi trường Android Studio bằng ngôn ngữ Java
Thiết kế cơ sở dữ liệu trên SQLite
Sử dụng Room Database để lưu trữ thông tin người dùng
MÔ HÌNH HÓA HỆ THỐNG
Các chức năng của hệ thống
Bảng / : Các chức năng của hệ thống
STT TÊN CHỨC NĂNG MÔ TẢ
1 Đăng nhập User đăng nhập vào hệ thống
2 Đăng xuất User đăng xuất khỏi hệ thống
3 Tạo thói quen User tiến hành tạo mới một thói quen
4 Cập nhật thói quen User tiến hành cập nhật thông tin cho một thói quen
5 Xóa thói quen User tiến hành xóa thói quen khi không cần thực hiện nữa
6 Tạo lời nhắc nhở User tiến hành tạo mới lời nhắc nhở cho thói quen
7 Cập nhật lời nhắc nhở User cập nhật thời gian thực hiện lời nhắc nhở
8 Xóa lời nhắc nhở User tiến hành xóa lời nhắc nhở khi không cần thiết nữa
9 Tạo thời gian giám sát thói quen
User cập nhật thêm thời gian giám sát cho một thói quen tương ứng
10 Tạo lịch sử nhật ký
System tự động tạo lịch sử nhật ký thói quen hằng ngày hoặc sau mỗi lần User tạo mới một thói quen
11 Cập nhật lịch sử nhật ký
Hệ thống tự động cập nhật thông tin lịch sử nhật ký khi người dùng thay đổi các thông tin thói quen liên quan đến trạng thái hoặc thời gian thực hiện.
12 Cập nhật lịch sử nhật ký
User chỉ có thể cập nhật trạng thái hoàn thành thói quen theo từng ngày cho nhật ký
13 Xóa nhật ký lịch sử User xóa thói quen sẽ thực hiện đồng thời việc xóa lịch sử nhật ký cho thói quen đó
14 Đếm ngược thời gian User tiến hành thực hiện đếm người gian khi thực hiện một thói quen nào đó
15 Đồng bộ User tiến hành đồng bộ toàn bộ dữ liệu dưới thiết bị lên Server
Tự động cập nhật chuỗi thực hiện thói quen và thêm mới danh sách cho nhật ký lịch sử
System tiến hành thêm mới lịch sử sau mỗi 24 giờ Đồng thời kiểm tra trạng thái hoạt động cho thói quen mỗi ngày để tính toán chuỗi thực hiện
Tự động thêm mới nhật ký thực hiện khi người dùng khởi động lại thiết bị
Hệ thống sẽ tự động kiểm tra và tạo mới nhật ký hoạt động hàng ngày mỗi khi người dùng thực hiện việc reset hoặc khởi động lại điện thoại sau một thời gian dài không sử dụng.
Lược đồ Usecase và đặc tả Usecase
Short Description User có thể đăng nhập vào ứng dụng
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Tình huống 1: Nếu đăng nhập thành công: Người dùng vào trang chủ và nội dung trang chủ được trình bày
Tình huống 2: Nếu đăng nhập không thành công: Người dùng không truy cập được vào hệ thống và hiển thị thông báo không thành công
Main Flow Bước 1: Người dùng nhấn vào icon ứng dụng
Bước 2: Ứng dụng hiển thị trang đăng nhập
Bước 3: Người chọn tài khoản Google muốn đăng nhập vào ứng dụng
Bước 4: Ứng dụng hiển thị trang chủ
Alternate Flow Trường hợp thay thế: Người dùng hủy thay đổi tiếp tục ở bước 4
Exception Flow Ứng dụng hiển thị thông báo lỗi nếu đăng nhập Google không thành công ở bước 3
Short Description User có thể đăng xuất khỏi ứng dụng
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hiển thị thông báo khi đăng xuất thành công
Bước 1: Người dùng nhấn vào setting Bước 2: Ứng dụng hiển thị trang setting
Bước 3: Người dùng nhấn vào log in Bước 4: Người dùng sẽ quay trở lại trang home
Bảng /./: UseCase Tạo thói quen
Use Case Tạo thói quen
Short Description User tạo mới một thói quen
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hiển thị thông báo khi đã tạo mới thói quen thành công
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào biểu tượng dấu cộng gốc phải màn hình
Bước 3: Người dùng điền thông tạo mới thói quen
Bước 4: Người dùng nhấn nút tạo mới Alternate Flow
Trường hợp thay thế: Người dùng nhấn nút trở về gốc trái dưới để hủy thao tác thêm mới ở bước 4
- Hiển thị thông báo vui lòng điền tên thói quen nếu người dùng bỏ trống ở bước 4
- Hiển thị thông báo vui lòng điền thông tin các ngày thực hiện trong tuần nếu người dùng bỏ trống bước
- Hiển thị thông báo vui lòng chọn buổi thực hiện trong ngày nếu người dùng bỏ trống bước 4
- Hiển thị thông báo vui lòng điền tên thói quen khác nếu người dùng điền vào tên đã tồn tại trước đó ở bước 4
4.2.2.4 Usecase cập nhật thói quen
Bảng /.6: UseCase Cập nhật thói quen
Use Case Cập nhật thói quen
Short Description User tạo cập nhật một thói quen
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hiển thị thông báo khi đã cập nhật thói quen thành công
Main Flow Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào một thói quen hiển thị trên danh sách bất kỳ
Bước 3: Người dùng điền thông tin muốn cập nhật thói quen
Bước 4: Người dùng nhấn nút cập nhật Alternate Flow
Trường hợp thay thế: Người dùng nhấn nút trở về gốc trái để hủy thao tác cập nhật ở bước 3
- Hiển thị thông báo vui lòng điền tên thói quen nếu người dùng bỏ trống ở bước 4
- Hiển thị thông báo vui lòng điền thông tin các ngày thực hiện trong tuần nếu người dùng bỏ trống ở bước 4
- Hiển thị thông báo vui lòng chọn buổi thực hiện trong ngày nếu người dùng bỏ trống ở bước 4
- Hiển thị thông báo vui lòng điền tên thói quen khác nếu người dùng điền vào tên đã tồn tại trước đó ở bước 4
Bảng /.7: UseCase Xóa thói quen
Use Case Xóa thói quen
Short Description User xóa một thói quen
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hệ thống xóa thói quen thành công
Main Flow Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào một thói quen hiển thị trên danh sách bất kỳ
Bước 3: Người dùng nhấn bào biểu tượng xóa nếu bên gốc phải màn hình
Alternate Flow Trường hợp thay thế 1: Người dùng chọn nút hủy thao tác sẽ không thực hiện chức năng xóa ở bước 3
Trường hợp thay thế 2: Người dùng chọn nút xác nhận sẽ thực hiện chức năng xóa ở bước 3
Exception Flow 4.2.2.6 Usecase tạo lời nhắc nhở
Bảng /.:: UseCase Tạo mới lời nhắc nhở
Use Case Tạo mới lời nhắc nhở
Short Description User tạo mới một lời nhắc nhở cho thói quen
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hệ thống tạo thành công một lời nhắc cho ứng dụng
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào một thói quen hiển thị trên danh sách bất kỳ
Bước 3: Người dùng nhấn vào biển tượng dấu cộng tại phần “Remainder”
Bước 4: Người dùng điều khiển thanh cuộn thời gian để chọn thời gian nhắc nhở thực hiện thói quen
Bước 5: Người dùng nhấn nút “Select” để xác nhận một lời nhắc nhở
Trường hợp thay thế: Người dùng chọn nút “Cancel” để không thực hiện việc thêm mới
- Hiển thị ứng dụng bị lỗi khi tạo mới không thành công ở bước 5
- Hiển thị thông báo trùng thời gian nhắc nhở nếu chọn phải giá trị thời gian bị trùng ở bước 5
4.2.2.7 Usecase cập nhật lời nhắc nhở
Bảng /.Q: UseCase Cập nhật lời nhắc nhở
Use Case Cập nhật lời nhắc nhở
Short Description User cập nhật một lời nhắc nhở cho thói quen
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hệ thống tạo thành công một lời nhắc cho ứng dụng
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào một thói quen hiển thị trên danh sách bất kỳ
Bước 3: Người dùng nhấn vào một item remainder bất kỳ
Bước 4: Người dùng điều khiển thanh cuộn thời gian để chọn thời gian nhắc nhở thực hiện thói quen
Bước 5: Người dùng nhấn nút “Select” để xác nhận một lời nhắc nhở được cập nhật
Trường hợp thay thế: Người dùng chọn nút “Cancel” để không thực hiện việc cập nhật
- Hiển thị ứng dụng bị lỗi khi tạo mới không thành công ở bước 5
- Hiển thị thông báo trùng thời gian nhắc nhở nếu chọn phải giá trị thời gian bị trùng ở bước 5
4.2.2.8 Usecase xóa lời nhắc nhở
Bảng /.R: UseCase Xóa lời nhắc nhở
Use Case Xóa lời nhắc nhở
Short Description User xóa một lời nhắc nhở cho thói quen
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hệ thống tạo thành công một lời nhắc cho ứng dụng
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào một thói quen hiển thị trên danh sách bất kỳ
Bước 3: Người dùng nhấn vào biểu tượng “x” một item remainder bất kỳ
Alternate Flow Exception Flow 4.2.2.9 Usecase tạo thời gian giám sát
Bảng / T: UseCase tạo thời gian giám sát
Use Case Tạo thời gian giám sát
Short Description User tạo thời gian giám sát cho thói quen
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Hệ thống tạo thành công thời gian giám sát cho thói quen và cập nhật vào nhật ký
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào một thói quen hiển thị trên danh sách bất kỳ
Bước 3: Người dùng nhấn vào thanh nội ở phần “Timer”
Bước 4: Người dùng cuộn thanh với giá trị thời gian tương ứng
4.2.2.10 Usecase đồng bộ dữ liệu trên Server
Bảng / : UseCase Đồng bộ dữ liệu lên Server
Use Case Đồng bộ dữ liệu lên Server
Short Description User đồng bộ dữ liệu lên Server
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Post-Conditions Hệ thống thông báo đồng bộ dữ liệu thành công
Bước 1: Người dùng nhấn vào màn hình setting
Bước 2: Người nhấn nút “Synchronize” Alternate Flow
Exception Flow - Hiển thị lỗi khi đồng bộ không thành công ở bước 2
4.2.2.11 Usecase thực hiện việc đếm ngược
Bảng / : Usecase Thực hiện chức năng đếm ngược
Use Case Thực hiện chức năng đếm ngược
Short Description User thực hiện chức năng đếm ngược
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người vuốt sang phải vào một thói quen bất kỳ hiển thị trong danh sách
Bước 3: Người dùng nhấn nút bắt đầu để thực hiện chức năng
4.2.2.12 Usecase cập nhật trạng thái nhật ký
Bảng / ': UseCase Cập nhật trạng thái nhật ký
Use Case Cập nhật trạng thái nhật ký
Short Description User thực hiện chức năng cập nhật trạng thái nhật ký
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người vuốt sang phải vào một thói quen bất kỳ hiển thị trong danh sách để cập nhật trạng thái hoàn thành
Trường hợp thay thế: Người dùng vuốt sang trái vào một thói quen để cập nhật trạng thái không hoàn thành
Bảng / /: UseCase Xóa nhật ký
Use Case Xóa nhật ký
Short Description User thực hiện chức năng xóa nhật ký
Pre-Conditions Người dùng đã có ứng dụng trên hệ thống
Bước 1: Người dùng nhấn vào màn hình home
Bước 2: Người nhấn vào một thói quen hiển thị trên danh sách bất kỳ
Bước 3: Người dùng nhấn vào biểu tượng xóa nếu bên gốc phải màn hình
Trường hợp thay thế 1: Người dùng chọn nút hủy thao tác sẽ không thực chức năng xóa ở bước 3
Trường hợp thay thế 2: Người dùng chọn nút xác nhận sẽ thực hiện chức năng xóa ở bước 3
4.2.2.14 Usecase tự động thêm mới nhật ký
Bảng / 6: UseCase Tự độn thêm mới nhật ký
Use Case Tự động thêm mới nhật ký
Short Description System tự động thêm mới nhật ký mỗi ngày
Pre-Conditions Đúng 23:55 mỗi ngày
Post-Conditions Nhật ký mới đã được thêm vào cơ sở dữ liệu của ứng dụng
Main Flow Alternate Flow Exception Flow 4.2.2.15 Usecase kiểm tra nhật ký sau mỗi lần khởi động và tạo mới
Bảng / 7: UseCase Kiểm tra nhật ký sau mỗi lần khởi động và tạo mới
Use Case Kiểm tra và tự động thêm mới nhật ký sau mỗi lần khởi động điện thoại
Short Description System kiểm tra và tự động thêm mới sau mỗi lần khởi động điện thoại
Pre-Conditions Khởi động máy
Nhật ký mới đã được thêm vào cơ sở dữ liệu của ứng dụng nếu ngày đó không tồn tại nhật ký hoạt động
Main Flow Alternate Flow Exception Flow
THIẾT KẾ HỆ THỐNG
Thiết kế dữ liệu – Ứng dụng Android
5.1.1Mô hình liên kết thực thể
Hình 6 : Mô hình liên kết thực thể
STT Tên cột Loại dữ liệu Bắt buộc Mô tả
1 Id Integer Cột ID tự tăng cho đối tượng history
2 User_id Integer Mã người dùng được đặt cố định
3 Habit_id Integer Mã thói quen được tạo trước đó
4 State Text Trạng thái hoàn thành thói quen theo ngày
5 Date Text Ngày được thêm hoặc thống kê mỗi ngày
STT Tên cột Loại dữ liệu Bắt buộc Mô tả
1 Id Integer Mã tự tặng sau mỗi lần tạo mới thói quen
2 User_id Integer Mã cục bộ được đặt mặc định là
3 Day_of_time_id Integer Buổi thực hiện trong một ngày của thói quen
4 Habit_name Text Tên thói quen
5 Habit_logo Text Logo của thói quen
6 longest_steak Integer Chuỗi thực hiện một thói quen
STT Tên cột Loại dữ liệu Bắt buộc Mô tả
1 Id Integer Mã tương ứng với một buổi trong một ngày
2 Time_name Text Tên buổi trong một ngày
STT Tên cột Loại dữ liệu Bắt buộc Mô tả
1 Id Integer Mã cục bộ được đặt mặc định là 1
2 User_name Text Tên người dùng sẽ là Email sau khi đăng nhập
STT Tên cột Loại dữ liệu Bắt buộc Mô tả
1 Id Integer Mã tự tăng sau mỗi lần tạo mới một lời nhắc
2 Habit_id Integer Mã thói quen tương ứng với lời nhắc
3 Hour_time Integer Giờ thực hiện lời nhắc
4 Minutes_time Integer Phút thực hiện lời nhắc
STT Tên cột Loại dữ liệu Bắt buộc Mô tả
1 Habit_id Integer Mã thói quen tương ứng với ngày thực hiện
2 User_id Integer Mã cục bộ được đặt mặc định là
3 Day_of_week_id Integer Mã ngày trong tuần tương ứng với ngày thực hiện
4 Time_hour Integer Giờ thực hiện thói quen
5 Time_minute Integer Phút thực hiện thói quen
6 Time_second Integer Giây thực hiện thói quen
STT Tên cột Loại dữ liệu Bắt buộc Mô tả
1 Id Integer Mã tương ứng với 7 ngày trong tuần
2 Day_of_week_name Text Tên ngày thực hiện trong tuần
Thiết kế dữ liệu – Back end Server
5.2.1Mô hình liên kết thực thể
Hình 6 : Mô hình liên kết thực thể
STT Tên cột Loại dữ liệu
1 _id Int64 Mã tự sinh trong Mongo
2 UserName Int64 Tên người dùng sẽ được đặt mặc định là email
3 DayOfTime Int64 Tên buổi thực hiện trong ngày
4 HabitName String Tên thói quen
5 HabitId String Mã thói quen tương ứng Mã này sẽ được lấy trong data của thiết bị
6 numLongestSteak Int64 Chuỗi thực hiện thói quen
STT Tên cột Loại dữ liệu
1 HabitId Int64 Mã habit tương ứng
2 UserName Int64 Email của username
3 DayOfWeekName Int64 Tên ngày thực hiện trong tuần
4 TimeHour Int64 Thời gian đại diện cho giờ thực hiện
5 TimeMinute Int64 Thời gian đại diện cho phút thực hiện
6 TimeSecond Int64 Thời gian đại diện cho số giây thực hiện
STT Tên cột Loại dữ liệu
1 _id Int64 Mã tự sinh trong Mongo
2 UserName String Email của user
STT Tên cột Loại dữ liệu
1 _id Int64 Mã tự sinh trong Mongo
2 HabitId Int64 Mã của habit tương ứng
3 UserName String Email của người dùng
4 Hour_time Int64 Giờ thực hiện lời nhắc nhở
5 Minutes_time Int64 Phút thực hiện lời nhắc nhở
STT Tên cột Loại dữ liệu
1 _id Int64 Mã tự sinh trong Mongo
2 UserName Int64 Email của người dùng
3 HabitId Int64 Mã habit tương ứng
4 historyHabitsState String Trạng thái thực hiện habit trong 1 ngày
5 historyDate String Ngày thực hiện habit
Class Diagram
Hình 6.': Sơ đồ Class Diagram
Lược đồ tuần tự
Hình 6./: Sequence tạo mới Habit
5.4.2Sequence tạo mới Habit trong 1 tuần
Hình 6.6: Sequence tạo mới Habit trong tuần
5.4.4Sequence cập nhật trạng thái Done Habit
Hình 6.:: Squence cập nhật trạng thái Done Habit
5.4.5Sequence cập nhật trạng thái Failed Habit
Hình 6.Q: Sequence cập nhật trạng thái Failed Habit
5.4.6Sequence lấy danh sách Habit theo mã người dùng
Hình 6.R: Sequence lấy danh sách Habit theo mã người dùng
5.4.7Sequence lấy danh sách habit theo mỗi ngày trong tuần
Hình 6 T: Sequence lấy danh sách habit theo mỗi ngày trong tuần
5.4.8Sequence lấy danh sách lịch sử theo mỗi ngày
Hình 6 : Sequence lấy danh sách lịch sử theo mỗi ngày
5.4.9Sequence tính toán và hiển thị chuỗi hoạt động liên tục
Hình 6 : Sequence tính toán và hiển thị chuỗi hoạt động liên tục
5.4.9.1 Sequence tính toán và hiển thị chuỗi hoạt động liên tục
Hình 6 ': Sequence tính toán và hiển thị chuỗi hoạt động liên tục
5.4.10Sequence tính toán phần trăm nhật ký hoàn thành các habit các ngày trong tuần
Hình 6 /: Sequence tính toán % nhật ký hoàn thành các habit của các ngày trong tuần
5.4.11Sequence lấy thông tin một habit
Hình 6 6: Sequence lấy thông tin một habit
Hình 6 7: Sequence xóa một habit
5.4.13Sequence cập nhật một habit
Hình 6 :: Sequence cập nhật một Habit
5.4.14Sequence xóa toàn bộ ghi chú ngày hoạt động trong tuần của habit
Hình 6 Q: Sequence xóa toàn bộ ghi chú ngày hoạt động trong tuần của habit
5.4.15Sequence cập nhật buổi thực hiện habit
Hình 6 R: Sequence cập nhật buổi thực hiện habit
5.4.16Sequence thêm ngày thực hiện habit
Hình 6 T: Sequence thêm ngày thực hiện habit
5.4.17Sequence thêm mới nhắc nhở
Hình 6 : Sequence thêm mới nhắc nhở
5.4.18Sequence cập nhật nhắc nhở
Hình 6 : Sequence cập nhật nhắc nhở
Hình 6 ': Sequence xóa nhắc nhở
5.4.20Sequence hiển thị danh sách nhắc nhở
Hình 6 /: Sequence hiển thị danh sách nhắc nhở
5.4.21Sequence tự động thêm nhật ký mới sau 24 giờ
Hình 6 6: Sequence tự động thêm nhật ký sau / giờ
5.4.22Sequence Diagram kiểm tra và tự động thêm nhật ký mới sau khi người dùng khởi động điện thoại
Hình 6 7: Sequence Diagram kiểm tra và tự động thêm nhật ký mới sau khi người dùng khởi động điện thoại
5.4.23Sequence đồng bộ dữ liệu lên server
Hình 6 :: Sequence đồng bộ dữ liệu lên điện thoại
THIẾT KẾ GIAO DIỆN VÀ XỬ LÝ
Các màn hình User
Bảng 7 : Các màn hình User
ID Screen name Mô tả Ghi chú
SCU01 Login screen Màn hình đăng nhập
SCU02 Home screen Màn hình trang chủ
SCU03 Create habit screen Màn hình thêm mới habit
SCU04 Count down screen Màn hình đếm ngược
SCU05 Habit Setting screen Màn hình cài đặt habit
SCU06 Planner screen Màn hình thống kê kế hoạch
SCU07 Setting screen Màn hình cài đặt
SCU08 About us screen Màn hình thông tin nhà phát triển
DS01 Delete habit dialog screen Màn hình xác nhận xóa thói quen
DS02 Remainder dialog Màn hình tạo, cập nhật nhắc nhở
DS03 Timer dialog Màn hình tạo thời gian thói quen cụ thể
DS04 Logout dialog Màn hình xác nhận đăng xuất
Hình 7 : Login Screen Bảng 7 : Bảng đặc tả màn hình SCUT
No Name Require Format Reference Note
1 Nút vào ứng dụng ngay True Button Nhấn vào đến màn hình SCU02
2 Nút đăng nhập với Goole True Button
Nhấn nút đăng nhập chọn tài khoản thành công đến màn hình
Hình 7 : Home Screen Bảng 7.': Bảng đặc tả màn hình SCUT
No Name Require Format Reference Note
1 Nút tạo mới habit True Button Nhấn vào đến màn hình
Nút thống kê thói quen theo ngày
Khi nhấn vào từng ngày cụ thể danh sách thói quen sẽ hiện ra theo mỗi ngày tương đương
3 Tab ẩn hiện danh sách True Tab Khi nhấn giúp thu gọi hoặc hiện ra danh sách
85 thói quen cần làm thói quen cần làm trong ngày
4 Nút thói quen cụ thể True Button
[Trường hợp 1] Nếu thói quen không có thời gian theo dõi thì khi vuốt sang phải sẽ chuyển sang màn hình SCU04
[Trường hợp 2] Nếu thói quen có thời gian theo dõi thì khi vuốt sang phải sẽ chuyển màu sang xanh lá – trạng thái Done
[Trường hợp 3] Khi vuốt sang phải sẽ chuyển màu sang đỏ – trạng thái Failed
[Trường hợp 4] Khi nhấn vào sẽ chuyển sang màn hình SCU05
Tab ẩn hiện danh sách thói quen hoàn thành
Khi nhấn giúp thu gọi hoặc hiện ra danh sách thói quen đã hoàn thành
Tab ẩn hiện danh sách thói quen chưa hoàn thành
Khi nhấn giúp thu gọi hoặc hiện ra danh sách thói quen chưa hoàn thành
7 Tab home True Tab Trở về màn hình SCU02
8 Tab planner True Tab Chuyển đến màn hình
9 Tab setting True Tab Chuyển đến màn hình
Bảng 7./: Bảng đặc tả màn hình SCUT'
No Name Require Format Reference Note
1 Thanh nhập tên thói quen True Input text Nhấn vào đển nhập tên thói quen
Nút các ngày thực hiện thói quen trong 1 tuần
Nhấn nút để chọn các ngày thực hiện thói quen trong 1 tuần
Nút các buổi thực hiện thói quen trong 1 ngày
Nhấn nút để chọn các buổi thực hiện thói quen trong 1 ngày
4 Nút tạo mới thói quen True Button
Nhấn nút tạo mới thói quen Tạo mới thành công sẽ trở về màn hình SCU02
5 Nút trở về True Button Nhấn nút trở về màn hình SCU02
Hình 7./: Hình Countdown Screen Bảng 7.6: Bảng đặc tả màn hình SCUT/
No Name Require Format Reference Note
1 Nút trở về True Button Nhấn vào trở về màn hình
Nút bắt đầu đếm ngược
Nhấn vào để bắt đầu thời gian thực hiện một thói quen có thời gian định sẵn
3 Nút bắt đầu lại True Button
Nhấn vào để bắt đầu lại một thói quen khi quá trình thực hiện không ưng ý
Nút hoàn thành thói quen
Nhấn vào nút hoàn thành Sau khi trở về màn hình
Hình 7.6: Habit Setting Screen Bảng 7.7: Bảng đặc tả màn hình SCUT6
No Name Require Format Reference Note
1 Nút trở về True Button Nhấn vào trở về màn hình SCU02
2 Nút xóa thói quen True Button Nhấn vào hiển thị màn hình DS01
3 Thanh nhập tên thói quen True Input text
Nhấn vào đển nhập tên thói quen
Nút các ngày thực hiện thói quen trong 1 tuần
Nhấn nút để chọn các ngày thực hiện thói quen trong 1 tuần
Nút các buổi thực hiện thói quen trong 1 ngày
Nhấn nút để chọn các buổi thực hiện thói quen trong 1 ngày
Nút tạo thời gian theo dõi thói quen theo thời điểm cụ thể
True Button Nhấn nút hiển thị màn hình DS03
Nút tạo lời nhắc nhở cho thói quen theo từng thời gian cụ thể
True Button Nhấn nút hiển thị màn hình DS02
8 Nút cập nhật thói quen True Button Nhấn vào giúp cập nhật thói quen
Hình 7.7: Planner Screen Bảng 7.:: Bảng đặc tả màn hình SCUT7
No Name Require Format Reference Note
1 Tab home True Tab Chuyển đến màn hình
2 Tab planner True Tab Chuyển đến màn hình
3 Tab setting True Tab Chuyển đến màn hình
Hình 7.:: Setting Screen Bảng 7.Q: Bảng đặc tả màn hình SCUT:
No Name Require Format Reference Note
1 Nút đồng bộ True Button
Nhấn vào để đồng bộ toàn bộ dữ liệu dưới thiết bị lên server lưu trữ
2 Nút About us True Button Nhấn vào chuyển đến màn hình SCU08
Nút Đăng xuất/Đăng nhập
[Trường hợp 1] Nếu đang ở trạng thái đăng nhập thì nhấn vào hiển thị màn hình
DS04 [Trường hợp 2] Nếu ở trạng thái chưa đăng nhập thì khi nhấn vào sẽ hiển thị màn hình chọn tài khoản Google
4 Tab home True Tab Chuyển đến màn hình
5 Tab planner True Tab Chuyển đến màn hình
6 Tab setting True Tab Chuyển đến màn hình
Hình 7.Q: About Us Screen Bảng 7.R: Bảng đặc tả SCUTQ
No Name Require Format Reference Note
1 Nút trở về True Button Nhấn vào trở về màn hình
Hình 7.R: Delete Habit Dialog Screen Bảng 7 T: Bảng đặc tả màn hình DST
No Name Require Format Reference Note
1 Nút hủy True Button Nhấn vào trở lại màn hình
2 Nút xác nhận xóa True Button Nhấn nút xóa thói quen và trở về màn hình SCU02
Hình 7 T: Remainder Dialog Bảng 7 : Bảng đặc tả DSUT
No Name Require Format Reference Note
Thanh cuộc chọn thời gian nhắc nhở
Vuốt theo chiều dọc lên xuống để chọn thời gian nhắc nhở cho thói quen
1 Nút hủy True Button Nhấn vào trở lại màn hình
Nút xác tạo thời gian theo dõi
Nhấn vào trở lại màn hình
SC05 và cập nhật lại màn hình
Hình 7 : Timer Dialog Bảng 7 : Bảng đặc tả SCUT'
No Name Require Format Reference Note
Thanh cuộn chọn thời gian giám sát
Vuốt theo chiều dọc lên xuống để chọn thời gian giám sát cho thói quen
Hình 7 : Logout Dialog Bảng 7 ': Bảng đặc tả màn hình DST/
No Name Require Format Reference Note
1 Nút hủy True Button Nhấn vào trở lại màn hình SCU07
2 Nút xác nhận đăng xuất True Button
Nhấn nút xác nhận đăng xuất cập nhật màn hình và trở về màn hình
CÀI ĐẶT VÀ KIỂM THỬ
Cài đặt
Sử dụng Draw.io để vẽ UML
Sử dụng Android Studio Flamigo để lập trình Android
Sử dụng IntelliJ IDEA để lập trình Java back-end
Sử dụng Figma để thiết kế giao diện bản mềm
Sử dụng Docker để Deploy
Sử dụng Postgres14 để làm Server back-end
Sử dụng MongoDB làm cơ sở dữ liệu.
Kiểm thử
Bảng : : Bảng kiểm thử các chức năng của ứng dụng
Chức năng Mô tả Trạng thái Đăng nhập User đăng nhập vào bằng tài khoản Google Pass
Tạo thói quen mới bằng cách sử dụng nút "Tạo mới" để bắt đầu hành trình hình thành thói quen Để thực hiện thói quen, người dùng chỉ cần nhấn vào nút "Bắt đầu đếm ngược" và theo dõi quá trình.
Cài đặt thói quen User nhấn vào nút cài đặt để sửa thói quen hay xóa chúng Pass
Thống kê kế hoạch User nhấn vào nút Planner để xem thống kê các habit Pass
User nhấn vào nút cài đặt chương trình để thực hiện việc đăng xuất, đồng bộ hóa hay để truy cập vào phần About Us
User nhấn vào nút About Us để xem thông tin của chủ sỡ hữu nhằm biết thêm thông tin về App
Xóa thói quen User nhấn vào biểu tượng thùng rác để xóa đi thói quen không mong muốn Pass
User nhấn vào biểu tượng Remainder để thực hiện việc lên lịch nhắc nhở thực hiện các thói quen
User nhấn vào biểu tượng Timer để thực hiện việc giám sát xem bản thân thực hiện thói quen trong bao lâu
Màn hình đăng xuất User được thông báo về việc lựa chọn
Yes/No trong vấn đề đăng xuất Pass