Tải bản đầy đủ (.pdf) (56 trang)

BÁO CÁO THỰC TẬP DOANH NGHIỆP ỨNG DỤNG AVAILABILITY CHAT SERVICE

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.3 MB, 56 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM

o

BÁO CÁO THỰC TẬP DOANH NGHIỆP

ỨNG DỤNG AVAILABILITY CHAT SERVICE

Công ty

: DEK Technologies Việt Nam

Người phụ trách

: Lâm Khang

Sinh viên

: Hà Minh Thành

MSSV

: 18521401

Lớp

: SE501.M21
Thành phố Hồ Chí Minh, tháng 6 năm 2022



2

LỜI CẢM ƠN
Chương trình thực tập khóa 29 (18/10/2021 – 24/12/2021) tại công ty DEK Technologies
Việt Nam là lần đầu tiên em được trải nghiệm một môi trường phát triển phần mềm thực
tế với những kỹ thuật và công nghệ tiên tiến trên thế giới. Đây là cơ hội lớn để em không
những được học các kiến thức, kỹ thuật, kỹ năng mới mà em cịn có thể áp dụng những
kiến thức, kỹ năng được lãnh hội ở trường áp dụng vào trong môi trường làm việc quốc
tế và chuyên nghiệp tại công ty.
Lời đầu tiên, em xin gửi lời cảm ơn chân thành nhất đến trường và quý thầy cô khoa
Công nghệ phần mềm đã truyền đạt vốn kiến thức làm nền tảng cho em trong quá trình
thực tập.
Tiếp đến, em xin gửi lời cảm ơn chân thành đến q cơng ty DEK Technologies Việt
Nam. Khơng vì dịch bệnh nặng nề, công ty đã tạo cơ hội thuận lợi nhất và giành nhiều
quyền lợi cho em trong thời gian thực tập. Em được hưởng quyền lợi như những nhân
viên chính thức, được tham gia các buổi training của cơng ty, tham gia các workshop,
seminar, liên hoan, giải trí khi có dịp lễ hội, ngày đặc biệt trong năm.
Cũng khơng quên gửi lời cảm ơn chân thành đến anh Lâm Khang – PO team CBA, các
anh mentor team CBA và các chị phịng nhân sự đã có nhiều chỉ bảo tận tình và giúp đỡ
em trong quá trình thực tập nói chung và phát triển sản phẩm nói riêng.
Cuối cùng, xin gửi lời cảm ơn đến tất cả các bạn trong team thực tập đã luôn luôn cố
gắng, giúp đỡ để hồn thành tốt sản phẩm mang tính thực tiễn cao trong quá trình thực
tập.
Xin chúc tất cả mọi người nhiều sức khỏe, thành công trong cuộc sống.
Em xin chân thành cảm ơn!

Hà Minh Thành
Hồ Chí Minh, ngày 17 tháng 6 năm 2022



3

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………



4

MỤC LỤC

LỜI CẢM ƠN .................................................................................................................. 2
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN .......................................................... 3
MỤC LỤC ........................................................................................................................ 4
DANH MỤC HÌNH ẢNH ............................................................................................... 7
CHƯƠNG 1: GIỚI THIỆU CÔNG TY DEK TECHNOLOGIES VIỆT NAM .............. 9
1.1

Thông tin chung .................................................................................................. 9

1.2

Lĩnh vực hoạt động ............................................................................................. 9

1.3

Đối tác công ty .................................................................................................... 9

CHƯƠNG 2 KIẾN THỨC- KỸ NĂNG ĐÃ ĐƯỢC TẬP HUẤN ............................... 11
2.1

Kiến thức về Linux ........................................................................................... 11

2.1.1

Tổng quan về Linux ................................................................................... 11


2.1.2

Vai trò của Linux mang lại cho doanh nghiệp ........................................... 13

2.2

Kiến thức về Scrum .......................................................................................... 14

2.2.1

Tổng quan về Scrum [1] ............................................................................ 14

2.2.2

Vai trò của Scrum mang lại cho doanh nghiệp .......................................... 17

2.3

Kiến thức về Git ............................................................................................... 17

2.3.1

Tổng quan về Git ....................................................................................... 17

2.3.2

Vai trò của Git mang lại cho doanh nghiệp ............................................... 18

2.4


Kiến thức về CI................................................................................................. 18

2.4.1

Tổng quan về CI ........................................................................................ 18


