Mục tiêu Những luồng công việc và sự kiện trong nỗ lực phát triển phần mềm Vai trò của kỹ sư phần mềm trong việc xây dựng phần mềm Cung cấp những kiến thức nền tảng, tạo điều kiện c
Trang 1Công nghệ Phần mềm (Software Engineering)
Tài liệu tham khảo
Software Engineering - A practitioner’s approach, R.S Pressman, McGraw-Hill (ebook)
Ian Sommerville’s , “Software Engineering 7th Ed.”
Nhập môn kỹ nghệ phần mềm; Ngô Trung Việt, Nguyễn kim Ánh; NXB Khoa học và kỹ thuật
http://www.mhhe.com/pressman
Trang 2Mục tiêu
Những luồng công việc và sự kiện trong nỗ lực phát triển phần mềm
Vai trò của kỹ sư phần mềm trong việc xây dựng phần mềm
Cung cấp những kiến thức nền tảng, tạo điều kiện cần thiết để sinh viên vận dụng trong thực tế sản xuất phần mềm: phân
tích, thiết kế, tạo code, kiểm thử và bảo trì, cũng như các công việc hỗ trợ như: Quản lý chất lượng, quản lý dự án…
Trang 3Kế hoạch học
Thời gian: 45 tiết (9 tuần x 5)
Kiểm tra
Điểm giữa học kỳ được tính 20% (tuần 5 – tự luận)
Điểm tiểu luận được tính 30% (nhận vào tuần thứ 2)
Điểm thi kết thúc học phần được tính 50% (trắc nghiệm)
Trang 4Yêu cầu
Có kiến thức về ngôn ngữ lập trình và đã từng lập trình các ứng dụng cơ bản, cấu trúc dữ liệu và giải thuật
Có hiểu biết về mạng máy tính, Cơ sở dữ liệu
Trang 71 Phần mềm (Software)?
Sản phẩm phần mềm là những chương trình điều khiển máy tính để thực hiện các chức năng hữu ích, nó thường bao gồm các tài liệu hướng dẫn
Trong sản xuất phần mềm, các tài liệu đi theo với phần mềm
là hết sức cần thiết Các tài liệu đó là: tài liệu phân tích, tài liệu
về kiến trúc phần mềm, các dữ liệu kiểm thử (testing), các tài liệu về các thành phần sử dụng lại, tài liệu theo dõi các phiên bản…
Ngoài việc cung cấp phần mềm, đơn vị sản xuất thường kèm theo các công việc như: cài đặt, bảo trì, nâng cấp, huấn
luyện…
Trang 8Phần mềm dùng làm gì?
Phần mềm là một sản phẩm
Dùng cho tính toán.
Tạo, quản lý, thu nhận, biến đổi, thể hiện hay là truyền thông tin.
Phần mềm là một phương tiện tạo sản phẩm
Hỗ trợ hay cung cấp trực tiếp các chức năng cho hệ thống.
Điều khiển những chương trình khác (HĐH).
Thực hiện truyền thông (PM Mạng).
Giúp cho việc tạo các chương trình khác (Tool, Framework).
Trang 10source codes
object
reports
manuals documents
data test results
Phần mềm gồm những gì?
Trang 12Lỗi theo thời gian
Trang 13 Nhiều phần mềm thiết kế nghèo nàn đang gây lỗi.
Nhu cầu phần mềm không ngừng gia tăng
Chúng ta đang ở trong tình trạng khủng hoảng không
ngừng (‘SW crisis’)
Chúng ta phải học để phát triển phần mềm
Trang 14Hai loại sản phẩm phần mềm
Các sản phẩm phần mềm được chia thành 2 nhóm:
Sản phẩm đại trà (Generic Product)
Sản phẩm theo đơn hàng (Bespoke Product hoặc
Customised Product)
Một phần mềm mới có thể được tạo ra bằng cách phát triển các chương trình mới, thay đổi và điều chỉnh các hệ thống phần mềm đại trà hoặc tái sử dụng lại các phần
mềm đã tồn tại…
Trang 161.16
Trang 172 Công nghệ phần mềm?
Công nghệ phần mềm là sự thiết lập và sử dụng những
nguyên lý công nghệ đúng đắn nhằm đạt được phần mềm có tính kinh tế tức là phần mềm có tính tin cậy và làm việc hiệu quả trên những máy móc thực
Công Nghệ Phần Mềm (software engineering): là sự áp dụng những phương pháp có tính hệ thống, có qui tắc và có thể
định lượng được nhằm phát triển, vận hành và bảo trì phần
mềm, tức là áp dụng những kiến thức công nghệ vào phần
mềm (theo IEEE)
Trang 18 Software engineering is the establishment and use of
sound engineering principles in order to obtain
economically software that is reliable and works efficiently
on real machines
Software engineering is the application of a systematic,
disciplined, quantifiable approach to the development,
operation and maintenance of software, that is , the
application of engineering to software [IEEE90a]
Software Engineering?
Trang 19Phát triển sản phẩm phần mếm
Công nghệ phần mềm
Nguyên tắc :
1 Tập trung vào vào việc phát triển hệ thống phần mềm chất lượng
cao với chi phí hiệu quả.
2 Tập trung vào tất cả các khía cạnh của sản phẩm phần mềm
• Từ: Đặc tả.
• Tới: Phát hành và sử dụng.
Trang 20 Chi phí phần mềm chiếm phần lớn trong những hệ
thống dựa vào phần mềm
Đối với những hệ thống có chu kỳ sống dài chi phí
bảo trì có thể cao hơn chi phí phát triển nhiều lần
Công nghệ phần mềm thì bị chi phối bởi lợi nhuận.
Tại sao phải kỹ nghệ phần mềm?
Trang 21Công nghệ học trong CNPM ?
Như các ngành công nghệ học khác, CNPM cũng lấy các
phương pháp khoa học làm cơ sở
Các kỹ thuật về thiết kế, chế tạo, kiểm thử và bảo trì phần
mềm đã được hệ thống hóa thành phương pháp luận và hình thành nên CNPM
Toàn bộ qui trình phát triển phần mềm gắn liền với khái niệm chu kỳ sống phát triểncủa phần mềm (Software development Life Cycle).
Trang 223 Lịch sử phát triển CNPM…
Năm 1968: Tại Tây Đức, Hội nghị khoa học của NATO đã đưa
ra từ “Software Engineering” Bắt đầu bàn luận về khủng
khoảng phần mềm và xu hướng hình thành CNPM như một ngành riêng
Giữa những năm 1970: Hội nghị quốc tế đầu tiên về CNHPM được tổ chức (1975): International Conference on SE (ICSE)
Nửa sau những năm 1970: Cuộc “cách tân sản xuất phần
mềm” đã bắt đầu trên phạm vi các nước công nghiệp
Nửa đầu những năm 1980: Xuất hiện các sản phẩm phần
mềm và các công cụ khác nhau làm tăng năng suất sản xuất phần mềm đáng kể, phát triển các kỹ thuật bảo trì
Trang 23Lịch sử phát triển CNPM
Nửa cuối những năm 1980 đến nay: Chất lượng phần mềm tập trung chủ yếu ở năng suất, độ tin cậy và việc bảo trì
Nghiên cứu hỗ trợ tự động hóa sản xuất phần mềm Nhiều
trung tâm, viện nghiên cứu CNPM ra đời Các trường đưa vào giảng dạy SE
Hiện nay:
Công nghiệp hóa sản xuất phần mềm bằng cách đưa những kỹ thuật công nghệ học (Engineering techniques) thành cơ sở khoa học của CNPM.
Vận dụng những lý luận trong sản xuất phần mềm và áp dụng các phương pháp luận một cách nhất quán.
Tăng cường nghiên cứu và tạo công cụ trợ giúp sản xuất phần mềm.
Trang 24Sự tiến triển của các phương pháp phát triển PM
1970
Phương pháp luận về quy trình thiết kế phần mềm với phương pháp phân chia môđun và thiết kế trong từng môđun.
Phát triển: nửa đầu 1980
Ngôn ngữ đối thoại đơn giản (4GL, DB SQL).
Hệ trợ giúp: Hệ trợ giúp kiểm thử; Hệ trợ giúp quản lý thư viện mã; Hệ trợ giúp tái sử dụng.
Biến đổi: nửa cuối 1980 đến nay
Đưa ra các môi trường mới về phát triển phần mềm Triển khai mới về kết hợp giữa CNPM và CN Tri thức (Knowledge
Engineering).
Triển khai những môi trường bậc cao về phát triển phần mềm;
Tự động hóa sản xuất phần mềm; Tạo bản mẫu (Prototyping); Lập trình hướng đối tượng - OOP; Hướng sử dụng thành phần (component).
Trang 254 Những thách thức đối với CNPM…
Cứ 6 đề án triển khai thì có 2 bị huỷ bỏ.
Trung bình thời gian thực hiện thực tế bị kéo dài 50% (cá biệt 200-300%).
Các đề án lớn dễ thất bại.
3/4 các hệ thống lớn có lỗi khi thực thi.
Quá trình phân tích yêu cầu (5% công sức): để lại 55% lỗi, có 18% phát hiện được.
Quá trình thiết kế (25% công sức): để lại 30% lỗi, có 10% phát hiện được.
Quá trình mã hoá, kiểm tra và bảo trì: để lại 15% lỗi, có 72%
phát hiện được.
Trang 26Những thách thức đối với CNPM
Nguyên nhân
Phát triển phần mềm giống như một nghệ thuật, chưa được xem như một ngành khoa học
Quá trình phát triển phần mềm chưa được thống nhất
Phải viết lại s/w mỗi khi có sự thay đổi về ngôn ngữ, h/w hoặc o/s
Chưa đạt được 1 chuẩn cho việc đo lường hiệu suất và sản phẩm
Độ phức tạp của phần mềm quá cao đối với 1 “kiến trúc sư”
Kỹ thuật đặc tả để lại sự nhập nhằng trong các yêu cầu phần mềm
Làm việc nhóm không đúng kỷ luật gây ra các lỗi
Trang 28Những thách thức chính phải đối mặt
Thách thức về hệ thống cũ (The Legacy Challenge)
Thách thức về tính không đồng nhất (The Heterogeneity
Challenge)
Thách thức về phát hành (The Delivery Challenge) và độ tin cậy
Trang 29Ariane 5
Trang 30Các tầng trong công nghệ phần mềm
Software Engineering
a “quality” focus
process methods tools
5 Một số thuật ngữ công nghệ phần mềm
Trang 31Qui trình phần mềm
Qui trình (process) phần mềm
Gồm một tập hợp các hoạt động được tổ chức mà mục đích của nó là xây dựng và phát triển phần mềm.
Quy trình phần mềm xác định một bộ khung và tiêu chuẩn để triển khai công nghệ phần mềm.
Tất cả các qui trình đều có những bước 5 cơ sở: phân tích;
thiết kế; hiện thực mã; kiểm thử; triển khai.
Qui trình: Phải thực hiện những công việc gì?
Phương pháp (method): chỉ ra cách thực hiện những công việc cụ thể (“how to”)
Trang 32 Yêu cầu chức năng
Yêu cầu phi chức năng
Trang 33Hiện thực, Kiểm thử, Triển khai
Hiện thực: Tạo mã theo thiết kế
Chuyển giao công nghệ
Hướng dẫn sử dụng: đào tạo, tài liệu hướng dẫn
Bảo trì và tiến hóa
Trang 35CASE (Computer Aided Software Engneering)
Các công cụ CASE thường được sử dụng để hỗ trợ các
hoạt động trong quy trình xây dựng phần mềm Có hai loại công cụ CASE:
Upper-CASE: công cụ để hỗ trợ các hoạt động đầu tiên như đặc tả yêu cầu và thiết kế
Lower-CASE: công cụ để hỗ trợ các hoạt động sau như lập
trình, gỡ lỗi và kiểm thử.
Trang 36CASE
Trang 37Hạn chế của công cụ CASE
Công nghệ phần mềm đòi hỏi khả năng suy nghĩ sáng tạo
điều này hầu như không thể được tạo tự động
Công nghệ phần mềm là hoạt động nhóm, tốn nhiều thời gian cho những tương tác nhóm mà kỹ thuật CASE không thể hỗ trợ tốt
Trang 38Những yêu cầu đối với phần mềm
Phần mềm phải đáp ứng
Khả năng bảo trì (Maintainability): phần mềm có thể duy trì hoạt động, có thể điều chỉnh và mở rộng để thoả mãn những yêu cầu luôn thay đổi
Mức độ tin cậy (Reliability-Dependability): phần mềm phải
được tin cậy, bảo mật và chính xác
Hiệu quả (efficiency): phần mềm không nên sử dụng lãng phí tài nguyên của hệ thống
Khả năng được chấp nhận (acceptability-Usability): người sử dụng phải chấp nhận phần mềm Điều đó có nghĩa là nó phải
dễ hiểu, sử dụng được và tương thích với các hệ thống khác
Trang 39Các nhân tố chất lượng
Trang 40Chất lượng và Stakeholder
QUALITY SOFTWARE
Development manager:
sells more and pleases customers while costing less
to develop and maintain
Trang 41CNPM và Khoa học máy tính, Công nghệ hệ thống
Khoa học máy tính đề cập tới lý thuyết và những vấn đề cơ bản; còn công nghệ phần mềm đề cập tới các hoạt động xây dựng và đưa ra một phần mềm hữu ích
Khi sự phát triển của phần mềm trở lên mạnh mẽ thì các lý thuyết của khoa học máy tính vẫn không đủ để đóng vai trò là nền tảng hoàn thiện cho công nghệ phần mềm
Công nghệ hệ thống liên quan tới tất cả các khía cạnh của
quá trình phát triển hệ thống dựa máy tính bao gồm: phần
cứng, phần mềm, và công nghệ xử lý Công nghệ phần mềm chỉ là một phần của Công nghệ hệ thống
Trang 426 Nghề nghiệp
Kỹ sư phần mềm
Các kỹ sư phần mềm nên tuân theo một phương pháp luận có
hệ thống và có tổ chức trong công việc của họ Đồng thời, họ nên sử dụng các công cụ và kỹ thuật thích hợp với vấn đề cần giải quyết, các ràng buộc và tài nguyên sẵn có
Trang 43Kỹ năng
Phân tích thiết kế hệ thống, mô hình hóa
Sử dụng bản mẫu (prototype)
Chọn phần cứng, phần mềm
Quản lý cấu hình, lập sơ đồ và kiểm soát tiến trình
Lựa chọn ngôn ngữ và phát triển chương trình
Xác định, đánh giá, cài đặt, chọn phương pháp, công cụ CASE
Kiểm tra, kiểm Thử (testing)
Lựa chọn và sử dụng kỹ thuật bảo trì phần mềm
Đánh giá và quyết định khi nào loại bỏ và nâng cấp các ứng dụng
Trang 44Contemporary IS Services Organization
Trang 45Tester (Người kiểm thử)
Nghiên cứu yêu cầu của khách hàng, các chi tiết yêu cầu về phần mềm và cách đánh giá.
Lập kế hoạch kiểm thử (test plan) dựa trên phân tích rủi ro, mức độ quan trọng, tần suất sử dụng và xác định các yếu tổ liên quan như: phương pháp, đo lường, nguồn lực, điều kiện kiểm tra…
Tạo test cases/specs/scripts.
Tiến hành test dựa trên test case và ghi báo cáo (Thành công hoặc Lỗi).
Log các lỗi tìm được và lập báo cáo (test report).
Phân tích các biến đổi (change), cập nhật các tài liệu kiểm thử (Test plan, test cases…).
Trang 46 Nghiên cứu automation test tools và áp dụng vào test dự án
Đề xuất cải tiến qui trình kiểm thử, lập lưu đồ, hướng dẫn, biểu mẫu… để thực hiện và quản lý việc kiểm thử.
Trang 47QA (Quality Assurance - bảo đảmchất lượng)
Các nhân viên QA sẽ kiểm tra chất lượng công việc trong cả quá trình sản xuất, ví dụ xem xét tài liệu yêu cầu, tài liệu thiết
kế hay xem xét mã nguồn Họ cũng xem xét các ý kiến phản hồi của khách hàng và cách thức các đội dự án xử lý vấn đề
QA thu thập thông tin của các dự án, các chỉ báo chất lượng của dự án, từ đó vẽ nên bức tranh chung về tình hình chất
lượng sản xuất của cả công ty
Công việc của QA vừa mang tính chất giám sát, vừa mang tính hỗ trợ cho hoạt động của dự án
Trang 48Người Quản lý dự án (Project Manager)
Thỏa mãn các mục tiêu phạm vi, thời gian, chi phí và chất lượng dự án
Thỏa mãn được nhu cầu và mong đợi của mọi người
có liên quan hoặc bị ảnh hưởng bởi dự án.
PM thực hiện các nhiệm vụ chính sau: lập kế hoạch, tạo lịch biểu, cộng tác, và giao tiếp để đạt mục tiêu của dự án
97% sự thành công của dự án là nhờ vào PM.
Trang 50Các kỹ năng cần thiết của người Quản lý Dự án.
Kỹ năng giao tiếp: lắng nghe, thuyết phục.
Kỹ năng tổ chức: lập kế hoạch, xác định mục tiêu, phân tích.
Kỹ năng xây dựng nhóm: thấu hiểu, thúc đẩy, tinh thần đồng
đội
Kỹ năng lãnh đạo: năng động, có tầm nhìn, biết giao nhiệm
vụ, lạc quan
Kỹ năng đối phó: linh hoạt, sáng tạo, kiên trì, chịu đựng.
Kỹ năng công nghệ: kinh nghiệm, kiến thức về dự án
Trang 51Các khu công nghiệp tập trung (2005)
Sài gòn Software Park – SSP: thành lập năm 2000, 15 doanh nghiep thành viên, 500 người làm việc
Đà Nẵng Software Park – DSP: 2001, 9 doanh nghiệp, trên
E-Town: 2001, 20 doanh nghiệp IT, 1000 làm về IT
Huế Software Park: 2001
Unisoft: 2003, 5 doanh nghiệp thành viên, 100 người
Trang 527 Các nhận thức sai lầm
Tôi dễ dàng biến đổi phần mềm
Thực tế: Những thay đổi yêu cầu là nguyên nhân chính làm giảm giá trị phần mềm.
Tôi có thể giải quyết vấn đề lịch biểu bằng cách thêm người
Thực tế: Nó có thể đòi hỏi gia tăng nỗ lực phối hợp làm giảm
hiệu suất.
Định luật Brooks: “Thêm người vào một Dự án phần mềm bị
chậm thì chỉ làm cho nó chậm hơn”.
Chỉ cần xem xét sơ lược các yêu cầu, chúng tôi có thể bắt
đầu viết code
Thực tế: đó thường là nguyên nhân chính gây ra lỗi.
Trang 54Những sai lầm
Phần quan tâm hầu như duy nhất là mã
Tài liệu, thông tin kiểm thử và cấu hình phần mềm cũng là
những phần then chốt trong việc chuyển giao.
Lập trình giỏi thì hầu như là sẽ tạo được phần mềm chất
lượng
Những dự án phần mềm được hoàn tất bởi những nhóm, không phải cá nhân, để thành công cần nhiều hơn là tạo mã.
Tạo mã là công việc nặng nhọc nhất
Tạo mã: ít hơn 10% công sức.