1.1. Phần mềm -Tiến hóa - Đặc trưng - Chất lượng - Khủng hoảng - Khó khăn pt

Màu nền
Font chữ
Font size
Chiều cao dòng

1.1.1.        Khái niệm

1.1.2.        Tiến hóa của phần mềm

1.1.3.        Đặc trưng và phân loại phần mềm

1.1.4.        Chất lượng phần mềm

1.1.5.        Khủng hoảng phần mềm

1.1.6.        Khó khăn trong phát triển phần mềm

___________________________________________

1.1.1.Khái niệm công nghệ phầm mềm:

-Khái niệm phần mềm

-Một phần mềm gồm 3 thành phần:

+Chương trình máy tính: mã nguồn, mã máy

+Cấu trúc dữ liệu: cấu trúc làm việc (bộ nhớ trong) và cấu trúc lưu trữ (bộ nhớ ngoài)

+Các tài liệu liên quan: tài liệu hướng dẫn sử dụng (dành cho người dùng), tài liệu phát triển (dành cho người phát triển hệ thống), tài liệu tham khảo kỹ thuật (dành cho người bảo trì)

– Phần mềm được coi là tất cả các kỹ thuật ứng dụng để thực hiện những dịch vụ chức năng cho mục đích nào đó bằng phần cứng, làm cho sử dụng phần cứng máy tính đạt hiệu quả cao

*Nhóm kỹ thuật, phương pháp luận:

+Các khái niệm và trình tự cụ thể hóa một hệ thống

+Các phương pháp tiếp cận giải quyết vấn đề

+Các trình tự thiết kế và phát triển được chuẩn hóa

Các phương pháp đặc tả yêu cầu, thiết kế hệ thống, thiết kế chương trình, kiểm thử, toàn bộ quy trình quản lý phát triển phần mềm

*Nhóm chương trình:

+Là phần giao diện với phần cứng, tạo thành từ các nhóm lệnh chỉ thị cho máy tính biết trình tự thao tác xử lý dữ liệu

+Phần mềm cơ bản: với chức năng cung cấp môi trường thao tác dễ dàng cho người sử dụng nhằm tăng hiệu năng xử lý của phần cứng (ví dụ như OS là chương trình hệ thống)

+Phần mềm ứng dụng: dùng để xử lý nghiệp vụ thích hợp nào đó (quản lý, kế toán,) phần mềm đóng gói, phần mềm của người dùng

*Nhóm các tư liệu:

+Những tư liệu hữu ích, có giá trị cao và rất cần thiết để phát triển, vận hành và bảo trì phần mềm

+Để xây dựng phần mềm với độ tin cậy cao cần tạo ra các tư liệu chất lượng cao: đặc tả yêu cầu, mô tả thiết kế từng loại, điều kiện kiểm thử, thủ tục vận hành, hướng dẫn thao tác, …

________________________

1.1.2. Tiến hoá của phần mềm

+Bản thân phần mềm vốn phức tạp.

+Yêu cầu sử dụng phần mềm không ngừng thay đổi

+Sự tiến bộ nhanh của hạ tầng – phần cứng

=> Sự tiến hóa phần mềm là tất yếu

Giai đoạn thứ nhất: (~1960)

+Phần cứng thay đổi liên tục, theo tính chuyên dụng

+Xử lý theo lô

+Môi trường lập trình có tính cá nhân

+Sản xuất đơn chiếc

Ngôn ngữ: mã máy, đặc thù cho từng máy

Lập trình: là một nghệ thuật theo bản năng, chưa có phương phá

Giai đoạn 2: (~giữa thập kỷ 70)

+Phần mềm đa nhiệm, đa người sử dụng

+Hệ thống thời gian thực

+Xuất hiện lưu trữ trực tuyến

Phần mềm trở nên phức tạp

Nhu cầu tăng cao 

Nhiều dự án thất bại

Chi phí tăng

Ngôn ngữ: có cấu trúc: PL1, Algo60, Fortran, COBOL

Lập trình:có phương pháp lập trình

Phát triển HT: chưa có phương pháp, kinh nghiệm là chính

Giai đoạn 3: (~đến nay)

+Hệ thống phân tán

+Mạng cục bộ, toàn cầu

+Bộ vi xử lý phát triển mạnh

Phần mềm ngày càng phức tạp

Sử dụng nhiều máy tính cá nhân, phần mềm nhúng

Số người dùng tăng nhanh

