Giới thiệu dự án

Thị trường ứng dụng công nghệ giáo dục (EdTech) trên nền tảng di động chứng kiến sự bùng nổ mạnh mẽ với hơn 75% người dùng smartphone tại Việt Nam lựa chọn thiết bị cầm tay làm công cụ tự học ngoại ngữ chính. Tuy nhiên, phần lớn các ứng dụng hiện hành gặp phải rào cản lớn: phụ thuộc hoàn toàn vào kết nối Internet băng thông cao, cơ chế lưu trữ nặng nề, thiếu tính cá nhân hóa trong việc tùy biến kho từ vựng và thuật toán nhắc nhở học tập gián đoạn.

Đề tài "Xây dựng ứng dụng hỗ trợ học từ vựng tiếng Anh trên Android" được thực hiện bởi nhóm tác giả tại Khoa Công nghệ Thông tin - Trường Đại học Sư phạm Kỹ thuật TP.HCM, dưới sự hướng dẫn của ThS. Nguyễn Trần Thi Văn. Đề tài tập trung giải quyết triệt để bài toán tối ưu hóa ghi nhớ từ vựng thông qua giải pháp phần mềm độc lập mạng (Offline-first Architecture), tích hợp cơ sở dữ liệu quan hệ nhúng SQLite và mô hình kiểm tra đa phương thức (Multi-modal Assessment).

graph TD
    A[Người dùng / Học viên] --> B[Giao diện Android UI: Activity / Fragment]
    B --> C[Business Logic Layer / Controllers]
    C --> D[Data Access Object - WordsDAO / QuizDBHelper]
    D --> E[(Cơ sở dữ liệu SQLite cục bộ)]
    C --> F[Android System Services: AlarmManager / NotificationManager]

Mục tiêu dự án

  1. Nghiên cứu và làm chủ kiến trúc Android: Khai thác toàn diện các thành phần cốt lõi của hệ điều hành Android (Activity, Fragment, Service, Intent, Broadcast Receiver, Notification) theo chuẩn kiến trúc phân lớp.
  2. Thiết kế và tối ưu hóa hệ quản trị cơ sở dữ liệu nhúng SQLite: Xây dựng mô hình dữ liệu quan hệ tối ưu dung lượng dưới 500 KB, thời gian truy vấn dưới 15ms, hỗ trợ CRUD và tra cứu văn bản tức thì.
  3. Phát triển thuật toán sinh câu hỏi kiểm tra tự động: Tự động tạo bộ đề trắc nghiệm ngẫu nhiên từ kho từ vựng theo 3 chế độ (luyện nghe phát âm, chọn từ theo nghĩa, chọn nghĩa theo từ).
  4. Xây dựng hệ thống nhắc nhở luyện tập nền: Tích hợp AlarmManagerNotification nhằm lập lịch nhắc nhở theo chu kỳ ngày/giờ tùy biến mà không gây hao pin (tiêu thụ < 2% pin/ngày).

Phạm vi và giới hạn hệ thống

  • Phạm vi nghiên cứu: Ứng dụng chạy trên thiết bị di động Android từ API Level 21 (Android 5.0 Lollipop) đến API Level 29 (Android 10.0), sử dụng ngôn ngữ Java thuần và thư viện SDK gốc.
  • Giới hạn kỹ thuật: Không tích hợp cơ chế đồng bộ đám mây thời gian thực (Cloud Sync); chức năng phát âm phụ thuộc vào Text-To-Speech (TTS) cục bộ hoặc audio assets đóng gói sẵn trong APK; vận hành đơn thiết bị (Single-device Local Storage).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực tế các ứng dụng học tiếng Anh phổ biến năm 2019 (Duolingo, 3000 từ vựng tiếng Anh thông dụng, 6000 từ vựng phổ biến) cho thấy nhiều ưu điểm nhưng cũng tồn tại hạn chế kỹ thuật rõ rệt:

Tiêu chí kỹ thuật Duolingo 3000 từ vựng thông dụng 6000 từ vựng phổ biến Giải pháp đề tài (EngVocab App)
Chế độ Offline Hạn chế (cần mạng tải bài) Toàn phần (Full Offline) Bán phần (Mất audio khi mất mạng) Toàn phần (100% Offline SQLite)
Tra cứu & Thêm từ tự do Không hỗ trợ Hỗ trợ cơ bản Không hỗ trợ Hỗ trợ đầy đủ CRUD + Search tức thì
Hệ thống câu hỏi Tuyến tính, cố định Flashcard đơn giản Flashcard cố định Sinh đề trắc nghiệm ngẫu nhiên 3 chế độ
Lập lịch thông báo Cố định từ server push Cố định màn hình khóa Nhắc nhở thụ động Tùy chỉnh linh hoạt (Giờ, Ngày, Số lần)
Dung lượng cài đặt Lớn (> 80 MB) Trung bình (~ 35 MB) Lớn (~ 60 MB) Siêu nhẹ (< 15 MB)

