15 Mar, 2021
Khung SWE
Đây là tài liệu hướng dẫn của CMU cho chương trình Software Engineering: (Hướng dẫn khung – Framework guidance), chương trình này hiện được áp dụng tại Ấn Độ, Trung Quốc, Hàn Quốc , Nhật, Tây Ban Nha, Bồ Đào Nha, vài nước ở Phi Châu qua các hợp tác giữa CMU và Đại học và chính quyền nước đó.
Mục đích của bằng Kĩ nghệ phần mềm là tạo ra người kĩ sư phần mềm có thể nhanh chóng đảm nhiệm vị trí chịu trách nhiệm bản chất bên trong tổ chức. Để đạt tới mục đích này, chương trình đào tạo phải được thiết kế để cho sinh viên nền tảng mạnh về tri thức và kĩ năng thực hành có bao gồm các hoạt động qui trình kĩ nghệ phần mềm, vòng đời phát triển phần mềm, các phương pháp luận và công cụ phát triển phần mềm đa dạng, để cho họ có thể phát triển các sản phẩm chất lượng đáp ứng nhu cầu của người dùng.
1) Năm thứ nhất (Tri thức chung & nhận thức)
a. Ngôn ngữ lập trình và cấu trúc dữ liệu (kĩ năng)
b. Qui trình phần mềm (Tri thức)
c. Vòng đời phần mềm (tiến hoá của phần mềm) Thác đổ, Gia tăng, Xoáy ốc, Agile v.v.
d. Phương pháp phần mềm (các khái niệm phương pháp đa dạng từ thiết kế, viết mã, tái dụng, song song v.v.)
e. Bảo trì phần mềm (Sửa đổi, thích ứng, sửa đúng v.v.)
f. Trao đổi kĩ thuật (kĩ năng mềm) viết, đọc, thuật ngữ, trình bày v.v.
2) Năm thứ hai (Tri thức chung & nhận thức)
a. Ngôn ngữ lập trình (kĩ năng)
b. Quản lí cấu hình phần mềm và đảm bảo chất lượng phần mềm (hoạt động hỗ trợ)
c. Kiểm thử phần mềm (nhiều khái niệm và phương pháp kiểm thử)
d. Quản lí dự án phần mềm (lập kế hoạch, và giám sát v.v.)
e. Kinh tế phần mềm (ước lượng, ngân sách, lập kế hoạch, theo dõi vết, v.v.)
f. Vận hành phần mềm (vấn đề, nhân sự, rủi ro v.v.)
3) Năm thứ ba (Áp dụng, tổng hợp, phân tích)
a. Kĩ nghệ yêu cầu (Phân tích, đặc tả, quan hệ khách hàng, phân tích thị trường)
b. Kiến trúc & Thiết kế (Đặc tả, lập kế hoạch, thiết kế, giao diện, thuộc tính chất lượng v.v.)
c. Thực hiện (Dự án nhỏ để thực hiện từ yêu cầu tới viết mã, từng tuần đều có kiểm điểm một chủ đề trong từng pha)
d. Đo & độ đo (thu thập và phân tích dữ liệu, hành động, báo cáo, trạng thái, chất lượng v.v.)
e. Tích hợp (cách gắn mọi thứ lại với nhau)
f. Cơ sở dữ liệu hay nhúng (chọn giữa hai khu vực)
4) Năm thứ tư (Chủ yếu thực hành – đánh giá và tích hợp)
a. Capstone (dự án thực do công nghiệp giao)
b. Kĩ năng mềm (vài lớp tập huấn với các chủ đề đa dạng)
c. Xu hướng thị trường & công nghiệp (Đọc tin tức và thảo luận)
Chương trình SWE của CMU
1. Qui trình kĩ nghệ phần mềm
Chủ đề: Qui trình và sản phẩm kĩ nghệ phần mềm. Mọi hoạt động kĩ nghệ phần mềm. Khái niệm về mô hình qui trình phần mềm và mô hình vòng đời sản phẩm phần mềm. Kỉ luật và ích lợi của việc tuân theo qui trình được xác định.
Khía cạnh: Mọi khía cạnh, thích hợp cho các hoạt động đa dạng.
Mục tiêu: Tri thức về các hoạt động và khía cạnh. Một số nhận thức về vấn đề, đặc biệt phân biệt giữa các lớp hoạt động. Siinh viên nên bắt đầu hiểu khác biệt bản chất giữa lập trình và kĩ nghệ phần mềm, như nó được thực hành một cách chuyên nghiệp trong công nghiệp.
2. Tiến hoá phần mềm (Vòng đời)
Chủ đề: Khái niệm về vòng đời sản phẩm phần mềm. Các dạng khác nhau của sản phẩm phần mềm, từ quan niệm khởi đầu qua phát triển và vận hành tới cho về hưu. Kiểm soát các hoạt động và kỉ luật để hỗ trợ tiến hoá. Các biến cố được lập kế hoạch và không lập kế hoạch ảnh hưởng tới tiến hoá phần mềm. Vai trò của thay đổi công nghệ.
Khía cạnh: Các mô hình tiến hoá phần mềm, bao gồm mô hình vòng đời phát triển như thác đổ, nâng cao qua lặp, phát triển theo pha, xoáy ốc.
Mục tiêu: Tri thức và hiểu thấu về các mô hình. Tri thức và hiểu thấu về hoạt động kiểm soát. Sinh viên phải biết chi tiết mọi pha của vòng đời để tuân theo nó từ yêu cầu tới cho cho về hưu sản phẩm phần mềm.
3. Thế hệ phần mềm (Mô hình và phương pháp)
Chủ đề: Các phương pháp đa dạng về phát sinh phần mềm, kể cả thiết kế và viết mã từ đâu, dùng cấu phần tái dụng (bao gồm các ví dụ như thư viện thủ tục toán học, các gói được thiết kế đặc biệt cho dùng lại, đơn vị chương trình sinh, phần mềm mở, và ghép nối chương trình như qua đường ống, dùng chương trình hay bộ sinh ứng dụng và ngôn ngữ mức rất cao, vai trò của làm bản mẫu. Các yếu tố ảnh hưởng tới chọn lựa phương pháp sinh phần mềm. Hiệu quả của phương pháp sinh lên hoạt động phát triển phần mềm, như kiểm thử và bảo trì.
Khía cạnh: các mô hình về sinh phần mềm. Các biểu diễn cho sinh phần mềm, bao gồm thiết kế và thực hiện các ngôn ngữ, các ngôn ngữ rất cao, và các bộ sinh ứng dụng. Công cụ để hỗ trợ phương pháp sinh, kể cả bộ sinh ứng dụng.
Mục tiêu: Tri thức và hiểu thấu về đa dạng phương pháp của sinh phần mềm. Khả năng áp dụng từng phương pháp khi được hỗ trợ bởi công cụ thích hợp. Khả năng đánh giá các phương pháp và chọn phương pháp thích hợp cho từng dự án.
4. Bảo trì phần mềm
Chủ đề: Bảo trì như một phần của tiến hoá phần mềm. Lí do để bảo trì. Các loại bảo trì (hoàn thiện, thích ứng, sửa chữa). So sánh các hoạt động phát triển trong phát triển sản phẩm khởi đầu và trong bảo trì. Hoạt động kiểm soát và kỉ luật ảnh hưởng tới bảo trì. Thiết kế cho có tính bảo trì. Kĩ thuật bảo trì.
Khía cạnh: Các mô hình bảo trì. Phương pháp hiện thời.
Mục tiêu: Tri thức và hiểu thấu về các vấn đề bảo trì phần mềm và thực hành bảo trì hiện thời.
5. Trao đổi kĩ thuật (kĩ năng mềm)
Chủ đề: Nền tảng về trao đổi kĩ thuật. Trao đổi nói và viết. Chuẩn bị bài trình bày nói và tài liệu hỗ trợ. Tài liệu dự án phần mềm đủ loại. Trao đổi làm việc tổ, nói cho công chúng, kĩ năng trình bày, kĩ năng trao đổi trong tổ.
Khía cạnh: Các nguyên lí trao đổi. Công cụ chuẩn bị tài liệu. Chuẩn cho trình bày và tài liệu.
Mục tiêu: Tri thức về những nền tảng của trao đổi kĩ thuật và tài liệu phần mềm. Áp dụng các nền tảng cho trao đổi nói và viết. Khả năng phân tích, tổng hợp và đánh giá trao đổi kĩ thuật.
6. Quản lí cấu hình phần mềm
Chủ đề: Các khái niệm về quản lí cấu hình. Vai trò của nó trong tiến hoá phần mềm. Bảo trì tính toàn vẹn. Kiểm soát thay đổi và kiểm soát phiên bản. Cấu trúc tổ chức cho quản lí cấu hình.
Khía cạnh: Các nguyên lí nền tảng. Công cụ. Tài liệu, kể cả kế hoạch quản lí cấu hình.
Mục đích: Tri thức và hiểu thấu về các vấn đề. Khả năng áp dụng tri thức để phát triển bản kế hoạch quản lí cấu hình và dùng công cụ thích hợp.
7. Vấn đề chất lượng phần mềm
Chủ đề: Định nghĩa chất lượng. Các yếu tố ảnh hưởng tới chất lượng phần mềm. Lập kế hoạch cho chất lượng. Mối quan tâm chất lượng trong từng pha của đời phần mềm, với nhấn mạnh đặc biệt vào đặc tả các thuộc tính hệ thống phổ biến. Đo và chuẩn chất lượng. Nguyên lí và phương pháp đánh giá phần mềm. Vai trò của trắc nghiệm và vai trò của kiểm thử. Viết mã an ninh, an ninh như chất lượng.
Khía cạnh: Đánh giá về chất lượng phần mềm: cách đo thích hợp. Công cụ để giúp thực hiện đo. Phương pháp đánh giá tính đúng đắn, kể cả kiểm thử và trắc nghiệm hình thức. Mô hình hình thức về trắc nghiệm chương trình.
Mục tiêu: Tri thức và hiểu thấu về vấn đề chất lượng phần mềm và phương pháp đúng đắn. Khả năng áp dụng chứng minh của phương pháp đúng đắn.
8. Đảm bảo chất lượng phần mềm
Chủ đề: Đảm bảo chất lượng phần mềm như kỉ luật kiểm soát. Cấu trúc tổ chức cho đảm bảo chất lượng. Tổ trắc nghiệm và kiểm nghiệm độc lập. Tổ kiểm thử và đánh giá. Kiểm điểm kĩ thuật phần mềm. Kế hoạch đảm bảo chất lượng phần mềm.
Khía cạnh: Thực hành công nghiệp hiện thời cho đảm bảo chất lượng. Tài liệu bao gồm kế hoạch đảm bảo chất lượng, báo cáo giám định, kiểm định, và báo cáo kiểm tra kiểm nghiệm.
Mục tiêu: Tri thức và hiểu thấu về lập kế hoạch đảm bảo chất lượng. Khả năng phân tích và tổng hợp các kế hoạch đảm bảo chất lượng. Khả năng thực hiện các kiểm điểm kĩ thuật. Tri thức và hiểu thấu về các nền tảng của trắc nghiệm chương trình, và vai trò của nó trong đảm bảo chất lượng. Khả năng áp dụng các khái niệm về đảm bảo chất lượng như một phần của tổ đảm bảo chất lượng.
9. Vấn đề quản lí và tổ chức dự án phần mềm
Chủ đề: Lập kế hoạch dự án: chọn mô hình qui trình, lập lịch và cột mốc dự án. Công tác nhân viên: phát triển tổ chức tổ, tổ đảm bảo chất lượng. Phân bổ tài nguyên.
Khía cạnh: Các khái niệm và nguyên lí nền tảng. Biểu diễn và công cụ lập lịch. Tài liệu dự án.
Mục tiêu: Tri thức và hiểu thấu về các khái niệm và vấn đề. Không đặt thành mong đợi là sinh viên, sau khi học môn này, sẽ lập tức sẵn sàng quản lí dự án phần mềm nhưng hiểu được khái niệm. Họ cần đào tạo phụ bằng việc học các môn thêm về kinh tế phần mềm, vấn đề vận hành.
10. Kinh tế dự án phần mềm
Chủ đề: Ước lượng chi phí, phân tích chi phí/ích lợi, phân tích rủi ro cho dự án phần mềm. Các yếu tố ảnh hưởng tới chi phí. Lập ngân sách, lập kế hoạch và quản lí phần mềm ở chỗ làm việc. Khác biệt giữa các công ti tư và cơ quan chính phủ, khu vực công và tư, doanh nghiệp lớn và nhỏ.
Khía cạnh: Mô hình ước lượng chi phí. Kĩ thuật hiện thời và công cụ cho ước lượng chi phí.
Mục tiêu: tri thức và hiểu thấu về mô hình và kĩ thuật. Khả năng áp dụng tri thức vào việc dùng công cụ.
11. Vấn đề vận hành phần mềm
Chủ đề: Vấn đề tổ chức có liên quan tới việc dùng hệ thống phần mềm trong tổ chức. Đào tạo, cài đặt hệ thống, vận hành, cho về hưu. Tài liệu người dùng.
Khía cạnh: Tài liệu người dùng và tài liệu đào tạo.
Mục đích: Tri thức và hiểu thấu về vấn đề chính.
12. Kĩ nghệ yêu cầu 1 (Phân tích)
Chủ đề: Qui trình tương tác với khách hàng để xác định các yêu cầu hệ thống. Xác định yêu cầu phần mềm. Nhận diện các yêu cầu chức năng, hiệu năng và các yêu cầu khác: yêu cầu hệ thống phổ cập. Các kĩ thuật để nhận diện yêu cầu, kể cả làm bản mẫu, mô hình hoá, và mô phỏng.
Khía cạnh: Các nguyên lí và mô hình về yêu cầu. Các kĩ thuật về nhận diện yêu cầu. Công cụ để hỗ trợ cho những kĩ thuật này, nếu có. Đánh giá các yêu cầu. Trao đổi với khách hàng.
Mục đích: Tri thức và hiểu thấu về các khái niệm về phân tích yêu cầu và các lớp yêu cầu khác nhau. Tri thức về các kĩ thuật phân tích yêu cầu. Khả năng áp dụng các kĩ thuật và phân tích và tổng hợp các yêu cầu cho hệ thống đơn giản.
13. Kĩ nghệ yêu cầu 2 (Đặc tả)
Chủ đề: Các mục tiêu của qui trình đặc tả. Hình thức, nội dung, và người dùng tài liệu chuyên môn. Xác định các yêu cầu chức năng, hiệu năng và các yêu cầu khác của hệ thống. Mô hình hình thức và biểu diễn đặc tả. Chuẩn đặc tả.
Khía cạnh: Mô hình hình thức và biểu diễn. Các kĩ thuật đặc tả và công cụ hỗ trợ cho chúng, nếu có. Đánh giá về đặc tả theo thuộc tính như tính nhất quán và tính đầy đủ. Tài liệu đặc tả.
Mục đích: Tri thức và hiểu thấu về các khái niệm nền tảng của đặc tả. Tri thức về các mô hình đặc tả, biểu diễn và kĩ thuật, và khả năng áp dụng hay dùng một hay nhiều trong chúng. Khả năng phân tích và tổng hợp tài liệu đặc tả cho hệ thống đơn giản.
14. Kiến trúc hệ thống
Chủ đề: Vai trò của kiến trúc hệ thống và thiết kế phần mềm. Cách kiến trúc khớp vào trong vòng đời. Phần mềm như một cấu phần của hệ thống. Phần cứng so với phần mềm, bù trừ cho hiệu năng hệ thống và tính linh hoạt. Xác định và thiết kế hệ con. Thiết kế giao diện mức cao, cả phần cứng với phần mềm và phần mềm với phần cứng.
Khía cạnh: các kĩ thuật và biểu diễn mô hình hoá hệ thống. Phương pháp cho thiết kế hệ thống, bao gồm thiết kế hướng đối tượng, và công cụ hỗ trợ cho các phương pháp này. Các kĩ thuật thiết kế lặp. Dự báo hiệu năng.
Mục tiêu: Hiểu thấu về các vấn đề trong thiết kế hệ thống, nhấn mạnh vào những bù trừ kĩ nghệ. Khả năng dùng các mô hình thiết kế hệ thống thích hợp, các phương pháp và công cụ, bao gồm những công cụ để xác định giao diện. Khả năng phân tích và tổng hợp các hệ nhỏ.
15. Thiết kế phần mềm
Chủ đề: Các nguyên lí thiết kế, kể cả trừu tượng hoá và che giấu thông tin, tính mô đun, tái dụng, làm bản mẫu. Các mức thiết kế. Biểu diễn thiết kế. Thực hành và kĩ thuật thiết kế. Ví dụ về mô thức thiết kế cho hệ thống được hiểu rõ.
Khía cạnh: Các nguyên lí về thiết kế phần mềm. Một hay nhiều kí pháp hay ngôn ngữ thiết kế. Một hay nhiều phương pháp thiết kế được sử dụng rộng rãi và công cụ hỗ trợ, nếu sẵn có. Đánh giá về chất lượng của thiết kế. Tài liệu thiết kế.
Mục tiêu: Tri thức và hiểu thấu về một hay nhiều biểu diễn thiết kế, phương pháp thiết kế, và công cụ hỗ trợ, nếu sẵn có. Khả năng phân tích và tổng hợp cho hệ thống phần mềm. Khả năng áp dụng các phương pháp và công cụ như một phần của tổ thiết kế.
16. Thực hiện phần mềm
Chủ đề: Mối quan hệ của thiết kế và thực hiện. Các tính năng của ngôn ngữ thủ tục hiện đại liên quan tới nguyên lí thiết kế. Vấn đề thực hiện bao gồm cấu phần tái dụng và bộ sinh ứng dụng. Khái niệm môi trường hỗ trợ lập trình.
Khía cạnh: Một hay nhiều ngôn ngữ thực hiện và công cụ hỗ trợ. Đánh giá thực hiện: chuẩn và độ đo viết mã.
Mục tiêu: Khả năng phân tích, tổng hợp, và đánh giá việc thực hiện các hệ thống nhỏ.
17. Kiểm thử phần mềm
Chủ đề: Vai trò của kiểm thử và mối quan hệ của nó với đảm bảo chất lượng. Bản chất và giới hạn của kiểm thử. Các mức kiểm thử: đơn vị, tích hợp, chấp nhận v.v. Học tập chi tiết về kiểm thử ở mức đơn vị. Mô hình hình thức của kiếm thử. Lập kế hoạch kiểm thử. Kiểm thử hộp đen và hộp trắng. Xây dựng môi trường kiểm thử. Sinh trường hợp kiểm thử. Phân tích kết quả kiểm thử.
Khía cạnh: Các nguyên lí và mô hình kiểm thử. Công cụ để hỗ trợ cho các loại kiểm thử. Đánh giá kiểm thử; chuẩn kiểm thử. Tài liệu kiểm thử.
Mục tiêu: Tri thức và hiểu thấu về vai trò và giới hạn của kiểm thử. Khả năng áp dụng công cụ và kĩ thuật kiểm thử. Khả năng phân tích kế hoạch kiểm thử và kết quả kiểm thử. Khả năng tổng hợp kế hoạch kiểm thử.
18. Tích hợp hệ thống
Chủ đề: Kiểm thử ở mức hệ thống phần mềm. Tích hợp các cấu phần phần mềm và phần cứng của hệ thống. Dùng mô phỏng cho các cấu phần phần cứng bị thiếu. Chiến lược cho tích hợp và kiểm thử.
Khía cạnh: Phương pháp và công cụ hỗ trợ cho kiểm thử hệ thống và tích hợp hệ thống. Đánh giá kết quả kiểm thử và chẩn đoán lỗi hệ thống. Làm tài liệu: kế hoạch tích hợp, kết quả kiểm thử.
Mục tiêu: Hiểu thấu vấn đề và kĩ thuật của tích hợp hệ thống. Khả năng áp dụng các kĩ thuật để làm tích hợp và kiểm thử hệ thống. Khả năng phát triển kiểm thử hệ thống và kế hoạch tích hợp. Khả năng diễn giải kết quả kiểm thử và chẩn đoán lỗi hệ thống.
19. Hệ thống thời gian thực nhúng
Chủ đề: Các đặc trưng của hệ thống thời gian thực nhúng. Sự tồn tại của yêu cầu chia thời cứng. Song hành trong hệ thống và biểu diễn song hành trong đặc tả yêu cầu, thiết kế, và viết mã. Các vấn đề liên quan tới giao diện phức tạp giữa các thiết bị và giữa phần mềm và thiết bị. Tính găng của hệ thống nhúng và vấn đề vững chãi, tin cậy và dung sai. Các cân nhắc vào và ra, kể cả biểu diễn dữ liệu bất thường được thiết bị yêu cầu. Các vấn đề liên quan tới nhận dạng thời gian. Các vấn đề liên quan tới tính không có khả năng để kiểm thử hệ thống một cách thích hợp.
Mục tiêu: Hiểu thấu về các vấn đề có ý nghĩa trong phân tích, thiết kế và xây dựng các hệ thống thời gian thực nhúng. Khả năng tạo ra hệ thống nhỏ bao gồm xử lí ngắt, vào và ra mức thấp, song hành, và yêu cầu chia thời gian cứng, có thể ưa chuộng trong ngôn ngữ bậc cao.
20. Giao diện con người
Chủ đề: Các yếu tố kĩ nghệ phần mềm: áp dụng các kĩ thuật thiết kế vào vấn đề giao diện con người, kể cả các khái niệm về độc lập thiết bị và thiết bị cuối ảo. Các nhân tố con người: xác định và hiệu ứng của kết cụm màn hình, giả định về lớp người dùng hệ thống, tính vững chãi và giải quyết của thao tác viên về lỗi đưa vào, dùng mầu trong hiển thị.
Mục tiêu: Hiểu thấu về các vấn đề chính. Khả năng áp dụng các kĩ thuật thiết kế để tạo ra giao diện con người tốt. Khả năn thiết kế và tiến hành thực nghiệm với các giao diện, để phân tích kết quả, và cải tiến thiết kế như một kết quả.
Cấu phần kinh nghiệm dự án
Công việc dự án (Capstone) là bản chất để phát triển kĩ năng kĩ nghệ phần mềm. Chúng tôi có ý kiến rằng xấp xỉ 30% thời gian của sinh viên nên được dành cho công việc dự án hiện thực. Cấu phần giáo trình này có thể được cấu trúc theo một số cách. Đến lúc sinh viên vào năm thứ ba, họ cần bắt đầu làm việc trên các dự án nhỏ trong môi trường làm việc tổ. Điều này là tốt để dùng cách tiếp cận mau lẹ để cho phép họ hoàn thành dự án nhỏ trong quãng ba tới sáu tuần. Đến thời gian họ vào năm cuối, điều quan trọng là làm dự án capstone – làm dự án ở đỉnh điểm bao quát mọi pha vòng đời thật. Capstone cần được phát triển hợp tác với công nghiệp.
—-English version—-
SWE framework
The goal of the Software Engineering degree is to produce a software engineer who can rapidly assume a position of substantial responsibility within an organization. To achieve this goal, the curriculum must be designed to give the student a strong foundation of knowledge and practical skills that includes the software engineering process activities, software development lifecycle, various software development methodologies and tools, so they can develop quality products that meet the need of users.
1) First year (General knowledge & Comprehension)
a. Programming language and data structure. (Skills)
b. Software process (Knowledge)
c. Software Lifecycle (The evolution of software) Waterfall, Incremental, Spiral, Agile etc.
d. Software methods (various method concepts from design, code, reuse, parallel etc.)
e. Software maintenance (Modify, adaptive, corrective etc.)
f. Technical communication (Soft-skills) writing, reading, terminology, presentation etc.
2) Second year (General knowledge & Comprehension)
a. Programming language (Skills)
b. Software configuration management and software quality assurance (Support activities)
c. Software Testing (Several concepts and test methods)
d. Software project management (planning, and monitoring etc.)
e. Software economics (Estimates, budget, plan, track etc.)
f. Software operation (Issues, personnel, risks etc.)
3) Third year (Application, synthesis, analysis)
a. Requirements Engineering (Analysis, specification, customer relations, market analysis)
b. Architecture & Design (Specification, plan, design, interfaces, quality attributes etc.)
c. Implementation (A mini project to practice from req. to code, each week is review a topic in each phase)
d. Measurement & Metrics (data collection and analysis, action, reports, status, quality etc.)
e. Integration (How to put everything together)
f. Database or embedded (Choice between two area)
4) Fourth year (Mostly Practicum – Evaluation and integration)
a. Capstone (Real project given by industry)
b. Soft-skills (Several workshops with various topics)
c. Market & industry trends (Read news and discuss)
CMU’s SWE curriculum
1. The Software Engineering Process
Topics: The software engineering process and software products. All of the software engineering activities. The concepts of software process model and software product life cycle model. The disciplines and benefits of following a defined process.
Aspects: All aspects, as appropriate for the various activities.
Objectives: Knowledge of activities and aspects. Some comprehension of the issues, especially the distinctions among the various classes of activities. The students should begin to understand the substantial differences between programming, and software engineering, as it is practiced professionally in the industry.
2. Software Evolution (Lifecycle)
Topics: The concept of a software product life cycle. The various forms of a software product, from initial conception through development and operation to retirement. Controlling activities and disciplines to support evolution. Planned and unplanned events that affect software evolution. The role of changing technology.
Aspects: Models of software evolution, including development life cycle models such as the waterfall, iterative enhancement, phased development, spiral.
Objectives: Knowledge and comprehension of the models. Knowledge and comprehension of the controlling activities. Students should know all phases of the lifecycle in details and be able to follow it from requirements to retirement of software products.
3. Software Generation (Models and Methods)
Topics: Various methods of software generation, including designing and coding from scratch, use of reusable components (including examples such as Mathematical procedure libraries, packages designed specifically for reuse, generic program units, open source software, and program concatenation as with pipes, use of program or application generators and very high level languages, role of prototyping. Factors affecting choice of a software generation method. Effects of generation method on other software development activities, such as testing and maintenance.
Aspects: Models of software generation. Representations for software generation, including design and implementation languages, very high level Languages, and application generators. Tools to support generation methods, including application generators.
Objectives: Knowledge and comprehension of the various methods of software generation. Ability to apply each method when supported by appropriate tools. Ability to evaluate methods and choose the appropriate ones for each project.
4. Software Maintenance
Topics: Maintenance as a part of software evolution. Reasons for maintenance. Kinds of maintenance (perfective, adaptive, corrective). Comparison of development activities during initial product development and during maintenance. Controlling activities and disciplines that affect maintenance. Designing for maintainability. Techniques for maintenance.
Aspects: Models of maintenance. Current methods.
Objectives: Knowledge and comprehension of the issues of software maintenance and current maintenance practice.
5. Technical Communication (Soft-skills)
Topics: Fundamentals of technical communication. Oral and written communications. Preparing oral presentations and supporting materials. Software project documentation of all kinds. Teamwork communication, public speaking, presentation skills.
Aspects: Principles of communication. Document preparation tools. Standards for presentations and documents.
Objectives: Knowledge of fundamentals of technical communication and of software documentation. Application of fundamentals to oral and written communications. Ability to analyze, synthesizes, and evaluates technical communications.
6. Software Configuration Management
Topics: Concepts of configuration management. Its role in controlling software evolution. Maintaining product integrity. Change control and version control. Organizational structures for configuration management.
Aspects: Fundamental principles. Tools. Documentation, including configuration management plans.
Objectives: Knowledge and comprehension of the issues. Ability to apply the knowledge to develop a configuration management plan and to use appropriate tools.
7. Software Quality Issues
Topics: Definitions of quality. Factors affecting software quality. Planning for quality. Quality concerns in each phase of a software life cycle, with special emphasis on the specification of the pervasive system attributes. Quality measurement and standards. Software correctness assessment principles and methods. The role of formal verification and the role of testing. Secure coding, security as quality.
Aspects: Assessment of software quality: appropriate measures. Tools to help perform measurement. Correctness assessment methods, including testing and formal verification. Formal models of program verification.
Objectives: Knowledge and comprehension of software quality issues and correctness methods. Ability to apply proof of correctness methods.
8. Software Quality Assurance
Topics: Software quality assurance as a controlling discipline. Organizational structures for quality assurance. Independent verification and validation teams. Test and evaluation teams. Software technical reviews. Software quality assurance plans.
Aspects: Current industrial practice for quality assurance. Documents including quality assurance plans, inspection reports, audits, and validation test reports.
Objectives: Knowledge and comprehension of quality assurance planning. Ability to analyze and synthesize quality assurance plans. Ability to perform technical reviews. Knowledge and comprehension of the fundamentals of program verification, and its role in quality assurance. Ability to apply concepts of quality assurance as part of a quality assurance team.
9. Software Project Organizational and Management Issues
Topics: Project planning: choice of process model, project scheduling and milestones. Staffing: development team organizations, quality assurance teams. Resource allocation.
Aspects: Fundamental concepts and principles. Scheduling representations and tools. Project documents.
Objectives: Knowledge and comprehension of concepts and issues. It is not expected that a student, after studying this material, will immediately be ready to manage a software project but understand the concept. They need additional trainings by taking additional courses in software economics, operational issues,
10. Software Project Economics
Topics: Cost estimation, cost/benefit analysis, risk analysis for software projects. Factors that affect cost. Budgeting, planning and manage software in workplaces. Differences between private companies and government offices, public and private areas, small and large business.
Aspects: Models of cost estimation. Current techniques and tools for cost estimation.
Objectives: Knowledge and comprehension of models and techniques. Ability to apply the knowledge to tool use.
11. Software Operational Issues
Topics: Organizational issues related to the use of a software system in an organization. Training, system installation, system transition, operation, retirement. User documentation.
Aspects: User documentation and training materials.
Objectives: Knowledge and comprehension of the major issues.
12. Requirements Engineering 1 (Analysis)
Topics: The process of interacting with the customer to determine system requirements. Defining software requirements. Identifying functional, performance, and other requirements: the pervasive system requirements. Techniques to identify requirements, including prototyping, modeling, and simulation.
Aspects: Principles and models of requirements. Techniques of requirement identification. Tools to support these techniques, if available. Assessing requirements. Communication with the customer.
Objectives: Knowledge and comprehension of the concepts of requirements analysis and the different classes of requirements. Knowledge of requirements analysis techniques. Ability to apply techniques and analyze and synthesize requirements for simple systems.
13. S Requirements Engineering 2 (Specification)
Topics: Objectives of the specification process. Form, content, and users of a specifications document. Specifying functional, performance, reliability, and other requirements of systems. Formal models and representations of specifications. Specification standards.
Aspects: Formal models and representations. Specification techniques and tools that support them, if available. Assessment of a specification for attributes such as consistency and completeness. Specification documents.
Objectives: Knowledge and comprehension of the fundamental concepts of specification. Knowledge of specification models, representations, and techniques, and the ability to apply or use one or more. Ability to analyze and synthesize a specification document for a simple system
14. System Architect
Topics: The role of system architect and software design. How architecture fits into a life cycle. Software as a component of a system. Hardware vs. software; trade-offs for system performance and flexibility. Subsystem definition and design. Design of high level interfaces, both hardware to software and software to software.
Aspects: System modeling techniques and representations. Methods for system design, including object oriented design, and tools to support those methods. Iterative design techniques. Performance prediction.
Objectives: Comprehension of the issues in system design, emphasizing engineering trade-offs. Ability to use appropriate system design models, methods, and tools, including those for specifying interfaces. Ability to analyze and synthesize small systems.
15. Software Design
Topics: Principles of design, including abstraction and information hiding, modularity, reuse, prototyping° Levels of design. Design representations. Design practices and techniques. Examples of design paradigms for well understood systems.
Aspects: Principles of software design. One or more design notations or languages. One or more widely used design methods and supporting tools, if available. Assessment of the quality of a design. Design documentation.
Objectives: Knowledge and comprehension of one or more design representations, design methods, and supporting tools, if available. Ability to analyze and synthesize designs for software systems. Ability to apply methods and tools as part of a design team.
16. Software Implementation
Topics: Relationship of design and implementation. Features of modern procedural languages related to design principles. Implementation issues including reusable components and application generators. Programming support environment concepts.
Aspects: One or more modern implementation languages and supporting tools. Assessment of implementations: coding standards and metrics
Objectives: Ability to analyze, synthesize, and evaluate the implementation of small systems.
17. Software Testing
Topics: The role of testing and its relationship to quality assurance. The nature of and limitations of testing. Levels of testing: unit, integration, acceptance, etc. Detailed study of testing at the unit level. Formal models of testing. Test planning. Black box and white box testing. Building testing environments. Test case generation. Test result analysis.
Aspects: Testing principles and models. Tools to support specific kinds of tests. Assessment of testing; testing standards. Test documentation.
Objectives: Knowledge and comprehension of the role and limitations of testing. Ability to apply test tools and techniques. Ability to analyze test plans and test results. Ability to synthesize a test plan.
18. System Integration
Topics: Testing at the software system level. Integration of software and hardware components of a system. Uses of simulation for missing hardware components. Strategies for gradual integration and testing.
Aspects: Methods and supporting tools for system testing and system integration. Assessment of test results and diagnosing system faults. Documentation: integration plans, test results.
Objectives: Comprehension of the issues and techniques of system integration. Ability to apply the techniques to do system integration and testing. Ability to develop system test and integration plans. Ability to interpret test results and diagnose system faults.
19. Embedded Real-time Systems
Topics: Characteristics of embedded real-time systems. Existence of hard timing requirements. Concurrency in systems and representing concurrency in requirements specifications, designs, and code. Issues related to complex interfaces between devices and between software and devices. Criticality of embedded systems and issues of robustness, reliability, and fault tolerance. Input and output considerations, including unusual data representations required by devices. Issues related to the cognizance of time. Issues related to the inability to test systems adequately.
Objectives: Comprehension of the significant problems in the analysis, design, and construction of embedded real-time systems. Ability to produce small systems that involve interrupt handling, low level input and output, concurrency, and hard timing requirements, preferably in a high level language.
20. Human Interfaces
Topics: Software engineering factors: applying design techniques to human interface problems, including concepts of device independence and virtual terminals. Human factors: definition and effects of screen clutter, assumptions about the class of users of a system, robustness and handling of operator input errors, uses of color in displays.
Objectives: Comprehension of the major issues. Ability to apply design techniques to produce good human interfaces. Ability to design and conduct experiments with interfaces, to analyze the results, and to improve the design as a result.
Project Experience Component
Project work (Capstone) is essential to developing software engineering skills. We recommend that approximately 30% of students’ time be devoted to realistic project work. This curriculum component can be structured in a number of ways. By the time students enter third year, they need to start working on small projects in a teamwork environment. This is good to use agile approach to allow them to complete small project in about three to six weeks. By the time they enter the last year, it is important to capstone project that covers most of the coursework, where they learn full development with all lifecycle phases in details. Capstone need to be developed cooperative with industry.