Search…

Giới Thiệu về Kỹ Thuật Phần Mềm – Software Engineering

14/09/20207 min read
Software Engineering là một phần của System Engineering - liên quan đến mọi mặt của việc phát triển "hệ thống dựa trên máy tính" (Computer-based System), chính vì thế System Engineering bao gồm cả phần cứng, phần mềm, và quy trình kỹ thuật.

Giới thiệu

Trong một thế giới mà Internet và máy tính đang trở nên cần thiết bao giờ hết, thì việc phát triển phần mềm là một yếu tố không thể thiếu. Phát triển phần mềm là một quá trình phức tạp, gồm nhiều công đoạn. Bài viết này đưa ra một số khái niệm cơ bản về kỹ thuật phần mềm (Software Engineering – SE) và một số vấn đề liên quan.

Việc nắm được các khái niệm cũng như công đoạn phát triển phần mềm là yếu tố sống còn cho một dự án, nắm vững được những điều trên giúp cải thiện tiến độ và chất lượng sản phẩm.

Khái niệm cơ bản

Software là gì?

Software là chương trình máy tính và các tài liệu liên quan (yêu cầu, mô hình thiết kế, hướng dẫn sử dụng).

Sản phẩm software

  • Phổ thông (Generic) - nhắm tới nhiều loại khách hàng. Ví dụ: MS Windows, Adobe Photoshop.
  • Tùy chỉnh (Custom) – sản phẩm chỉ dành cho một hoặc một nhóm khách hàng, và được thiết kế theo yêu cầu của họ.

Cách thức phát triển software

  • Phát triển chương trình mới.
  • Tùy biến hệ thống đã có.
  • Sử dụng lại phần mềm đã có.

Software Engineering là gì?

Software Engineering là một lĩnh vực kỹ thuật bao gồm tất cả các mặt của việc sản xuất phần mềm. Mục tiêu:

  • Sử dụng chi phí hiệu quả.
  • Đúng thời hạn.
  • Chất lượng cao.
  • Thỏa mãn nhu cầu người dùng.

Yếu tố nào làm nên phần mềm tốt?

  • Khả năng bảo trì (Maintainability): Software phải có khả năng tiến hóa (evolve) để đáp ứng sự thay đổi trong nhu cầu.
  • Độ tin cậy (Dependability): Software luôn phải có tính tin cậy cao.
  • Hiệu quả (Efficiency): Software phải sử dụng tài nguyên hiệu quả.
  • Chấp nhận (Acceptability): Software phải được người dùng chấp nhận. Hơn nữa, software phải dễ hiểu, khả dụng và tương thích với các hệ thống khác.

Các thử thách trong Software Engineering

Có rất nhiều thử thách trong Software Engineering, có thể kể đến:

  • Đa dạng: các kỹ thuật để phát triển software trên nhiều nền tảng.
  • Độ tin cậy: các kỹ thuật để làm software đạt được sự tin tưởng của người dùng.
  • ...

Software Process (Quy trình phần mềm) là gì?

Software Process là tập hợp những hoạt động với mục tiêu là sự phát triển và tăng tiến của phần mềm. Nhìn chung, Software Process có những hoạt động:

  • Cấu hình (Specification): hệ thống phần mềm sẽ làm gì và các ràng buộc trong phát triển.
  • Phát triển (Development): sản xuất hệ thống phần mềm.
  • Xác thực (Validation): kiểm tra xem hệ thống phần mềm có đáp ứng được nhu cầu người dùng
  • Tăng tiến / tiếng hóa (Evolution): thay đổi phần mềm để phù hợp với những sự thay đổi trong nhu cầu của người dùng.

Software Process Model (Mô hình quy trình phần mềm) là gì?

Software Process Model là mô hình giản lược của các quy trình phần mềm (Software process) và từ một góc nhìn cụ thể:

  • Góc nhìn Workflow: chuỗi các hoạt động phát triển.
  • Góc nhìn Data-flow: thông tin về các dòng dữ liệu.
  • Góc nhìn Role/action: vai trò của các thành viên.

Một số mô hình thường gặp:

  • Thác nước (Waterfall)
  • Vòng lặp (Iterative Development)
  • Kỹ thuật phần mềm hướng thành phần (Component-based software engineering)