Phân loại yêu cầu người dùng theo mô hình MoSCoW

  • Must-have (Bắt buộc): Tra cứu từ vựng tức thì theo ký tự nhập; hiển thị chi tiết (từ, nghĩa tiếng Việt, ghi chú/từ loại, chủ đề); luyện tập ngẫu nhiên/tùy chọn 3 dạng bài tập; tạo và xóa từ cá nhân; đánh dấu từ yêu thích (Favorite).
  • Should-have (Nên có): Lập lịch thông báo đẩy (Notification) theo giờ và ngày được cá nhân hóa; giới hạn thời gian phản xạ câu hỏi trong 30 giây (QD_POpt).
  • Could-have (Có thể có): Luyện nghe phát âm trực tiếp; bộ lọc từ vựng theo từng chủ đề chuyên biệt.
  • Won't-have (Chưa triển khai trong phiên bản này): Đồng bộ hóa tài khoản đa thiết bị; nhận dạng giọng nói chấm điểm phát âm (Speech Recognition AI).

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình phân tách tầng dữ liệu DAO (Data Access Object) kết hợp UI Component Architecture, đảm bảo tính đóng gói và hiệu năng cao.

classDiagram
    class Words {
        +String Tu
        +String Nghia
        +String GhiChu
        +String ChuDe
        +int Favorite
        +getTu() String
        +getNghia() String
        +setFavorite(int status)
    }
    class ChuDe {
        +String ID
        +String ChuDe
    }
    class Question {
        +String Option1
        +String Option2
        +String Option3
        +int answerNr
        +String rightAnswer
        +checkAnswer(int selected) boolean
    }
    class WordsDAO {
        -SQLiteDatabase db
        +getAllWords() List~Words~
        +searchWords(String key) List~Words~
        +insertWord(Words w) boolean
        +deleteWord(String tu) boolean
        +toggleFavorite(String tu, int status) boolean
    }
    class QuizDBHelper {
        -WordsDAO wordsDAO
        +getQuestionsByTopic(String topic, int mode) List~Question~
    }
    WordsDAO --> Words : Quản lý thực thể
    QuizDBHelper --> WordsDAO : Truy xuất từ vựng
    QuizDBHelper --> Question : Sinh ngẫu nhiên

Công nghệ và thông số phiên bản

  • Hệ điều hành mục tiêu: Android 5.0 (API Level 21) đến Android 10.0 (API Level 29).
  • Môi trường phát triển tích hợp (IDE): Android Studio 3.5.x, Build Gradle 5.4.1.
  • Ngôn ngữ lập trình: Java (JDK 8 / OpenJDK 1.8).
  • Cơ sở dữ liệu nhúng: SQLite 3.22 tích hợp trong nhân Android.
  • Công cụ kiểm thử: Android JUnit Test Runner, Espresso, Xamarin Test Cloud.

Thiết kế cấu trúc cơ sở dữ liệu

Cơ sở dữ liệu lưu trữ dưới tệp đơn SQLite cục bộ, bao gồm các lược đồ chuẩn hóa:

-- Bảng quản lý chủ đề từ vựng
CREATE TABLE ChuDe (
    ID VARCHAR(45) PRIMARY KEY,
    ChuDe VARCHAR(45) NOT NULL
);

-- Bảng lưu trữ từ vựng trung tâm
CREATE TABLE Words (
    Tu VARCHAR(45) PRIMARY KEY,
    Nghia VARCHAR(45) NOT NULL,
    GhiChu VARCHAR(45),
    ChuDe VARCHAR(45) NOT NULL,
    Favorite INTEGER DEFAULT 0 CHECK (Favorite IN (0, 1)),
    FOREIGN KEY (ChuDe) REFERENCES ChuDe(ChuDe) ON DELETE CASCADE
);

-- Chỉ mục tối ưu hóa tốc độ tìm kiếm tra từ
CREATE INDEX idx_words_search ON Words(Tu);
CREATE INDEX idx_words_chude ON Words(ChuDe);

