2.2.1. Phần mềm và công nghệ phần mềm.
a, Khái niệm phần mềm.
Khái niệm phần mềm lâu nay vẫn được đồng nhất với khái niệm chưuơng trình của máy tính. Ở mức độ nào đó thì khái niệm này vẫn đúng trong quy mô học đường. Khi phần mềm đã phát triển đến đỉnh cao và trở thành công nghiệp thì khái niệm phần mềm đã được định nghĩa một cách chính xác. Nhà tin học người Mỹ - Tiến sĩ Roger Pressman thì phần mềm là tổng thể của ba thành phần chính: các chương trình máy tính, các cấu trúc dữ liệu có liên quan, tài liệu hướng dẫn sử dụng. Định nghĩa này cho thấy sự khác nhau trong việc lập trình ở quy mô học đường với lập trình ở quy mô công nghiệp, nó xác định thành phần của phần mềm trong công nghệ phần mềm tổng quát và đầy đủ hơn nhiều so với khái niệm thông thường.
b, Công nghệ phần mềm.
Mặc dù máy tính đã ra đời tù cách đầy hàng nửa thế kỷ nhưng khái niệm công nghệ phần mềm mới xuất hiện trong khoảng thời gian gần đây. Tuy rằng việc phát triển phần mềm đã có từ lâu và trải qua những bước tiến quan trọng trong lịch sử, song chỉ những bước tiến nhảy vọt ở thập niên cuối cùng thế kỷ XX, và thập niên đầu thế kỉ XXI cùng với sự phát triển như vũ
bão của công nghệ thông tin, điện tử viễn thông thì phần mềm mới trở thành một ngành công nghiệp có vị trí đáng kể trong nền kinh tế quốc dân. Với quy mô sản xuất công nghiệp, phần mềm từ chỗ là công cụ phân tích và xử lý thông tin đã trở thành một ngành công nghiệp mũi nhọn. Nó góp phần quan trọng đưa loài người tiến vào kỷ nguyên của kinh tế tri thức.
Khái niệm công nghệ phần mềm được hiểu như sau: công nghệ phần mềm là một tổ hợp các công cụ, phương pháp và thủ tục làm cho người quản trị viên dự án nắm được xu thế tổng quát phát triển của phần mềm và giúp cho kỹ sư lập trình có một nền tảng để triển khai các định hướng của phần mềm. Từ khái niệm về công nghệ phần mềm đã trình bày ở trên, ta có thể biểu diễn một cách trực quan theo mô hình sau (hình 2.2)
Hình 2.2: Mô hình công nghệ phần mềm
Như vậy, công nghệ phần mềm bao gồm ba thành phần và hai chức năng chính. -Thành phần: CÔNG NGHỆ PHẦN MỀM Thành phần Chức năng Công cụ Phương pháp Thủ tục Kỹ sư phần mềm Quản trị viên dự án
√ Công cụ: thành phần này liên quan trực tiếp đến việc cung cấp các phương tiện hỗ trợ tự động hay bán tự động cho thành phần thủ tục hoặc phương pháp.
√ Phương pháp: là cách thức về công nghệ, kỹ thuật để làm phần mềm. Nó liên quan đến tất cả các công đoạn phát triển hệ thống như nghiên cứu yêu cầu, thiết kế, lập trình, kiểm thử và bảo trì. Phương pháp dựa trên những nguyên lý cơ bản nhất cho tất cả các lĩnh vực công nghệ kể cả các hoạt động mô hình hoá và kỹ thuật mô tả.
√ Thủ tục: Thành phần này liên quan đến vấn đề quản trị phát triển phần mềm như lập kế hoạch, quản trị chất lượng , chi phí, mua bán sản phẩm phụ, cấu hình phần mềm, quản trị sự thay đổi, quản trị nhân lực, chuyển giao, đào tạo, tài liệu.
-Chức năng:
√ Quản trị viên dự án: Quản trị viên dự án là người có kinh nghiệm trong quản lý dự án phần mềm, có trách nhiệm quản lý dự án , trực tiếp tham gia các công việc then chốt của dự án, phân công các chức danh trong quá trình thực hiện dự án.
√ Kỹ sư phần mềm: là người biết cách áp dụng rộng rãi những kiến thức về cách phát triển ứng dụng vào việc tổ chức phát triển một cách có hệ thống các ứng dụng. Công việc của người kỹ sư phần mềm là đánh giá, lựa chọn, sử dụng cách tiếp cận có hệ thống, chuyên biệt rõ ràng trong việc phát triển đưa vào ứng dụng, bảo trì và thay thế phần mềm.
Như vậy, khái niệm công nghệ phần mềm là một khái niệm không chỉ đề cập tới cách thức phối hợp công nghệ, phương pháp và công cụ theo các quy trình nghiêm ngặt để làm ra sản phẩm chất lượng cao.
2.2.2. Lịch sử phát triển của phần mềm.
Người ta phân biệt sự tiến triển của phần mềm theo một số giai đoạn được trình bày trong bảng sau:
Giai đoạn 1 Giai đoạn 2 Giai đoạn 3 Giai đoạn 4 19501960 19601970 19701990 1990nay -Máy tính đơn chiếc. -Lập trình bằng ngôn ngữ máy -Lập trình bằng ngôn ngữ thuật toán. -Kích thước máy tính thu nhỏ. -Xuất hiện IBMPC. -Đã bắt đầu có xu hướng thương mại hoá phần mềm. -Phát triển hệ thống máy tính để bàn. -Cơ sở dữ liệu phân tán.
-Khái niệm công nghệ phần mềm đã xuất hiện
Qua lịch sử tiến triển của máy tính và phần mềm ta thấy một xu hướng nổi bật: nếu về phần cứng, kích thước của máy tính càng ngày càng giảm và tính năng của chúng càng ngày càng tăng thì phần mềm cũng có hai đặc điểm nổi trội:
- Ngày càng sử dụng các ngôn ngữ lập trình đa dạng.
- Giá bán của phần mềm ngày càng tăng đáng kể trong so sánh tương đối với phần cứng.
Khác với các sản phẩm thông thường khác, phần mềm có hai đặc trưng cơ bản sau:
- Phần mềm không phải là thành phần kỹ thuật được hiểu theo nghĩa lắp ráp mà mang yếu tố logic. Tức là mỗi phần mềm được tạo ra dựa trên ý tưởng của các kỹ sư phần mềm.
- Khác với các sản phẩm của nền công nghiệp thông thường là bị hao mòn đi trong quá trình sử dụng, giá trị của phần mềm được tăng lên khi càng có đông người sử dụng.
2.2.3. Các đặc trưng của phần mềm và phân loại phần mềm.
Một phần mềm là một tập hợp các chương trình thực hiện tự động hoá một số các nhiệm vụ nghiệp vụ. Cho dù phần mềm được phát triển để làm nhiệm vụ nào đi nữa thì các phần mềm đều có điểm chung, đó là: đặc tính, tính đáp ứng và loại của ứng dụng.
Các đặc tính của phần mềm:
Các đặc tính của phần mềm là tất cả các điểm chung cho mọi ứng dụng và cho các dữ liệu đầu vào, các tiến trình, các ràng buộc và các giao diện.
- Dữ liệu:
+ Đầu vào: dữ liệu vào là dữ liệu ở bên ngoài máy tính và được đưa vào bằng một thiết bị đầu vào, thường là bàn phím, máy quét, hay mạng máy tính.
+ Đầu ra: dữ liệu ngược lại so với dữ liệu vào, tức là các dữ liệu đưa ra ngoài máy tính, thường được đưa ra bằng các thiết bị đầu ra như màn hình, máy in, máy chiếu, máy scan,…
+ Sự lưu trữ và tìm kiếm dữ liệu: dự liệu được mô tả ở dạng vật lý, trong một máy có thể đọc được các khuôn dạng dữ liệu. Việc tìm kiếm dữ liệu được hiểu là bạn có thể truy nhập vào dữ liệu ở dạng lưu trữ của nó.
-Xử lý:
Xử lý bao gồm một chuỗi các lệnh hoặc các sự kiện có liên quan với nhau làm việc với các dữ liệu. Kết quả của một xử lý có thể là: làm thay đổi cơ sở dữ liệu, đưa dữ liệu trả lời ra thiét bị đầu cuối, máy in hoặc in ra giấy, có thể là những yêu cầu về trang thiết bị được suy diễn ra về các tình huống các phần tử.
-Ràng buộc:
+Ràng buộc về thứ tự trước: bắt buộc về thứ tự trước là điều kiện đầu tiên phải được đáp ứng để có thể bắt đầu quá trình xử lý.
+Ràng buộc về tính thứ tự sau: là điều kiện cần phải thoả mãn để quá trình xử lý có thể hoàn thành được. Cụm câu lệnh này được đưa vào cuối quá trình xử lý.
+Ràng buộc về thời gian: bao gồm ràng buộc về thời gian xử lý, thời gian phân chia cho một quá trình xử lý, thời gian yêu cầu đối với các quá trình xử lý bên ngoài, thời gian xử lý đồng bộ, thời gian trả lời cho quá trình xử lý với giao diện bên ngoài.
+Ràng buộc về mặt cấu trúc: có thể hiểu là bao gồm việc xác định loại đầu vào và đầu ra của các dữ liệu nào được cho phép, quá trình xử lý được thực hiện như thế nào và mối quan hệ giữa các quá trình với nhau.
+Ràng buộc về điều khiển: liên quan đến việc duy trì mối quan hệ về dữ liệu.
+Ràng buộc về suy diễn: đó là những khả năng có thể xảy ra từ một ứng dụng, dựa vào các kết quả trước đó hoặc có thể dựa vào quan hệ về dữ liệu ta có thể dẫn đến một kết quả khác nhau.
-Giao diện:
Quan trọng nhất là giao diện người sử dụng. Đó là phương tiện giao tiếp giữa người sử dụng và chương trình. Sau đó là giao diện thủ công (là các mẫu báo cáo,… và một số giao diện đã được chuẩn hoá như giao diện về mạng LAN của SOI, ISO,….
Tính đáp ứng.
Tính đáp ứng của mỗi ứng dụng được hiểu là thời gian sử dụng và đáp ứng yêu cầu từ người sử dụng. Nó được định nghĩa bởi sự định hướng thời gian mà ứng dụng xử lý như: xử lý theo kiểu trực tuyến, xử lý theo lô hay xử lý theo thời gian thực.
-Xử lý theo lô: là ứng dụng mà các phiên giao dịch được gom lại theo thời gian và thực hiện theo nhóm, tại mỗi thời điểm xác định công việc được xếp lại theo lô và đưa vào xử lý.
-Xử lý theo thời gian thực: ứng dụng dạng này xử lý phiên giao dịch hoặc sự kiện trên thời gian thực tế mà quá trình xử lý xảy ra. Sau đó kết quả được sẵn sàng sử dụng cho các yêu cầu khác. Những thay đổi thu được từ một quá trình xử lý thời gian thực có thể đudược khôi phục lại trạng thái ban đầu.
-Xử lý theo kiểu trực tuyến: ứng dụng trực tuyến được định vị trực tiếp trong bộ nhớ và được sử dụng một cách tuần tự bởi các phiên giao dịch hoặc sự kiện mà không cần phải nạp lại ứng dụng vào bộ nhớ.
Phân loại phần mềm.
Người ta chia phần mềm ra làm hai loại chính: phần mềm hệ thống và phần mềm ứng dụng.
Phần mềm hệ thống có chức năng điều khiển, giám sát hoạt động của các phần cứng. Phần mềm hệ thống bao gồm bốn loại nhỏ:
-Hệ điều hành: điều khiển, quản lý, giám sát các phần cứng và tạo môi trường cho các chương trình khác.
-Các chương trình tiện ích: bổ sung thêm chức năng cho hệ điều hành như kiểm tra lỗi, sao lưu dữ liệu, phân chia ổ đĩa.
- Chương trình điều khiển thiết bị (driver): giúp hệ điều hành nhận biết và điều khiển sử dụng các thiết bị phần cứng.
- Chương trình dịch: dịch các ứng dụng từ ngôn ngữ máy sang ngôn ngữ người dùng.
Phần mềm ứng dụng: bao gồm 4 nhóm:
- Phần mềm kinh doanh: hỗ trợ việc quản lý, sản xuất kinh doanh.
- Phần mềm năng suất: giúp nâng cao năng suất và hiệu quả của người dùng.
- Phần mềm giáo dục tham khảo: hỗ trợ cho quá trình học tập. Ví dụ như các phần mềm từ điển,…
- Phần mềm giải trí: các phần mềm games, ca nhạc, ….
Trong sản xuất phần mềm công nghiệp, người ta đưa ra khái niệm vòng đời phát triển của phần mềm, tức là các bước từ khi đặt kế hoạch phát triển cho đến giai đoạn cuối cùng của quy trình phát triển phần mềm và được gọi là vòng đời phát triển của phần mềm. Nó thường dùng mô hình thác nước (hình 2.1) để biểu diễn.
Hình 2.3: Mô hình thác nước của vòng đời phát triển của phần mềm.
Mục đích của mô hình là phân đoạn toàn bộ quá trình phát triển phần mềm thành các giai đoạn nhất định. Trên cơ sở đó có các giải pháp hiệu quả nhất cho từng giai đoạn. Ta dùng hình ảnh dốc từ thác nước xuống để biểu diễn. Các công đoạn dưới càng chịu nhiều tác động của các công đoạn trên.
- Công nghệ hệ thống: là nền tảng của tất cả các công đoạn tiếp theo. Vì bản thân phần mềm chỉ là một phần của hoạt động quản lý, do đó khi xây dựng phần mềm ta phải đặt nó trong các ràng buộc với các yếu tố như phần cứng, nhân tố con người, cơ sở dữ liệu,…
Phân tích Thiết kế Kiểm thử Khởi tạo và lập kế hoạch Vận hành, bảo trì Thời gian
- Phân tích: giai đoạn này chịu tác động của công nghệ hệ thống nhưng bản thân nó lại tác động đến tất cả các công đoạn còn lại vì phân tích là nền tảng để chuyển giao tới quy trình thiết kế.
- Thiết kế: bao gồm thiết kế kiến trúc hệ thống và thiết kế kiến trúc kỹ thuật (thiết kế dữ liệu, thiết kế chương trình, thiết kế giao diện, thiết kế xử lý).
-Kiểm thử: giai đoạn 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 thử nhằm phát hiện ra các lỗi và kết quả phù hợp với dữ liệu vào.
-Vận hành, bảo trì: Sau khi bàn giao phần mềm cho khách hàng, để 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 OS hay các thiết bị ngoại vi) cần phải có giai đoạn bảo trì. 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 vòng đời phát triển nói trên cho chưuơng trình hiện tại chứ không phải chương trình mới.
Ngoài mô hình thác nước, người ta còn cải tiến thành các mô hình lặp, tức là không chỉ vận động theo một chiều từ trên xuống mà còn có sự vận động theo chiều ngược lại, người ta cần hoàn chỉnh các bước đã trải qua.
2.2.5. Các phương pháp thiết kế phần mềm.
Có hai phương pháp để thiết kế phần mềm là thiết kế từ đỉnh xuống và thiết kế từ dưới lên.
Phương pháp thiết kế từ đỉnh xuống (Top Down Design – TDD) Phương pháp này áp dụng để thiết kế phần mềm cho những đơn vị chưa có phần mềm hỗ trợ bất cứ nghiệp vụ nào tức là bắt đầu tiến hành tin học hoá. Nó được áp dụng khá phổ biến ở Việt Nam hiện nay.
Đây là một phương pháp thiết kế giải thuật dựa trên tư tưởng module hoá. Nội dung của phương pháp này như sau: Trước hết người ta xác định các vấn đề chủ yếu nhất mà việc giải quyết bài toán yêu cầu, bao quát được toàn bộ bài toán. Sau đó phân chia nhiệm vụ cần giải quyết thành các nhiệm vụ cụ
thể hơn, tức là chuyển dần từ module chính đến các module con từ trên xuống dưới.
Trong đề tài này em cũng sử dụng phương pháp thiết kế từ trên xuống. Mục đích của đề tài là xây dựng chương trình quản lý hợp đồng xây dựng. Trên cơ sở phân tích chức năng cần có của chương trình, em chia module chính của chương trình thành bốn module nhỏ để có phác thảo thứ nhất về bài toán đặt ra:
Đối với mỗi module nhỏ lại được phân chia ra làm nhiều các module con (phác thảo thứ hai) Phần mềm quản lý hợp đồng xây dựng Quản lí danh mục Quản lý hợp đồng Quản lí thanh toán Báo cáo
Như vậy theo phương pháp thiết kế này thì chương trình sẽ có 15 module cơ sở. Mỗi module là một chương trình con giải quyết một vấn đề cụ thể.
Phương pháp thiết kế từ dưới lên (Buttom Up Design – BTU) Phương pháp này áp dụng cho những đơn vị mà trong tổ chức trước đó đã ứng dụng tin học ở một số bộ phận . Tư tưởng của phương pháp này là: Trước hết người ta tiến hành giải quyết các vấn đề cụ thể, sau đó trên cơ sở đánh giá mức độ tương tự về chức năng của các vấn đề này trong việc giải quyết bài toán, người ta gộp chúng lại thành từng nhóm cùng chức năng từ