Công nghệ phần mềm là một lĩnh vực khoa học máy tính nghiên cứu về cách làm phần mềm; nó sử dụng các mô hình, ngôn ngữ, phương pháp, cơ chế và công cụ để xây dựng, đánh giá và cải tiến phần mềm cũng như quy trình làm phần mềm.
Theo IEEE, công nghệ phần mềm là “việc áp dụng một cách có hệ thống các kiến thức, phương pháp, kinh nghiệm từ khoa học và công nghệ vào việc thiết kế, triển khai, thử nghiệm và lập tài liệu phần mềm”.
Công nghệ phần mềm sử dụng và đề xuất các mô hình, phương pháp, kỹ thuật, nguyên tắc và chuẩn đã được chắt lọc từ thực tiễn trong suốt nhiều năm, để giải quyết các vấn đề thường xuất hiện trong việc tạo ra phần mềm, đó là:
- SW requirement: Làm cách nào để có yêu cầu đúng và đầy đủ cho phần mềm
- SW design & construction: Làm cách nào để tạo ra phần mềm từ yêu cầu
- SW verification & validation: Làm cách nào để kiểm định cách làm và sản phẩm phần mềm
- SW evolution: Làm cách nào để cải tiến phần mềm đã và đang được làm ra
Mục đích của công nghệ phần mềm không chỉ là để làm ra phần mềm đạt chất lượng, mà còn là để tìm ra cách làm có hiệu quả cao trong điều kiện nguồn lực và thời gian bị hạn chế.
Công nghệ phần mềm không phải là một khái niệm mới. Tuy nhiên, nội dung của nó luôn thay đổi theo mức độ phát triển của 3 nhóm nguồn lực chính:
- Pepole (con người): kiến thức, kỹ năng, kinh nghiệm cá nhân và cách hợp tác trong nhóm
- Tools (công cụ): sản phẩm công nghệ và các chuẩn (standards) cho việc phát triển phần mề
- Mehods (phương pháp): cách làm (quy trình, kỹ thuật) được đúc kết từ phương pháp luận (methodologies) kết hợp với kinh nghiệm thực tiễn (best practices).
Các nhóm nguồn lực này được kết hợp với nhau bằng một trong số nhiều mô hình phát triển phần mềm, như Water fall, Spriral model, Unified Process, Agile,…
Nền tảng kiến thức của công nghệ phần mềm là khoa học máy tính, với các nội dung
- Phương pháp tính, Toán rời rạc,
- Cấu trúc dữ liệu và giải thuật,
- Cơ sở dữ liệu,…
Kiến thức chuyên sâu trong công nghệ phần mềm gồm:
- Đảm bảo chất lượng phần mềm,
- Kiểm thử, Quản lý cấu hình,
- Các chuẩn chất lượng…
Ngoài ra, công nghệ phần mềm cũng cần thêm kiến thức hổ trợ từ lĩnh vực khác:
- Kiến thức hệ thống (system engineering)
- Kiến thức quản lý (management science)
- Kiến thức tài chính (economics)
Kỹ sư phần mềm có thể tạo, kiểm tra, bảo trì, nghiên cứu và xây dựng mọi loại phần mềm, từ đơn giản đến phức tạp:
- Web developers (front-end/back-end/full stack),
- Software system testers,
- Embedded software engineer,
- Game programmer,…