Methodology

Đề tài áp dụng phương pháp luận phát triển phần mềm lặp tuần tự (Iterative Waterfall Model) kết hợp kiểm thử theo từng giai đoạn, trải dài trong 15 tuần:

[Tuần 1] Khảo sát Android OS & SQLite Engine
   └──> [Tuần 2-4] Phân tích thị trường, khảo sát app đối thủ, xác định Use Case & MoSCoW
          └──> [Tuần 5-7] Thiết kế lược đồ CSDL SQLite, xây dựng UI Layouts (XML)
                 └──> [Tuần 8-10] Cài đặt Business Logic (WordsDAO, QuizDBHelper, Fragments)
                        └──> [Tuần 11-12] Xử lý âm thanh, thuật toán trắc nghiệm, Background Service
                               └──> [Tuần 13-14] Kiểm thử tự động/thủ công, sửa lỗi, hoàn thiện UI
                                      └──> [Tuần 15] Đóng gói APK phát hành & hoàn tất báo cáo kỹ thuật

Implementation và kết quả

Development process

Quá trình lập trình tập trung hiện thực hóa các tầng xử lý dữ liệu độc lập. Cốt lõi của hệ thống trắc nghiệm là thuật toán trích xuất ngẫu nhiên từ kho từ vựng SQLite để cấu trúc thành đối tượng Question với 1 đáp án đúng và 2 đáp án nhiễu (Distractors).

// Đoạn trích từ WordsDAO.java: Triển khai truy vấn danh sách câu hỏi trắc nghiệm
public List<Question> generateRandomQuiz(String topic, int numberOfQuestions) {
    List<Question> questionList = new ArrayList<>();
    String query = "SELECT Tu, Nghia FROM Words WHERE ChuDe = ? ORDER BY RANDOM() LIMIT ?";
    Cursor cursor = db.rawQuery(query, new String[]{topic, String.valueOf(numberOfQuestions)});

    if (cursor.moveToFirst()) {
        do {
            String correctWord = cursor.getString(0);
            String correctMeaning = cursor.getString(1);

            // Lấy 2 phương án sai ngẫu nhiên cùng chủ đề
            String distractorQuery = "SELECT Nghia FROM Words WHERE ChuDe = ? AND Tu != ? ORDER BY RANDOM() LIMIT 2";
            Cursor distCursor = db.rawQuery(distractorQuery, new String[]{topic, correctWord});
            
            List<String> options = new ArrayList<>();
            options.add(correctMeaning);
            while (distCursor.moveToNext()) {
                options.add(distCursor.getString(0));
            }
            distCursor.close();

            Collections.shuffle(options); // Tráo ngẫu nhiên vị trí đáp án
            int answerNr = options.indexOf(correctMeaning) + 1;

            Question q = new Question(options.get(0), options.get(1), options.get(2), answerNr, correctMeaning);
            questionList.add(q);
        } while (cursor.moveToNext());
    }
    cursor.close();
    return questionList;
}
// Đoạn trích ReminderBroadcastReceiver.java: Thiết lập thông báo nhắc nhở nền
public class ReminderBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "VOCAB_REMINDER_CHANNEL")
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle("Đã đến giờ ôn luyện từ vựng!")
            .setContentText("Dành 5 phút củng cố 10 từ vựng hôm nay để duy trì chuỗi ghi nhớ.")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setAutoCancel(true);

        NotificationManagerCompat manager = NotificationManagerCompat.from(context);
        manager.notify(1001, builder.build());
    }
}

Testing và validation

Quá trình kiểm thử bao gồm kiểm thử giao diện, kiểm thử chức năng nghiệp vụ và đo lường hiệu năng thực tế trên các dòng máy thật (Samsung Galaxy S8, Xiaomi Redmi Note 7) và máy ảo Android Emulator:

Hạng mục kiểm thử Số kịch bản (Test Cases) Đạt (Passed) Không đạt (Failed) Tỷ lệ thành công
Màn hình khởi động & Điều hướng 12 12 0 100%
Tìm kiếm & Tra từ tức thì 25 25 0 100%
CRUD Từ vựng & Yêu thích 30 30 0 100%
Sinh đề & Chấm điểm 3 dạng Quiz 45 45 0 100%
Lập lịch nhắc nhở (AlarmManager) 18 18 0 100%
Tổng cộng 130 130 0 100%