5

2.4.2
2.5

Vai trò của CI mang lại cho doanh nghiệp ................................................ 21

Kiến thức về Google Test ................................................................................. 22

2.5.1

Tổng quan về Google Test ......................................................................... 22

2.5.2

Vai trò của Google Test mang lại cho doanh nghiệp ................................ 24

2.6

Kiến thức về Docker ......................................................................................... 24

2.6.1


Tổng quan về Docker [4] ........................................................................... 24

2.6.2

Vai trò của Docker mang lại cho doanh nghiệp ........................................ 25

2.7

Kiến thức về Kubernetes .................................................................................. 26

2.7.1

Tổng quan về Kubernetes [5] .................................................................... 26

2.7.2

Vai trò của Kubernetes mang lại cho doanh nghiệp .................................. 28

2.8

Tìm hiểu và sử dụng công cụ Qt Creator và Qt Design ................................... 29

CHƯƠNG 3 TĨM TẮT Q TRÌNH THỰC TẬP ..................................................... 31
3.1

Giới thiệu nhóm dự án và cơng việc mỗi tuần ................................................. 31

3.1.1


Nhóm dự án................................................................................................ 31

3.1.2

Lịch thực tập .............................................................................................. 31

3.1.3

Bảng chi tiết công việc mỗi tuần ............................................................... 32

3.2

Các công việc đã thực hiện ............................................................................... 33

3.2.1

Q trình giao cơng việc ............................................................................ 33

3.2.2

Các cơng cụ sử dụng trong quá trình làm việc .......................................... 34

3.2.3

Nhiệm vụ được giao................................................................................... 34

CHƯƠNG 4 MÔ TẢ CÔNG VIỆC ............................................................................... 36
4.1

Dự án xây dựng ứng dụng Availability Chat Service ...................................... 36



6

4.1.1

Thông tin chung ......................................................................................... 36

4.1.2

Chi tiết cách hoạt động và tính năng ......................................................... 36

4.1.3

Giao diện hệ thống ..................................................................................... 44

CHƯƠNG 5 ĐÁNH GIÁ- NHẬN XÉT ........................................................................ 51
5.1

Kết quả đạt được ............................................................................................... 51

5.1.1

Những kiến thức lý thuyết đã được cũng cố: ............................................. 51

5.1.2

Những kỹ năng thực hành đã được học thêm: ........................................... 51

5.2


Những hạn chế .................................................................................................. 52

5.3

Bài học kinh nghiệm ......................................................................................... 52

5.4

Quy trình cơng việc và các hoạt động trong tương lai ..................................... 54

Tài liệu tham khảo:......................................................................................................... 55


7

DANH MỤC HÌNH ẢNH
Hình 1:Mơ hình làm việc Scrum .................................................................................. 15
Hình 2: Mơ hình làm việc Cross-functional ................................................................ 16
Hình 3: Q trình tích hợp CI...................................................................................... 19
Hình 4: Pipeline CI ....................................................................................................... 20
Hình 5: Đồ thị Pipeline ................................................................................................. 21
Hình 6: File test_server.cpp .......................................................................................... 23
Hình 7: Kết quả run file test_server.cpp ...................................................................... 24
Hình 8: Quy trình, các bước hoạt động của Docker ................................................... 25
Hình 9: Kiến trúc của Kubernetes................................................................................ 26
Hình 10: Tạo mới project demo bằng QtCreator ......................................................... 29
Hình 11: Dùng Qt Design thiết kế giao diện ............................................................... 30
Hình 12: Giao task của mỗi Sprint qua Trello ............................................................ 34
Hình 13: Biểu đồ quá trình khởi tạo kết nối client server. ......................................... 37

Hình 14: Client nhập đúng tài khoản. ......................................................................... 38
Hình 15: Client nhập sai tài khoản. ............................................................................. 38
Hình 16: Flowchart deploy Docker .............................................................................. 39
Hình 17. Flowchart deploy Kubernets ......................................................................... 40
Hình 18. Deploy trên Kubernets ................................................................................... 40
Hình 19: Pipeline CI ..................................................................................................... 41
Hình 20: Chi tiết Pipeline ............................................................................................. 41
Hình 21: Tìm kiếm user bằng một từ bất kỳ ................................................................ 42
Hình 22: Chat 1-1 ......................................................................................................... 43
Hình 23: Đổi màu tin nhắn. ......................................................................................... 43
Hình 24: Giao diện đăng nhập ..................................................................................... 44
Hình 25: Đăng nhập khơng thành cơng ...................................................................... 44
Hình 26: Đăng nhập thành cơng ................................................................................. 45


