PHẦN II: NỘI DUNG THỰC TẬP
Tải bản đầy đủ - 0trang
Báo cáo thực tập doanh nghiệp
10
Cao Đại Hoàng Hùng
Đặc tả yêu cầu
Thiết kế hệ thống và lập trình
Cài đặt và kiểm thử đơn vị
Tích hợp và kiểm thử hệ thống
Vận hành và bảo trì
Sơ đồ 3: Quy trình phát triển phần mềm theo mơ hình thác nước
- Đặc tả u cầu: Xác định các đặc điểm mà hệ thống phải cung cấp, các ràng
buộc trong quá trình vận hành và phát triển, đồng thời xác định mục tiêu đặt ra đối với hệ
thống thông qua yêu cầu của khách hàng. Sau đó, ta tư liệu hóa các yêu cầu thu được
trong tài liệu.
- Thiết kế hệ thống và lập trình: Phân chia các yêu cầu cho hệ thống phần mềm,
sau đó thiết lập nên các kiến trúc hệ thống phần mềm. Tiếp theo ta tiến hành thiết kế phần
mềm bằng cách xây dựng và mô tả các hệ thống phần mềm con cấu thành nên phần mềm
cần được xây dựng và mối quan hệ giữa các hệ thống.
- Cài đặt và kiểm thử đơn vị: Chuyển bản thiết kế phần mềm thành một tập hợp
các chương trình hoặc đơn vị chương trình, sau đó thực hiện hoạt động kiểm thử đơn vị
để phát hiện các khiếm khuyết, sửa các khiếm khuyết này và chỉ ra rằng chúng đã được
cài đặt theo đúng tài liệu đặc tả.
- Tích hợp và kiểm thử hệ thống: Các đơn vị chương trình được tích hợp lại với
nhau thành hệ thống hồn chỉnh. Sau đó tiến hành hoạt động kiểm thử hệ thống nhằm
kiểm tra sự ăn khớp giữa các thành phần và chỉ ra rằng phần mềm đã đáp ứng được yêu
cầu người dùng và nó được xây dựng theo đúng tài liệu đặc tả.
- Vận hành và bảo trì: Đưa phần mềm vào sử dụng trong thực tế và tiến hành các
sửa đổi cần thiết nếu người dùng phát hiện ra khiếm khuyết.
Báo cáo thực tập doanh nghiệp
11
Cao Đại Hồng Hùng
Trong mơ hình thác nước này, năm pha trên phải được thực hiện một cách tuần tự,
kết thúc pha trước mới được thực hiện pha tiếp theo.
Ưu điểm:
-
Dễ phân công công việc, phân bổ chi phí, giám sát cơng việc.
-
Kiến trúc hệ thống hàng đợi ổn định.
Nhược điểm:
-
Mối quan hệ giữa các giai đoạn không được thể hiện.
- Hệ thống phải được kết thúc ở từng giai đoạn, do vậy rất khó thực hiện được
đầy đủ những yêu cầu của khách hàng vì trong mơ hình này rất khó khăn trong
việc thay đổi các pha đã thực hiện.
- Chỉ tiếp xúc với khách hàng ở pha đầu tiên nên phần mềm không đáp ứng được
hết các yêu cầu của khách hàng.
-
Chi phí phát triển dự án tương đối lớn.
-
Khả năng thất bại cao.
2.2. Log4net.
2.2.1. Tổng quan.
Log4net là một công cụ giúp người lập trình ghi lại những thơng tin trong lúc chạy
ứng dụng được xây dựng bằng .NET. Nó chính là một phiên bản chuyển thể từ Log4j và
vẫn tiếp tục được phát triển kể từ năm 2001. Trong trường hợp ứng dụng có lỗi mà vẫn
khơng tìm được ngun nhân, Log4net có thể giúp ta xác định nơi gây lỗi. Ngồi ra,
Log4net còn có thể thay đổi trạng thái log lúc chương trình chạy mà khơng cần ngừng
chương trình. Bên cạnh đó, khi sử dụng Log4net sẽ khơng ảnh hưởng đáng kể đến hiệu
suất của ứng dụng, Log4net còn được thiết kế với tính linh hoạt rất cao, chúng ta có thể
mở rộng và bổ sung những thứ mình muốn vào thư viện Log4net, chẳng hạn như cách
thức log, định dạng log.
2.2.2. Các cấp độ log.
Có tất cả 7 cấp độ log, tuy nhiên ta chỉ có thể gọi sử dụng được 5 loại. Các cấp độ
log theo thứ tự gồm:
1. OFF - khơng log gì cả (ta khơng sử dụng được cấp độ này).
Báo cáo thực tập doanh nghiệp
12
Cao Đại Hoàng Hùng
2. FATAL
3. ERROR
4. WARN
5. INFO
6. DEBUG
7. ALL - log tất cả (ta không sử dụng được cấp độ này).
Các cấp độ này đều có thể sử dụng nhiều lần cả trong mã lập trình cũng như trong
tập tin cấu hình.
2.2.3.Cài đặt.
Download phiên bản mới nhất của Log4net từ địa chỉ Website
http://logging.apache.org/log4net/ (các ví dụ dưới đây sử dụng phiên bản Log4net 1.2.10)
và thêm Reference vào project:
Hình 1: Cài đặt Log4net
2.2.4. Cấu hình
- Thêm dòng dưới đây vào file AssemblyInfo.cs (trong thư mục Property của
project):
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4netSam
ple.exe.config", Watch = true)]
-
Thêm đoạn code trên vào tập tin AssemblyInfo.cs sẽ giúp Log4net tìm thấy các
thơng tin cấu hình của nó ở tập tin App.config. Ở đây ta thấy
ConfigFile=“Log4netSample.exe.config” trong khi tập tin cấu hình của ta là App.config.
Nguyên nhân là do tập tin cấu hình của ứng dụng sẽ tự động build thành dạng
Báo cáo thực tập doanh nghiệp
13
Cao Đại Hồng Hùng
tên_assembly.config. Ví dụ chương trình đang thực hiện có tên là Log4netSample.exe
nên ở đây ta chọn tên tập tin cấu hình là Log4netSample.exe.config. Đối với ứng dụng
web ta sẽ thiết lập tên tập tin cấu hình ConfigFile=“Web.config” (Web là tên của ứng
dụng) vì tập tin cấu hình cho ứng dụng web sẽ không bị đổi tên.
- Nếu project chưa có tập tin App.config thì ta sẽ tự thêm vào tập tin này. Đây là
tập tin cấu hình cho ứng dụng. Sau đó thêm vào tập tin App.config các thẻ như sau:
type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net" />
type="log4net.Appender.RollingFileAppender">
Nội dung tập tin cấu hình:
Trong tập tin cấu hình trên ta sử dụng RollingFileAppender để ghi nội dung log
vào tập tin. Có rất nhiều loại Appender được xây dựng sẵn trong thư viện Log4net, ví dụ
như ta còn có thể sử dụng ConsoleAppender để ghi nội dung log ra cửa sổ console. Mỗi
loại có cơng dụng ghi nội dung log vào một nơi khác nhau.
Thông tin log sẽ được ghi vào tập tin Log4netSampleLog.txt, tập tin này nằm cùng
thư mục với tập tin thực thi của ứng dụng. Nếu ta muốn lưu tập tin log này vào vị
trí khác, ta có thể dùng đường dẫn tuyệt đối để xác định thư mục muốn lưu.
Báo cáo thực tập doanh nghiệp
14
Cao Đại Hoàng Hùng
Dữ liệu log sẽ được lưu vào tập tin vì ta đang sử dụng RollingFileAppender. Khi
kích thước tập tin vượt quá một mức nào đó thì Log4net sẽ tự động đổi tên tập tin
cũ và ghi vào tập tin mới. Tổng số lượng tập tin tối đa sẽ là 10 và những tập tin cũ
nhất sẽ bị xóa nếu số lượng tập tin vượt quá 10.
Kích thước tập tin log tối đa là 1MB.
Đây là phần quy định định dạng của nội dung log được ghi vào như ngày, tháng,
năm, thread id, tên lớp,… Ta có thể tùy biến định dạng theo ý riêng của mình.
Quy định cấp độ log, mặc định sẽ là cấp Debug cho tất cả các log. Nghĩa là nếu ta
khai báo như trên thì toàn bộ các log ghi vào tập tin đều được ghi với cấp độ
Debug, cấp độ Debug là cấp độ thấp nhất mà ta có thể sử dụng được. Nếu ta thiết
lập giá trị Error thay cho Debug thì chỉ có những log nào có cấp độ cao hơn hoặc
bằng cấp độ Error mới được ghi xuống tập tin (xem thứ tự các cấp độ ở phần
trước). Khi deploy chương trình cho khách hàng, thường chúng ta sẽ thiết lập cấp
độ mặc định là Error, khi sử dụng có lỗi ta sẽ yêu cầu khách hàng sửa lại thành
Debug nếu cần thiết.
2.2.5. Sử dụng.
- Thêm namespace log4net vào những nơi mà ta muốn sử dụng Log4net.
- Thêm đoạn code dưới đây trong lớp nào có sử dụng Log4net:
private static readonly ILog logger
= LogManager.GetLogger(typeof(TênLớp).Name);
hoặc có thể sử dụng cách tổng quát:
private static readonly ILog logger =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod
().DeclaringType);
-
Khi cần ghi log ta sẽ dùng đoạn code như sau:
logger.Debug("Logger started");
hoặc:
logger.Error("Logger started");
Trên thực tế, để tăng tối đa tốc độ ta nên khai báo một biến boolean để kiểm tra
xem có cần log hay khơng, nếu có thì mới gọi hàm log:
Báo cáo thực tập doanh nghiệp
15
Cao Đại Hoàng Hùng
bool isLogEnabled = logger.IsDebugEnabled;
if (isLogEnabled)
{
logger.Debug("Logger started");
}
Ngoài khả năng ghi những đoạn log vào tập tin như trên, Log4net còn cho phép ta
ghi log vào cơ sở dữ liệu, ghi ra cửa sổ console và thậm chí là có thể email cho chúng ta.
Bên cạnh đó, Log4net là một dự án mã nguồn mở, do đó ta có thể kế thừa, mở rộng và
phát triển thêm.
2.3. Nhibernate.
2.3.1. ORM Framework.
- Framework là một khái niệm trong phát triển phần mềm dùng để chỉ những
“cấu trúc hỗ trợ được định nghĩa” mà trong đó những dự án phần mềm khác có thể được
sắp xếp vào đó và phát triển.
- ORM (Object Relational Mapping) framework là một cơ chế cho phép người
lập trình thao tác với database một cách hồn tồn tự nhiên thơng qua các đối tượng. Lập
trình viên hồn tồn khơng quan tâm đến loại database sử dụng.
2.3.2. Persistence Layer.
- “Tier” và “Layer”: tier thường được gắn với phần cứng về mặt vật lý (physical)
còn layer thì dính đến vấn đề cách thức tổ chức bên trong của ứng dụng. Việc phân chia
tier là “trong suốt” (transparent) đối với ứng dụng về mặt luận lý (logical). Điều này có
nghĩa là khi ta phát triển một ứng dụng, chúng ta không bận tâm đến các thành phần
(component) sẽ triển khai (deploy) ra sao mà chỉ chú ý là chúng ta sẽ tổ chức ứng dụng
thành những layer như thế nào.
- Persistence layer: một ứng dụng có thể được chia làm 3 phần như sau: giao
diện người dùng (presentation layer), phần xử lý nghiệp vụ (business layer) và phần chứa
dữ liệu (data layer). Cụ thể ra, business layer có thể được chia nhỏ thành 2 layer con là
business logic layer (các tính tốn nhằm thỏa mãn u cầu người dùng) và persistence
layer. Persistence layer chịu trách nhiệm giao tiếp với data layer (thường là một hệ quản
trị cơ sở dữ liệu quan hệ - Relational DBMS). Persistence sẽ đảm nhiệm các nhiệm vụ
mở kết nối, truy xuất và lưu trữ dữ liệu vào các Relational DBMS.
2.3.3. Hibernate Framework.
- Là một giải pháp kĩ thuật ánh xạ từ mơ hình hướng đối tượng xuống cơ sở dữ
liệu quan hệ (Object-relational mapping (ORM)) cho nền tảng Microsoft.NET.
-
Cung cấp một giải pháp để mapping đến cơ sở dữ liệu một cách dễ dàng.
Báo cáo thực tập doanh nghiệp
16
Cao Đại Hoàng Hùng
- Cung cấp cho chúng ta các phương thức thao tác với cơ sở dữ liệu và tạo ra các
dữ liệu chuẩn dưới dạng các object. khi đó chúng ta sẽ thao tác với dữ liệu thông qua các
object.
- Tất cả các dữ liệu được lấy lên hoặc lưu lại sẽ được lưu vào bộ nhớ của máy và
sẽ được load lại hoặc đẩy xuống khi chúng ta thực hiện đẩy xuống hoặc load cơ sở dữ
liệu.
Sơ đồ 4: Cấu trúc chương trình sử dụng NHibernate
Báo cáo thực tập doanh nghiệp
17
Cao Đại Hoàng Hùng
2.4. Qt Framework.
2.4.1. Giới thiệu về Qt Framework.
- Qt là một Framework cho phép xây dựng các ứng dụng có giao diện chạy
trên nhiều nền tảng: bao gồm hệ điều hành Symbian, Meego, Windows, Linux, Mac.
- Qt Framework bao gồm một thư viện hỗ trợ chạy đa nền, tích hợp với các
công cụ phát triển và các IDE. Với Qt Framework bạn có thể lập trình một ứng dụng trên
Windows và biên dịch để chúng chạy trên Linux hoặc Mac mà khơng phải thay đổi mã
nguồn của chương trình.
- Qt cũng hỗ trợ đa ngơn ngữ lập trình, ngồi phiên bản chính thức hỗ trợ cho
C++, Qt còn có các phiên bản binding cho các ngôn ngữ khác như Pascal, C#, Python,
Ruby v.v...
2.4.2. Lịch sử phát triển của Qt framework.
- Qt framework được khởi xướng bởi Haavard Nord (CEO công ty Trolltech's)
và Eirik Chambe-Eng (giám đốc công ty Trolltech) từ năm 1991 (ban đầu họ chỉ là những
lập trình viên bình thường). Đến năm 1995 phiên bản đầu tiên của Qt được cơng bố ra
cộng đồng, đó là phiên bản Qt 0.9.0.
- Năm 1999 Qt giành được giải thưởng Linux World cho thư viện/công cụ tốt
nhất. Và cũng trong khoảng thời gian này, công ty Trolltech được thành lập.
- Năm 2008 Nokia mua lại Trolltech, từ đây Qt được sở hữu và phát triển bởi
Nokia. Mã nguồn của Qt cũng được công bố cho cộng đồng mã nguồn mở.
- Hiện nay Qt có 2 phiên bản: Mơt phiên bản mã nguồn mở và một phiên bản
thương mại. Với phiên bản thương mại thì người lập trình khơng phải cơng bố mã nguồn
với cộng đồng.
2.4.3. Các thành phần của Qt.
-
QtOpenGl: Hỗ trợ đồ họa.
-
QtSvg: Hỗ trợ tạo và hiển thị các tập tin SVG.
-
QtWebkit: Hỗ trợ web.
-
QtXmlPattern: Hỗ trợ XPath, XQuery, XSLT,...
-
Qt3Support: Hỗ trợ các chức năng trong Qt3.
-
QtGui: Hỗ trợ giao diện người dùng.
-
QtNetwork: Hỗ trợ các tương tác trên mạng.
-
QtSql: Hỗ trợ sử dụng cơ sở dữ liệu.
-
QtXml: Hỗ trợ làm việc với Xml.
-
QtScript.: Hỗ trợ làm việc với các script.
Báo cáo thực tập doanh nghiệp
-
18
Cao Đại Hoàng Hùng
Phonon: Hỗ trợ các ứng dụng multimedia.
2.4.4. Các ưu điểm của Qt.
- Code một lần và chạy khắp mọi nơi: code trên Windows, chạy trên Linux,
Mac, thiết bị di động, thiết bị nhúng,...
-
Các thư viện trực quan, đơn giản và dễ sử dụng.
-
Tạo ra code dễ đọc, dễ mở rộng và dễ tái sử dụng.
-
Ứng dụng tạo ra có hiệu suất xử lý cao và chạy khá nhanh.
- OpenWebkit cho phép xây dựng và chạy các ứng dụng dựa trên nền web, ví dụ
như game viết bằng Html5, Css, JavaScript.
3. Dự án thực tập - xây dựng ứng dụng FinalTorrent bằng Qt Framework.
3.1. Yêu cầu.
- Xây dựng ứng dụng tải tập tin torrent bằng ngôn ngữ C++ dựa trên Qt
Framework.
- Ứng dụng phải có đầy đủ các chức năng và giao diện tương tự như phần mềm
FinalTorrent (http://www.finaltorrent.com).
-
Ứng dụng phải được xây dựng trên cả hai hệ điều hành Windows và MacOS.
- Sử dụng thư viện torrent libtorrent-rasterbar (tải về tại http://www.rasterbar
.com/products/libtorrent) để thực hiện các chức năng tải tập tin torrent cho ứng dụng.
- Dự án được coi là hoàn tất chỉ khi ứng dụng đáp ứng đầy đủ các yêu cầu đặt ra
và có thể tải tập tin torrent một cách chính xác.
3.2. Các bước thực hiện.
3.2.1. Xác định yêu cầu.
Tìm hiểu các yêu cầu của dự án, nắm rõ các công việc phải làm và lên kế hoạch
thực hiện.
3.2.2. Xây dựng cửa sổ chính cho chương trình.
Cửa sổ chính của chương trình bao gồm:
-
Thanh menu.
- Thanh button, chứa các button tương ứng với mỗi module (Home, Search,
Library, Downloads).
-
Vùng làm việc chứa các module.
Báo cáo thực tập doanh nghiệp
-
19
Cao Đại Hồng Hùng
Thanh trạng thái.
Hình 2: Cửa sổ chính chương trình FinalTorrent
3.2.3. Xây dựng module Home.
Module Home gồm các thành phần:
-
Phần giới thiệu: Giới thiệu về
chương trình.
- Phần tìm kiếm: Cho phép nhập từ
tập tin torrent và hiển thị kết quả tìm kiếm
Search.
khóa tìm kiếm
trong module
- Phần mở tập tin torrent: Cho phép mở tập tin torrent từ hệ thống và tiến hành
tải nội dung tập tin torrent vừa mở.
3.2.4. Xây dựng module Downloads.
Hình 3: Module Home
Module Downloads được xem là
module quan trọng nhất của chương trình vì nó thực hiện các thao tác tải tập tin torrent
bằng cách sử dụng thư viện libtorrent-rasterbar có sẵn. Module này gồm có các thành
phần như sau:
- Danh sách các tập tin torrent đã
Danh sách này liệt kê chi tiết về quá trình tải
gồm: tên tập tin torrent, kích thước tập tin,
trình tải về, tốc độ tải về, số lượng máy đang
còn lại v.v…
-
hoặc đang tải về.
tập tin torrent bao
trạng thái, quá
chia sẻ, thời gian
Các button hỗ trợ chức năng cho việc tải về bao gồm:
•
Start: Bắt đầu tải tập tin hoặc tiếp
tục tải nếu tập tin đang bị tạm
dừng.
Hình 4: Module Downloads
Báo cáo thực tập doanh nghiệp
20
Cao Đại Hồng Hùng
•
Pause: Tạm dừng q trình tải.
•
Cancel: Hủy q trình tải. Chú ý nếu q trình tải đã thành cơng thì nội
dung tải về vẫn còn tồn tại.
•
Delete: Xóa q trình tải. Chú ý nếu q trình tải đã thành cơng thì nội
dung tải về cũng sẽ bị xóa đi.
- Ngồi ra còn có một menu ngữ cảnh xuất hiện khi nhấp chuột phải vào các
mục trong danh sách tải về với các chức năng tương tự với các button.
3.2.5. Xây dựng module Library.
Các thành phần của module Library bao gồm:
- Danh sách các tập tin đã tải về (tên tập tin, kích thước, đường dẫn). Khi nhấp
đúp vào một tập tin chương trình sẽ mở ra tập tin tương ứng trong cửa sổ Windows
Explorer.
- Danh sách các tập tin torrent đã
trình lưu (tên tập tin, kích thước, đường dẫn).
vào một tập tin torrent, chương trình sẽ mở
tập tin torrent.
-
được
chương
Khi nhấp đúp
thư mục chứa các
Các button hỗ trợ chức năng bao gồm:
•
Open: Mở tập tin tương ứng từ danh dách.
•
Remove: Xóa tập tin tương ứng
trong danh sách.
Hình 5: Module Library
- Ngồi ra còn có một menu ngữ cảnh xuất hiện khi nhấp chuột phải vào các tập
tin trong danh sách với các chức năng tương tự như các button.
3.2.6. Xây dựng module Search.
Module Search được xây dựng bằng
cách sử dụng 2
trang web tìm kiếm tập tin torrent khá phổ
biến
là
www.mininova.org và www.legittorrents.info.
Yêu cầu của
khách hàng là nhúng một trình duyệt web vào
phần kết quả tìm
kiếm. Tuy nhiên, do đối với QT Framework,
nếu muốn sử
dụng một trình duyệt web nhúng thì ta phải sử dụng thư viện Webkit, mà thư viện này lại
có kích thước khá lớn (hơn 12MB). Do đó, ta khơng thể dùng trình duyệt nhúng được mà
thay vào đó, ta sử dụng một QTextBrowser – một dạng text có thể hiển thị các thẻ HTML
– để hiển thị các kết quả tìm kiếm cho người dùng. Các thành phần của module Search
gồm: