软件工程(单门课程)教学计划、标准与重难点详解
软件工程(单门课程)教学计划、标准与重难点详解
一、课程基本信息
|
项目
|
详情
|
|
课程名称
|
软件工程
|
|
适用专业
|
计算机科学与技术、软件工程、人工智能等计算机类本科专业
|
|
先修课程
|
数据结构与算法、Java/Python 程序设计、数据库原理与应用、计算机网络
|
|
总学时
|
64 学时(理论 40 学时 + 实践 24 学时)
|
|
学分数
|
4 学分
|
|
课程定位
|
专业核心课,衔接编程基础与工程实践,培养软件研发的工程化思维与能力
|
二、教学计划(按教学模块递进,适配 64 学时)
(一)总体教学目标
通过理论学习与工程实践,使学生掌握软件工程的基本理论、核心方法与主流工具,理解软件生命周期各阶段的核心任务与规范,具备小型软件系统的需求分析、设计、编码、测试与项目管理能力,树立工程化、规范化、团队协作的研发理念。
(二)模块式教学内容安排(分 8 个模块,含理论 + 实践)
三、教学标准(知识、能力、素养三维度)
(一)知识目标(需掌握、理解、了解三个层次)
|
层次
|
具体要求
|
|
掌握
|
1. 软件工程的核心概念、原则与生命周期各阶段的核心任务;>2. 需求分析、软件设计、编码、测试、项目管理的核心方法与工具;>3. 至少 10 种常用设计模式的应用场景与实现方式;4. 需求规格说明书、设计文档、测试报告的编写规范; Git、JUnit、Selenium、Jira 等工具的核心操作。
|
|
理解
|
1. 不同软件过程模型(瀑布、敏捷、迭代)的优缺点与适用场景;2. 软件架构设计的核心思想(模块化、分层、松耦合);3. 软件可维护性、可扩展性、可靠性的设计原则;>4. 风险管理与团队协作的重要性。
|
|
了解
|
1. 软件工程的发展历程与前沿趋势(DevOps、低代码、AI 辅助开发);2. 大型复杂软件系统的研发流程与挑战;>3. 软件工程相关的法律法规与行业规范(如软件著作权、数据安全)。
|
(二)能力目标(基础能力、核心能力、综合能力)
|
能力类型
|
具体要求
|
|
基础能力
|
1. 具备文献检索与技术文档阅读能力;2. 能使用 UML 工具(StarUML、Visio)绘制用例图、类图等; 能按规范编写代码与技术文档。
|
|
核心能力
|
1. 需求分析能力:能独立完成中小型系统的需求调研与分析,编写合格的 SRS 文档; 设计能力:能完成中小型系统的架构设计与详细设计,合理应用设计模式;. 编码与测试能力:能按设计文档编码,设计测试用例并执行测试,定位与修复 Bug;. 工具应用能力:熟练使用版本控制、测试、项目管理工具。
|
|
综合能力
|
1. 团队协作能力:能在团队中承担具体角色,通过沟通协作完成项目;>2. 问题解决能力:能解决研发过程中遇到的技术、管理类问题;3. 创新能力:能在现有方法基础上,提出优化方案或创新思路。
|
(三)素养目标(职业素养、工程素养、道德素养)
|
素养类型
|
具体要求
|
|
职业素养
|
1. 树立工程化、规范化的研发理念,杜绝 “黑客式” 编程;2. 具备责任心,对自己编写的代码、设计的方案负责;3. 养成持续学习的习惯,关注行业技术发展趋势。
|
|
工程素养
|
1. 具备成本意识,在设计与开发中平衡功能、性能与成本;. 具备质量意识,重视软件的可靠性、安全性、可维护性;3. 具备风险意识,能提前识别研发过程中的潜在风险并应对。
|
|
道德素养
|
1. 遵守软件行业法律法规,尊重知识产权,杜绝抄袭与侵权;. 重视用户数据安全与隐私保护,在研发中落实数据安全规范;3. 树立正确的职业价值观,拒绝参与不良软件(如恶意软件、诈骗软件)的研发。
|
四、教学重难点及突破方法
(一)核心重点(必须掌握的核心内容)
|
重点内容
|
重点说明
|
教学方法
|
|
需求工程与用例建模
|
需求是软件研发的基础,用例图是需求分析的核心工具,直接影响后续设计与编码的准确性
|
1. 理论讲解 + 案例演示(以电商系统为例,拆解用例图绘制步骤);2. 分组实践:让学生针对真实场景调研,教师逐组指导用例图优化;>3. 优秀作业展示与点评,强化规范。
|
|
软件架构设计与设计模式应用
|
架构设计决定系统的扩展性与可维护性,设计模式是解决通用问题的最佳实践
|
1. 采用 “架构案例拆解” 教学:分析 Spring Boot 框架的分层架构、电商系统的微服务架构;. 设计模式 “代码 + 场景” 结合:每个模式配实际应用场景(如单例模式在数据库连接池中的应用),并演示代码实现;3. 设计重构练习:提供 “反模式” 代码,让学生用设计模式优化。
|
|
软件测试用例设计与自动化测试
|
测试是保障软件质量的核心,自动化测试是企业实际研发的必备技能
|
1. 理论讲解 + 工具实操:先讲测试用例设计方法,再用 Selenium/Postman 现场演示自动化测试流程;. 实战驱动:以学生编写的代码为测试对象,要求设计全覆盖测试用例,执行自动化测试并提交 Bug;>3. 引入企业真实测试案例,让学生了解测试流程与标准。
|
|
团队协作与项目管理
|
软件工程是团队活动,项目管理能力直接影响项目成败
|
1. 模拟企业协作场景:将学生分组,分配产品经理、开发、测试等角色,按 Scrum 流程推进项目;2. 引入 Jira/GitHub Projects 工具,让学生实战进度管理与任务分配;3. 项目复盘:每个迭代后组织复盘会,分析进度延误、沟通不畅等问题的解决方案。
|
(二)教学难点(学生易混淆、难掌握的内容)
|
难点内容
|
难点原因
|
突破方法
|
|
不同软件过程模型的选型
|
学生难以理解不同模型的适用场景,容易机械套用
|
1. 对比教学:制作 “过程模型对比表”,明确瀑布模型(需求稳定场景)、敏捷模型(快速迭代场景)、迭代模型(大型复杂系统)的适用条件;2. 情景模拟:给出不同项目场景(如政府办公系统、互联网创业项目),让学生分组讨论选型并说明理由;3. 企业案例分享:邀请企业工程师讲解实际项目中模型的选择与调整。
|
|
设计模式的灵活应用(而非死记硬背)
|
学生容易记住模式的代码结构,但不会结合场景选型,或过度设计
|
1. 问题驱动教学:先提出实际研发问题(如 “如何避免频繁修改折扣计算逻辑”),再引入对应的设计模式(策略模式);>2. 反例教学:展示 “过度使用设计模式” 的代码,分析其弊端;>3. 开放式练习:给出一个功能需求(如 “用户登录认证”),让学生用不同设计模式实现,对比优劣。
|
|
需求的准确性与完整性
|
学生缺乏实际调研经验,容易遗漏关键需求或产生歧义需求
|
1. 实操训练:提供真实用户群体(如校园学生),让学生现场访谈、发放问卷,教师指导调研技巧;2. 需求评审模拟:组织学生扮演 “客户” 与 “开发”,对需求文档进行评审,提出质疑(如 “二手交易平台是否支持上门取货”);>3. 引入需求规格说明书模板与检查清单,让学生按清单自查需求完整性。
|
|
软件可维护性设计
|
学生关注功能实现,忽视代码可读性、扩展性,导致后续维护困难
|
1. 对比教学:展示 “可维护性差” 的代码(无注释、命名混乱、耦合度高)与 “可维护性好” 的代码,分析差异;>2. 重构实践:让学生对自己早期编写的代码进行重构,优化命名、注释、模块划分;. 引入代码评审标准(如 Google 代码规范),让学生按标准互评代码。
|
五、考核方式(过程性考核 + 终结性考核,注重实践能力)
六、教学资源与工具
(一)教材与参考书
- 主教材:《软件工程导论》(张海藩,第 6 版)
- 参考书:《Head First 设计模式》《敏捷软件开发:原则、模式与实践》《软件测试实战》
- 行业规范:《GB/T 8567-2006 计算机软件文档编制规范》
(二)工具支持
- 建模工具:StarUML、Visio、DrawIO(绘制 UML 图)
- 开发工具:IntelliJ IDEA、PyCharm(编码)
- 版本控制:Git+GitHub/GitLab(代码管理)
- 测试工具:JUnit/Pytest(单元测试)、Selenium(自动化测试)、Postman(接口测试)
- 项目管理:Jira、GitHub Projects(任务管理与进度跟踪)
- 文档工具:Markdown、LaTeX(技术文档编写)