8

Hình 27: Giao diện đăng ký .......................................................................................... 45
Hình 28: Giao diện đăng ký khơng thành cơng .......................................................... 46
Hình 29: Giao diện điền mật khẩu khơng hợp lệ ........................................................ 47
Hình 30: Giao diện điền lại mật khẩu không hợp lệ ................................................... 47
Hình 31: Giao diện đăng ký thành cơng ...................................................................... 48
Hình 32: Giao diện màn hình chính ............................................................................ 49
Hình 33: Tìm kiếm tài khoản bạn bè ........................................................................... 49
Hình 34: Đổi màu tin nhắn .......................................................................................... 50
Hình 35: Giao diện profile ............................................................................................ 50


9


CHƯƠNG 1: GIỚI THIỆU CÔNG TY DEK TECHNOLOGIES VIỆT NAM
1.1 Thơng tin chung
− Tóm tắt thơng tin: DEK Technologies là công ty gia công, phát triển các giải pháp
phần mềm và phần cứng nước ngồi có trụ sở chính ở Melbourne - Úc, được thành
lập năm 1999. Công ty hiện tại có 4 chi nhánh ở Stockholm - Thụy Điển, Rome – Ý,
thành phố Hồ Chí Minh - Việt Nam và chi nhánh đang mở tại Thung lũng Silicon –
Mỹ. DEK Technologies Việt Nam được thành lập vào năm 2008, là văn phòng lớn
nhất với hơn 170 nhân viên người Việt và được dẫn dắt bởi một giám đốc người Úc
- Daniel Tedesco. Nhờ đó, mơi trường làm việc nơi đây mang đậm nét riêng của văn
hóa phương Tây.
− Các sản phẩm của công ty:
+ Telegea
+ IoT Platform
+ Các sản phẩm dựa trên mã nguồn mở
− Trụ sở chính của công ty tại Việt Nam: 121/137 Lê Lợi, phường Bến Thành, quận
1, thành phố Hồ Chí Minh
− Website:
1.2 Lĩnh vực hoạt động
− Giải pháp dịch vụ phần mềm
− Thiết kế và phát triển phần mềm
− Quản lý dự án phần mềm.
− Dịch vụ bảo trì và hỗ trợ trọn gói sản phẩm của cơng ty
1.3 Đối tác cơng ty
− Mirantis là một trong những đối tác chính cho dự án OpenStack, giúp các công ty
xây dựng và quản lý cơ sở hạ tầng đám mây riêng của họ, cung cấp các dịch vụ sau:
+ Sản phẩm Mirantis đang bán lại


10


+ Dịch vụ hỗ trợ doanh nghiệp
+ 100% các khóa đào tạo và chứng nhận OpenStack.


11

CHƯƠNG 2 KIẾN THỨC- KỸ NĂNG ĐÃ ĐƯỢC TẬP HUẤN
2.1 Kiến thức về Linux
2.1.1 Tổng quan về Linux
− Linux là một hệ điều hành máy tính được phát dựa vào mơ hình “Phần mềm tự do”
(free software) và việc phát triển phần mềm mã nguồn mở (open-source software).
− Ưu điểm của Linux:
+ Miễn phí và Mã nguồn mở
+ Tính ổn định và tin cậy cao: Khả năng xử lý cùng lúc một lượng lớn các tác vụ
mà không bị xuống cấp trong một khoảng thời gian dài được xem là ưu điểm nổi
bật nhất của Linux.
+ Bảo mật
• Trước khi chạy một tiến trình nó u cầu phải thực hiện hàng loạt các thao tác
cấu hình phân quyền, cho phép truy cập, tường lửa…Điều này đòi hỏi người
dùng phải hiểu rõ cơng việc mà mình đang thực hiện.
+ Linh hoạt
• Bên cạnh đó, Linux cịn mang lại sự mạnh mẽ và linh hoạt chúng hầu như tương
thích và có thể hoạt động tốt trên hầu hết tất cả các phần cứng.
• Nó cung cấp hàng nghìn các tiện ích, cơng cụ hữu ích giúp quản lý dịch vụ, phần
cứng, mạng.
• Các ứng dụng luôn được cập nhật bản vá liên tục và hoạt động mượt mà không
cần phải khởi động lại hệ điều hành.
− Nhược điểm của Linux:
+ Tuy mạnh mẽ nhưng cũng có một số hạn chế:
+ Một số nhà sản xuất không phát triển driver hỗ trợ cho nên tảng Linux.

