STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

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

    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.
    22/09/2014
    14/09/2020
    7 phút đọc
    Giới Thiệu về Kỹ Thuật Phần Mềm – Software Engineering

    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)
    0 Bình luận

    Đề xuất

    Nội Dung Trọng Tâm Thi ISTQB Advanced Level
    Bài viết giới thiệu về nội dung bài thi nâng cao (Advanced Level) để ...
    Vuforia & Thực Tại Tăng Cường - Phần 1: Giới Thiệu
    Giới thiệu về Vuforia - nền tảng hỗ trợ xây dựng các ứng dụng thực tại ...

    Khám phá

    CBP-0: Giới Thiệu về Component Base Development
    Phương pháp lập trình Hướng thành phần (Component-base Development - ...
    Kỹ Thuật Grayscale và Nhị Phân Hoá Ảnh (Adaptive Threshold)
    Giới thiệu và chi tiết các thuật toán Grayscale, ảnh nhị phân và một số ...
    Giới Thiệu về Sprite - Sprite Sheet - Sprite Animation
    Giới thiệu về Sprite - Sprite Sheet - Sprite Animation, hướng dẫn 1 số ...
    Tổng Quan Về Thực Tại Ảo - Virtual Reality
    Tổng thể về thực tại ảo, những thành phần chính của hệ thống và xu hướng ...
    Sơ Lược về Phong Cách Lập Trình
    Bài viết là một vài chia sẻ về cách hình thành phong cách lập trình để ...
    Box2D - Phần 1: Giới Thiệu - Một Số Thuật Ngữ và Khái Niệm
    Giới thiệu engine xử lý vật lý Box2D, các khái niệm, cách thành phần ...
    Sơ Lược Về Tổ Chức IEEE
    IEEE (phát âm: i – triple - e) là tổ chức danh giá của cộng đồng khoa ...
    Phép Tích Chập Trong Xử Lý Ảnh (Convolution)
    Convolution là kỹ thuật quan trọng trong Xử Lý Ảnh, được sử dụng chính ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020