Với nhiều công nghệ liên tục thay đổi và hoàn thiện cho việc phát triển web từ giao diện frontend, server backend, hệ thống system, bảo mật security,… lập trình ứng dụng web đã trở thành
Trang 1KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP
ỨNG DỤNG ĐĂNG KÍ LỊCH NGHỈ PHÉP
Công ty thực tập: Công ty TNHH Giải pháp Phần mềm Tường Minh Người phụ trách : Nguyễn Hà Phi Hùng
Thực tập sinh: Đinh Hoàng Nhi
TP Hồ Chí Minh, tháng 1 năm 2021
Trang 2Ngày nay, ứng dụng web là một bộ phận không thể thiếu của ngành công nghiệp phần mềm Với nhiều công nghệ liên tục thay đổi và hoàn thiện cho việc phát triển web từ giao diện (frontend), server (backend), hệ thống (system), bảo mật (security),… lập trình ứng dụng web
đã trở thành nhân tố kích thích sự phát triển của công nghệ thông tin thế giới, đặc biệt là trong lĩnh vực về phần mềm
Cùng với xu thế phát triển của thế giới, Việt Nam cũng không phải ngoại lệ Ngành phát triển và bảo trì các dự án ứng dụng web đang ngày càng phổ biến và rộng mở cơ hội việc làm cho rất nhiều lập trình viên trong nước Đặc biệt hơn việc lập trình web tại Việt Nam đã có thể cùng phối hợp với các đối tác nước ngoài (lập trình viên, khách hàng…), kích thích tiềm năng thương mại và đóng góp rất lớn cho nền kinh tế nước nhà
Lập trình web sinh ra nhằm đơn giản hóa nhiều tác vụ môi trường từ phía người dùng, khách hàng, khi chỉ cần sử dụng phần mềm bằng việc truy cập vào đường dẫn cụ thể qua internet thay vì phải cài đặt, tương thích cấu hình so với các sản phẩm phần mềm khác Từ đó nhu cầu về lĩnh vực phát triển ứng dụng web trở nên phổ biến rất nhiều trong những năm gần đây và cũng sẽ là xu thế trong nhiều năm kế tiếp
Sau gần ba năm học tập tại trường, với khao khát tìm hiểu về quy trình làm ứng dụng web trong môi trường thực tế và chuyên nghiệp, đồng thời nâng cao kĩ năng lập trình, em đã dự định thực tập bán thời gian (3 ngày/tuần) trong giai đoạn chuyển giao giữa thi cuối kì 5 và đầu học kì 6 để có nhiều thời gian trải nghiệm và học tập Vì vậy em đã quyết định chọn Công ty TNHH Giải pháp phần mềm Tường Minh (TMA) để thực hiện dự định này
Trang 3LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty TNHH Giải pháp Phần mềm Tường Minh đã tạo điều kiện cho em có cơ hội được thực tập tại công ty
Chỉ trong một thời gian ngắn, nhưng nhờ sự chỉ dẫn nhiệt tình của của người hướng dẫn (mentor), em đã học hỏi được rất nhiều về các công nghệ trong việc phát triển ứng dụng web hiện đại, giúp em rất nhiều trong việc lập trình web trong các học kì kế tiếp Đồng thời, quy trình làm việc trong công ty cũng đã giúp em hiểu hơn nhiều về tính chuyên nghiệp và kỉ luật trong quá trình phát triển, vận hành và bảo trì phần mềm nói chung và ứng dụng web nói riêng
Đặc biệt cảm ơn anh Nguyễn Hà Phi Hùng đã training, cung cấp nhiều kiến thức chuyên
môn về công nghệ, ngôn ngữ cũng như về quy trình phát triển ứng dụng web; cảm ơn anh
Nguyễn Văn Toàn đã lên kế hoạch thực tập, đánh giá và gợi ý hướng dẫn phát triển tính năng
cho ứng dụng của em; và cũng rất trân trọng tất cả các anh, chị cùng dự án đã hỗ trợ em rất nhiều trong quá trình thực tập tại công ty
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều kiện em làm bài báo cáo này
Đinh Hoàng Nhi Thành phố Hồ Chí Minh, ngày 13 tháng 01 năm 2021
Trang 4NHẬN XÉT CỦA KHOA
Trang 5
Mục lục
Chương 1: Giới thiêu công ty thực tập 6
1 Giới thiệu công ty TNHH Giải pháp Phần mềm Tường Minh 6
2 Mô tả về công ty 6
Chương 2: Nội dung thực tập 7
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 7
2 Nghiên cứu kỹ thuật 7
1.1 Ngôn ngữ lập trình và một số công cụ 7
1.2 Tìm hiểu về mô hình OSGI và Karaf 8
1.3 Tìm hiểu về ReactJS và Restful Web Service 8
1.4 Tìm hiểu về các thư viện Java và third-party hỗ trợ Java API 9
3 Thực hiện project 10
4 Lịch làm việc 10
Chương 3: Chi tiết về project 12
1 Giới thiệu về project 12
1.1 Mô tả project 12
1.2 Danh sách màn hình 12
2 Kế hoạch 14
3 Kết quả 14
TÀI LIỆU THAM KHẢO 15
Trang 6Chương 1: Giới thiêu công ty thực tập
1 Giới thiệu công ty TNHH Giải pháp Phần mềm Tường Minh
Công ty TNHH Giải pháp Phần mềm Tường Minh (TMA) được thành lập năm
1997 tại Việt Nam, hiện nay TMA đã hơn 2400 nhân viên và là một trong những công ty gia công phần mềm (outsource) lớn nhất trong nước
Ngoài Việt Nam, TMA còn có văn phòng tại Nhật Bản, Mĩ, châu Âu và Úc, các ứng dụng phần mềm phục vụ cho khách hàng từ 27 quốc gia
2 Mô tả về công ty
TMA cung cấp nhiều dịch vụ về phần mềm như thiết kế, kiểm thử, IT Service, chuyển đổi dữ liệu, và đặc biệt là phát triển, gia công phần mềm
Việc gia công phần mềm tại công ty đa dạng trên nhiều nền tảng (web, di dộng, desktop app…), ngôn ngữ và công nghệ (Java, NodeJS, Go, Python cho nhiều lĩnh vực như viễn thông, tài chính, thương mại điển tử, y tế, giáo dục…
Ngoài ra tại công ty còn cung cấp các chương trình đào tạo thực tập, nhân viên mới (fresher) và các khóa học (course) về kĩ thuật cũng như quy trình trong quá trình làm việc tại công ty
Trang 7Chương 2: Nội dung thực tập
Đợt thực tập tại công ty, em đã được phân công thực hiện một ứng dụng web phục vụ cho việc đăng kí lịch nghỉ phép cho các thành viên trong đội ngũ phát triển (team) mà em được tham gia, ứng dụng các công nghệ mà dự án của team đang sử dụng và học hỏi thêm các công nghệ mới Đồng thời rèn luyện thêm kĩ năng phân tích yêu cầu, giao tiếp và một số quy trình làm việc trong quá trình phát triển ứng dụng
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, cài đặt môi trường, tài liệu về naming convention…
Kết quả: Hiểu thêm về công ty TMA, 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
2 Nghiên cứu kỹ thuật
1.1 Ngôn ngữ lập trình và một số công cụ
Thời gian: 3 ngày (1 tuần)
Nội dung: Tìm hiểu thêm một số kiến thức về ngôn ngữ lập trình Java và các công cụ
sẽ được sử dụng trong quá trình làm việc
Mentor gửi các tài liệu liên quan về ngôn ngữ lập trình Java và một số phương pháp lập trình (cú pháp, các loại câu lệnh, tính năng mới trong Java 8, các API trong Java, JDBC, nguyên lí SOLID,…)
Đồng thời thực tập sinh cũng được giới thiệu và cung cấp danh sách các công cụ, thư viện và môi trường phát triển cần cài đặt như IntelliJ, Maven, Java SDK, Visual Studio Code
Thực hiện: Thực hành tìm hiểu, sử dụng các công cụ và lập trình một số ví dụ về
ngôn ngữ Java như đã nêu trên
Trang 8hiểu được các kiến thức về ngôn ngữ Java và phương pháp lập trình.
1.2 Tìm hiểu về mô hình OSGI và Karaf
Thời gian: 6 ngày (2 tuần).
Nội dung: Được hướng dẫn và cung cấp các tài liệu về Karaf.
Mô hình OSGI: Các kiến thức cơ bản về mô hình OSGI như khái niệm, cách vận
hành theo cơ chế nanoservice (module hóa), tư tưởng khá giống với microservice nhưng trong môi trường vận hành Java
Karaf: Cơ bản về cách mô hình OSGI được tổ chức trong karaf, các Java API
được hỗ trợ để vận hành môi trường Java backend theo hướng module hóa dưới dạng các bundle và feature; mỗi bundle tương ứng với một module; mỗi feature định nghĩa các bundle cần sử dụng
Bài tập ứng dụng: Được lập trình một số bài toán đơn giản ứng dụng các Java
API trong môi trường Karaf cung cấp, cách khởi tạo, kiến thức về vòng đời và khởi chạy một module trong Karaf Từ đó nâng cao hơn là kết hợp và định nghĩa các phụ thuộc module trong môi trường
Mentor sẽ thực hiện giải đáp thắc mắc và hỗ trợ sửa lỗi (bug) trong quá trình tìm hiểu và thực hiện các bài tập
Thực hiện:
Tìm hiểu về mô hình OSGI và Karaf theo các tài liệu đã cung cấp
Làm các bài thực hành, kiểm tra về kiến thức đã học
Kết quả:
Có kiến thức cơ bản về mô hình OSGI và Karaf
Kiến thức về việc tổ chức dự án Java theo hướng module và vận hành các module trong môi trường Karaf
Ngoài ra còn được biết thêm một số quy tắc trong việc viết code sao cho đúng chuẩn, dễ đọc, dễ hiểu
1.3 Tìm hiểu về ReactJS và Restful Web Service
Thời gian: 6 ngày (2 tuần).
Nội dung: Tìm hiểu, thực hiện một số bài tập về kiến thức cơ bản về ReactJS và
Restful Web Service nhằm tạo giao diện đơn giản và phương thức giao tiếp giữa Backend (Java) và Frontend (ReactJS) dưới sự hỗ trợ của mentor
Kiến thứ cơ bản về ReactJS: một bộ thư viện hỗ trợ tạo giao diện do Facebook
cung cấp, cơ chế Virtual DOM (so sánh cây DOM) trong HTML nhằm thay đổi
Trang 9(rerender) giao diện mà không phải tải lại trang; cách tư duy các thành phần web theo
hướng thành phần (component) và cấu trúc (structure) một dự án ReactJS.
Bài tập cơ bản về ReactJS: tạo một component, thay đổi trạng thái (state), điều
hướng (route) trong Single Web Page
Kiến thức cơ bản về Restful Web Service: 4 phương thức chính trong giao thức
HTTP (GET, POST, PUT, DELETE) trong việc giao tiếp giữa Client và Server và JSON response
Bài tập cơ bản về Restful Web Service: Áp dụng các API Java như JDBC,
JAX-RS và Jackson nhằm tạo một Retsful Web Service có thể lấy dữ liệu từ database và trả dữ liệu cho người dùng danh sách người dùng dưới dạng JSON và hiển thị trên frontend (ReactJS)
Thực hiện:
Tìm hiểu các kiến thức đa nêu, giao tiếp với mentor nếu có thắc mắc
Làm các bài tập thực hành dưới sự hỗ trợ của mentor
- Kết quả :
Hiểu được những khái niệm và kiến thức trong ReactJS và Restful Web Serivce
Có khả năng xây dựng giao diện, Restful Web Service và cài đặt giao tiếp giữa client với server thông qua các HTTP request
Hiểu hơn về công nghệ phát triển web hiện đại: có thể xây dựng phần frontend và backend trên hai nền tảnh hoàn toàn khác nhau, nhưng có thể giao tiếp với nhau thông qua các Restful API, thay vì phát triển trên ngôn ngữ lập trình
1.4 Tìm hiểu về các thư viện Java và third-party hỗ trợ Java API
Thời gian: 6 ngày (2 tuần).
Nội dung: Tìm hiểu kiến thức về một số thư viện, framework mà Java cung cấp như
Hibernate, Jackson, JAX-RS Đồng thời tìm hiểu về third-party hỗ trợ các API trong Java như Keycloak
Sơ lược về Hibernate: ORM framework được phát triển trên các API do Java
cung cấp (cụ thể là JPA – Java Persistence API), hỗ trợ thuận tiện cho việc giao tiếp với cơ sở dữ liệu thông qua các Entity, câu lệnh HQL, transaction… mang tính tường minh, trong sáng và giảm thiểu boiler-plate code hơn so với việc sử dụng các câu lệnh SQL thông thường
Sơ lược về JAX-RS và Jackson: JAX-RS nhằm hỗ trợ tạo các Restful Web
Service do Java cung cấp, bộ thư viện hỗ trợ mạnh mẽ gần như tất cả các nhu cầu và tính năng cần thiết của một Restful Web Service; ngoài ra kết hợp với thư viện
Trang 10thuận tiện trong giao tiếp của REST API.
Sơ lược về Keycloak: Keycloak là một Java Open Source hỗ trợ rất tốt về bảo mật
Web, trong giới hạn tìm hiểu của em chỉ nghiên cứu về việc quản lí và xác thực người dùng theo các phân quyền như tài nguyên (resource), vai trò (role), phân vùng (scope), permission (quyền hạn); đồng thời ứng dụng các API do Keycloak cung cấp
để tạo các Json Web Token (JWT) nhằm xác thực người dùng Keycloak cũng cung cấp bộ giao diện (UI) trực quan nhằm quản lí người dùng và session rất thuận lợi, giảm thiểu việc code xử lí về xác thực và người dùng
Thực hiện:
Tìm hiểu các kiến thức đa nêu, giao tiếp với mentor nếu có thắc mắc
Tạo được Restful API thông qua JAX-RS và Jackson, giao tiếp với database thông qua Hibernate thay vì JDBC
Kết quả:
Đã có thể ứng dụng các thư viện của Java để tạo được một Restful Web Service
Hiểu được khái niệm và cách sử dụng Keycloak trong việc quản lí người dùng
3 Thực hiện project
Sau 6 tuần tìm hiểu về ngôn ngữ và công nghệ, em đã được giao yêu cầu thực hiện một project nhằm quản lí lịch nghỉ của các thành viên trong team nhằm kết hợp và đánh giá khả năng hiểu biết, áp dụng các kiến thức, chi tiết project sẽ được mô tả tại phần sau
Ngoài ra trong project, em còn tìm hiểu thêm được về một số kiến thức mới như git (source version control), integration (Third party và server), unit test (Junit, Mockito), redux (ReactJS), bootstrap (CSS library), docker, tài liệu và mô hình hóa
4 Lịch làm việc
1
(ngày 1)
- Tìm hiểu về công ty, cách tổ chức của công ty
- Làm quen với các công cụ làm việc trong công ty
- Học cách trao đổi, làm việc qua email
Anh Đỗ Văn Toàn
1
- Tìm hiểu ngôn ngữ lập trình Java
- Thực hành Java
- Tìm hiểu và cài đặt một số công cụ và môi trường cho việc lập trình
Anh Nguyễn Hà Phi Hùng
Trang 11- Thực hiện bài tập về Karaf Phi Hùng
4, 5 - Tìm hiểu về React và Restful Web Service.
- Thực hiện bài tập React và Restful Web Service
Anh Nguyễn Hà Phi Hùng
6, 7
- Tìm hiểu về các Java Library
- Tìm hiểu và sử dụng Keycloak
- Làm bài tập về Java Library
Anh Nguyễn Hà Phi Hùng
8
- Lên kế hoạch thực hiện project
- Thiết kế database, giao diện cho project
- Cài đặt và kết hợp Keycloak với backend
- Tìm hiểu thêm về git và Bitbucket
- Xây dựng database, định nghĩa các POJO
- Code một số trang màn hình giao diện
Anh Nguyễn Hà Phi Hùng
9 - 12
- Cài đặt các chức năng theo yêu cầu mà bài tập đưa ra
- Trao đổi với mentor về các thắc mắc hoặc cần hỗ trợ về kiến thức, giải pháp, tính năng
- Thực hiện viết unit test để kiểm thử, độ coverage đạt khoảng 90%
Anh Đỗ Văn Toàn Anh Nguyễn Hà Phi Hùng
13
- Báo cáo project với team để nhận được đánh giá
và đóng góp của tất cả các thành viên
- Ghi nhận đóng góp, tổng hợp tài liệu về API document và Sequence diagram
Anh Đỗ Văn Toàn Anh Nguyễn Hà Phi Hùng
Trang 12Chương 3: Chi tiết về project
1 Giới thiệu về project
Project nhằm tạo công cụ quản lí lịch nghỉ của các thành viên trong team, dưới dạng đăng kí và theo dõi lịch nghỉ
1.5 Mô tả project
Tất cả thành viên trong team được cung cấp account truy cập nhằm đăng kí lịch
nghỉ khi có nhu cầu
Có ba vai trò chính của người dùng là quản lí (PM), nhóm trưởng (Team lead) và
thành viên (Member); thành viên chỉ có thể xem lịch nghỉ của mình; team lead có thể xem lịch nghỉ của nhóm; quản lí có thể xem lịch nghỉ của tất cả thành viên
Có thể phân công các thành viên vào một team thông qua giao diện.
Ngoài ra team lead và quản lí có thể export file excel về lịch nghỉ của các thành viên và thông báo đến thành viên đăng kí lịch nghỉ trong một số dịp lễ tết
1.6 Danh sách màn hình
Màn hình đăng nhập và xác thực người dùng.
Trang 13Màn hình menu điều hướng: section cần tập trung phát triển là Vacation
Màn hình phân công thành viên nhóm
Trang 14Màn hình theo dõi lịch nghỉ của các team.
2 Kế hoạch
Hoàn thành phân tích yêu cầu
Thiết kế database, giao diện
Thiết kế các RESTful API và các màn hình chưa có dữ liệu
Giao tiếp giữa RESTful API và màn hình
Viết unit test
Tổng hợp báo cáo, biểu đồ
Giao tiếp, tiếp thu ý kiến từ mentor và các thành viên
3 Kết quả
Hầu hết các tính năng theo mô tả đã được thực hiện thành công
Cần cập nhật code frontend tương thích với cấu trúc mới
Tính năng xác thực bằng Keycloak cần được cải thiện với JWT