+ Một số phần mềm chuyên biệt không được phát triển dành cho Linux.
+ Còn quá xa lạ đối với người dùng phổ thông


12

− Một số lệnh cơ bản trong Linux:
1. pwd command
− Command pwd được dùng để tìm đường dẫn của thư mục hiện tại (folder) mà ta
đang ở trong đó. Command này sẽ trả về đường dẫn hoàn chỉnh (đầy đủ), bắt đầu
bằng dấu gạch chéo (/). Ví dụ một đường dẫn hoàn chỉnh là /home/minhthanh
2. Command cd
− Dùng để chuyển hướng trong hệ thống tập tin Linux
− Ví dụ:
+ Ta đang ở trong /home/ minhthanh/Documents và muốn đến thư mục demo
(thư mục con của Documents) thì gõ cd demo
+ Hoặc muốn chuyển đi một vị trí hồn tồn mới thì cd đến đường dẫn hồn
chỉnh đó như cd /home/ minhthanh/Desktop/test
3. Command ls
− Command ls được dùng để xem nội dung thư mục. Mặc định là command này
sẽ hiển thị danh sách file trong thư mục hiện tại.
− Nếu muốn xem nội dung thư mục khác, nhập ls và sau đó là đường dẫn thư mục.
Ví dụ: nhập ls /home/username/Documents để xem nội dung của Documents.
4. Command cat
− cat được dùng để xem nội dung file trên output tiêu chuẩn (sdout). Để chạy lệnh
này, gõ cat theo sau là tên file và phần mở rộng. Ví dụ: cat file.txt.
5. Command cp
− Sử dụng command cp để sao chép files từ thư mục hiện tại. Chẳng hạn, command
cp photo1.jpg /home/username/Pictures sẽ tạo bản copy của photo1.jpg vào thư
mục Pictures.

6. Command mv
− Công dụng chính của command mv là di chuyển files, dù nó cũng có thể được
dùng để đổi tên files.


13

− Arguments trong command này tương tự như command cp. Ta cần nhập mv, tên
file và điểm đến của thư mục. Ví dụ: mv file.txt /home/username/Documents.
− Để đổi tên files, cú pháp là mv oldname.ext newname.ext
7. Command mkdir
− Command mkdir được dùng để tạo thư mục mới – giống như mkdir Music sẽ
tạo thư mục mới gọi là Music.
− Một số cách dùng cộng thêm của lệnh mkdir:
+ Để tạo một thư mục mới bên trong thư mục khác, sử dụng lệnh Linux cơ bản
sau: mkdir Music/Newfile
+ Sử dụng p (parents) option để tạo thư mục giữa 2 thư mục đã tồn tại. Ví dụ,
mkdir -p Music/2020/Newfile sẽ tạo thư mục “2020”
8. Command rm
− Command rm được sử dụng để xóa thư mục cùng và nội dung bên trong. Nếu ta
chỉ muốn xóa thư mục– sử dụng rm -r.
9. Command touch
− Command touch cho phép ta tạo files mới trống thơng qua dịng lệnh.
− Ví dụ: nhập touch /home/username/Documents/test.txt để tạo file test.txt trong
thư mục Documents.
10. Command echo
− Lệnh này được dùng để chuyển dữ liệu vào một file.
− Ví dụ, nếu muốn thêm text “Hello, my name is Thanh” vào trong file “name.txt”,
nhập lệnh: echo Hello, my name is Thanh >> name.txt
2.1.2 Vai trò của Linux mang lại cho doanh nghiệp

− Tổ chức, quản lý và vận hành các máy chủ, các dịch vụ trong hệ thống thông tin.
− Tạo mơi trường, cung cấp các cơng cụ, các chính sách giải pháp bảo vệ an tồn thơng
tin cho các tổ chức, doanh nghiệp và cá nhân.


14