Ngôn ngữ:Ngôn ngữ bậc cao, hướng đối tượng

Phát triển HT: có phương pháp, công cụ tự động

Phần mềm ngày càng phức tạp

+UNIX: 4M dòng lệnh

+Window2K:   ~100M dòng lệnh

+Lý do:

– Năng lực máy tính ngày càng mạnh

–Các hệ thống máy tính được liên kết lại – Nhu cầu của người dùng ngày càng lớn.

Chi phí cho phần mềm cao

+Phần mềm trở thành ngành công nghiệp khổng lồ:

– Chi phí phát triển OS360 (63~66): 200M$

– Chi phí phần mềm năm 1985: 70B$ – Chi phí phần mềm năm 2000: 770B$

(mức tăng 12%/năm)

+Năng suất lập trình vẫn thấp

–   Phát triển phần mềm mang nặng tính thủ công

________________________1.1.3. Đặc điểm phần mềm:

“Phát triển phần mềm khác chế tạo phần cứng”

+Sản xuất mang tính thủ công.

+Khó kiểm soát chất lượng ở khâu trung gian.

+Khó dự đoán trước về hiệu năng.

– Áp dụng các phương pháp tiên tiến

– Công cụ tự đông

+Phần mềm thoái hóa theo thời gian:

–   Môi trường sử dụng, nhu cầu thay đổi

–   Lỗi sinh ra do nâng cấp

+Phần mềm không được lắp ráp theo mẫu

–   Không có danh mục phụ tùng

–   Được đặt hàng hoàn chỉnh theo từng yêu cầu riêng

=>“Bảo trì phần mềm phức tạp hơn hẳn so với bảo trì phần cứng”

+Phần mềm được phát triển theo nhóm

– Năng lực của nhóm không tuyến tính với số thành viên

–   Người giỏi > 5 lần người trung bình

–   Thời gian cho trao đổi thông tin chiếm tỷ lệ cao

=>Khó kiểm soát+Khó tăng tốc độ bằng cách thêm người.

+Phần mềm không đơn giản chỉ là chương trình:

*Chương trình

–1 người viết, 1 người dùng

– dùng với mục đích thu thập xử lý số liệu (dùng 1 lần) – không cần tài liệu, không kiểm thử triệt để

*Sản phầm phần mềm

– Nhiều người viết, nhiều người sử dụng – Độ phức tạp cao, đảm bảo đồng bộ.

Kinh nghiệm viết chương trình nhỏ không áp dụng được cho sản phẩm lớn

+Là hàng hóa vô hình, không nhìn thấy được

+Chất lượng phần mềm: không mòn đi mà có xu hướng tốt lên sau mỗi lần có lỗi (error/bug) được phát hiện và sửa

+Phần mềm vốn chứa lỗi tiềm tàng, nếu quy mô càng lớn thì khả năng chứa lỗi càng cao

+Lỗi phần mềm dễ được phát hiện bởi người ngoài (những người không trực tiếp tham gia xây dựng phần mềm).

+Chức năng của phần mềm thường biến hóa, thay đổi theo thời gian (theo nơi sử dụng).

+Phần mềm luôn chứa những ý tưởng, sáng tạo của tác giả / nhóm tác giả làm ra nó.

+Có thể sao chép phần mềm rất đơn giản

________________________

1.1.3. Phân loại phần mềm:

+Phần mềm hệ thống

Tập hợp các chương trình

Tương tác trực tiếp với phần cứng Phục vụ nhiều người dùng

+Phần mềm thời gian thực

– Thu thập xử lý các dữ kiện thế giới thực – Đáp ứng yêu cầu chặt chẽ về thời gian

. Thu thập dữ liệu

. Phân tích dữ liệu

. Kiểm soát, điều khiển

. Điều phối.

–  Ví dụ: Phần mềm đa phương tiện.

+Phần mềm nghiệp vụ

– Xử lý các thông tin nghiệp vụ, thường gắn với CSDL – Xử lý các giao tác

–   Lĩnh vực ứng dụng rất lớn

+Phần mềm khoa học kỹ thuật

– Đặc trưng bởi thuật toán (tính toán vật lý, mô phỏng) – Đòi hỏi năng lực tính toán cao.

+Phần mềm nhúng (embedded software)

–    Chỉ đọc khi thiết bị khởi động

–   Thực hiện chức năng hạn chế (điều khiển sản phẩm)

–   Là sự kết hợp giữa hệ thống và thời gian thực

