Phân tích, thiết kế phần mềm tính lương Công ty TNHH Fujitsu Việt Nam

Tài liệu Phân tích, thiết kế phần mềm tính lương Công ty TNHH Fujitsu Việt Nam: LỜI CẢM ƠN Với lòng biết ơn chân thành, tôi xin gửi lời cám ơn sâu sắc tới: PGS. TS Hàn Viết Thuận, Chủ nhiệm Khoa Tin học Kinh tế, trường Đại học Kinh tế Quốc dân, là người thầy đã trực tiếp hướng dẫn, dành nhiều công sức giúp đỡ, truyền đạt những kiến thức quý báu và tạo điều kiên thuận lợi trong suốt quá trình tôi học tập, làm việc, và hoàn thành chuyên đề thực tập tốt nghiệp này. Tôi xin trân trọng cảm ơn: Anh Shinichi Nakada - Trưởng bộ phận tích hợp hệ thống (SI Business - System Inter... Ebook Phân tích, thiết kế phần mềm tính lương Công ty TNHH Fujitsu Việt Nam

doc186 trang | Chia sẻ: huyen82 | Lượt xem: 1866 | Lượt tải: 0download
Tóm tắt tài liệu Phân tích, thiết kế phần mềm tính lương Công ty TNHH Fujitsu Việt Nam, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
gration Business), anh Phan Ngọc Bình - Trưởng phòng Giải pháp phần mềm nhân sự và các anh chị trong nhóm EZManage , Công ty TNHH Fujitsu Việt Nam đã hướng dẫn và giúp đỡ tôi trong quá trình thực tập tại công ty Những thầy cô đã hết sức tạo điều kiện giúp đỡ, cho tôi nhiều kiến thức quý báu để hoàn thành chuyên đề tốt nghiệp: Thầy giáo Trần Công Uẩn, thầy giáo Trịnh Hoài Sơn và các thầy cô giáo, cán bộ trong khoa Tin học Kinh tế , trường Đại học Kinh tế Quốc dân đã tạo điều kiện thuận lợi và giúp đỡ tận tình trong quá trình tôi thực tập cũng như hoàn thành chuyên để tốt nghiệp. Đinh Thị Thanh Phượng MỤC LỤC DANH MỤC BẢNG BIỂU Bảng 2.1 – Các thời kỳ phát triển của phần mềm 25 Bảng 2.2 – Mức trợ cấp một lần cho người lao động 48 Bảng 2.3 – Mức trợ cấp hàng tháng cho người lao động 48 Bảng 2.4 – Biểu thuế lũy tiến từng phần trong nước 57 Bảng 2.5 – Biểu thuế lũy tiến từng phần tính cho ngườ nước ngoài 58 Bảng 3.a – Tỷ lệ làm ngoài giờ 64 Bảng 3.b – Thuế thu nhập cá nhân 65 Bảng 3.d – Tỷ lệ trợ cấp thôi việc 67 Bảng 3.1 - Adjustment 86 Bảng 3.2 – Annual Leave Payment 86 Bảng 3.3 – EmpAllowance 87 Bảng 3.4 – EmpInsurance 87 Bảng 3.5 – TerminationCompensation 87 Bảng 3.6 – TerminationInsuranceReinburse 88 Bảng 3.7 – TransportAllowance 88 Bảng 3.8 – Sal_Adjustment 88 Bảng 3.9 – Sal_Allowance 89 Bảng 3.10 – Sal_Deduction 89 Bảng 3.11 – Sal_Insurance 89 Bảng 3.12 – Sal_IO 90 Bảng 3.13 – Sal_NS 90 Bảng 3.14 – Sal_OT 90 Bảng 3.15 – Sal_OverseaPaymentPercent 91 Bảng 3.16 – PaidLeave 91 Bảng 3.17 – Sal_Sal 92 DANH MỤC HÌNH VẼ Hình 1.1 – Tập đoàn Fujitsu tại Việt Nam 4 Hình 1.2 – Sơ đồ tổ chức của công ty TNHH Fujitsu Việt Nam 6 Hình 2.1 - Mô hình thác nước 30 Hình 2.2 – Các bước của quá trình bảo trì 40 Hình 3.1 – Mẫu báo cáo chi tiết lương 68 Hình 3.2 – Mẫu báo cáo trợ cấp của nhân viên 69 Hình 3.3 - Mẫu báo cáo lương hiện thời 70 Hình 3.4 – Mẫu báo cáo về tiền bảo hiểm 71 Hình 3.5 - Mẫu báo cáo về phiếu lương 72 Hình 3.6 – Sơ đồ luồng thông tin của hệ thống tính lương 74 Hình 3.7 – Sơ đồ chức năng của hệ thống tính lương 75 Hình 3.8 – Sơ đồ phân rã chức năng Quản lý dữ liệu lương 75 Hình 3.9 – Sơ đồ phân rã chức năng Tính lương 76 Hình 3.10 – Sơ đồ phân rã chức năng Xuất báo cáo lương 76 Hình 3.11 – Sơ đồ mức ngữ cảnh của hệ thống tính lương 77 Hình 3.12 – Sơ đồ DFD mức 0 của hệ thống tính lương 78 Hình 3.13 – Sơ đồ DFD mức 1 của tiến trình Tính lương 79 Hình 3.14 – Sơ đồ DFD mức 1 của tiến trình Tính thuế thu nhập cá nhân 80 Hình 3.15 – Sơ đồ DFD mức 1 của tiến trình Lên báo cáo 81 Hình 3.16 – Thuật toán đăng nhập hệ thống 82 Hình 3.17 – Thuật toán cập nhật dữ liệu lương 83 Hình 3.18 – Thuật toán tính lương 84 Hình 3.19 – Thuật toán xuất báo cáo 85 Hình 3.20 – Sơ đồ mối quan hệ giữa các bảng trong CSDL 93 Hình 3.21 – Giao diện đăng nhập hệ thống 94 Hình 3.22 – Giao diện Menu chính 94 Hình 3.23 – Màn hình dữ liệu lương 95 Hình 3.24 – Màn hình Trợ cấp thôi việc 96 Hình 3.25 – Màn hình tính lương 97 Hình 3.26 – Màn hình Các báo cáo lương 98 Hình 3.27 – Màn hình Trợ cấp (Allowance) 99 Hình 3.28 – Màn hình Trợ cấp đi lại (Transport Allowance) 100 Hình 3.30 – Màn hình Các khoản điều chỉnh (Salary Adjustment) 101 Hình 3.31 – Màn hình Thanh toán nghỉ phép ( Annual Leave Payment) 102 Hình 3.32 – Màn hình Bồi thường bảo hiểm (Insurance Reimbursement) 103 Hình 3.33 – Màn hình Xuất báo cáo lương chi tiết 104 Hình 3.34 – Màn hình Xuất phiếu lương 105 Hình 3.35 – Màn hình xuất báo cáo bảo hiểm (Insurance) 105 Hình 3.36 – Màn hình xuất báo cáo chuyển khoản lương (Salary Transfer) 106 Hình 3.37 – Màn hình xuất báo cáo lương hiện thời (Current Salary Export) 106 Hình 3.38 – Màn hình xuất báo cáo làm thêm giờ hàng tháng 107 Hình 3.39 – Màn hình xuất báo cáo Thuế thu nhập cá nhân 107 Hình 3.40 – Màn hình xuất báo cáo lương theo năm 108 PHẦN MỞ ĐẦU Lý do chọn đề tài Hiện nay, trong quá trình hội nhập kinh tế thế giới, Việt Nam tiếp nhận nhiều nguồn vốn đầu tư từ nước ngoài, đặc biệt là sự có mặt của các nhà đầu tư đến từ Nhật Bản. Công ty TNHH Fujitsu Việt Nam cũng là một trong số những doanh nghiệp điển hình như thế, với vốn đầu tư 100% của Nhật Bản, công ty tập trung đặc biệt vào các công ty sản xuất của Nhật Bản mới chuyển địa điểm đầu tư từ Thái Lan, Trung Quốc sang Việt Nam. Công ty cung cấp dịch vụ công nghệ thông tin đầy đủ cho các công ty này bao gồm cả xây dựng cơ sở công nghệ thông tin và giải pháp ứng dụng doanh nghiệp. Bên cạnh đó, các đối tác của công ty TNHH Fujitsu Việt Nam hầu hết là những công ty có số lượng nhân viên lên tới 2000-3000 người. Vì vậy, việc quản lý và tính lương cho công nhân là vô cùng khó khăn. Việc này ảnh hưởng tới quyền lợi của người lao động đồng thời tạo sự bất tiện trong quản lý. Chính vì vậy, công ty đã tập trung phát triển gói phần mềm EZManage nhằm hỗ trợ nghiệp vụ quản lý nhân sự, tính giờ làm, tính lương Trong quá trình thực tập tại phòng giải pháp phần mềm nhân sự, em đã nghiên cứu và tìm hiểu về các nghiệp vụ quản lý nhân sự, đi sâu vào nghiệp vụ tính lương cho nhân viên. Vì thế, em xin chọn đề tài “ Phân tích, thiết kế phần mềm tính lương” làm đề tài thực tập tốt nghiệp. Đề tài sẽ được gắn và phát triển cụ thể với một công ty sản xuất kinh doanh vốn đầu tư 100% của Nhật Bản là công ty trách nhiệm hữu hạn Nissei Electric Hanoi. Mục tiêu nghiên cứu Báo cáo chuyên đề thực tâp này được nghiên cứu với 3 mục đích: Tìm hiểu yêu cầu tin học hóa công tác quản lý nhân sự nói chung, công tác tính lương cho nhân viên nói riêng của công ty trách nhiệm hữu hạn Nissei Electric Hà Nội Nghiên cứu lý thuyết tổng quan về các bước phân tích thiết kế một phần mềm tính lương, bắt đầu từ quá trình khảo sát hiện trạng, xác định yêu cầu hệ thống, phân tích chức năng và dữ liệu hệ thống, thiết kế, lập trình, cài đặt, triển khai phần mềm Phân tích, thiết kế phần mềm tính lương cho công ty trách nhiệm hữu hạn Nissei Electric Hà Nội Cấu trúc của báo cáo chuyên đề thực tập tốt nghiệp Báo cáo bao gồm phần mở đầu, ba chương, kết luận và các phụ lục Phần mở đầu nêu các nhận định về tính cấp thiết của đề tài, mục tiêu,phương pháp và các kết quả đạt được Chương 1 trình bày tổng quan về công ty TNHH Fujitsu Việt Nam và phòng giải pháp phần mềm nhân sự Chương 2 đưa ra các cơ sở phương pháp luận của quy trình thiết kế một phần mềm tính lương Chương 3 là phần quan trọng nhất của báo cáo đề cập đến các kết quả phân tích thiết kế phần mềm tính lương tại công ty trách nhiệm hữu hạn Nissei Electric Hà Nội bao gồm các bước khảo sát hiện trạng, thiết kế cấu trúc dữ liệu, giao diện, giải thuật, lập trình Kết luận đánh giá, tổng kết đề tài Phụ lục thể hiện một số đoạn lệnh và một số mẫu báo cáo đầu ra tiêu biểu CHƯƠNG 1 TỔNG QUAN VỀ CÔNG TY TRÁCH NHIỆM HỮU HẠN FUJITSU VIỆT NAM VÀ PHÒNG GIẢI PHÁP PHẦN MỀM NHÂN SỰ TỔNG QUAN VỀ CÔNG TY TNHH FUJITSU VIỆT NAM (FUJITSU VIETNAM LIMITED) Lịch sử hình thành và phát triển 1.1. Tập đoàn Fujitsu Việt Nam Ngày 20/6/1935, công ty Fuji Tsushinki Manufacturing Corporation- sau này trở thành công ty TNHH Fujitsu (Fujitsu Limited) đuợc thành lập tại Nhật Bản với số vốn ban đầu là 3 triệu yên. Sau hơn 70 năm hoạt động hiện nay công ty TNHH Fujitsu trở thành một trong những công ty đứng đầu thế giới trong lĩnh vực công nghệ thông tin và viễn thông với tổng doanh thu toàn cầu trong năm 2004 là 44,971 tỷ USD (tương đương với 4766,888 tỷ Yên). Năm 1993, công ty TNHH Fujitsu toàn cầu chính thức bắt đầu hoạt động tại Việt Nam. Và từ đó cho đến nay, Việt Nam luôn là một trong những địa điểm quan trọng trong chiến lược đầu tư phát triển của tập đoàn Fujitsu toàn cầu. Hiện nay, tập đoàn Fujitsu Việt Nam bao gồm 3 thành viên là: Công ty TNHH Fujitsu Việt Nam (Fujitsu Vietnam Limited - FVL); Công ty các sản phẩm máy tính Fujitsu Việt Nam (Fujitsu Computer Products of Vietnam- FCV) và Công ty các hệ thống viễn thông VNPT-Fujitsu (VNPT-Fujitsu Telecomunication Systems Limited-VFT). Cơ cấu của tập đoàn Fujitsu Việt Nam được thể hiện trong hình vẽ sau: Hình 1.1 – Tập đoàn Fujitsu tại Việt Nam Công ty các sản phẩm máy tính Fujitsu Việt Nam (FCV) bắt đầu hoạt động từ năm 1996 chuyên sản xuất bản mạch in điện tử thô và lắp ráp cho nghành công nghiệp máy tính với tổng số vốn đầu tư là 198.8 triệu USD. Được thành lập vào ngày 5/4/1997, Công ty các hệ thống viễn thông VNPT- Fujitsu (VFT) là kết quả của việc liên doanh giữa Tổng công ty bưu chính viễn thông Việt Nam (VNPT) và công ty Fujitsu. Công ty tiến hành cung cấp các dịch vụ thiết kế, sản xuất, lắp đặt và bảo hành những hệ thống truyền dẫn quang và vô tuyến SDH với hai dòng sản phẩm chính là FLX và FRX. 1.2. Công ty TNHH Fujitsu Việt Nam 1.2.1. Các thông tin chung Công ty TNHH Fujitsu Việt Nam – thành lập vào ngày 6/2/1999 là thành viên mới nhất trong tập đoàn Fujitsu tại Việt Nam. Cho đến nay, sau chín năm hoạt động, công ty FVL là một trong những nhà tiên phong trong lĩnh vực công nghệ thông tin và viễn thông tại Việt Nam. Tên tiếng việt: Công ty trách nhiệm hữu hạn Fujitsu Việt nam Tên tiếng anh: Fujitsu Vietnam Limited - FVL Năm thành lập: 06/02/1999 Vốn đầu tư ban đầu : 1.000.000 USD Trụ sở chính: Tầng 8, Tháp DMC , 535 Kim Mã, Ba Đình, Hà Nội Điện thoại: (84.4) 2203113 Fax: (84.4) 2203114 Văn phòng chi nhánh tại Thành phố Hồ Chí Minh : Tầng 5, tòa nhà Sở công nghiệp 163, Hai Bà Trưng, Quận 3, Thành phố Hồ Chí Minh Điện thoại: (84.8) 823 6300 Fax: (84.8) 823 6303 Website: www.vn.fujitsu.com Năm 1994, Công ty Fujitsu Nhật Bản khai trương văn phòng đại diện tại Hà Nội và một văn phòng đại diện thứ hai ở thành phố Hồ Chí Minh vào năm 1997. Hai văn phòng đại diện hoạt động song song trong hai năm, sau đó công ty Trách nhiệm hữu hạn Fujitsu Việt Nam chính thức được thành lập với số vốn đầu tư ban đầu là 1.000.000 USD. Trụ sở chính của FVL được đặt tại Hà nội và văn phòng chi nhánh đặt tại Thành phố Hồ Chí Minh cùng với hai văn phòng hỗ trợ kỹ thuật tại khu Công nghiệp Thăng Long, Đông Anh, Hà nội và khu Công nghiệp Biên Hoà, Đồng Nai. Sau 9 năm hoạt động, công ty TNHH Fujitsu Việt Nam đã phát triển đội ngũ nhân viên lên đến 100 người tại Văn phòng Hà Nội và 28 người tại Văn phòng chi nhánh Thành phố Hồ Chí Minh. Hiện nay, công ty có nhiều khách hàng lớn trong đó chủ yếu là các công ty Nhật Bản tại Việt Nam như : Nissan Techno Vietnam, Canon Vietnam, Toyota Vietnam, Sumimoto Bakelite Vietnam, Five Star Solution… với doanh thu năm 2004 là 4.73 triệu USD tương đương với 68 tỷ Việt Nam đồng và doanh thu cho năm 2006 là 125,638 tỷ Việt Nam đồng-gần gấp đôi năm 2004. 1.2.2. Cơ cấu tổ chức của công ty 1.2.2.1. Sơ đồ tổ chức Hình 1.2 – Sơ đồ tổ chức của công ty TNHH Fujitsu Việt Nam 1.2.2.2. Chức năng, nhiệm vụ của các bộ phận a. General director: Tổng giám đốc, hiện thời người nắm giữ vị trí này tại công ty TNHH Fujitsu Việt Nam là Mr. Yoshitaka Kurihara b. IT Infra service: Bộ phận dịch vụ quản lý cơ sở hạ tầng công nghệ thông tin. Trưởng bộ phận này là Mr. Kazuo Murayama Ngày nay, rất nhiều các doanh nghiệp sử dụng các hệ thống máy tính để điều hành toàn bộ các công việc. Nhưng thật không may là có rất nhiều các vấn đề về máy tính xảy ra mà không được dự báo trước. Không ai có thể ước lượng được chi phí cho việc bảo trì và sửa chữa những sự cố đó. Những sự cố như vậy không chỉ làm đau đầu các nhà quản lý mà còn là nguyên nhân gây nên sự mất ổn định trong công việc kinh doanh của doanh nghiệp. Với mục tiêu chính là giải quyết các vấn đề của khách hàng, dựa trên các chính sách tổng thể của tập đoàn Fujitsu, Fujitsu Việt nam giới thiệu một dịch vụ mới với tên gọi: "Chăm sóc và quản lý cơ sở hạ tầng CNTT - InfraCare" cho các cá nhân, doanh nghiệp tư nhân, liên doanh và nhà nước đang hoạt động trên địa bàn của nước Việt nam. Dịch vụ được cung cấp thông qua hệ thống InfraCare của Fujitsu khẳng định rằng việc đầu tư của khách hàng dành cho cơ sở hạ tầng CNTT được bảo đảm bởi chất lượng của dịch vụ do các kỹ sư có nhiều năm kinh nghiệm và được đào tạo tại các cơ sở có uy tín. Hiệu quả của hệ thống CNTT được khẳng định qua việc cung cấp các dịch vụ hỗ trợ, khách hàng luôn luôn được hưởng lợi từ hệ thống máy tính đó. c. SI Business ( System Integration Business – Bộ phận tích hợp hệ thống) Trưởng bộ phận này là Mr. Shinichi Nakada Bộ phận tích hợp hệ thống có các chức năng chính sau: Khảo sát, phân tích nghiệp vụ, phân tích thiết kế, xây dựng các chuẩn lập trình, các Module thử nghiệm hệ thống Nghiên cứu công nghệ, khảo sát các thông tin thị trường khách hàng Tổng hợp kết quả báo cáo, đăng kí bản quyền phần mềm Xây dựng, kí kết và triển khai hợp đồng với khách hàng Đào tạo và hướng dẫn khách hàng Bộ phận này gồm hai thành viên là Phòng SDC và Phòng SCM Phòng SDC ( Software Development Center - Trung tâm phát triển phần mềm) Phòng SCM ( Supplied Chain Management - Giải pháp phần mềm dành cho doanh nghiệp) Phòng SCM gồm 2 bộ phận: ERP (Glovia): là bộ phận phụ trách sản phẩm Glovia (giải pháp quản lý tài nguyên doanh nghiệp như quản lý sản xuất, tài chính kế toán, phân phối…) dành cho các nhà máy sản xuất - manufacturer (chủ yếu của Nhật). Ví dụ khách hàng: Canon, Inax, Meiko… HRS( Human Resource Solution): là bộ phận phát triển và phụ trách sản phẩm Ez - Manage. Đây là giải pháp quản lý nhân sự, giờ  làm, tính lương. d. Sale Business ( Bộ phận kinh doanh) Bộ phận này có 3 người điều hành chính là Mr. Akashi Yuguchi, Mr. Hironobu Haruta và Mr. Yoshitaka Kurihara Bộ phận kinh doanh có các chức năng và nhiệm vụ chính như sau: Thu thập, nghiên cứu và phân tích các thông tin về khách hàng và thị trường Lập kế hoạch, chiến lược marketing, phát triển thị trường Thiết lập các mối quan hệ với khách hàng, đối tác, nhà cung cấp, thiết lập các đại lý, văn phòng đại diện, phòng trưng bày Phân phối sản phẩm tới khách hàng Quản lí hệ thống hỗ trợ khách hàng, đào tạo, hỗ trợ khách hàng Bộ phận kinh doanh cũng được chia làm 2 mảng chính: JOC Sale Business (Japanese Oriented Companies Sale Business - Mảng kinh doanh với các công ty Nhật) Non JOC Business (Non Japanese Oriented Companies Business - Mảng kinh doanh với các công ty không phải của Nhật). Mảng này chủ yếu làm với các cơ quan của Việt Nam, chính phủ và phụ trách kênh phân phối sản phẩm e. Finance & ADM (Bộ phận tài chính và quản trị) Điều hành bộ phận này là Mr. Yoshitaka Kurihara Bộ phận này có nhiệm vụ chính: Thực hiện các chức năng kế toán, lập và theo dõi sổ sách kết toán, hỗ trợ các phòng ban về các thủ tục hành chính Quản lí các công văn và các tài liệu đi và đến, hồ sơ công ty Giúp đỡ ban giám đốc lập và thực hiện lịch làm việc, tổ chức các cuộc họp, hội thảo Quản lí dấu, chữ kí và các giao dịch của công ty Tuyển chọn và quản lí nhân sự f. Telecom Điều hành bộ phận này là Mr. Nonoda Thu thập và nghiên cứu các thông tin về thị trường như thông tin về giá cả, khách hàng, đối thủ cạnh tranh, về xu thế thị trường. Theo dõi, điều hành, hướng dẫn các hoạt động giao dịch kinh doanh, xuất nhập khẩu của công ty Đưa ra các thông tin chiến lược về Marketing, nhận và gửi hàng theo yêu cầu, tổ chức hội trợ, triển lãm Quản lí các thông tin về nguồn vốn ODA 1.2.3. Các sản phẩm và dịch vụ 1.2.3.1. Các sản phẩm a. Sản phẩm máy tính Dòng sản phẩm PCBA Dòng sản phẩm PWB Máy chủ Máy quét Máy điện toán Thiết bị lưu trữ ngoài – ETERNUS Thiết bị lưu trữ quang từ - DyNaMO b. Sản phẩm phần mềm Phần mềm FAMS Phần mềm kế toán EZ – Accounting Phần mềm tính giờ làm EZ – Manage Phần mềm trợ giúp tác nghiệp EZ - Procure c. Viễn thông Dây chuyền sản xuất Dòng sản phẩm FRX Sản phẩm FLX150/600 Sản phẩm FLX 2500A Sản phẩm FLX 600A d. Thiết kế website Để thu hút đúng đối tượng trên thị trường, trang không chỉ trông bắt mắt, mà còn phải có tính chức năng và đáp ứng được nhu cầu của khách hàng. Bạn cần một trang web tải nhanh, thân thiện với người sử dụng và tương thích với các trình duyệt phổ biến. Trang web cần phải gây được ấn tượng đầu tiên mạnh mẽ cho người xem, thu hút mỗi quan tâm của họ và khiến họ lựa chọn bạn. Với các kỹ sư phát triển tài năng, chuyên nghiệp, Fujitsu Việt Nam sẽ thiết kế website với tất cả mọi thứ bạn cần để khai thác thế mạnh của Internet, khiến cho người đọc hứng thú tìm hiểu sâu hơn về: Nhiệm vụ của công ty bạn. Giúp bạn xác định đối tượng. Tạo ra hình thức và sự cảm nhận theo nhu cầu cụ thể của bạn. Khiến cho trang web luôn sinh động và bắt mắt người truy cập. Các Website công ty đã xây dựng có thể kể đến như là: Website của Viện Hán Nôm Website mua bán trực tuyến của siêu thị Seiyu Website Hà Nội Golf Và một số website khác nữa… 1.2.3.2. Các dịch vụ a. Dịch vụ tích hợp hệ thống Thiết kế và triển khai các mạng LAN, WAN, VPN. Với phương châm bảo mật, tốc độ và phù hợp với chi phí thấp và tạo điều kiện dễ dàng cho quản trị hệ thống mạng. Cài đặt hoàn toàn trên Internet, hệ thống truy cập thư điện tử với máy chủ proxy. (Dễ kiểm soát, mức độ bảo mật toàn cao, chia sẻ modem và đường điện thoại để giảm chi phí Internet). Hỗ trợ nghiệp vụ kiếm tính hệ thống, cải thiện chức năng điều hành với giải pháp hiệu quả như: hệ thống làm việc cộng tác sử dụng công nghệ TeamWare và Microsoft Back Office. Tích hợp hệ thống thư điện tử văn phòng, quản lý tài liệu và hệ thống cơ sở tri thức. Hệ thống tích hợp MRP quản lý sản phẩm với chức năng dự báo tình hình vật liệu, lên kế hoạch sản xuất (Mô hình client - server, n - tiers hoặc thin client). Phát triển các ứng dụng B2C và B2B và tích hợp chúng với hệ thống của khách hàng như: hỗ trợ bán hàng, bàn trợ giúp, hệ thống quản lý mua bán, phục vụ và đặt phòng khách sạn, hệ thống đặt vé máy bay. Chuyển đối dữ liệu từ tất cả các nguồn dữ liệu khác nhau sang dữ liệu phương tiện Internet để thuận tiện trong việc thiết lập chỉ mục văn bản. Nghiên cứu và phát triển giải pháp thin client cho tất cả các ứng dụng đang tồn tại dưới mô hình existing client - server. b. Dịch vụ quản lý cơ sở hạ tầng công nghệ thông tin - Infra Care Ngày nay, rất nhiều các doanh nghiệp sử dụng các hệ thống máy tính để điều hành toàn bộ các công việc. Nhưng thật không may là có rất nhiều các vấn đề về máy tính xảy ra mà không được dự báo trước. Không ai có thể ước lượng được chi phí cho việc bảo trì và sửa chữa những sự cố đó. Những sự cố như vậy không chỉ làm đau đầu các nhà quản lý mà còn là nguyên nhân gây nên sự mất ổn định trong công việc kinh doanh của doanh nghiệp. Với mục tiêu chính là giải quyết các vấn đề của khách hàng, dựa trên các chính sách tổng thể của tập đoàn Fujitsu, Fujitsu Việt nam giới thiệu một dịch vụ mới với tên gọi: "Chăm sóc và quản lý cơ sở hạ tầng CNTT - InfraCare" cho các cá nhân, doanh nghiệp tư nhân, liên doanh và nhà nước đang hoạt động trên địa bàn của nước Việt nam. Dịch vụ được cung cấp thông qua hệ thống InfraCare của Fujitsu khẳng định rằng việc đầu tư của khách hàng dành cho cơ sở hạ tầng CNTT được bảo đảm bởi chất lượng của dịch vụ do các kỹ sư có nhiều năm kinh nghiệm và được đào tạo tại các cơ sở có uy tín. Hiệu quả của hệ thống CNTT được khẳng định qua việc cung cấp các dịch vụ hỗ trợ, khách hàng luôn luôn được hưởng lợi từ hệ thống máy tính đó. Khi đăng ký sử dụng dịch vụ, chắc chắn khách hàng sẽ hài lòng với dịch vụ chất lượng cao, hiệu quả trong chi phí, phục vụ nhanh gọn và thân thiện đảm bảo giải quyết hiệu quả các vấn đề về máy tính. c. Các giải pháp về tài chính và ngân hàng Cung cấp dịch vụ cho các nhu cầu công nghệ thông tin của một số lượng lớn các thể chế tài chính bao gồm ngân hàng bán lẻ, đoàn thể và ngần hàng đầu tư, công ty đầu tư tín thác, các công ty quỹ chung và sở giao dịch chứng khoán. Cung cấp dịch vụ tư vấn và giải pháp. Các chuyên gia tư vấn của công ty sẽ làm việc cùng đội ngũ nhân viên của khách hàng trong chu kỳ dự án để đánh giá, lên kế hoạch, phát triển và khai thác các sản phẩm, dịch vụ và các quy trình công việc. Hỗ trợ hàng loạt các sản phẩm thích hợp với nhu cầu của môi trường Ngân hàng: Ngân hàng Tại nhà, Ngân hàng Internet, Ngân hàng di động v.v... d. Dịch vụ đa phương tiện Mang đến cho khách hàng các giải pháp sáng tạo hoàn chỉnh, từ in ấn tới trang web tới các CD-ROM năng động. Với một đội ngũ các nhà thiết kế đồ hoạ tài năng và dày dạn kinh nghiệm, luôn tận tâm theo kịp sự phát triển nhanh chóng của công nghệ, Nhóm Thiết kế Multimedia của Fujitsu mang đến cho khách hàng sự sáng tạo những vật liệu chất lượng hàng đầu. Cùng với việc cung cấp cho khách hàng những sản phẩm chất lượng cao nhất trong lĩnh vực phát triển trang web, nhóm thiết kế Multimedia của Fujitsu mang đến kinh nghiệm và kiến thức về một studio thiết kế đồ hoạ thành công. e. Dịch vụ đào tạo Cung cấp các dịch vụ đào tạo phạm vi rộng từ seminar, công nghệ truyền dẫn trong hệ thống đào tạo trực tuyến. Hàng năm FCSV trực tiếp đào tạo các khoá học về công nghệ thông tin cho các nhân viên IT văn phòng của Việt nam thông qua các khoá đào tạo AOTS. Trong đó bao gồm cả chương trình đào tạo bao gồm các mục sau: Hệ thống thông tin thanh toán hiện đại. Đào tạo sản phẩm phần mềm Fujitsu. Các chương trình theo mô hình Client Server và n-tiers. Thiết kế và phát triển các ứng dụng Internet. 1.2.4. Các hoạt động xã hội của công ty TNHH Fujitsu Việt Nam Chương trình học bổng châu Á Thái Bình Dương (FAPSP) Hỗ trợ thành lập Trung tâm đào tạo CNPM cho Bộ Khoa học Công nghệ và Môi trường (đổi tên thành MOST) năm 1994. Hỗ trợ cải thiện xoá mù chữ thông qua khẩu hiệu “Terakoya Movement” trong việc hợp tác với đoàn thanh niên của tỉnh Thừa Thiên Huế và hội liên hiệp phụ nữ của Nam Đàn, Tỉnh Nghệ An năm 1996. Tài trợ xây dựng trường trung học cơ sở Phụng Châu thuộc xã Phụng Châu, huyện Chương Mỹ, tỉnh Hà Tây năm 1998. Tài trợ xây dựng trường trung học cơ sở Hoà Lợi thuộc xã Hoà Lợi, huyện Châu Thành, tỉnh Trà Vinh năm 1998. Trồng rừng tại tỉnh Đồng Nai năm 1999. Tài trợ thiết bị làm việc bao gồm máy tính cá nhân, màn hình Plasma cho văn phòng chính phủ Việt nam vào năm 1997 và năm 1999 Học bổng Fujitsu dành cho sinh viên các trường đại học tại Hà nội và Thành phố Hồ Chí Minh từ năm 2003. 6 trường được nhận tài trợ học bổng của Fujitsu bao gồm: Đại học Bách khoa Hà nội Khoa CNTT và khoa Điện tử Viễn thông Đại học Quốc gia Hà nội Khoa Công nghệ Đại học kinh tế quốc dân Khoa Tin học kinh tế Đại học Bách khoa Thành phố Hồ Chí Minh Khoa CNTT và Khoa Điện tử Viễn thông Đại học Khoa học tự nhiên Thành phố Hồ Chí Minh Khoa CNTT Đại học Kinh tế Thành phố Hồ Chí Minh Khoa toán Phương hướng phát triển và kinh doanh của công ty TNHH Fujitsu Việt Nam trong năm 2008 Công ty Fujitsu sẽ tiếp tục tập trung vào kinh doanh trong lĩnh vực công nghệ thông tin với các định hướng chính sau: Mở rộng thị phần các sản phẩm Fujitsu tại Việt Nam, đặc biệt phát triển các kênh phân phối. Hỗ trợ các công ty Nhật mới đến đầu tư tại Việt Nam, phát triển hệ thống công nghệ thông tin cho hoạt động của các doanh nghiệp này Phát triển gia công phần mềm và đào tạo nhân lực: Hiện nay, Nhật Bản đang thiếu trầm trọng nguồn nhân lực cho phát triển phần mềm và phải chịu chi phí nhân công cao. Chính vì vậy, rất nhiều công ty có kế hoạch xây dựng các trung tâm phát triển phần mềm ở nước ngoài trong tương lai gần. Từ quan điểm này, công ty TNHH Fujitsu Việt Nam sẽ mở rộng hoạt động kinh doanh gia công phần mềm, đánh giá cao sự cần cù, thông minh trong lĩnh vực khoa học tự nhiên của người Việt Nam. Để có thể phát triển hoạt động kinh doanh này, công ty sẽ đào tạo các “kỹ sư cầu nối” vừa giỏi chuyên ngành công nghệ thông tin, vừa thông thạo tiếng Nhật làm cầu nối giữa các khách hàng Nhật Bản và với kỹ sư của công ty tại Việt Nam. Hợp tác với các trường Đại học của Việt Nam trong việc đào tạo nguồn nhân lực Công nghệ thông tin. PHÒNG GIẢI PHÁP PHẦN MỀM NHÂN SỰ (HUMAN RESOURCE SOLUTION DEPARTMENT) Chức năng, nhiệm vụ chính của phòng giải pháp phần mềm nhân sự Khảo sát, nghiên cứu hoạt động của các doanh nghiệp có yêu cầu sử dụng sản phẩm EZ Manage – Sản phẩm phần mềm quản lý nhân sự, tính giờ làm, tính lương Phân tích nghiệp vụ, phân tích thiết kế, xác định các chuẩn lập trình, xây dựng các module mẫu, tiến hành tích hợp thiết lập hệ thống Tiến hành thử nghiệm hệ thống, viết các tài liệu liên quan, triển khai hệ thống tại doanh nghiệp Hỗ trợ, hướng dẫn và đào tạo khách hàng Tiếp nhận giải đáp các thắc mắc từ phía khách hàng, đưa ra các giải pháp khắc phục lỗi trong quá trình vận hành hệ thống Phân công cán bộ chuyên trách theo từng dự án đảm bảo quá trình theo dõi, kiểm soát thường xuyên sản phẩm tại doanh nghiệp… Sản phẩm đặc trưng Hệ thống EZ - Manage là một giải pháp quản lý thời gian hoàn chỉnh, ứng dụng trên nền Intranet với các chức năng: quản lý nguồn nhân lực, quản lý lương, quản lý thời gian làm việc. Hệ thống có thể kiểm toán, giám sát giờ làm thực cũng như tất cả các hoạt động bên trong và bên ngoài của một tổ chức. Các thông tin này sẽ được cung cấp cho một hệ thống tính tiền lương. Các thông tin về nghỉ phép, làm thêm giờ, ngày lễ, có thể được điều chỉnh bằng tay hoặc được cài đặt trước đó. EZ - Manage loại bỏ những khâu xử lý thừa của người lao động thay vào đó hệ thống tăng cường việc quản lý bằng chức năng quản lý nguồn lực. Với các thông tin phổ biến được áp dụng cho tất cả các chức năng quản lý. Tất cả các thông tin về nhân viên được lưu trong dữ liệu Master và được sử dụng cho chức năng quản lý nguồn nhân lực. Tiền lương và thời gian làm việc của nhân viên được tình toán tự động thông qua các báo cáo được phát sinh hàng tháng. Với các chức năng quản lý trực tuyến, nhà quản lý sẽ không cần phải thuê nhân viên giám sát quá trình làm việc của công nhân, kiểm tra thời gian làm việc và tính lương cho công nhân. Nhiệm vụ của Công ty trách nhiệm hữu hạn Fujitsu Việt nam là đảm bảo khả năng tăng cường tác nghiệp tối đa. EZ - Manage là một dịch vụ ứng dụng thương mại và công nghiệp cung cấp các chức năng dễ sử dụng, tích hợp trên nền webbased sử dụng cơ sở dữ liệu Microsoft SQL phiên bản chuẩn với độ tin cậy, chức năng và bảo mật toàn diện. Thông qua EZ - Manage, các kỹ năng nghiệp vụ được tích hợp hoàn toàn và dễ sử dụng bằng cách tạo ra chức năng quản lý nguồn nhân lực hoạt động không ngừng nghỉ. Hệ thống quản lý nguồn lực trong EZ - Manage là gì? Ứng dụng EZ - Manage quản lý tất cả các khía cạnh liên quan đến bài toán quản lý nguồn lực bao gồm: các thông tin về nhân viên, thời gian làm việc của nhân viên, tình trạng công việc của nhân viên, tính lương cho nhân viên và tính mức thuế thu nhập của từng nhân viên. Hệ thống tính lương trong EZ - Manage là gì? Hệ thống tính lương trong EZ - Manage cho phép hợp lý hoá quy trình tính lương, có thể nhanh chóng tính lương hàng tháng, thuế và những đóng góp của công ty. Hệ thống tính lương trong EZ - Manage có thể thiết lập, cập nhật mức thuế cho từng nhân viên của công ty một cách hiệu quả và hài hoà. Những công cụ nào được sử dụng để phát triển EZ - Manage ? EZ - Manage được phát triển bởi các kỹ sư giàu kinh nghiệm và có kỹ năng nghiệp vụ của Fujitsu Việt nam, việc sử dụng các công cụ sắc bén như Microsoft SQL Server 2005, Crystal Report 9.0, ngôn ngữ lập trình C#. NET và Microsoft IIS. Cơ sở hạ tầng cần thiết để vận hành EZ - Manage? Một máy tính để bàn cấu hình trung bình: Pentium II, 500 Mhz, 256 MB RAM và hệ điều hành Microsoft Windows 2000 Professional. Cơ chế bảo mật của EZ - Manage? Tại Fujitsu Việt nam, chúng tôi kết chuyển nhằm cung cấp các dịch vụ với mức độ an toàn và độ tin cậy tuyệt đối để vận hành các chức năng tác nghiệp. Với mật khẩu bảo mật, chỉ có các nhân viên, những người được phép truy cập vào hệ thống mới có thể sử dụng các chức năng mức thấp của EZ - Manage. Và chỉ có người quản trị mới có thể cấp phép và thay đổi quyền truy cập. CHƯƠNG 2 CƠ SỞ PHƯƠNG PHÁP LUẬN VỀ QUY TRÌNH PHÂN TÍCH, THIẾT KẾ VÀ TRIỂN KHAI PHẦN MỀM TÍNH LƯƠNG MỘT SỐ VẤN ĐỀ VỀ THIẾT KẾ MỘT PHẦN MỀM Phần mềm và công nghệ phần mềm. 1.1. Khái niệm phần mềm Phần mềm (tiếng Việt còn được gọi là nhu liệu; tiếng Anh: software) là một tập hợp những câu lệnh được viết bằng một hoặc nhiều ngôn ngữ lập trình theo một trật tự xác định nhằm tự động thực hiện một số chức năng hoặc giải quyết một bài toán nào đó. Có thể nói phần mềm là linh hồn của máy tính. Chức năng của nó là chuyển đổi dữ liệu thô thành những thông tin hữu ích. Nó cho chúng ta khả năng sử dụng máy tính trong nhiều lĩnh vực. Phần mềm được định nghĩa là một tập hợp các chỉ thị điều khiển máy tính xử lý dữ liệu và kết xuất thông tin. Những chỉ thị này được gọi là “chương trình” (program). Bản chất của chương trình là một lịch trình thực hiện một công việc nào đó. Một chương trình máy tính là một tập hợp các chỉ thị điều khiển máy tính thực hiện một tác vụ một cách tuần tự từng bước một. Phần mềm được chia thành 2 loại: phần mềm hệ thống và phần mềm ứng dụng. Phần mềm hệ thống dùng để vận hành máy tính và các phần cứng máy tính, ví dụ như các hệ điều hành máy tính Windows XP, Linux, Unix, các thư viện động của hệ điều hành, các trình điều khiển (driver), phần sụn (firmware) và BIOS. Đây là các loại phần mềm mà hệ điều hành liên lạc với chúng để điều khiển và quản lý các thiết bị phần cứng. Phần mềm hệ thống gồm 4 loại: Hệ điều hành là tập hợp các chương trình có chức năng điều khiển, quản lý và giám sát sự hoạt động của các thiết bị phần cứng đồng thời tạo ra môi trường thích hợp cho các phần mềm hoạt động và đảm bảo khai thác tối ưu các tác nghiệp của hệ thống Các chương trình tiện ích là các phần mềm mở rộng, bổ sung thêm các chức năng cho hệ điều hành để giúp tạo sự thuận tiện cho người dùng cũng như nâng cao tình tối ưu cho việc khai thác tài nguyên hệ thống Chương trình điều khiển thiết bị là các phần mềm giúp hệ điều hành có thể nhận biết và điều khiển hoạt động của các thiết bị phần cứng Chương trình dịch là chương trình có chức năng dịch các chương trình viết bằng ngôn ngữ thuật toán sang ngôn ngữ máy đề máy tính có thể hiểu, xử lý được và ngược lại: dịch lại kết quả xử lý của máy tính sang ngôn ngữ bậc cao và chuyển tới người dùng. Phần mềm ứng dụng để người sử dụng có thể hoàn thành một hay nhiều công việc nào đó,._. ví dụ như các phần mềm văn phòng (Microsoft Offices, Lotus 1-2-3, FoxPro), phần mềm doanh nghiệp, phần mềm giáo dục, cơ sở dữ liệu, phần mềm trò chơi, chương trình tiện ích. Phần mềm năng suất giúp nâng cao năng suất và hiệu quả làm việc của người dùng Phần mềm kinh doanh là phần mềm có chức năng quản lý các hoạt động, các giao dịch phát sinh trong quá trình hoạt động của các phân xưởng sản xuất hàng hoá dịch vụ Phần mềm giáo dục, tham khảo là phần mềm giúp cung cấp những kiến thức, thông tin cho người dùng về 1 lĩnh vực nào đó. Phần mềm giải trí là phần mềm người dùng thư giãn giải trí. Theo Tiến sỹ Roger Pressman, một chuyên gia về công nghệ phần mềm của Mỹ thì: “Phần mềm là tổng hợp các yếu tố sau: các chương trình máy tính, các cấu trúc dữ liệu cho phép các chương trình xử lý các thông tin thích hợp, các tài liệu mô tả phương thức sử dụng các chương trình ấy”. Khái niệm về phần mềm của Tiến sỹ Roger Pressman đã được nhiều nhà khoa học đánh giá là một khái niệm chính xác và đầy đủ cả về hình thức cũng như những nội dung cần phản ánh về phần mềm. 1.2. Công nghệ phần mềm Công nghệ phần mềm hay kỹ nghệ phần mềm (tiếng Anh: software engineering) là sự áp dụng một cách tiếp cận có hệ thống, có kỷ luật, và định lượng được cho việc phát triển, hoạt động và bảo trì phần mềm. Ngành học kỹ nghệ phần mềm bao trùm kiến thức, các công cụ, và các phương pháp cho việc định nghĩa yêu cầu phần mềm, và thực hiện các tác vụ thiết kế phần mềm, xây dựng phần mềm, kiểm thử phần mềm (software testing), và bảo trì phần mềm. Kỹ nghệ phần mềm còn sử dụng kiến thức của các lĩnh vực như kỹ thuật máy tính, khoa học máy tính, quản lý, toán học, quản lý dự án, quản lý chất lượng, công thái học phần mềm (software ergonomics), và kỹ nghệ hệ thống (systems engineering). Trích dẫn một câu nói của Edsger Dijkstra về công nghệ phần mềm: “Khi máy tính chưa xuất hiện, thì việc lập trình chưa có khó khăn gì cả. Khi mới xuất hiện một vài chiếc máy tính chức năng kém thì việc lập trình bắt đầu gặp một vài khó khăn nho nhỏ. Giờ đây khi chúng ta có những chiếc máy tính khổng lồ thì những khó khăn ấy trở nên vô cùng lớn. Như vậy ngành công nghiệp điện tử không giải quyết khó khăn nào cả mà họ chỉ tạo thêm ra những khó khăn mới. Khó khăn mà họ tạo nên chính là việc sử dụng sản phẩm của họ”. 1.3. Sản phẩm phần mềm Đối tượng chính của công nghệ phần mềm là sản xuất ra các sản phẩm phần mềm. Sản phẩm phần mềm là các phần mềm được phân phối cho khách hàng cùng với các tài liệu mô tả phương thức cài đặt và cách thức sử dụng chúng. Sản phẩm phần mềm được chia thành 2 loại sản phẩm: Sản phẩm tổng quát: Đây là các phần mềm đứng riêng, được sản xuất bởi một tổ chức phát triển và bán vào thị trường cho bất kỳ khách hàng nào có khả năng tiêu thụ. Sản phẩm chuyên ngành: là phần mềm được hỗ trợ tài chính bởi khách hàng trong chuyên nghành. Phần mềm được phát triển một cách đặc biệt cho khách hàng qua các hợp đồng. Cho đến thập niên 1980 hầu hết sản phẩm phần mềm đều làm theo đơn đặt hàng riêng (đặc biệt hóa). Nhưng kể từ khi có PC tình hình hoàn toàn thay đổi. Các phần mềm được phát triển và bán cho hàng trăm ngàn khách hàng là chủ các PC và do đó giá bán các sản phẩm này cũng rẻ hơn nhiều. Microsoft là nhà sản xuất phần mềm lớn nhất hiện nay. Tầm quan trọng của phần mềm Phần cứng và phần mềm là hai yếu tố căn bản đối với máy tính điện tử. Phần cứng thường được ví như cơ thể còn phần mềm là bộ não điều khiển hoạt động của cơ thể đó. Các nhà sản xuất máy tính luôn tập trung nghiên cứu để thiết kế và sản xuất ra những máy tính có tốc độ xử lý nhanh hơn, có dung lượng bộ nhớ lớn hơn. Máy tính hiện nay đã đạt được dung lượng nhớ hàng nghìn mega byte, tốc độ xử lý hàng nghìn tỷ phép tính một giây. Gần đây lý thuyết về máy tính lượng tử đã làm chấn động thế giới vì nếu thành công trên thực tế, các máy tính sẽ có tốc độ xử lý và dung lượng nhớ cao hơn hiện tại rất nhiều, có thể đây sẽ là thế hệ thứ năm của máy tính điện tử. Trong cơn lốc thay đổi về cấu hình phần cứng, xã hội đánh giá vai trò của phần mềm như thế nào? Phần mềm vẫn là linh hồn cho máy tính điện tử và vai trò đó không bao giờ thay đổi. Máy tính mà không có phần mềm điều khiển thì chỉ là một tập hợp linh kiện điện tử, lợi ích mang lại cho người chủ không khác gì một đống sắt vụn. Giá tiền cho một phần mềm hệ điều hành WINDOWS của hãng MICROSOFT gần bằng giá tiền để mua một máy tính cấu hình khá cao là một minh chứng rõ ràng. Trong xã hội thông tin ngày nay, khả năng xử lý dữ liệu nhanh chóng, chính xác là yêu cầu số một và khả năng này của máy tính lại do phần mềm quyết định. Phần mềm chính là nhân tố tạo nên sự khác biệt trong việc xử lý thông tin giữa các tổ chức. Chức năng, tính thân thiện và quy trình xử lý thông minh chính là “chìa khóa” tạo nên sự thành công cho mỗi tổ chức. Sự phát triển của phần mềm Thời kỳ thứ nhất 1950-1960 Thời kỳ thứ hai 1960-1970 Thời kỳ thứ ba 1970-1990 Thời kỳ thứ tư 1990-2000 Xử lý theo lô Phần mềm đơn chiếc làm theo đơn đặt hàng Nhiều người dùng Thời gian thực Cơ sở dữ liệu Phần mềm thương mại Hệ thống phân tán Phần mềm thông minh Phần cứng rẻ Hiệu quả tiêu thụ Hệ thống để bàn Hướng đối tượng Hệ chuyên gia Mạng nơtơron Xử lý song song Bảng 2.1 – Các thời kỳ phát triển của phần mềm Trong những năm đầu phần cứng vạn năng đã trở thành thông dụng. Phần mềm lại được thiết kế theo đặt hàng cho từng ứng dụng và được phân phối khá hạn chế. Phần mềm sản phẩm mới còn trong thời kỳ ấu trĩ. Phần lớn các phần mềm đều được phát triển và cuối cùng được một hay một tổ chức sử dụng. Cũng bởi môi trường có tính cá nhân như vậy nên việc thiết kế là một tiến trình không tường minh được thực hiện trong đầu người lập trình và thường là không có tài liệu. Thời đại thứ hai của sự tiến hóa máy tính trải rộng giữa những năm 1960 cho đến cuối những năm 1970. Các hệ thống đa lập trình và đa người sử dụng đã đưa ra những khái niệm mới về thao tác người – máy. Các kỹ thuật tương tác mở ra một thế giới mới cho các ứng dụng và các mức độ mới về độ tinh vi cho cả phần cứng lẫn phần mềm. Các hệ thống thời gian thực có thể thu thập, phân tích và biến đổi dữ liệu từ nhiều nguồn khác nhau. Do đó kiểm soát được các tiến trình và sản xuất ra cái trong phần nghìn giây thay cho nhiều phút. Những tiến bộ trong lưu trữ trực tuyến dẫn tới thế hệ đầu tiên các hệ quản trị cơ sở dữ liệu. Thời đại thứ ba của tiến hóa hệ thống máy tính bắt đầu từ giữa những năm 1970 và tiếp tục cho tới nay. Hệ thống phân bố nhiều máy tính, mỗi máy thực hiện một chức năng và có sự tương tác, liên lạc với các máy khác và làm tăng độ phức tạp của các hệ thống dựa trên máy tính. Các mạng toàn cục và cục bộ, các liên lạc số giải thông cao và nhu cầu ngày một tăng về việc thâm nhập dữ liệu lập tức đã đặt ra những yêu cầu rất lớn cho người phát triển phần mềm. Thời đại thứ ba cũng còn được đặc trưng bởi tiến bộ và sự phổ cập sử dụng các bộ vi xử lý, máy tính cá nhân và các máy trạm để bàn mạnh. Bộ vi xử lý đã thúc đẩy một phạm vi rộng các sản phẩm thông minh – từ ô tô tới lò vi song, từ robot công nghiệp đến thiết bị chẩn đoán máu. Đến giữa những năm 1980, khi tỷ lệ tăng trưởng bán máy tính được san bằng thì số bán sản phẩm phần mềm vẫn tiếp tục tăng trưởng. Các doanh nghiệp thường tiêu nhiều tiền cho việc mua phần mềm chạy trên máy tính hơn là tiêu để mua chính máy tính Thời đại thứ tư trong phần mềm máy tính mới chỉ bắt đầu. Kỹ nghệ hướng đối tượng đang nhanh chóng thay thế nhiều cách tiếp cận phát triển phần mềm quy ước trong nhiều lĩnh vực ứng dụng. Các tác giả như Feigenbaum và McCoduck và Allman tiên đoán rằng máy tính “thế hệ thứ năm”, với kiến thức tính toán khác về cơ bản, và các phần mềm có liên quan của chúng sẽ cõ một ảnh hưởng sâu sắc tới sự cân bằng quyền lực chính trị và công nghiệp trên toàn thế giới. Chúng ta đã chứng kiến những kỹ thuật “thế hệ thứ tư” cho việc phát triển phần mềm đang làm thay đổi cách thức và trong đó một phần của cộng đồng phần mềm xây dựng lên chương trình máy tính. Hệ chuyên gia và phần mềm trí tuệ nhân tạo cuối cùng đã chuyển từ phòng thí nghiệm vào ứng dụng thực tế cho các bài toán trong phạm vi rộng trong thế giới thực. Phần mềm mạng nơtơron nhân tạo đã mở ra những khả năng lý thú để nhận dạng và thực hiện những khả năng xử lý thông tin kiểu con người. Ngôn ngữ thiết kế phần mềm Các thành phần của phần mềm được xây dựng bằng cách dùng một ngôn ngữ lập trình với vốn từ vựng hạn chế và một văn phạm hoàn toàn xác định. Do đó trước khi đi xây dựng phần mềm chúng ta phải nghiên cứu về ngôn ngữ thiết kế phần mềm. Ngôn ngữ thiết kế phần mềm được phát triển qua các loại sau : Ngôn ngữ máy: Ngôn ngữ máy là ngôn ngữ lập trình viết các lệnh dưới dạng sử dụng mã nhị phân, can thiệp trực tiếp vào trong các mạch điện tử. Chương trình viết bằng ngôn ngữ máy, máy sẽ hiểu và thực hiện được ngay không cần phải qua quá trình dịch Ngôn ngữ thời kỳ thứ nhất: Tiêu biểu nhất của ngôn ngữ thời kỳ thứ nhất là hợp ngữ. Các ngôn ngữ thời kỳ thứ nhất có đặc điểm là phụ thuộc rất mạnh vào từng máy tính điện tử cụ thể và mức độ trừu tượng của các chương trình thường rất thấp Ngôn ngữ thời kỳ thứ hai: Ngôn ngữ thời kỳ thứ hai được phát triển từ cuối những năm 1950 và đầu những năm 1960. Các ngôn ngữ thời kỳ thứ hai được đặc trưng bởi việc sử dụng bởi việc sử dụng một thư viện các chương trình phần mềm rất lớn được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau. Ngôn ngữ thời kỳ thứ ba: Ngôn ngữ lập trình thời kỳ thứ ba còn được gọi là ngôn ngữ lập trình hiện đại. Nét đặc trưng của các ngôn ngữ này là khả năng cấu trúc rất phong phú và các thủ tục mạnh. Các ngôn ngữ thời kỳ thứ ba có thể chia thành các nhóm: Ngôn ngữ cấp cao vạn năng mà ví dụ điển hình là ALGOL (Algorithmic Language). Đó là một ngôn ngữ lập trình rất phát triển, dùng để mô tả một cách hình thức các thuật toán. Ngôn ngữ này được phát triển với việc đưa ra các kết cấu thủ tục và định kiểu dữ liệu. ALGOL rất thông dụng ở Châu Âu nhưng lại không được phổ biến rộng rãi lắm ở Mỹ. Phiên bản được sử dụng rộng rãi nhất của ALGOL được gọi là ALGOL-60 và sau đó được phát triển với một sự cài đặt mạnh hơn trong ALGOL-68. Đặc trưng của hai phiên bản này là đưa vào khái niệm cấu trúc khối và cấp phát bộ nhớ động, giải thuật đệ quy. Trên cơ sở của ALGOL người ta đã sáng tạo ra các ngôn ngữ lập trình vạn năng khác như PL/1, PASCAL, MODULA-2, C và ADA có rất nhiều ứng dụng trong khoa học cũng như trong kinh tế và thương mại. PASCAL được phát triển từ những năm 1970 là ngôn ngữ lập trình có cấu trúc tiền định rất phong phú. PASCAL kế thừa từ ALGOL nhiều đặc trưng như cấu trúc khối, định kiểu dữ liệu, hỗ trợ đệ quy. MUDULA-2 là sự phát triển của PASCAL với việc phát huy các tính năng thông dụng của ngôn ngữ này. Ngôn ngữ lập trình C, lúc đầu được phát triển như một ngôn ngữ cho người cài đặt hệ điều hành. Hệ điều hành UNIX được cài đặt trong C. Đến nay, C là ngôn ngữ lập trình rất phát triển. Một số lượng lớn các sản phẩm phần mềm đã được thiết kế trong C như các ứng dụng nhúng, các phần mềm hệ thống, các kỹ nghệ phần mềm phức tạp chứa các tính năng mạnh làm cho nó trở nên mềm dẻo đáng kể. ADA là ngôn ngữ lập trình do Bộ Quốc Phòng Mỹ phát triển. Đây là ngôn ngữ chuẩn dùng cho các máy tính thời gian thực. Phần lớn các ngôn ngữ lập trình hiện đại sau này đều dựa trên các tư tưởng nền tảng của các ngôn ngữ này. Ngôn ngữ cấp cao hướng đối tượng – OLL (Object Oriented Language) Đây là các ngôn ngữ lập trình được xây dựng dựa trên các khái niệm sự vật hiện tượng và các thuộc tính, lớp và thành phần, toàn thể và bộ phận. Đó là các ngôn ngữ lập trình hướng đối tượng tiêu biểu như: C++, Object Pascal, Eiffel, JAVA, Visual Basic, Visual Foxpro… Các đặc trưng của phần mềm Phần mềm là phần tử hệ thống logic chứ không phải là hệ thống vật lí do đó nó có các đặc trưng khác với hệ thống phần cứng. Phần mềm có các đặc trưng sau đây: Phần mềm được phát triển hay được kỹ nghệ hóa, nó không được chế tạo theo nghĩa cổ điển. Trong mỗi sản phẩm phần mềm đều chứa một hàm lượng lao động quan trọng nhất là chất xám. Đó chính là trí tuệ và lao động trí óc của tất cả những thành viên trong dự án phần mềm từ nhà quản trị dự án, cán bộ phân tích thiết kế cho đến những người lập trình trực tiếp. Phần mềm tiêu thụ rất ít năng lượng và nguyên liệu thô. Phần mềm không bi khấu hao đi trong quá trình sử dụng. Phần mềm không bị ảnh hưởng bởi các yếu tố môi trường. Phần mềm chỉ bị trục trặc do những khiếm khuyết do thiết kế hoặc lập trình mà phần leons trong số này được phát hiện và sửa chữa ngay trong giai đoạn đầu khi phần mềm được đưa vào sử dụng. Phần mềm được xây dựng theo đơn đặt hàng, ít khi được lắp ráp từ những thành phần có sẵn. Phần mềm được xây dựng theo yêu cầu của các đơn vị khác nhau phải đáp ứng được những đặc điểm riêng về quy trình nghiệp vụ nên phải được thực hiện riêng rẽ. Tuy nhiên hiện nay trong nhiều lĩnh vực hoạt động xã hội các quy trình nghiệp vụ đã được chuẩn hóa, thống nhất theo mẫu chung nên thực tế hiện nay các nhà sản xuất phần mềm có thể xây dựng những bộ phận phần mềm theo chuẩn mực chung và khi cần sẽ điều chỉnh cho phù hợp với đặc điểm riêng theo yêu cầu của khách hàng. Vòng đời phát triển của phần mềm Để nghiên cứu về vòng đời phát triển của phần mềm, trước hết phải đi nghiên cứu cấu hình của phần mềm. Cấu hình của phần mềm không chỉ bao gồm các công đoạn từ khi lập kế hoạch đến đặc tả yêu cầu và thiết kế phần mềm để có chương trình làm việc và còn bao gồm cả cấu trúc dữ liệu và văn bản chương trình. Với cấu hình như vậy thì một phần mềm sẽ có vòng đời phát triển bắt đầu từ công nghệ hệ thống đến phân tích, thiết kế, mã hóa, kiểm thử và cuối cùng là bảo trì phần mềm. Ta có thể biểu diễn vòng đời phát triển của phần mềm bằng mô hình thác nước dưới đây: Hình 2.1 - Mô hình thác nước Công nghệ hệ thống: Phần mềm là một bộ phận của một hệ thống quản lý nói chung. Do đó công việc nghiên cứu phần mềm từ đầu phải được thiết lập yêu cầu cho mọi phần tử hệ thống và được đặt trong mối liên kết chặt chẽ với các thành phần khác của hệ thống như phần cứng, nhân tố con người, cơ sở dữ liệu…Công nghệ hệ thống và phân tích bao gồm việc thu thập yêu cầu ở mức hệ thống với một lượng nhỏ thiết kế và phân tích mức đỉnh Phân tích yêu cầu phần mềm: Tiến trình thu thập yêu cầu được tập trung và làm mạnh đặc biệt vào phần mềm. Để hiểu được bản chất của các chương trình phải xây dựng, kỹ sư phần mềm phải hiểu về lĩnh vực thông tin đối với phần mềm cũng như các chức năng cần có, hiệu năng và giao diện của phần mềm Thiết kế: Thiết kế phần mềm là một tiến trình nhiều bước tập trung vào bốn thuộc tính phân biệt của chương trình là: Cấu trúc dữ liệu Kiến trúc phần mềm Các thủ tục Các đặc trưng giao diện Tiến trình thiết kế dịch các yêu cầu thành một biểu diễn của phần mềm có thể được khẳng định về chất lượng trước khi giai đoạn mã hóa bắt đầu. Giống như các yêu cầu, việc thiết kế phải được lập tư liệu và trở thành một bộ phận của cấu hình phần mềm. Mã hóa: Thiết kế phải được dịch thành ngôn ngữ máy mà máy tính có thể đọc và hiểu được. Bước mã hóa thực hiện công việc này. Nếu thiết kế được thực hiện theo một cách chi tiết thì việc mã hóa có thể được thực hiện một cách máy móc. Khái niệm mã hóa ở đây khác với khái niệm mã hóa thông tin thành các ký hiệu để phân biệt các đối tượng Kiểm thử: Tiến trình kiểm thử tập trung vào phần logic bên trong của phần mềm, đảm bảo rằng tất cả các câu lệnh đều được kiểm tra nhằm phát hiện ra các lỗi và cho kết quả phù hợp với dữ liệu kiểm thử đưa vào Bảo trì: Sau khi bàn giao phần mềm cho khách hàng, chắc chắn nó sẽ phải có những thay đổi để hoàn toàn tương thích với các điều kiện quản lý của cơ sở thực tế (Sự thay đổi của hệ điều hành, hay thiết bị ngoại vi). Quá trình bảo trì còn xảy ra khi khách hàng yêu cầu nâng cao chức năng hay hiệu năng. Việc bảo trì phần mềm phải áp dụng lại các bước của dòng đời phát triển nói trên cho chương trình hiện tại chứ không phải là chương trình mới Vai trò của thiết kế phần mềm Thiết kế là cách biểu diễn phần mềm mà chất lượng đã được đã được xác nhận. Thiết kế là cách duy nhất để những người xây dựng phần mềm diễn dịch chính xác các yêu cầu cụ thể của khách hàng thành hệ thống phần mềm cuối cùng. Khi không có thiết kế, hệ thống được xây dựng sẽ không ổn định, ẩn chứa nhiều khả năng đổ vỡ, chất lượng của hệ thống cũng không được xác nhận cho đến khi kết thúc quá trình kiểm thử, lúc đó đã tốn rất nhiều công sức và chi phí mà thời gian còn lại của dự án rất ngắn, không đủ để điều chỉnh tất cả những khiếm khuyết Quy trình thiết kế phần mềm 8.1. Khảo sát hiện trạng và đặc tả yêu cầu Đây là quá trình xác định các dịch vụ hệ thống cần cung cấp và các ràng buộc đối với hệ thống, là giai đoạn nền tảng để thiết kế một phần mềm nói chung, phần mềm tính lương nói riêng. Giai đoạn này đòi hỏi sự phối hợp của kỹ thuật viên và khách hàng Quá trình thu thập này được định nghĩa là một tập hợp các hoạt động nhằm xác định các yêu cầu và đặc tả các yêu cầu đó. Trong đó, yêu cầu là các mô tả trừu tượng đến chi tiết về dịch vụ mà hệ thống cung cấp cũng như các ràng buộc đối với sự phát triển và hoạt động của nó. Các yêu cầu này sẽ giúp người dùng hệ thống nên rõ các dịch vụ hệ thống cung cấp cùng các ràng buộc trong hoạt động của nó. Với các kỹ sư hệ thống, làm rõ các yêu cầu sẽ là cơ sở quan trọng để xây dựng và thiết kế hệ thống mới Có 4 bước cơ bản trong quá trình thu thập yêu cầu, bao gồm: Nghiên cứu tính khả thi: Nhằm đi đến kết luận “Có nên phát triển hệ thống hay không?”, đánh giá xem yêu cầu của người dùng có được thỏa mãn bởi công nghệ về phần cứng cũng như phần mềm không. Nghiên cứu cũng sẽ xác định liệu hệ thống tương lai có đem lại hiệu quả kinh tế cho đơn vị cũng như nằm trong ngân sách có thể chi không Phân tích yêu cầu: Đây là quá trình tìm ra các yêu cầu của hệ thống thôngqua quan sát hệ thống hiện tại, thảo luận với người dùng, phân tích công việc. Những hoạt động trong giai đoạn này bao gồm: Hiểu biết lĩnh vực ứng dụng Thu thập yêu cầu Phân loại yêu cầu Xếp loại ưu tiên các yêu cầu Thẩm định yêu cầu Mục tiêu cuối cùng của bước này là cán bộ phân tích phải xác định đúng, đầy đủ và chính xác tất cả các yêu cầu của hệ thống làm căn cứ cho các bước sau Xác định yêu cầu: Hoạt động chuyển các thông tin được thu thập trong hoạt động phân tích thành những tài liệu phản ánh chính xác các yêu cầu người dùng Đặc tả yêu cầu: Mô tả chi tiết và chính xác các yêu cầu hệ thống, cụ thể hóa các yêu cầu đó. Đây cũng là căn cứ để nghiệm thu phần mềm sau này. Ngoài ra, nếu khách hàng chưa xác định được cụ thể các yếu tố đầu vào,quy trình xử lý van các yếu tố đầu ra hoặc người kỹ sư phần mềm cũng còn chưa chắc chắn về tính hiệu quả của một giải thuật thì sẽ cần làm bản mẫu phần mềm. Điều này thường gặp đối với các hệ thống lớn và phức tạp. Đây là một tiến trình mà kỹ sư phần mềm tạo ra một mô hình cho phần mềm cần phải xây dựng. Bản mẫu này sẽ là cơ sở để kỹ sư phần mềm cùng khách hàng đánh giá để tiếp tục phát triển đi đến sản phẩm cuối cùng 8.2. Thiết kế hệ thống Một thiết kế tối ưu là chìa khóa dẫn đến thành công của dự án. Nhưng không thể chuẩn hóa quá trình thiết kế theo bất kỳ một quy tắc nhất định nào. Thiết kế là một quá trình đòi hỏi tính sáng tạo, tinh tế và hiểu biết sâu sắc của kỹ sư thiết kế. Qúa trình thiết kế đòi hỏi cán bộ phân tích hệ thống hiểu rõ quy trình, cách thức truyền dữ liệu trong tổ chức, mối quan hệ giữa quy trình đó với công tác ra quyết định và quy trình đó giúp thực hiện các mục tiêu của hệ thống như thế nào. Đó là lý do giải thích mối quan hệ chặt chẽ giữa quá trình phân tích và thiết kế hệ thống. Thiết kế phần mềm cung cấp cách biểu diễn phần mềm có thể được xác nhận về chất lượng, là cách duy nhất mà chúng ta có thể chuyển hóa một cách chính xác các yêu cầu của khách hàng thành sản phẩm hay hệ thống phần mềm cuối cùng. Không có thiết kế có nguy cơ đưa ra một hệ thống không ổn định-một hệ thống sẽ thất bại. Thiết kế tốt là bước quan trọng đầu tiên để đảm bảo chất lượng phần mềm. Mục tiêu của quá trình thiết kế là xây dựng một bản sơ đồ thiết kế chương trình.Các đầu mối trong bản thiết kế thể hiện các thực thể như quá trình xử lý, các chức năng chương trình, các đường nối kết thể hiện quan hệ giữa các thực thể như gọi đến chức năng, sử dụng chương trình con. Qúa trình thiết kế là một dây chuyền các chuyển đổi. Các kỹ sư thiết kế không đưa tới kết quả cuối cùng ngay mà phải phát triển thông qua nhiều phiên bản khác nhau.Qúa trình thiết kế là sự hoàn thiện và chi tiết hóa các chi tiết trước Quá trình thiết kế còn là sự phát triển một số mô hình của hệ thống theo nhiều mức độ trừu tượng khác nhau. Khi một hệ thống được phân tích, các lỗi và những chỗ bị bỏ sót trong các giai đoạn trước sẽ được phát hiện van làm hoàn thiện dần qua các bản thiết kế Tài liệu đặc tả là kết quả đầu ra của các hoạt động thiết kế. Những đặc tả này có thể là những mô tả khái quát để làm rõ các yêu cầu người dùng hoặc là những diễn giải cách thức thực hiện một yêu cầu nào đó. Trong các giai đoạn sau của quá trình thiết kế, các đặc tả sẽ càng chi tiết hơn. Kết qủa cuối cùng của quá trình này là các đặc tả chi tiết về thuật toán và cấu trúc dữ liệu sẽ được cài đặt. Các hoạt động thiết kế được thực hiện song song với nhau, gồm các công việc: Thiết kế kiến trúc: Phân tích các chương trình con của phần mềm và xác định các mối quan hệ giữa các phân hệ Đặc tả khái quát: Các chương trình con sẽ được mô tả chung về yêu cầu chức năng cũng như các ràng buộc Thiết kế giao diện: Thiết kế giao diện giữa các chương trình con với nhau, mô tả cần rõ ràng, giúp người đọc hiểu cách dùng các chương trình con mà không cần hiểu cách thực hiện các chức năng trong đó Thiết kế các phân hệ: Thiết kế việc phân chia dịch vụ của các chương trình con van giao diện của các dịch vụ đó Thiết kế cấu trúc dữ liệu: Thiết kế và mô tả cấu trúc dữ liệu Thiết kế thuật toán: Thiết kế và mô tả các thuật toán được sử dụng trong phần mềm 8.3. Lập trình và lựa chọn ngôn ngữ lập trình sử dụng Bước lập trình là một tiến trình dịch thiết kế chi tiết thành chương trình bao gồm các tập hợp các dòng mã lệnh máy tính có thể hiểu được. Mỗi ngôn ngữ lập trình có những giới hạn nhất định do vậy dựa trên các đặc trưng của ngôn ngữ , chúng ta sẽ chọn ngôn ngữ lập trình phù hợp với chương trình ứng dụng tránh lựa chọn sai dẫn đến phải thay đổi ngôn ngữ hoặc sửa đổi thiết kế hệ thống Mỗi ngôn ngữ hỗ trợ một kiểu dữ liệu. Tất cả những ngôn ngữ đều hỗ trợ hằng, biến, hằng số dùng trong dữ liệu số van dữ liệu kí tự. Một số ít ngôn ngữ hỗ trợ các dữ liệu logical, boolean, pointer, object, bit, date/ time hoặc kiểu dữ liệu tự định nghĩa.Có bốn mức kiểm tra kiểu dữ liệu để đảm bảo sự phù hợp của dữ liệu được nhập vào với kiểu dữ liệu được định nghĩa trong các phép toán học và toán tử logic, từ không kiểm tra đến kiểm tra chặt Cấu trúc ngôn ngữ là yếu tố quyết định thao tác gì và thao tác như thế nào trên dữ liệu. Chúng cung cấp các khả năng xử lý tuần tự, lặp, cách thức lựa chọn các cấu trúc dữ liệu. Nói chung, ngôn ngữ càng phong phú thì nó càng có nhiều cấu trúc. Module hóa là cách thức tạo ra chương trình con và hàm. Các ngôn ngữ khác nhau ở cách hỗ trợ chương trình con van dữ liệu của nó.Trước hết, khả năng định nghĩa chương trình con, hàm là rất quan trọng để có được các đặc trưng chương trình mong muốn. Thứ hai, dữ liệu trong các module được quản lý như thế nào là điều rất quan trọng. Dữ liệu có thể là cục bộ hoặc tổng thể. Khả năng có được dữ liệu cục bộ rất quan trọng trong việc che giấu thông tin van giảm thiểu việc liên kết. Ngoài ra, quản lý bộ nhớ còn giúp chương trình phân bổ bộ nhớ máy tính khi cần. Với những ngôn ngữ không cung cấp khả năng này, chương trình có thể bị treo do không có khả năng cấp, phát bộ nhớ lúc cần thiết. Ngoài ra, công nghệ phần mềm ngày nay còn được trợ giúp bởi công cụ mới CASE-phần mềm kỹ sư trợ giúp máy tính. Công cụ này không những hỗ trợ trong quá trình thiết kế mà còn hỗ trợ lập trình, sinh mã van nhiều công đoạn của quá trình sản xuất phần mềm 8.4. Kiểm tra và đảm bảo chất lượng phần mềm Kiểm tra và đảm bảo chất lượng phần mềm là quá trình đánh giá xem chương trình có phù hợp với những đặc tả yêu cầu và đáp ứng mong đợi của khách hàng không. Công việc này được tiến hành ở mọi công đoạn phát triển phần mềm: giai đoạn phân tích-xét duyệt đặc tả yêu cầu, giai đoạn thiết kế-xét duyệt đặc tả thiết kế, giai đoạn mã hóa-kiểm thử chương trình. Quá trình này phải được tiến hành thường xuyên sau mỗi giai đoạn sản xuất phần mềm . Kiểm tra và đảm bảo chất lượng phần mềm bắt đầu từ khi đánh giá khảo sát yêu cầu người dùng đến khi thiết kế, lập trình và kết thúc khi kiểm thử phần mềm.Quá trình này liên quan đến hai mục đích khác nhau, đó là phần mềm đáp ứng nhu cầu khách hàng và quá trình sản xuất không có sai sót. Theo đó, giai đoạn này cũng được chia thành hai hoạt động riêng rẽ là kiểm tra phần mềm (software inspections) nhằm phát hiện các lỗi khi sản xuất chương trình và kiểm thử phần mềm (software testing) nhằm tìm các sai sót trong khi vận hành chương trình. Quá trình kiểm tra được tiến hành ở mọi công đoạn phát triển của phần mềm và không thực hiện trên chương trình Quá trình kiểm thử được thực hiện ngay trên chương trình, cần có mã nguồn từ đó sẽ xác định được các lỗi lập trình, đánh giá được tính hiệu quả của phần mềm và đây cũng là cách duy nhất để kiểm tra các yêu cầu phi chức năng. Công việc này do bộ phận Kiểm thử (Test) thực hiện bao gồm các công việc: Tham gia phân tích yêu cầu khách hàng Lập kế hoạch test Xây dựng tiêu chuẩn nghiệm thu Xây dựng hướng dẫn test (bản thiết kế test, kịch bản test) Thực hiện test Hỗ trợ các vấn đề liên quan đến test Báo cáo và tổng hợp kết quả test Lập và lưu các hồ sơ liên quan đến test Thu thập và kiểm soát các dữ liệu liên quan đến các hoạt động test Tính toán và phân tích các chi tiêu liên quan đến các hoạt động test 8.5. Triển khai và đào tạo sử dụng Quá trình triển khai được xem như một giai đoạn quan trọng tiếp sau các giai đoạn khảo sát, phân tích và thiết kế phát triển hệ thống đã được đề cập ở trên đây. Nhiều người dùng vẫn coi triển khai là một phần việc tất yếu đi kèm khi chuyển giao phần mềm , nên khi đánh giá thường chỉ quan tâm tới các chức năng và tính năng của hệ thống mà quên một điều quan trọng rằng đó là những tiềm năng sẵn có trong hệ thống. Để đưa hệ thống cùng toàn bộ tính năng ưu việt của nó vào ứng dụng trong thực tế thì chỉ có quá trình triển khai tốt mới có thể biến các tiềm năng đó thành hiện thực. Nói cách khác, các tính năng sẵn có trong phần mềm chỉ là điều kiện “cần”, còn quy trình triển khai hợp lý, khoa học mới là điều kiện “đủ” để ứng dụng thành công hệ thống. Đào tạo người sử dụng là một hoạt động không thể thiếu trong quá trình triển khai bất kỳ một phần mềm nào. Mục tiêu của công tác này là người dùng được đào tạo để điều hành hệ thống mới, thông báo một số tình huống có thể gặp lỗi khi vận hành sản phẩm để người dùng biết cách xử trí. Đào tạo không chỉ bao gồm các hoạt động nhập dữ liệu, lập báo cáo mà còn phải giúp người dùng hiểu được cách thức vận hành của phần mềm. 8.6. Bảo trì hệ thống Không thể thiết lập một hệ thống đáp ứng mọi thay đổi về yêu cầu. Theo thời gian, các yêu cầu người dùng trước đây đã trở nên lỗi thời và cần phải thay đổi chương trình để đáp ứng những yêu cầu mới. Môi trường hệ thống cũng có thể thay đổi khi phần cứng mới được lắp đặt, phát sinh các lỗi mới trong quá trình sử dụng. Quá trình thay đổi hệ thống sau khi chuyển giao và sử dụng được gọi là bảo trì phần mềm. Sự thay đổi có thể chỉ là sửa lỗi lập trình, nhưng cũng có thể cần thay đổi lại thiết kế hệ thống. Có 4 hoạt động trong giai đoạn bảo trì bao gồm: Bảo trì hiệu chỉnh: từ các thông báo lỗi trong quá trình vận hành chương trình , kỹ sư phần mềm sẽ phân tích và hiệu chỉnh các lỗi này. Bảo trì tiếp hợp: phát sinh khi có sự thay đổi thường xuyên của môi trường như phần cứng, hệ điều hành hay các thiết bị ngoại vi được nâng cấp và thay đổi. Đây là hoạt động sửa đổi phần mềm để thích ứng được với những thay đổi của môi trường. Bảo trì hoàn thiện: khi một phần mềm đã hoàn thiện được đưa vào sử dụng, các yêu cầu về những khả năng mới, các thay đổi những chức năng đã có…, được người dùng gửi đến. Để thỏa mãn các yêu cầu kiểu đó cần tiến hành bảo trì hoàn thiện. Hoạt động này chiếm hầu hết các công sức tiêu tốn cho việc bảo trì phần mềm. Bảo trì phòng ngừa: Phần mềm cần được thay đổi để cải thiện tính năng bảo trì hay độ tin cậy trong tương lai hoặc để cung cấp một nền tảng tốt hơn cho những mở rộng sau này Quá trình bảo trì thường xuất phát từ một tập hợp các yêu cầu thay đổi của người dùng hệ thống. Chi phí và ảnh hưởng của sự thay đổi này được đánh giá. Khi những thay đổi này được chấp nhận, kế hoạch phát triển hệ thống sẽ được xây dựng. Quá trình bảo trì sẽ bao gồm các bước sau: Yêu cầu thay đổi Phân tích các tác động Lập kế hoạch sửa đổi Triển khai sửa đổi Vận hành hệ thống Hình 2.2 – Các bước của quá trình bảo trì Công nghệ bảo trì đưa ra chìa khóa để cải tiến năng suất bảo trì. Với những thiết kế cẩn thận, sự cung cấp tài liệu kỹ lưỡng và một loạt các phương pháp kiểm tra hoàn thiện, các lỗi sẽ dễ dàng được chẩn đoán và hiệu chỉnh khi chúng xảy ra, phần mềm sẽ dễ sửa. Thời gian chi phí cho mỗi yêu cầu bảo trì sẽ ít hơn. 8.7. Quản lý thay đổi hệ thống Trong việc phát triển các hệ thống, rất hiếm khi gặp một ứng dụng không có thay đổi. Sự thay đổi xảy ra trong tất cả các giai đoạn của quá trình phát triển ứng dụng. Do đó, các thủ tục để quản lý sự thay đổi là rất cần thiết để duy trì tính đúng đắn và trật tự trong nhóm dự án. Có ba loại thay đổi chủ yếu trong chu kỳ sống của một hệ thống, bao gồm: Quản lý thay đổi ứng dụng: Ứng dụng thường xuyên phải thiết kế lại vì các lý do sau dự án vượt quá ngân sách, ứng dụng chậm hoặc có nhiều lỗi. Quản lý cấu hình: là sự định danh, sự tổ chức và sự kiểm soát các sự thay đổi phần mềm bằng nhóm lập trình viên do có nhiều phiên bản chương trình. Quản lý tài liệu: Do sự thay đổi chương trình nên các tài liệu đi kèm cũng cần được sửa đổi và q._.es.GetObject("rdbInsCalculation.Enabled"))); this.rdbInsCalculation.FlatStyle = ((System.Windows.Forms.FlatStyle)(resources.GetObject("rdbInsCalculation.FlatStyle"))); this.rdbInsCalculation.Font = ((System.Drawing.Font)(resources.GetObject("rdbInsCalculation.Font"))); this.rdbInsCalculation.Image = ((System.Drawing.Image)(resources.GetObject("rdbInsCalculation.Image"))); this.rdbInsCalculation.ImageAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("rdbInsCalculation.ImageAlign"))); this.rdbInsCalculation.ImageIndex = ((int)(resources.GetObject("rdbInsCalculation.ImageIndex"))); this.rdbInsCalculation.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("rdbInsCalculation.ImeMode"))); this.rdbInsCalculation.Location = ((System.Drawing.Point)(resources.GetObject("rdbInsCalculation.Location"))); this.rdbInsCalculation.Name = "rdbInsCalculation"; this.rdbInsCalculation.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("rdbInsCalculation.RightToLeft"))); this.rdbInsCalculation.Size = ((System.Drawing.Size)(resources.GetObject("rdbInsCalculation.Size"))); this.rdbInsCalculation.TabIndex = ((int)(resources.GetObject("rdbInsCalculation.TabIndex"))); this.rdbInsCalculation.Text = resources.GetString("rdbInsCalculation.Text"); this.rdbInsCalculation.TextAlign = ((System.Drawing.ContentAlignment)(resources.GetObject("rdbInsCalculation.TextAlign"))); this.rdbInsCalculation.Visible = ((bool)(resources.GetObject("rdbInsCalculation.Visible"))); // // Calculate // this.AccessibleDescription = resources.GetString("$this.AccessibleDescription"); this.AccessibleName = resources.GetString("$this.AccessibleName"); this.AutoScaleBaseSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScaleBaseSize"))); this.AutoScroll = ((bool)(resources.GetObject("$this.AutoScroll"))); this.AutoScrollMargin = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMargin"))); this.AutoScrollMinSize = ((System.Drawing.Size)(resources.GetObject("$this.AutoScrollMinSize"))); this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); this.ClientSize = ((System.Drawing.Size)(resources.GetObject("$this.ClientSize"))); this.Controls.Add(this.dgrSalError); this.Controls.Add(this.lblCalculation); this.Controls.Add(this.groupBox3); this.Controls.Add(this.groupBox1); this.Controls.Add(this.groupBox5); this.Controls.Add(this.groupBox2); this.Enabled = ((bool)(resources.GetObject("$this.Enabled"))); this.Font = ((System.Drawing.Font)(resources.GetObject("$this.Font"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("$this.ImeMode"))); this.Location = ((System.Drawing.Point)(resources.GetObject("$this.Location"))); this.MaximizeBox = false; this.MaximumSize = ((System.Drawing.Size)(resources.GetObject("$this.MaximumSize"))); this.MinimizeBox = false; this.MinimumSize = ((System.Drawing.Size)(resources.GetObject("$this.MinimumSize"))); this.Name = "Calculate"; this.RightToLeft = ((System.Windows.Forms.RightToLeft)(resources.GetObject("$this.RightToLeft"))); this.StartPosition = ((System.Windows.Forms.FormStartPosition)(resources.GetObject("$this.StartPosition"))); this.Text = resources.GetString("$this.Text"); this.Controls.SetChildIndex(this.pnlFWCommand, 0); this.Controls.SetChildIndex(this.lblFWDecorateingLine, 0); this.Controls.SetChildIndex(this.groupBox2, 0); this.Controls.SetChildIndex(this.groupBox5, 0); this.Controls.SetChildIndex(this.groupBox1, 0); this.Controls.SetChildIndex(this.groupBox3, 0); this.Controls.SetChildIndex(this.lblCalculation, 0); this.Controls.SetChildIndex(this.dgrSalError, 0); this.pnlFWCommand.ResumeLayout(false); this.groupBox2.ResumeLayout(false); this.panel1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.xleGroup)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xleSection)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xleDepartment)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xteFullName)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xleIndividual)).EndInit(); this.groupBox5.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.xtePasswordConfirm)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xchUnlock)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xchLock)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xtePassword)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xteName)).EndInit(); this.groupBox1.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.xcbYear)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.xcbMonth)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dgrSalError)).EndInit(); this.groupBox3.ResumeLayout(false); this.ResumeLayout(false); } #endregion #region PRIVATE private void getSalaryPeriod() { try { DBEngine.exec("Get_SalaryPeriod","@Month", m_iCurMonth,"@Year", m_iCurYear); m_dSalStart = Convert.ToDateTime(DBEngine.getParamValue("@FromDate").ToString()); m_dSalStop = Convert.ToDateTime(DBEngine.getParamValue("@ToDate").ToString()); } catch(Exception ex) { throw(ex); } } private void filterEmployee(DateTime SalFrom, DateTime SalTo) { try { string sEmpFilter = "HireDate<=#" + SalTo.ToString("MM/dd/yyyy") + "#" + " AND (TerminateDate IS NULL OR (TerminateDate>#" + SalFrom.ToString("MM/dd/yyyy") + "#))" + " AND EmployeeStatusID 30"; m_dvEmployee.RowFilter = sEmpFilter; xleIndividual.Properties.LookUpData.DataSource = m_dvEmployee; xleIndividual.Properties.LookUpData.KeyValue = null; xteFullName.Text = ""; } catch(Exception ex) { throw(ex); } } private bool ProtectCalculation() { try { if (bLocked ==false) { //UIMessage.ShowMessage(1155,MessageBoxButtons.OK,MessageBoxIcon.Exclamation); //UIMessage.ShowMessage(); return true; } else { if ((sUserName == xteName.Text) && (sPassword == xtePassword.Text)) { return true; } else { UIMessage.ShowMessage("Salary of this month has already locked. You must input correct user name & password to re-calculate locked salary month",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return false; } } } catch (Exception e) { throw e; //return false; } //return true; } private void EnableControls() { switch(m_iCurSelection) { case 0: // selected to calculate All xleDepartment.Properties.Enabled = false; xleDepartment.Properties.LookUpData.KeyValue = -1; xleSection.Properties.Enabled = false; xleSection.Properties.LookUpData.KeyValue = -1; xleGroup.Properties.Enabled = false; xleGroup.Properties.LookUpData.KeyValue = -1; xleIndividual.Properties.Enabled = false; xleIndividual.Properties.LookUpData.KeyValue = null; xteFullName.Text = ""; break; case 1 : // selected to calculate for Department/ xleDepartment.Properties.Enabled = true; xleSection.Properties.Enabled = true; xleGroup.Properties.Enabled = true; xleIndividual.Properties.Enabled = false; xleIndividual.Properties.LookUpData.KeyValue = null; xteFullName.Text = ""; if(Convert.ToInt32(xleDepartment.Properties.LookUpData.KeyValue)== -1) { xleSection.Enabled =false; } if(Convert.ToInt32(xleSection.Properties.LookUpData.KeyValue)== -1) { xleGroup.Enabled = false; } break; case 5 : // selected to calculate for Individual xleDepartment.Properties.Enabled = false; xleDepartment.Properties.LookUpData.KeyValue = -1; xleSection.Properties.Enabled = false; xleSection.Properties.LookUpData.KeyValue = -1; xleGroup.Properties.Enabled = false; xleGroup.Properties.LookUpData.KeyValue = -1; xleIndividual.Properties.Enabled = true; break; } } private void myEvents() { xcbMonth.ValueChanged+=new EventHandler(xcbMonth_ValueChanged); xcbYear.ValueChanged+=new EventHandler(xcbYear_ValueChanged); rdbAll.CheckedChanged+=new EventHandler(rdbAll_CheckedChanged); rdbDepartment.CheckedChanged+=new EventHandler(rdbDepartment_CheckedChanged); rdbIndividual.CheckedChanged+=new EventHandler(rdbIndividual_CheckedChanged); xleDepartment.ValueChanged+=new EventHandler(xleDepartment_ValueChanged); xleSection.ValueChanged+=new EventHandler(xleSection_ValueChanged); xleIndividual.ValueChanged+=new EventHandler(xleIndividual_ValueChanged); btnStartCalculate.Click+=new EventHandler(btnStartCalculate_Click); //btnStop.Click+=new EventHandler(btnStop_Click); xchLock.ValueChanged+=new EventHandler(xchLock_ValueChanged); xchLock.ValueChanging+=new DevExpress.XtraEditors.Controls.ChangingEventHandler(xchLock_ValueChanging); xchUnlock.ValueChanging+=new DevExpress.XtraEditors.Controls.ChangingEventHandler(xchUnlock_ValueChanging); rdbInsCalculation.CheckedChanged+=new EventHandler(rdbInsCalculation_CheckedChanged); rdbSalCalculation.CheckedChanged+=new EventHandler(rdbSalCalculation_CheckedChanged); } // private DataRow[] getCalculatedList() // { // try // { // DataRow[] arrdr = null; // string sParam=""; // m_sDepartmentID = Convert.ToString(xleDepartment.Properties.LookUpData.KeyValue); // m_sSectionID = Convert.ToString(xleSection.Properties.LookUpData.KeyValue); // m_sGroupID = Convert.ToString(xleGroup.Properties.LookUpData.KeyValue); // m_sEmployeeID = Convert.ToString(xleIndividual.Properties.LookUpData.KeyValue); // // switch(m_iCurSelection) // { // case 1: //by Department // if ((m_sGroupID != null) && (m_sGroupID != "-1")) // { // sParam += "GroupID = '" + m_sGroupID + "'"; // } // else if ((m_sSectionID != null) && (m_sSectionID != "-1")) // { // sParam += "SectionID = '" + m_sSectionID + "'"; // } // else if ((m_sDepartmentID != null) &&(m_sDepartmentID != "-1")) // { // sParam = "DepartmentID = '" + m_sDepartmentID + "'"; // } // break; // case 3: //by Individual // sParam = "EmployeeID = '" + m_sEmployeeID + "'"; // break; // } // // if(m_iCurSelection != 0) // { // sParam += " AND (HireDate <=#" + m_dSalStop.ToString("MM/dd/yyyy") + "#" // + " AND (TerminateDate IS NULL OR TerminateDate>#" + m_dSalStart.ToString("MM/dd/yyyy") + "#)" // + " AND EmployeeStatusID 30)"; // } // else // { // sParam += " HireDate <=#" + m_dSalStop.ToString("MM/dd/yyyy") + "#" // + " AND (TerminateDate IS NULL OR TerminateDate>#" + m_dSalStart.ToString("MM/dd/yyyy") + "#)" // + " AND EmployeeStatusID 30"; // } // // //get applied list to an array of DataRow // arrdr = m_dtEmployee.Select(sParam); // return arrdr; // // } // catch(Exception ex) // { // Helper.ShowException(ex,this.Name + ".getAppliedList()",null); // return null; // } // } private void getCalculatedOption(out int iFilterOption, out string sFilterValue , out bool bSalCal , out bool bInsReCal) { //init output parameters iFilterOption = -1; sFilterValue = ""; bSalCal = false; bInsReCal = false; try { //string sParam=""; m_sDepartmentID = Convert.ToString(xleDepartment.Properties.LookUpData.KeyValue); m_sSectionID = Convert.ToString(xleSection.Properties.LookUpData.KeyValue); m_sGroupID = Convert.ToString(xleGroup.Properties.LookUpData.KeyValue); m_sEmployeeID = Convert.ToString(xleIndividual.Properties.LookUpData.KeyValue); //Get Applied/Filter option & value if (rdbAll.Checked == true) { iFilterOption = 0; // No filter sFilterValue = ""; } else if (rdbDepartment.Checked == true) { //default value for this option iFilterOption = 1; if((m_sGroupID != null) && (m_sGroupID != "-1")) { iFilterOption = 3; // Filter by group sFilterValue = m_sGroupID; } else if ((m_sSectionID != null) && (m_sSectionID != "-1")) { iFilterOption = 2; sFilterValue = m_sSectionID; } else if ((m_sDepartmentID != null) &&(m_sDepartmentID != "-1")) { iFilterOption = 1; sFilterValue = m_sDepartmentID; } } else if (rdbIndividual.Checked == true) { iFilterOption = 5; sFilterValue = m_sEmployeeID; } //Get calculation option if (rdbInsCalculation.Checked == true) { bSalCal = false; bInsReCal = false; } else if (rdbSalCalculation.Checked == true) { bSalCal = true; bInsReCal = chkReCalIns.Checked; } //return sParam; } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".getCalculatedOption()",null); //return null; } } private void getSalCalculationError() { m_dtSalError = DBEngine.execReturnDataTable("PR_SalCal_GetError", "@Month", m_iCurMonth, "@Year", m_iCurYear, "@FilterOption", m_iCurSelection, "@FilterValue", m_sParam); //xgcSalError.DataSource = m_dtSalError; //lsbSalError.Items.AddRange(m_dtSalError.Rows); dgrSalError.DataSource = m_dtSalError; } private void setLockControl(bool locked) { try { if (locked == false) { xchLock.CheckState = CheckState.Unchecked; //xchLock.Enabled = true; xchLock.Properties.ReadOnly = false; xchUnlock.CheckState = CheckState.Checked; //xchUnlock.Enabled = false; xchUnlock.Properties.ReadOnly = true; xtePasswordConfirm.Enabled = true; } else { xchLock.CheckState = CheckState.Checked; //xchLock.Enabled = false; xchLock.Properties.ReadOnly = true; xchUnlock.CheckState = CheckState.Unchecked; //xchUnlock.Enabled = true; xchUnlock.Properties.ReadOnly = false; xtePasswordConfirm.Enabled = false; } xteName.Text = ""; xtePassword.Text = ""; xtePasswordConfirm.Text = ""; } catch(Exception ex) { throw(ex); } } private void getLockProperty( out bool bLocked, out string sUserName, out string sPassword) { m_dtSalLock = new DataTable(); m_dtSalLock = DBEngine.execReturnDataTable("PR_Sal_Lock_List","@month",m_iCurMonth,"@year",m_iCurYear); if ((m_dtSalLock == null)||(m_dtSalLock.Rows.Count == 0)) { bLocked = false; sUserName = ""; sPassword = ""; } else { bLocked = true; sUserName = m_dtSalLock.Rows[0]["UserName"].ToString(); sPassword = m_dtSalLock.Rows[0]["Password"].ToString(); } } #endregion #region EVENTS HANDLE private void xcbYear_ValueChanged(object sender, EventArgs e) { try { m_iCurYear = Convert.ToInt32(xcbYear.EditValue); //get Salary period getSalaryPeriod(); //filter Employee list filterEmployee(m_dSalStart,m_dSalStop); //get Lock property & set control according to the lock property getLockProperty(out bLocked,out sUserName, out sPassword); setLockControl(bLocked); } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".xcbYear_ValueChanged()",null); return; } } private void xcbMonth_ValueChanged(object sender, EventArgs e) { try { m_iCurMonth = Convert.ToInt32(xcbMonth.EditValue); //get Salary period getSalaryPeriod(); //filter Employee list filterEmployee(m_dSalStart,m_dSalStop); //get Lock property & set control according to the lock property getLockProperty(out bLocked,out sUserName, out sPassword); setLockControl(bLocked); } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".xcbMonth_ValueChanged()",null); return; } } private void btnStartCalculate_Click(object sender, System.EventArgs e) { try { getCalculatedOption(out m_iCurSelection, out m_sParam, out m_bSalCal, out m_bReCalIns); if(!OnValidate()) return; if(!ProtectCalculation()) return; btnStartCalculate.Enabled = false; //Now calculate this.Cursor = Cursors.WaitCursor ; DBEngine.beginTransaction(); if (m_bSalCal == true) { DBEngine.exec("SALCAL", "@Month", m_iCurMonth, "@Year",m_iCurYear, "@FilterOption", m_iCurSelection, "@FilterValue", m_sParam, "@ReCalIns",m_bReCalIns ); } else if (m_bSalCal == false) { DBEngine.exec("SALCAL_INSURANCE", "@Month", m_iCurMonth, "@Year",m_iCurYear, "@FilterOption", m_iCurSelection, "@FilterValue", m_sParam); } DBEngine.commit(); this.Cursor = Cursors.Default; if (m_bSalCal == true) { getSalCalculationError(); if (m_dtSalError.Rows.Count == 0) { UIMessage.ShowMessage("Salary calculation successfully without error!",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Information); } else { UIMessage.ShowMessage("Salary calculation successfully with some error. Please see the log list.",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning); } } else if (m_bSalCal == false) { UIMessage.ShowMessage("Insurance calculation is finished!",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Information); } // DataRow[] arrdr = null; // arrdr = getCalculatedList(); // if ((arrdr != null) && (arrdr.Length != 0)) // { // this.Cursor = Cursors.WaitCursor ; // // xpbCalculationProgress.Properties.Maximum = arrdr.Length; // foreach(DataRow dr in arrdr ) // { // // process data // lblCalculation.Text = dr["EmployeeID"].ToString() + " " + dr["FullName"].ToString(); // if (b_Calculate) // { // DBEngine.exec("SALCAL", // "@EmployeeID", dr["EmployeeID"].ToString(), // //"@FromDate",FromDate, // //"@ToDate",ToDate, // "@Year",m_iCurYear, // "@Month",m_iCurMonth); // } // else // { // b_Calculate = true; // this.Cursor = Cursors.Default; // UIMessage.ShowMessage("Salary calculation stopped by user!",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Information); // lblCalculation.Text = ""; // btnStartCalculate.Enabled = true; // btnStop.Enabled = false; // return; // } // xpbCalculationProgress.Increment(1); // //xpbProcecess.PerformStep(); // xpbCalculationProgress.Update(); // Application.DoEvents(); // } // this.Cursor = Cursors.Default; // UIMessage.ShowMessage("Salary calculation successfully!",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Information); // } // else // { // UIMessage.ShowMessage("No employee selected to calculate salary!",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); // } //lblCalculation.Text = ""; btnStartCalculate.Enabled = true; //btnStop.Enabled = false; } catch (Exception ex) { Helper.ShowException(ex, this.Name + ".StartCalculate()", null); return; } //PrintReport(HRReportName.HRPersonalInfoByDept); } private void rdbAll_CheckedChanged(object sender, System.EventArgs e) { try { m_iCurSelection = 0; // selected to process all employees. EnableControls(); } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".rdbAll_CheckedChanged()",null); return; } } private void rdbDepartment_CheckedChanged(object sender, System.EventArgs e) { try { m_iCurSelection = 1; // selected to process by department. EnableControls(); } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".rdbDepartment_CheckedChanged()",null); return; } } private void rdbIndividual_CheckedChanged(object sender, System.EventArgs e) { try { m_iCurSelection = 5; // selected to process by individual. EnableControls(); } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".rdbIndividual_CheckedChanged()",null); return; } } private void xleIndividual_ValueChanged(object sender, System.EventArgs e) { m_sSelEmployee = ""; try { if(xleIndividual.Properties.LookUpData.KeyValue != null) { m_sSelEmployee = xleIndividual.Properties.LookUpData.KeyValue.ToString(); // m_sParam = "EmployeeID = '" + m_sSelEmployee + "'"; DataRow dr = m_dtEmployee.Rows.Find(xleIndividual.Properties.LookUpData.KeyValue); if(dr != null) { xteFullName.Text = dr["FullName"].ToString(); } } } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".xleIndividual_ValueChanged()",null); return; } } private void xleSection_ValueChanged(object sender, System.EventArgs e) { if (xleSection.Properties.LookUpData.KeyValue == null) return; try { //get selected Section //m_sSectionID = xleSection.Properties.LookUpData.KeyValue.ToString(); EnableControls(); m_dvGroup.RowFilter = "SectionID = " + xleSection.Properties.LookUpData.KeyValue.ToString() + " or GroupID = -1"; xleGroup.Properties.LookUpData.DataSource = m_dvGroup; xleGroup.Properties.LookUpData.KeyValue = -1; } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".xleSection_ValueChanged()", null); return; } } private void xleDepartment_ValueChanged(object sender, System.EventArgs e) { if (xleDepartment.Properties.LookUpData.KeyValue == null) return; try { EnableControls(); m_dvSection.RowFilter = "DepartmentID = " + xleDepartment.Properties.LookUpData.KeyValue.ToString() + " or SectionID = -1"; xleSection.Properties.LookUpData.DataSource = m_dvSection; xleSection.Properties.LookUpData.KeyValue = -1; } catch(Exception ex) { Helper.ShowException(ex,this.Name + ".xleDepartment_ValueChanged()", null); return; } } // private void btnStop_Click(object sender, System.EventArgs e) // { // b_Calculate = false; // } private void xchLock_ValueChanged(object sender, EventArgs e) { try { if ((bLocked==false) && (xchLock.CheckState == CheckState.Checked)) { if (xteName.Text.Length ==0) { UIMessage.ShowMessage(1157,MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return; } if (xtePassword.Text.Length == 0) { UIMessage.ShowMessage("Password for lock cannot be blank",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return; } if (xtePassword.Text != xtePasswordConfirm.Text) { UIMessage.ShowMessage("Please confirm password correctly!",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return; } DBEngine.exec("PR_Sal_Lock_Update", "@UserName",xteName.Text, "@Password",xtePassword.Text, "@Month", Convert.ToInt32(xcbMonth.EditValue), "@Year", Convert.ToInt32(xcbYear.EditValue)); bLocked = true; sUserName = xteName.Text; sPassword = xtePassword.Text; setLockControl(bLocked); } } catch(Exception ex) { throw(ex); } } private void xchLock_ValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e) { if ((bLocked==false) && (Convert.ToBoolean(e.NewValue) == true)) { if (xteName.Text.Length ==0) { //UIMessage.ShowMessage(1157,MessageBoxButtons.OK,MessageBoxIcon.Exclamation); UIMessage.ShowMessage("Staff name cannot be blank. Please input for locking.",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); e.Cancel = true; return; } if (xtePassword.Text.Length == 0) { UIMessage.ShowMessage("Password for locking cannot be blank.",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); e.Cancel = true; return; } if (xtePassword.Text != xtePasswordConfirm.Text) { UIMessage.ShowMessage("Please confirm password correctly!",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); e.Cancel = true; return; } } } private void xchUnlock_ValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e) { try { if ((bLocked == true) && (Convert.ToBoolean(e.NewValue) == true)) { int iUnlock = 0; DBEngine.exec("PR_Sal_Lock_Delete" ,"@UserName", xteName.Text ,"@Password", xtePassword.Text ,"@Month", Convert.ToInt32(xcbMonth.EditValue) ,"@Year", Convert.ToInt32(xcbYear.EditValue) ); iUnlock = Convert.ToInt16(DBEngine.getParamValue("@RetVal")); if (iUnlock == 0) { UIMessage.ShowMessage("Staff name and/or Password is not correct!",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); e.Cancel = true; return; } else { bLocked = false; sUserName = ""; sPassword = ""; setLockControl(bLocked); } } } catch(Exception ex) { throw(ex); } } private void rdbInsCalculation_CheckedChanged(object sender, EventArgs e) { if (rdbInsCalculation.Checked == true) { chkReCalIns.Enabled = false; } else { //chkReCalIns.CheckState = CheckState.Unchecked; chkReCalIns.Enabled = true; } } private void rdbSalCalculation_CheckedChanged(object sender, EventArgs e) { if (rdbSalCalculation.Checked == true) { chkReCalIns.Enabled = true; } } #endregion #region OVERWRITE public override bool InitializeData() { try { m_dtDepartment = new DataTable(); m_dtSection = new DataTable(); m_dtGroup = new DataTable(); m_dtEmployee = new DataTable(); m_dvSection = new DataView(); m_dvGroup = new DataView(); m_dvEmployee = new DataView(); DataTable dt = null; DataRow dr = null; //-------load data dt = DBEngine.execReturnDataTable("Gen_Department_List"); dr = dt.NewRow(); dr["DepartmentID"] = "-1"; dr["DepartmentName"] = "(None)"; dt.Rows.Add(dr); dt.DefaultView.Sort = "[DepartmentCode] ASC"; m_dtDepartment = dt; dt.TableName = "m_dtDepartment"; dt = DBEngine.execReturnDataTable("Gen_Section_List"); dr = dt.NewRow(); dr["SectionID"] = "-1"; dr["SectionName"] = "(None)"; dt.Rows.Add(dr); dt.DefaultView.Sort = "[SectionCode] ASC"; m_dtSection = dt; dt.TableName = "m_dtSection"; m_dvSection = m_dtSection.DefaultView; dt = DBEngine.execReturnDataTable("Gen_Group_List"); dr = dt.NewRow(); dr["GroupID"] = "-1"; dr["GroupName"] = "(None)"; dt.Rows.Add(dr); dt.DefaultView.Sort = "[GroupCode] ASC"; m_dtGroup = dt; dt.TableName = "m_dtGroup"; m_dvGroup = m_dtGroup.DefaultView; DataColumn[] colKey = new DataColumn[1]; m_dtEmployee = DBEngine.execReturnDataTable("Employee_List_Code_WithStatus"); colKey[0] = m_dtEmployee.Columns["EmployeeID"]; m_dtEmployee.PrimaryKey = colKey; m_dvEmployee=m_dtEmployee.DefaultView; m_dvEmployee.RowFilter = ""; //------- binding : xleDepartment.Properties.LookUpData.DataSource = m_dtDepartment; xleSection.Properties.LookUpData.DataSource = m_dvSection; xleGroup.Properties.LookUpData.DataSource = m_dvGroup; xleIndividual.Properties.LookUpData.DataSource = m_dvEmployee; //------- manual events handler myEvents(); //------- init some values : m_iCurMonth = DateTime.Now.Month ; m_iCurYear = DateTime.Now.Year ; xcbMonth.EditValue = m_iCurMonth; xcbYear.EditValue = m_iCurYear; xleDepartment.Properties.LookUpData.KeyValue = -1; xleSection.Properties.LookUpData.KeyValue = -1; xleGroup.Properties.LookUpData.KeyValue = -1; m_iCurSelection = 0; rdbAll.Checked = true; rdbSalCalculation.Checked = true; chkReCalIns.Checked = true; //enable/disable some controls in form EnableControls(); //set focus xcbMonth.Focus(); } catch (Exception e) { Helper.ShowException(e, this.Name + ".InitializeData()", null); return false; } return true; } public override bool OnValidate() { try { if(xcbMonth.Text == "" || xcbYear.Text=="") { UIMessage.ShowMessage(1152,MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return false; } if(xteName==null || xtePassword ==null) { UIMessage.ShowMessage(1153,MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return false; } //Check for null data switch (m_iCurSelection) { case 0: // all employees break; case 1: // by department if((m_sDepartmentID == null) ||(m_sDepartmentID == "-1")) { UIMessage.ShowMessage("Please choose a department for calculation.",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return false; } break; case 2: // by section if((m_sSectionID == null) ||(m_sSectionID == "-1")) { UIMessage.ShowMessage("Please choose a section for calculation.",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return false; } break; case 3: // by Group if((m_sGroupID == null) ||(m_sGroupID == "-1")) { UIMessage.ShowMessage("Please choose a group for calculation.",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return false; } break; case 5: // by individual emp. if((m_sEmployeeID == null) ||(m_sEmployeeID == "")) { UIMessage.ShowMessage("Please choose an employee for calculation.",MessageBoxButtons.OK,MessageBoxIcon.Exclamation); return false; } break; default: return false; } // TODO - add code here to validate data before saving } catch (Exception e) { Helper.ShowException(e, this.Name + ".OnValidate()", null); return false; } return true; } #endregion #region VARIABLES private DataTable m_dtDepartment; private DataTable m_dtSection; private DataTable m_dtGroup; private DataTable m_dtEmployee; private DataView m_dvSection; private DataView m_dvGroup; private DataView m_dvEmployee; private DataTable m_dtSalLock = null; private DataTable m_dtSalError; private string m_sEmployeeID,m_sDepartmentID, m_sSectionID, m_sGroupID; private string m_sParam = ""; private string m_sSelEmployee = ""; private int m_iCurSelection = -1; private bool m_bSalCal, m_bReCalIns; //private string // private bool b_Calculate = true; private int m_iCurMonth, m_iCurYear; private DateTime m_dSalStart,m_dSalStop; //for Lock property bool bLocked = false; string sUserName = "", sPassword = ""; #endregion } } TÀI LIỆU THAM KHẢO PGS. TS Nguyễn Văn Ba (2005), Phân tích và thiết kế hệ thống thông tin có cấu trúc, Nhà xuất bản Đại học Quốc gia Hà Nội. Catherin A. Creary, Christopher Allen, Simon Chatwin (2004), Nhập môn về cơ sở dữ liệu quan hệ và lập trình SQL, Nhà xuất bản Thống kê. PGS. TS Hàn Viết Thuận (2007), Bài giảng Công nghệ phần mềm, Khoa Tin học Kinh tế, Đại học Kinh tế Quốc dân. PGS. TS Hàn Viết Thuận (2005), Giáo trình Cấu trúc dữ liệu và giải thuật, Nhà xuất bản Đại học Kinh tế Quốc dân. TS. Trương Văn Tú & TS. Trần Thị Song Minh (2005), Hệ thống thông tin quản lý, Nhà xuất bản Đại học Kinh tế Quốc dân. PGS. TS Nguyễn Văn Vỵ (2004), Giáo trình phân tích thiết kế hệ thống thông tin, Nhà xuất bản Hà Nội. Roger S. Pressman (2001), Kỹ nghệ phần mềm – Cách tiếp cận của người thực hành, Tập 1-2-3, Nhà xuất bản giáo dục. www. zensoft. com www.vnzoom.com.vn www.wikipedia.com ._.

Các file đính kèm theo tài liệu này:

  • doc10958.doc
Tài liệu liên quan