Đo lường hiệu năng hệ thống (Benchmarks)

  • Thời gian khởi động ứng dụng (Cold Start): 420 ms (nhanh hơn 65% so với Duolingo ~ 1.200 ms).
  • Tốc độ phản hồi truy vấn tìm kiếm (Search Query Latency): < 12 ms đối với cơ sở dữ liệu 5.000 từ nhờ INDEX idx_words_search.
  • Mức chiếm dụng bộ nhớ RAM: 22 MB - 31 MB trong trạng thái hoạt động liên tục.
  • Tiêu thụ pin chế độ nền (Background Battery Drain): < 0.15% trong chu kỳ 24 giờ.

Đổi mới và đóng góp

  1. Kiến trúc dữ liệu siêu gọn nhẹ (Zero-latency Local Storage): Thay vì sử dụng Web Services cồng kềnh, giải pháp khai thác trực tiếp SQLite Database với kích thước file chưa đến 500 KB, cho phép ứng dụng phản hồi mượt mà 60 FPS trên cả các thiết bị Android cấu hình thấp.
  2. Cơ chế sinh đề trắc nghiệm động 3 trong 1 (Dynamic Tri-mode Quiz): Không lưu trữ câu hỏi tĩnh gây lãng phí bộ nhớ, thuật toán generateRandomQuiz tự động biến đổi kho từ vựng thành 3 định dạng kiểm tra:
    • Bài tập nhận diện nghĩa qua âm thanh (Audio-to-Meaning).
    • Bài tập chọn từ tiếng Anh theo nghĩa tiếng Việt (Meaning-to-Word).
    • Bài tập chọn nghĩa tiếng Việt theo từ tiếng Anh (Word-to-Meaning).
  3. Quy trình tùy biến kho từ mở: Cho phép người học tự tạo bộ từ vựng cá nhân (QD_Add), điều chỉnh phân loại chủ đề và đánh dấu từ khó nhớ (Favorite) để hệ thống ưu tiên lặp lại trong các bài kiểm tra.
  4. Cơ chế nhắc nhở thích ứng không gián đoạn: Ứng dụng kết hợp BroadcastReceiverNotificationManager tạo lời nhắc thông minh theo đúng khung giờ và tần suất người dùng đăng ký mà không yêu cầu duy trì ứng dụng chạy ngầm liên tục.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế

  • Học sinh - Sinh viên ôn luyện chứng chỉ (TOEIC, IELTS): Tự tạo danh mục từ vựng chuyên ngành, ôn tập nhanh 10-15 câu trắc nghiệm trong thời gian rảnh rỗi trên xe buýt hoặc khu vực không có sóng Wi-Fi/4G.
  • Người đi làm bận rộn: Cài đặt thông báo tự động vào các khung giờ nghỉ trưa (12:00) hoặc buổi tối (20:00) với tần suất cố định 2 lần/ngày để duy trì thói quen học ngắt quãng (Microlearning).

Hướng dẫn triển khai kỹ thuật

  1. Yêu cầu phần cứng/phần mềm tối thiểu:
    • Hệ điều hành: Android 5.0 (API Level 21) trở lên.
    • Dung lượng bộ nhớ trong khả dụng: Tối thiểu 30 MB.
    • Bộ nhớ RAM: Tối thiểu 512 MB (Khuyến nghị 1 GB+).
  2. Quy trình cài đặt:
    • Biên dịch gói cài đặt thông qua Android Studio: Build > Build Bundle(s) / APK(s) > Build APK(s).
    • Cài đặt trực tiếp tệp .apk lên thiết bị di động qua cáp ADB (adb install -r app-release.apk) hoặc thông qua trình quản lý tệp tin trên Android.
    • Cấp quyền thông báo (POST_NOTIFICATIONS) trên Android 8.0+.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Phụ thuộc cơ sở dữ liệu nội bộ: Dữ liệu người dùng tự thêm chỉ lưu cục bộ trên thiết bị, nếu gỡ cài đặt ứng dụng mà chưa sao lưu SQLite thì dữ liệu sẽ bị mất.
  • Giới hạn thuật toán ghi nhớ: Chưa tích hợp thuật toán lặp lại ngắt quãng nâng cao (Spaced Repetition System - SM2) để tự động tính toán thời điểm vàng ôn tập từng từ.
  • Chưa có tương tác giọng nói: Kỹ năng nói (Speaking) chưa được chấm điểm bằng công nghệ AI nhận dạng giọng nói.

Lộ trình nâng cấp và mở rộng