− Linux là một hệ thống thơng tin an tồn, bảo mật và miễn phí.
2.2 Kiến thức về Scrum
2.2.1 Tổng quan về Scrum [1]
− Scrum là một phương pháp Agile (Phát triển phần mềm linh hoạt) dựa trên cơ chế
lặp và tăng trưởng. Scrum được thiết kế để hỗ trợ việc phát triển, cung cấp và cải
tiến các sản phẩm phức tạp.
− Với Scrum, dự án sẽ được thực hiện trong các phân đoạn lặp đi lặp lại (được gọi là
sprint) thường có khung thời gian ngắn (từ 1 – 4 tuần). Trong mỗi phân đoạn này,
nhóm phát triển thực hiện đầy đủ các công việc cần thiết: lập kế hoạch, phân tích
yêu cầu, thiết kế, triển khai, kiểm thử, … để cho ra các phần nhỏ của sản phẩm. Phù
hợp cho những dự án có sự điều chỉnh liên tục, thay đổi trong quá trình phát triển,
yêu cầu tốc độ cao.
− Với mơ hình phát triển lặp đi lặp lại Scrum, có 3 vai trị chính:
+ Product Owner: Quản lý Product Backlog. Định nghĩa các yêu cầu của khách
hàng và đánh giá cuối cùng đầu ra của các nhà phát triển phần mềm.
+ Scrum Master: chịu trách nhiệm về hiệu quả của nhóm, đảm bảo nhóm làm đúng
mơ hình làm việc, cũng như đảm bảo các sprint được hoàn thành đúng mục đích.
+ Development Team (Dev, Test, …): lập kế hoạch cho các sprint, thiết kế, thực
hiện và triển khai yêu cầu từ đầu.


15


Hình 1:Mơ hình làm việc Scrum

− Scrum định nghĩa quy tắc cho bốn sự kiện chủ chốt (các cuộc họp) nhằm tạo môi
trường và quy cách hoạt động và cộng tác cho các thành viên trong dự án.
− Sprint là một phân đoạn lặp đi lặp lại trong quy trình phát triển phần mềm, thường
có khung thời gian ngắn (từ 1 – 4 tuần).
+ Sprint Planning (Họp Kế hoạch Sprint)
• Nhóm phát triển gặp gỡ với Product Owner để lên kế hoạch làm việc cho một
Sprint. Công việc lập kế hoạch bao gồm việc chọn lựa các yêu cầu cần phải
phát triển, phân tích và nhận biết các cơng việc phải làm kèm theo các ước
lượng thời gian cần thiết để hồn tất các tác vụ.
• Scrum sử dụng cách thức lập kế hoạch từng phần và tăng dần theo thời gian,
theo đó, việc lập kế hoạch khơng diễn ra duy nhất một lần trong vòng đời của
dự án mà được lặp đi lặp lại, có sự thích nghi với các tình hình thực tiễn trong
tiến trình đi đến sản phẩm.
+ Daily Scrum (Họp Scrum hằng ngày)


16

• Scrum Master tổ chức cho Đội sản xuất họp hằng ngày trong khoảng 15 phút
để Nhóm Phát triển chia sẻ tiến độ công việc cũng như chia sẻ các khó khăn
gặp phải trong q trình phát triển phần mềm suốt một Sprint.
+ Sprint Review (Họp Sơ kết Sprint)
• Cuối Sprint, nhóm phát triển cùng với Product Owner sẽ rà sốt lại các cơng
việc đã hồn tất (DONE) trong Sprint vừa qua và đề xuất các chỉnh sửa hoặc
thay đổi cần thiết cho sản phẩm.
+ Sprint Retrospective (Họp Cải tiến Sprint)
• Dưới sự trợ giúp của Scrum Master, nhóm phát triển sẽ rà sốt lại tồn diện
Sprint vừa kết thúc và tìm cách cải tiến quy trình làm việc cũng như bản thân

sản phẩm.
− Theo đó, cơng ty định sẵn đặc trưng Scrum là Cross-Functional – liên chức năng:
+ Các thành viên kỹ năng bổ trợ cho nhau, tự hoàn thành cơng việc mà khơng phụ
thuộc người khác bên ngồi nhóm.
+ Khơng có các chức danh nào khác ngồi Team members (hoặc Developers).

Hình 2: Mơ hình làm việc Cross-functional


17

