5 Triển khai và kiểm thử
2.2 So sánh giải pháp tăng tính bảo mật cho vận đơn
2.4.2 Ưu điểm
Các ứng dụng trên có các ưu điểm bao gồm:
• Các giải pháp nên trên đã triển khai và có lượng khách hàng lớn.
• Cung cấp các dịch vụ đa dạng và chuyên sâu trên nhiều lĩnh vực khác nhau nhằm tối ưu hóa trải nghiệm của khách hàng.
• Nền tảng công nghệ vững chắc giúp ứng dụng hoạt động ổn định theo thời gian với lượng người dùng lớn đồng thời mở rộng cung cấp các dịch vụ khác.
2.4.3 Khuyết điểm
Các ứng dụng trên có các khuyết điểm bao gồm:
• Chưa có phương thức định danh người nhận trong trường hợp xảy ra sai xót hệ thống tốn nhiều chi phí để khắc phục và truy tìm lại hàng hóa.
• Đối với những hàng hóa quan trọng như giấy tờ, công văn có thể gây ảnh hưởng nghiêm trọng tới tính bảo mật của dữ liệu.
• Bên cạnh những khuyết điểm chung một số giải pháp chưa hỗ trợ hình thức giao hàng nhiều điểm dừng giúp tăng hiệu quả trên một vận đơn.
2.4.4 Kết luận
Tóm lại, dựa trên những phân tích phía trên, các giải pháp đã triển khai thành công trong thực tế với nhiều ưu điểm, đó là những điều đáng để học hỏi để xây dựng một đề tài thành công. Bên cạnh đó, mỗi giải pháp đều có những khuyết điểm riêng, dựa trên việc phân tích những khuyết điểm này và khai thác những khía cạnh khác của vấn đề đề tài này nhằm đưa ra một giải pháp tiếp cận tới những nhóm đối tượng khác với cách tiếp cận mới mẻ hơn.
Chương 3
Kiến thức nền tảng
Nội dung chương này sẽ trình bày tóm lược về các công nghệ được sử dụng trong đề tài cũng như nhìn nhận ưu và khuyết điểm của những công nghệ nói trên.
3.1 Django
Hình 3.1:Django
Django là một web framework miễn phí mã nguồn mở được viết bằng Python. Django sử dụng mô hình Model-View-Control (MVC). Django được phát triển bởi Django Soft- ware Foundation(DSF) – một tổ chức phi lợi nhuận độc lập.[10]
Có nhiều trang web lớn sử dụng ngôn ngữ lập trình này như: Dropbox, Instagram, Youtube...[11]
Một số đặc điểm quan trọng giúp Django là một trong những sự lựa chọn phát triển phần mềm:
• Hoàn thiện: Django được thiết kế để giúp các nhà phát triển đưa các ứng dụng từ ý tưởng đến hoàn thành càng nhanh càng tốt.
• Đa năng: Django có thể được dùng để xây dựng hầu hết các loại website, từ hệ thống quản lý nội dung, cho đến các trang mạng xã hội hay web tin tức. Nó có thể làm việc với framework client-side, và chuyển nội dung hầu hết các loại format (HTML, RESS, JSON, XML, ...).
• Đảm bảo về tính bảo mật: Django giúp các developer tránh các lỗi bảo mật thông thường bằng cách cung cấp framework rằng có những kĩ thuật "phải làm như vậy" để bảo vệ website. Ví dụ: Django cung cấp bảo mật quản lý tên tài khoản và mật khẩu, tránh các lỗi cơ bản như để thông tin session lên cookie, mã hóa mật khẩu thay vì lưu thẳng.
• Khả năng mở rộng tốt: Django sử dụng kiến trúc shared-nothing dựa vào component (mỗi phần của kiến trúc sẽ độc lập với nhau, và có thể thay thế hoặc sửa đổi nếu cần thiết). Có sự chia tách rõ ràng giữa các phần nghĩa là nó có thể mở rộng cho việc gia tăng lưu lượng bằng cách thêm phần cứng ở mỗi cấp độ: caching, servers, database servers, hoặc application servers. Nhiều web về kinh doanh đã thành công khi Django được mở rộng đáp ứng yêu cầu của họ.
• Dễ bảo trì: Code Django được viết theo nguyên tắc thiết kế và pattern có thể khuyến khích ý tưởng bảo trì và tái sử dụng code. Trên thực tế, nó sự theo khái niệm Don’t Repeat Yourself làm cho không có sự lặp lại không cần thiết, giảm một lượng code.
• Tính linh động: Django được viết bằng Python, nó có thể chạy đa nền tảng. Nó có nghĩa rằng bạn không ràng buộc một platform server cụ thể. Django được hỗ trợ tốt ở nhiều nhà cung cấp hosting, họ sẽ cung cấp hạ tầng và tài liệu cụ thể cho hosting web Django.
3.1.1 Ưu điểm
Khách quan:
• Các vấn đề xung quanh liên quan tới việc phát triển ứng dụng như khả năng bảo mật, khả năng mở rộng và bảo trì đã được django tối ưu giúp nhà phát triển có thể tập trung vào business logic. Thích hợp xây dựng những dự án lớn.
• Django có thư viện django rest framework giúp việc xây dựng api trở lên dễ dàng.
• Sử dụng Python - một ngôn ngữ dễ học và sử dụng.
• Có thư viện và modules có sẵn rộng dễ sử dụng.
Chủ quan: Đã có kinh nghiệm làm việc với Django qua quá trình học tập và làm việc.
3.1.2 Khuyết điểm
So với Flask(một web framework khác được viết bằng python) django khó học và sử dụng hơn nên thích hợp để xây dựng các dự án lớn.
3.2 React Native
Hình 3.2:React Native
React Native ra đời nhằm mang đến những sức mạnh của React lên các thiết bị di động. Bằng cách sử dụng duy nhất ngôn ngữ JavaScript, React Native hỗ trợ xây dựng ứng trên cả hai nền tảng IOS và Android. Điều này giúp cho việc viết viết mã nguồn trở nên nhanh chóng và thuận tiện khi nhà phát triển không còn phải bắt buộc học các ngôn ngữ native cho từng hệ điều hành khác nhau.[12]
React Native có các đặc điểm tương tự như react. React là một thư viện Javascript sử dụng để xây dựng giao diện người dùng. Bằng cách thay đổi DOM, React Native có thể thay đổi nội dung của trang web mà không cần tải lại - khái niệm quan trọng nhất của single page application.
• Tính khai báo (Declarative): Giảm thiểu độ phức tạp của việc thiết kế giao diện tương tác. Giao diện được thiết kế sẽ hoạt động dựa theo trạng thái hiện tại và chỉ các thành phần chịu tác động bởi trạng thái được cập nhật khi trạng thái được cập nhật.
• Hướng thành phần (Component-Based): Giao diện xây dựng bằng React được chia nhỏ thành nhiều thành phần con. Trong đó có những thành phần logic và những thành phần hiển thị, từ đó tạo ra sự tách bạch giữa logic và hiển thị.
• Khả năng tích hợp tốt: React có thể được sử dụng trong các dự án hiện tại như một thành phần mới. Điều này giúp React trở nên linh hoạt trong phát triển phần mềm.
Những khái niệm cơ bản trong React:
• Virtual DOM:
– Virtual DOM là một khái niệm được sử dụng để chỉ một cây DOM (DOM tree) ảo được chứa trong bộ nhớ và đồng bộ với cây DOM thật (trong trường hợp này là ReactDOM).
– React sẽ thực hiện các thay đổi lên cây DOM thật ở các nhánh cần thiết thay đổi bằng các so sánh những thay đổi trạng thái trên cây DOM ảo. Từ đó, giảm thiểu việc hiển thị lại các thành phần không thay đổi, tăng tốc độ hiển thị và tăng khả năng xử lý.
• State:
– State là trạng thái của một thành phần (component) trong React.
– State được thay đổi gián tiếp thông qua hàm setState. Việc thay đổi trực State có thể dẫn đến hành động hiển thị không mong muốn.
• Props:
– Props, viết tắt của Properties, cũng là trạng thái của một thành phần trong React.
– Props được truyền từ thành phần cha cho một thành phần con và thành phần con không thể thay đổi được Props.
3.2.1 Ưu điểm
Khách quan
• React có thể được sử dụng để lập trình sau đó biên dịch ra thành ứng dụng Native.
• Khả năng tích hợp tốt: React Native có thể được sử dụng để xây dựng một ứng dụng mới hoàn chỉnh hoặc một thành phần của ứng dụng đã được xây dựng trên ngôn ngữ Native trước đó.
• Phát triển ứng dụng nhanh:
– React Native có thể được sử dụng để xây dựng ứng dụng trên cả IOS và Android đồng thời bằng cách bọc các API của ngôn ngữ Native với những React Native API.
– Khả năng cập nhật nhanh: Những thay đổi trong code React Native được lập tức đồng bộ lên thiết bị di động với tốc độ nhanh, giúp giảm đáng kể thời gian debug ứng dụng.
Chủ quan: Đã có kinh nghiệm làm việc với React Native qua quá trình học tập và làm việc.
3.2.2 Khuyết điểm
Đối với các ứng dụng yêu cầu hiệu xuất cao như ứng dụng 3D, game. React Native không phải là sự lựa chọn tốt nhất vì React Native tuy giảm thời gian viết mã những không tối ưu được mã nguồn như khi viết trên các ngôn ngữ native.
Cùng một đoạn mã nguồn được viết bởi React Native khi biên dịch qua các ngôn ngữ native như Java, Swift/Objective-C giao diện hiển thị khác nhau khiến các nhà phát triển phải có những cấu hình riêng cho từng loại ngôn ngữ native.
3.3 PostgreSQL
Hình 3.3:PostgreSQL
PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ-đối tượng (object-relational database management system) có mục đích chung, hệ thống cơ sở dữ liệu mã nguồn mở tiên tiến nhất hiện nay.[13]
PostgreSQL được thiết kế để chạy trên các nền tảng tương tự UNIX. Tuy nhiên, Post- greSQL sau đó cũng được điều chỉnh linh động để có thể chạy được trên nhiều nền tảng khác nhau như Mac OS X, Solaris và Windows.
Cơ sở dữ liệu PostgreSQL là một hệ thống quản lý dữ liệu nguồn mở cấp doanh nghiệp. Nó hỗ trợ cả SQL cho quan hệ và JSON cho các truy vấn không quan hệ. Post- greSQL không yêu cầu quá nhiều công tác bảo trì bởi có tính ổn định cao. Do đó, nếu bạn phát triển các ứng dụng dựa trên PostgreSQL, chi phí sở hữu sẽ thấp hơn so với các hệ thống quản trị dữ liệu khác..
PostgreSQL hỗ trợ các loại dữ liệu nâng cao và tối ưu hóa hiệu suất nâng cao, các tính năng chỉ có sẵn trong cơ sở dữ liệu thương mại đắt tiền, như Oracle và SQL Server.
3.3.1 Ưu điểm
Khách quan:
• PostgreSQL là một hệ quản trị cơ sở dữ liệu miễn phí, do đó nó dễ tiếp cận và sử dụng.
• PostgreSQL hỗ trợ các đối tượng địa lý để bạn có thể sử dụng nó cho các dịch vụ dựa trên vị trí và hệ thống thông tin địa lý.
Chủ quan: Đã có kinh nghiệm làm việc với PostgreSQL qua quá trình học tập và làm việc.
3.3.2 Khuyết điểm
Nhiều ứng dụng nguồn mở hỗ trợ MySQL, nhưng có thể không hỗ trợ PostgreSQL. Về số liệu hiệu suất, PostgreSQL chậm hơn MySQL.
3.4 Redis
Hình 3.4:Redis
Redis là một nơi lưu trữ cấu trúc dữ liệu dạng key-value trong RAM thường được sử dụng là hệ cơ sở dữ liệu, bộ nhớ đệm và message broker.[14]
Redis hỗ trợ nhiều loại cấu trúc dữ liệu khác nhau như: string, hashes, lists, sets, sorted sets với nhiều câu lệnh truy vấn dữ liệu khác nhau.
Redis có thể được mở rộng bằng cách tạo ra các cluster. Ngoài ra Redis còn hỗ trợ nhiều tính năng khác như:
• Cơ chế transaction.
• Cơ chế pub/sub.
• Lập trình bằng Lua.
• Cơ chế tự động xóa dữ liệu trong trường hợp đầy bộ nhớ.
• Cặp key-value có thời gian hết hạn.
3.4.1 Ưu điểm
Khách quan:
• Do việc truy cập vào bộ nhớ trong nhanh chóng khiến cho việc sử dụng Redis để thực hiện các thao tác đòi hỏi phản hồi nhanh trở nên dễ dàng hơn.
• Hỗ trợ cluster giúp việc mở rộng và đảm bảo tính sẵn sàng của hệ thống. Đặc biệt với các hệ thống thời gian thực.
Chủ quan: Đã có kiến thức và kinh nghiệm sử dụng Redis trong thực tế.
3.4.2 Nhược điểm
Có rất ít công cụ quản lý và hỗ trợ cho Redis đặc biết là các công cụ có GUI hỗ trợ phát triển và debug nhanh chóng.
Chi phí vận hành cao do sử dụng RAM để lưu trữ. Chưa hỗ trợ nhiều loại câu truy vấn.
Truy vấn ở cường độ lớn đòi hỏi nhà phát triển phải có kiến thức với Lua để gia tăng hiệu suất.
Chương 4
Ở chương này sẽ trình bày chi tiết các phân tích yêu cầu nghiệp vụ của từng đối tượng trong hệ thống cũng như chức năng mà hệ thống cần đảm bảo để thực hiện được các nghiệp vụ của đối tượng đó.
4.1 Đối tượng sử dụng 4.1.1 Quản trị viên
Đối tượng có quyền cao nhất trong hệ thống, giữ vai trò quản trị hệ thống. Thực hiện các tác vụ liên quan tới quản lý tài khoản, quản lý các giao dịch trong hệ thống và điều chỉnh các thông số cố định trên ứng dụng.
4.1.2 Tài xế
Đối tượng nhận thông tin và chỉ dẫn thực hiện đơn hàng từ người gửi và hệ thống. Tài xế là đối tượng trung gian giữa người gửi hàng và người nhận hàng.
4.1.3 Người gửi hàng
Đối tượng thực hiện hành động gửi hàng để phát sinh một giao dịch trên hệ thống. Đối tượng người gửi hàng cùng với hệ thống đưa ra các yêu cầu và chỉ dẫn cho đối tượng tài xế.
4.1.4 Người nhận hàng
Đối tượng được sử dụng đầy đủ các chứng năng của hệ thống như đối tượng người nhận hàng và có thêm chức năng phục vụ cho quá trình xác thực đơn hàng.
4.2 Phân tích yêu cầu nghiệp vụ4.2.1 Yêu cầu chức năng của quản trị viên 4.2.1 Yêu cầu chức năng của quản trị viên
Các tính năng quản trị viên có bao gồm:
• Quản lý thông tin tài khoản
– Quản trị viên có quyền xem thông tin liên quan đến tất cả các tài khoản đăng ký trên hệ thống.
– Quản trị viên có thể cập nhật mọi thông tin liên quan đến tài khoản đồng thời có thể kích hoạt/ hủy kích hoạt theo quy định đối với người dùng ứng dụng.
• Báo cáo
– Quản trị viên có quyền xem thông tin báo cáo liên quan đến vận đơn và tài khoản.
– Báo cáo trạng thái vận đơn thống kê trạng thái vận đơn trong 10 ngày gần nhất bao gồm các trạng thái: Đợi tài xế xác nhận, Đợi tài xế nhận hàng, Đang vận chuyển, Đã giao hàng và Đã bị hủy.
– Báo cáo số lượng tài khoản mở mới cung cấp cho quản trị viên số lượng tài khoản mở mới theo từng tháng giúp đưa ra các chiến lược quản bá sản phẩm.
– Báo cáo tài khoản sử dụng nhiều cung cấp cho quản trị viên thông tin các tài khoản sử dụng nhiều nhất trong hệ thống nhằm đưa ra những chính sách chăm sóc khác hàng phù hợp.
• Quản lý vận đơn
– Quản trị viên có quyền xem thông tin liên quan đến tất cả các vận đơn trong hệ thống.
– Đối với vận đơn chưa hoàn thành
* Khi vận đơn chưa qua trạng thái tài xế xác nhận đã nhận vận đơn, vì một số lý do nhập thông tin kiện hàng từ đối tượng người gửi. Quản trị viên có thể điều chỉnh các thông tin liên quan đến vận đơn khi có yêu cầu thay đổi từ đối tượng gửi.
Hình 4.1:Use case quản trị viên
* Quản trị viên không thể thay đổi thông tin vận đơn khi vận đơn đã qua trạng thái được tài xế xác nhận đã nhận vận đơn.
* Quản trị viên không được trực tiệp tạo vận đơn, vận đơn phải được hình thành theo quy trình trong hệ thống từ đối tượng tài xế tới tài xế.
* Quản trị viên được phép hủy vận đơn thông qua tính năng hủy lệnh.
* Quản trị viên không được phép xóa trực tiếp lệnh.
– Đối với vận đơn đã hoàn thành
* Quản trị viên không được phép xóa và thực hiện các tác vụ làm thay đổi dữ liệu của vận đơn.
4.2.2 Yêu cầu chức năng của tài xế
Hình 4.2:Use case xác thực tài xế
Các tính năng và quy trình liên quan của tài xế chưa có tài tài khoản bao gồm:
• Quy trình đăng ký:
1. Đối tượng tài xế được yêu cầu cung cấp các thông tin cá nhân cơ bản bao gồm:
– Số điện thoại: Số điện thoại là định danh tài khoản trên hệ thống vì vậy mỗi số điện thoại là duy nhất cho ứng dụng khách hàng và tài xế.
– Email: Mỗi email tồn tại trong hệ thống chỉ được gắn với một tài khoản