+Phần mềm máy tính cá nhân

– Các bài toán nghiệp vụ nhỏ (ứng dụng văn phòng)

– Giao diện đồ họa phát triển. – Có nhu cầu rất cao.

+Phần mềm trí tuệ nhân tạo

–   Dùng các thuật toán phi số

–   Ví dụ: Hệ chuyên gia, nhận dạng, trò chơi,...

+Phần mềm công cụ cho kỹ nghệ phần mềm

–   Ví dụ: các công cụ CASE,...

________________________

1.1.4. Chất lượng phần mềm:

+Những yếu tố chất lượng bên trong như dễ đọc, dễ hiểu mà chỉ những người làm tin học chuyên nghiệp mới biết được.

+Những yếu tố chất lượng bên ngoài người dùng có thể nhận biết được như: tốc độ nhanh, chạy ổn định, dễ sử dụng, dễ thích nghi với những thay đổi..

=> Thông thường chất lượng phần mềm tốt thì giá thành phần mềm cao

+Những yếu tố chính trong chất lượng phần mềm:

–Tính hiệu quả (efficiency): sử dụng hiệu quả các nguồn tài nguyên (bộ nhớ, CPU)

–Tính thân thiện (user friendlyness): dễ sử dụng

–Tính dễ kiểm tra (verifiability): dễ kiểm tra chất lượng

–Tính dễ bảo trì (maintainability): dễ xác định và sửa lỗi, dễ tạo ra những phiên bản mới khi có sự mở rộng.

-Tính tái sử dụng (reusability): dễ tái sử dụng trong những phần mềm mới

-Tính khả chuyển (portability):dễ sử dụng trong các môi trường mới.

-Tính dễ hiểu (understandability): dễ hiểu đối với người sử dụng cũng như đối với người phát triển

-Tính hợp tác (interoperability): dễ hợp tác với các phần mềm khác

-Sản xuất hiệu quả (productivity): tiến trình sản xuất phần mềm phải hiệu quả.

-Khảnăng giao sản phẩmđúng hạn(timeliness): giao sản phẩm theo từng gói

-Tính trong suốt (visibility):

*Đối với người phát triển/ người quản lý

.Hiểu rõ tiến độ phát triển

.Hiểu rõ ảnh hưởng của các quyết định

*Đối với khách hàng

.Hiểu rõ tiến độ phát triển

.Hiểu rõ ảnh hưởng của các quyết định

-Sự thỏa hiệp giữa các tiêu chuẩn chất lượng

.Tính thân thiện / tính bền vững – Tính khả chuyển / tính hiệu quả

+Tính bảo trì được

“Phần mềm luôn luôn cần được sửa đổi”

Để sửa đổi được phần mềm

+Thiết kế dễ hiểu, dễ sửa đổi (thiết kế tốt)

+Cài đặt bằng ngôn ngữ bậc cao

+Có đầy đủ tài liệu

–   Có tuổi thọ cao

–   Đem lại hiệu quả kinh tế

+Tính tin cậy

Phần mềm không có khiếm khuyết

+lỗi lập trình

+lỗi phân tích, thiết kế: sai, thiếu chức năng, hoạt động không hiệu quả.

Phần mềm phải đáng tin cậy

Đáp ứng được nhu cầu người sử dụng

+Tính hiệu quả

Khi vận hành không lãng phí tài nguyên phần cứng

Bộ nhớ trong

Tốc độ

Bộ nhớ ngoài

Tối ưu nhiều sẽ dẫn tới khó bảo trì,

giá thành cao

–   Dùng ngôn ngữ bậc thấp

–   Truy cập trực tiếp đến thiết bị

+Tính dễ dùng

-Giao diện nhất quán, phù hợp với trình độ của người dùng.

-Có tài liệu, tiện ích trợ giúp

Quyết định thành công của sản phẩm

Nhận xét

Khó tối ưu đồng thời các thuộc tính hiệu quả >< dễ bảo trì, dễ sử dụng

 Chi phí cho tối ưu là không tuyến tính

giá thành

> Giá cảchi cho việc tốiưu PM phải hợp lý

________________________

1.1.5. Khủng hoảng phần mềm:

Về mặt sản phẩm

o Chất lượng sản phẩm phần mềm

o Không đáp ứng yêu cầu thực tế o Khó sử dụng

o Không tin cậy

o Khó bảo trì

o Khách hàng không hài lòng

Về mặt quản lý:

-  Kế hoạch

Không đánh giá đúng giá thành PM

Không đúng tiến độ

Chi phí phát triển / chi phí bảo trì

–   Về mặt pháp lý

Hợp đồng không rõ ràng, không chặt chẽ

–   Nhân lực

Đào tạo sử dụng phần mềm

Giao tiếp giữa bên xây dựng PM và bên sử dụng PM

– Thiếu tiêu chuẩn đánh giá sản phẩm – Thiếu quy trình quản lý

+Điều tra của General Acounting Office trên nhiều dự án với tổng vốn đầu tư hàng trăm triệu $ thì phần mềm:

– Không giao sản phẩm: 29%

– Không được sử dụng: 47%

– Được sử dụng sau khi đã chỉnh sửa: 3% – Tốt: 2%

________________________

1.1.6. Khó khăn trong phát triển PM:

“Khó sản xuất được phần mềm có chất lượng theo đúng lịch trình và kinh phí cho trước”

Phần  mềm  là  phần  tử logic:  không  kiểm  soát được theo phương pháp thông thường

.trong sản xuất (rủi ro, tính thủ công)

.trong bảo trì (lớn, phức tạp, thay đổi nhanh)

.trong kiểm soát chất lượng(làm thủ công,nhiều người,nhiều công đoạn )

+Khả năng xây dựng phần mềm không đáp ứng kịp nhu cầu tăng nhanh trong mọi lĩnh vực xã hội.

+Quy mô, độ phức tạp PM ngày càng tăng khiến chi phí phát triển bảo trì ngày càng tốn kém

+Sự tinh vi của phần cứng vượt xa khả năng tạo ra phần mềm để khai thác nó.

=>Cần có những phương pháp, công cụ hiện đại

+(1) Không có phương pháp mô tả rõ ràng định nghĩa yêu cầu của người dùng (khách hàng), sau khi bàn giao sản phẩm dễ phát sinh những trục trặc (troubles)

+(2) Với những phần mềm quy mô lớn, tư liệu đặc tả đã cố định thời gian dài, do vậy khó đáp ứng nhu cầu thay đổi của người dùng một cách kịp thời trong thời gian đó.

+(3) Nếu không có Phương pháp luận thiết kế nhất quán mà thiết kế theo cách riêng (của công ty, nhóm), thì sẽ dẫn đến suy giảm chất lượng phần mềm (do phụ thuộc quá nhiều vào con người).

+(4) Nếu không có chuẩn về làm tư liệu quy trình sản xuất phần mềm, thì những đặc tả không rõ ràng sẽ làm giảm chất lượng phần mềm.

Nếu không kiểm thử tính đúng đắn của phần mềm ở từng giai đoạn mà chỉ kiểm thử ở giai đoạn cuối và phát hiện ra lỗi, thì thường bàn giao sản phẩm không đúng hạn.

+(6) Nếu coi trọng việc lập trình hơn khâu thiết kế thì thường dẫn đến làm giảm chất lượng phần mềm.

+(7) Nếu coi thường việc tái sử dụng phần mềm (software reuse), thì năng suất lao động sẽ giảm.

Trong quy trình phát triển phần mềm có nhiều thao tác do con người thực hiện, do vậy năng suất lao động thường bị giảm.

+(9) Khi không chứng minh được tính đúng đắn của phần mềm đang xây dựng thì độ tin cậy của phần mềm sẽ giảm.

+(10) Chuẩn về một phần mềm tốt không thể đo được một cách định lượng, do vậy khó có thể đánh giá được một hệ thống đúng đắn hay không.

+(11) Khi đầu tư nhân lực lớn vào bảo trì sẽ làm giảm hiệu suất lao động của nhân viên.

+(12) Công việc bảo trì kéo dài làm giảm chất lượng của các tài liệu liên quan và ảnh hưởng xấu đến những việc khác.

+(13) Quản lý dự án lỏng lẻo kéo theo quản lý lịch trình cũng không rõ ràng

 +(14) Nếu không có tiêu chuẩn để ước lượng nhân lực và dự toán sẽ làm kéo dài thời hạn và vượt kinh phí của dự án.

=> Đây là những vấ n đề ph ản ánh các khía cạnh khủng hoả ng và khó khăn trong phát triển phần mềm, hãy tìm N cách nỗ lực vượt qua để tạo ra phần mềm tốt! 

Bạn đang đọc truyện trên: Truyen2U.Pro