2.2.2 Vai trò của Scrum mang lại cho doanh nghiệp
− Scrum thích ứng nhanh với sự thay đổi yêu cầu
− Scrum vận hành dựa trên đặc tính tự nhiên của người phát triển nên rất dễ hiểu, dễ
áp dụng, tạo nên tính tương tác cao giữa các thành viên trong nhóm thay vì chịu sự
áp đặt từ phía bên ngồi
− Scrum giúp team tập trung vào sản phẩm, thích ứng nhanh với các thay đổi về yêu
cầu từ đó tạo nên sự tương tác cao giữa khách hàng với nhóm phát triển để sản phẩm
làm ra đáp ứng đúng với các yêu cầu của khách hàng
2.3 Kiến thức về Git
2.3.1 Tổng quan về Git
− Git là phần mềm quản lí mã nguồn phân tán.
− Git là một hệ thống VCS (Version Control System) đi theo hướng quản lí source
code phân tán, khác với SVN và CVS là hệ thống quản lí mã nguồn đi theo hướng
quản lí source code tập trung.
− Các hệ thống giúp quản lí dự án hiện nay như: github, gitlab, Jira ticket, Backlog.
− Một số lệnh cơ bản
+ git init: Khởi tạo git repo, sẽ tạo ra một thư mục .git, thư mục này chứa tất cả các
tập tin cần thiết cho repo.
+ git clone: Sao chép một remote repo về máy tính mình.

+ git status: để kiểm tra trạng thái của tệp tin (staged, modified, committed)
+ git add: Cập nhật các file lên Staging Area.
+ git commit: Cập nhật file lên local repository.
+ git push: Cập nhật file từ local repository lên remote repository.
+ git fetch: Cập nhật các thay đổi từ remote repo về local repo, nhưng không tiến
hành merge.


18

+ git pull: Cập nhật những thay đổi từ remote repo về local repo, đồng thời tiến
hành merge.
+ git merge: Gộp các branch lại với nhau.
+ git rebase: Gộp các commit lại với nhau.
+ git branch: xem các branch
+ git checkout <name-branch>: checkout sang branch
+ git checkout -b <name branch>: vừa tạo ra vừa checkout sang branch mới.
+ git commit --amend: sửa code mà không muốn tạo commit mới.
2.3.2 Vai trò của Git mang lại cho doanh nghiệp
− Giúp quy trình làm việc code theo nhóm đơn giản hơn rất nhiều bằng việc kết hợp
các phân nhánh (branch).
− Sắp xếp công việc tốt hơn.
− Linh hoạt hơn khi cùng lúc phải làm nhiều task.
− Tự tin thử nghiệm những ý tưởng mới.
− Dễ dàng trong việc phát triển sản phẩm.
− Có thể làm việc bất cứ đâu, chỉ cần clone mã nguồn từ repo về máy.
2.4 Kiến thức về CI
2.4.1 Tổng quan về CI
− CI là tên viết tắt của Continuous Integration, hay cịn gọi là tích hợp liên tục. Quá
trình hoạt động cho phép các thành viên trong một team liên tục lưu trữ những mã

mới vào một kho nhất định. Nhờ vào số lượng dữ liệu này, CI sẽ tự động chạy test
và kiểm tra độ chính xác. Cùng lúc đó cũng hỗ trợ phát triển phần mềm một cách
nhanh chóng hơn bằng việc báo lỗi sai và đưa ra gợi ý giải quyết. [2]
− Về chi tiết, khi bản mã được lập trình viên tải lên kho lưu trữ. CI sẽ tự động nhận dữ
liệu và tiến hành kiểm tra. Bằng nhiều thước đo khác nhau, CI đảm bảo mã nguồn
khơng cịn bất kỳ lỗi nào khi chạy trong bất cứ điều kiện nào. Mỗi tiến trình đều sẽ


19

có thơng báo trả về để người dùng có thể nắm rõ tiến trình phát triển của phần mềm.
Cùng với đó nhận biết những lỗi sai mắc phải và rút kinh nghiệm cho lần tiếp theo.
[2]

Hình 3: Q trình tích hợp CI