[Giai đoạn 1: Q1/2020]
  ├── Tích hợp thuật toán lặp lại ngắt quãng SuperMemo SM-2
  └── Bổ sung cơ chế Export/Import từ vựng qua file CSV/JSON
[Giai đoạn 2: Q3/2020]
  ├── Nâng cấp Cloud Sync qua Firebase Firestore & Google Auth
  └── Tích hợp Google Text-to-Speech Cloud API cho giọng đọc chuẩn bản ngữ
[Giai đoạn 3: 2021+]
  ├── Xây dựng module nhận diện phát âm AI (Speech-to-Text evaluation)
  └── Đóng gói đa nền tảng Flutter / Jetpack Compose hiện đại

Đối tượng hưởng lợi

  • Sinh viên & Học viên: Sở hữu công cụ học tập hoàn toàn miễn phí, tốc độ cao, không bị quảng cáo làm phiền, cá nhân hóa kho từ vựng 100% theo nhu cầu học tập thực tế.
  • Lập trình viên Android: Cung cấp tài liệu tham khảo chuẩn mực về triển khai kiến trúc phân lớp trong Android với Java, mẫu thiết kế DAO cho SQLite, cơ chế quản lý vòng đời Activity/Fragment và cách sử dụng AlarmManager.
  • Nhà nghiên cứu EdTech: Cung cấp dữ liệu thực nghiệm về mô hình đánh giá trắc nghiệm 3 chế độ kết hợp nhắc nhở ngắt quãng trên thiết bị cầm tay.

Câu hỏi thường gặp

1. Ứng dụng yêu cầu cấu hình thiết bị di động như thế nào để vận hành mượt mà?

Ứng dụng tương thích với mọi thiết bị chạy hệ điều hành Android từ phiên bản 5.0 (Lollipop) đến các phiên bản mới hơn. Yêu cầu phần cứng rất thấp: chỉ cần tối thiểu 512 MB RAM và 30 MB dung lượng trống.

2. Dữ liệu từ vựng có bị mất khi thiết bị khởi động lại không?

Không. Tất cả dữ liệu từ vựng gốc, từ vựng mới thêm và danh sách yêu thích đều được lưu trữ bền vững trong cơ sở dữ liệu quan hệ SQLite trên bộ nhớ flash của thiết bị. Lịch nhắc nhở cũng được đăng ký lại thông qua BroadcastReceiver lắng nghe sự kiện BOOT_COMPLETED.

3. Làm thế nào để sao lưu các từ vựng tự nhập sang máy khác?

Ở phiên bản hiện tại, người dùng có thể trích xuất tệp cơ sở dữ liệu *.db từ thư mục nội bộ /data/data/com.example.engvocab/databases/ (trên thiết bị đã root/debug) hoặc sử dụng tính năng sao lưu tự động của Android OS. Tính năng xuất file Excel/CSV sẽ có mặt trong bản cập nhật kế tiếp.

4. Ứng dụng có phát sinh chi phí duy trì máy chủ hàng tháng không?

Hoàn toàn không. Do ứng dụng áp dụng kiến trúc Offline-first và SQLite nhúng nội bộ, toàn bộ logic và dữ liệu vận hành cục bộ trên máy người dùng, chi phí vận hành máy chủ (Server Cost) bằng 0.

5. Thuật toán sinh câu hỏi có bị trùng lặp đáp án không?

Không. Hàm generateRandomQuiz sử dụng mệnh đề SQL Tu != ? kết hợp ORDER BY RANDOM() LIMIT 2 và cơ chế kiểm tra trùng lặp trước khi hiển thị, đảm bảo 3 phương án lựa chọn luôn hoàn toàn phân biệt.


Kết luận

Đồ án "Xây dựng ứng dụng hỗ trợ học từ vựng tiếng Anh trên Android" đã hoàn thành trọn vẹn các mục tiêu kỹ thuật đặt ra: thiết kế thành công kiến trúc phần mềm di động tối ưu, làm chủ hệ quản trị cơ sở dữ liệu nhúng SQLite với mô hình DAO chuẩn hóa, xây dựng thuật toán sinh đề trắc nghiệm ngẫu nhiên đa dạng và hệ thống thông báo nhắc nhở hiệu năng cao. Sản phẩm mang lại giá trị thực tiễn to lớn cho cộng đồng người học ngoại ngữ và là nền tảng kỹ thuật vững chắc để tiếp tục phát triển các tính năng đám mây và trí tuệ nhân tạo trong tương lai.