Software Engineering Methods (Phương pháp trong kỹ thuật phần mềm) là gì?

  • Các phương pháp đã được cấu trúc trong việc pháp triển phần mềm: mô hình hệ thống, ký hiệu, ...
  • Mô tả của các mô hình (Model descriptions): các mô hình luôn phải kèm theo mô tả.
  • Luật (Rules): các ràng buộc trong mô hình hệ thống.
  • Khuyến cáo (Recommendations): các khuyến cáo về phương pháp thiết kế hiệu quả.
  • Hướng dẫn quy trình (Process guidance): các hoạt động cần làm theo.

Chi phí

Thông thường, quá trình phát triển sẽ chiếm khoảng 60%, 40% còn lại dành cho việc testing.

Với phần mềm tùy biến (custom software), chi phí evolution (tiến hóa) nhiều khả năng sẽ nhiều hơn chi phí phát triển.

Các yếu tố tác động đến chi phí: Yêu cầu, độ phức tạp, nhân lực, v.v.

CASE là gì?

CASE (Computer-Aided Software Engineering): hệ thống hỗ trợ tự động hóa cho các hoạt động trong quy trình phần mềm. Có 2 loại CASE:

  • Upper-CASE: Công cụ hỗ trợ quá trình thiết kế và yêu cầu.
  • Lower-CASE: Công cụ hỗ trợ các hoạt động lập trình, debug, và testing.

Trách nhiệm

Software Engineering bao gồm rất nhiều trách nhiệm, không chỉ riêng về mặt kỹ thuật. Kỹ sư phần mềm chuyên nghiệp luôn phải trung thực và có trách nhiệm đạo đức. Đạo đức ở đây không phải chỉ tuân phủ luật pháp.

  • Tuyệt mật: kỹ sư luôn phải tôn trọng đồng nghiệp, nhân viên và khách hàng cho dù điều khoản bảo mật có được ký kết hay không.
  • Chuyên môn: kỹ sư không được cố ý làm những việc ngoài chuyên môn.
  • Quyền sở hữu trí tuệ: kỹ sư luôn phải tuân thủ luật về việc sử dụng các sở hữu trí tuệ như patents, copyright, .... Họ cũng cần phải đảm bảo rằng sở hữu trí tuệ của khách hàng và nhân viên được bảo mật.
  • Trung thực: kỹ sư không được lạm dụng khả năng của mình để sử dụng sai máy tính của người khác.

ACM/IEEE Code of Ethics

Tổ chức ACM/IEEE đã đưa ra Code of Ethics (Nguyên tắc đạo đức) cho các chuyên gia kỹ thuật phần mềm. Nó được sử dụng khi các kỹ sư đưa ra quyết định dựa trên hành động của họ.

Các nguyên tắc được mô tả chi tiết ở: http://www.acm.org/about/se-code

Tổng kết

Đây là một bài viết khá dài nên việc tổng hợp lại kiến thức là quan trọng. Những điểm quan trọng mà bạn đọc cần nắm:

  • Software Engineering là một lĩnh vực kỹ thuật bao gồm tất cả các mặt của việc sản xuất phần mềm.
  • Sản phẩm Software bao gồm chương trình phần mềm và tài liệu liên quan.
  • Software Process bao gồm những hoạt động trong quá trình phát triển phần mềm.
  • Kỹ sư phần mềm phải có trách nhiệm với sản phẩm và xã hội

Ngoài lề

Ngoài lề 1: Software Engineering và Computer Science?

Bạn có thể gặp một số thắc mắc về sự khác nhau của hai lĩnh vực này từ những người ngoài ngành. Trong giới hạn của bài viết, đây là sự khác nhau cơ bản của hai lĩnh vực trên:

  • Computer Science (Khoa học máy tính): liên quan về nguyên lý và lý thuyết của máy tính
  • Software Engineering (Kỹ thuật phần mềm): liên quan về tính thực tiễn của việc phát triển và cung cấp phần mềm hữu ích.

Kiến thức về Computer Science là cần thiết nhưng không đủ để sản xuất phần mềm thành công.

Ngoài lề 2: Software Engineering và System Engineering?

Software Engineering là một phần của System Engineering. Bởi vì, System Engineering liên quan đến mọi mặt của việc phát triển “hệ thống dựa trên máy tính” (Computer-based System). Chính vì thế, System Engineering bao gồm cả phần cứng, phần mềm, và quy trình kỹ thuật.

Ngoài lề 3: Software Engineering không hề dễ dàng

Theo báo cáo Standish Group CHAOS Report năm 2003, có đến 51% dự án trễ hạn, thậm chí 15% dự án phải ngưng phát triển. Điều này nói lên tầm quan trọng của việc nắm vững và thực hành Software Engineering.

Software Engineering
Standish Group CHAOS Report (2003)
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024