− Q trình tích hợp mã vào kho cũng có thể diễn ra tự động nếu được cài đặt trước.
Vậy nên dây chuyền tích hợp – kiểm tra – test – report sẽ diễn ra liền mạch và tự động.
Lập trình viên có thể tiết kiệm thời gian để phát triển những phần khác và quay trở lại
xem báo cáo sau khi phần này đã được build và test xong. [2]
− Các yêu cầu cơ bản cho một hệ thống CI đó là: [2]
+ Build được chạy tự động.
+ Test được chạy tự động.
+ Thường xuyên commits các thay đổi tới repository của dự án.
+ Cung cấp giao diện dễ nhìn cho các tiền trình của hệ thống cũng như real-time
status cho cả team có thể theo dõi.
+ Bên cạnh đó cũng cần một Version Control System (VCS). Xem như một nơi tập
trung hóa cũng như lưu giữ các thay đổi mà chúng ta tạo ra cho dự án theo thời
gian. Ngoài ra cũng cần một server hoặc máy ảo để có thể chạy hệ thống CI tại
chỗ.

− CI với Gitlab CI [3]
+ Gitlab có tính năng Gitlab CI, code để ở Gitlab, rồi trong đó có cho cài đặt CI để
test và deploy code tự động.


20

+ Để GitLab CI cỏ thể hoạt động được chúng ta sẽ cần 02 thành phần:
• File .gitlab-ci.yml: nằm trong thư mục gốc của repo, file này sẽ định nghĩa
các Job để thực hiện, các Job sẽ chạy như thế nào, ở đâu và cấu hình project
sử dụng các Runner.
• Gitlab Runner: Có nhiệm vụ clone project về, đọc file .gitlab-ci.yml và thực
hiện các hưởng dẫn trong file. Luồng thực hiện như sau:
▪ Khi chúng ta chạy git push hoặc click vào pipeline thì gitlab repo sẽ thơng
báo đến cho gitlab runner, khi đó gitlab runner sẽ pull code mới về, đọc
file gitlab-ci.yml và thực hiện theo các bước đã được định nghĩa trong đó.
▪ Một Pipeline CI sinh ra và report sẽ được hiển thị giao diện sau.

Hình 4: Pipeline CI

+ Pipelines là thành phần cấp cao nhất của tích hợp, phân phối và triển khai liên tục.
Pipeline bao gồm:
• Jobs: Các cơng việc được giao thực thi. (Ví dụ: biên dịch mã hoặc chạy test)
• Stage: Xác định các thời điểm và cách thực hiện. (Ví dụ: test chỉ chạy sau khi
biên dịch thành cơng)
• Pipeline hoạt động theo nguyên tắc sau:
▪ Tất cả các công việc trong cùng một stage được Runner thực hiện song
song, nếu có đủ số lượng Runner đồng thời.
▪ Nếu Success, pipeline chuyển sang stage tiếp theo.



21

▪ Nếu Failed, pipeline sẽ dừng lại. Có một ngoại lệ là nếu job được đánh
dấu làm thủ cơng, thì dù bị fail thì pipeline vẫn tiếp tục.
▪ Bên dưới là ví dụ về đồ thị Pipeline thơng thường:

Hình 5: Đồ thị Pipeline

+ Tóm lại, các bước để Gitlab CI hoạt động như sau:
• Thêm.gitlab-ci.yml vào thư mục gốc của repo.
• Cấu hình gitlab Runner
2.4.2 Vai trị của CI mang lại cho doanh nghiệp
− Giảm thiểu đi những rủi ro nhờ việc phát hiện và sửa lỗi sớm, giúp tăng chất lượng
sản phẩm nhờ khả năng tự động kiểm tra và quan sát.
− Khơng những vậy, những quy trình thủ công lặp đi lặp lại hằng ngày cũng được giảm
tải, thay vào đó là xây dựng và kiểm thử tự động mà không cần đến sự giúp đỡ của
con người.
− Một đặc điểm nữa của CI chính là có thể deploy, triển khai phần mềm ở bất cứ địa
điểm và thời gian nào.
− Ngồi ra, việc tích hợp mã lên CI tăng tính chia sẻ giữa các thành viên. Khi thông
tin được cập nhật liên tục, các thành viên trong team sẽ có những kế hoạch triển khai
phù hợp cho phần việc của bản thân.


22

2.5 Kiến thức về Google Test
2.5.1 Tổng quan về Google Test
− Google Test (còn được gọi là gtest) là một thư viện kiểm thử đơn vị cho ngơn ngữ

lập trình C ++, dựa trên kiến trúc xUnit, là một tập hợp của các “Frameworks” để
lập trình và thực thi tự động các trường hợp thử nghiệm.
− Nói cách khác, chúng ta không phải liệt kê tất cả thử nghiệm trong bộ thử nghiệm
của mình theo cách thủ cơng. Nó hỗ trợ một tập hợp phong phú các xác nhận như
xác nhận nghiêm trọng (ASSERT_), xác nhận không nghiêm trọng (EXPECT_) và
death test để kiểm tra xem chương trình có kết thúc dự kiến hay không.
− Cách setup và sử dụng Google Test trên Ubuntu:
1. Install source package của Gtest
+ Trên terminal gõ lệnh sau:
sudo apt-get install libgtest-dev
+ Sau khi kết thúc lệnh này, source code của Gtest sẽ được download về đường dẫn
/usr/src/gtest. Việc tiếp theo là build thư viện Gtest từ source code này.
2. Build thư viện Gtest
+ Cài đặt cmake:
sudo apt-get install cmake
+ Thực hiện build thư viện:
cd /usr/src/gtest
sudo cmake CMakeLists.txt
sudo make
+ Copy thư viện Gtest vừa build vào đường dẫn /usr/lib
sudo cp *.a /usr/lib
3. Thực hiện Unit test với Gtest
+ Giả sử chúng ta cần thực hiện Unit test: one client connect to server


23

Hình 6: File test_server.cpp

4. Build và chạy Unit test

+ Di chuyển vào folder test: cd test
+ Tạo folder build: mkdir build
+ Di chuyển vào folder build và tạo Makefile bằng lệnh cmake
cd build
cmake ../
+ Sau khi kết thúc lệnh cmake thì bên trong folder build đã có Makefile. Việc bây
giờ là make để build file chạy.
make
+ Giờ thì chạy file test_server.cpp
./ test_server.cpp
+ Kết quả test sẽ hiển thị ra như sau:


24

Hình 7: Kết quả run file test_server.cpp

2.5.2 Vai trị của Google Test mang lại cho doanh nghiệp
− Googletest giúp viết các C ++ tests tốt hơn.
− Độc lập và lặp lại: Googletest tách biệt các tests bằng cách chạy mỗi test trên một
đối tượng khác nhau.
− Di động và Có thể tái sử dụng: Googletest hoạt động trên các hệ điều hành khác nhau
(Linux, Windows hoặc Mac), với các trình biên dịch khác nhau.
− Khi các test không thành công, nó phải cung cấp càng nhiều thơng tin về vấn đề càng
tốt.
2.6 Kiến thức về Docker
2.6.1 Tổng quan về Docker [4]
− Docker là một nền tảng để cung cấp cách để building, deploying và running ứng
dụng dễ dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa).
− Các containers cho phép lập trình viên đóng gói một ứng dụng với tất cả các phần

cần thiết, chẳng hạn như thư viện và các phụ thuộc khác, và gói tất cả ra dưới
dạng một package. Nhờ vào container, ứng dụng sẽ chạy trên mọi máy Linux
khác bất kể mọi cài đặt tùy chỉnh mà máy có thể có khác với máy được sử dụng
để viết code


25

Hình 8: Quy trình, các bước hoạt động của Docker

+ Build: đầu tiên truy cập Docker và tạo lập một dockerfile, trong đó chứa code của
người dùng. Dockerfile này sẽ được thiết lập trên thiết bị đã được cài đặt Docker
Engine. Sau khi tạo Dockerfile, người dùng sẽ có 1 Container lưu trữ bộ thư viện
và ứng dụng của mình.
+ Push: có được container sẽ được người dùng push lên đám mây và lưu trữ tại đó.
Thao tác này được thực hiện qua mạng Internet.
+ Pull, Run: thao tác này áp dụng khi người dùng muốn truy cập container này bằng
1 thiết bị khác (đã được cài đặt Docker Engine) thì yêu cầu phải Pull container
này về máy và cho phép q trình Run Container diễn ra.
2.6.2 Vai trị của Docker mang lại cho doanh nghiệp
− Nhanh chóng và tiện lợi: Nếu như trước đây thực hiện ứng dụng/ dịch vụ trên VMs
phải tốn mất vài chục phút thì với Docker thì nó sẽ giảm xuống cịn vài phút.
− Tiết kiệm tối đa tài nguyên: Mỗi một Docker container nếu như sử dụng bao nhiêu
resource thì sẽ tốn bấy nhiêu, nếu như khơng sử dụng thì tất cả tài ngun sẽ được
mang trả về cho máy chủ host.


×