# SE **Repository Path**: juking2017/SE ## Basic Information - **Project Name**: SE - **Description**: 软件工程教学讲义、作业、资料 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 1 - **Created**: 2017-08-11 - **Last Updated**: 2024-12-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 《**软件工程**》 学习导引 ## 第 0 讲: 课程知识结构图 ![](https://images.cnblogs.com/cnblogs_com/juking/991289/o_Roadmap.png) Fig 1 Roadmap of software engineering #### PS:《软件工程》学习知识点的要求: + 了解 + 识记 + 理解 + 掌握 + 运用 ## 第 1 讲: 软件工程概述 (3 学时) 1. 课程介绍 [slide](/Slides/1.0_开篇.ppt) + 介绍老师、学习要求、课程教改、联系方式(微信建群) 2. 软件工程概述 [slides](/Slides/1.1_软件工程概述.pptx) + [了解] 造飞机的故事 + [理解] 软件工程概述(软件危机、软件过程、软件质量) + [理解] 分析"软件" + [理解] 软件工程边缘学科(自学) 3. 学习技术园地:[《软件版本管理 Git》视频](http://172.20.34.22/learn/video/AndriodVideo/029%20Installing%20Git%20On%20Windows.mp4) 4. 课堂讨论 + Q1: 对比软件工程和工业工程(桥梁、建筑、(传统|现代智能)汽车、航天) 领域的理论、方法和技术,谁更成熟?why? + Q2:软件工程的未来之路?畅想 + Q3:课堂讨论 [分析软件](http://www.cnblogs.com/juking/p/7513581.html) 5. 本讲小结:[软工本质]() 6. 作业 + 作 业1: [ 课程热身练习](https://www.cnblogs.com/juking/p/9554054.html) + 附加题1: [ 时事点评-红芯浏览器事件](https://www.cnblogs.com/juking/p/9554756.html) 7. 附:作业说明 + 注册地址(url) - 博客园: http://www.cnblogs.com/***(注册名),尝试发一篇博客(HelloWorld)。 - 码 云:http://gitee.com/***(注册名) + 加入博客园的班级博客 - 加入班级[链接]()。 (注:每学期会有变化,老师复制班级博客邀请链接,粘贴此处) + 博客园每次作业标题 - 作业 1 :XXXXXXXXX , 或者 - 附加题 1:XXXXXXXXX ## 第 2 讲: 开发人员组织 —— 人因软件工程(3 学时) 1. 一人:个人软件过程(PSP)[slides](/Slides/2.1_个人软件过程.pptx) + [了解] 个人软件过程(个人的能力成熟度模型) + [掌握] 过程改进 + [掌握] 软件工程师职业道德(**新增**) 2. 两人:结对编程(Pair Prog.) [slides](/Slides/2.2_结对编程.pptx) + [重点] 代码风格 + [了解] 结对编程 + [了解] 两人合作的层次 + [掌握] 影响他人的技巧 + [了解] 案例(北航结对编程剖析) 3. 多人:团队开发(Team Work) [slides](/Slides/2.3_团队和流程.pptx) + [理解] 团队 VS 非团队 + [了解] 团队类型 + [掌握] 团队协作原则和技巧 + [理解] PM角色(前世今生)和作用(风险管理) 4. 课堂讨论 + 软件成本讨论:如何看待软件开发中的加班行为? + 代码风格讨论。 [Video]() + 软件工程师的成长。 [Video]() + 程序注释及程序文档存在的必要性? + PM 角色扮演(常见问题讨论) + PM 与程序员(冤家路窄?),请观看 **2019 阿里云栖大会(9.27)** —— [程序员吐槽大会](https://yunqi.youku.com/2019/hangzhou/review?spm=a2c4e.11165380.1393983.1) + 开发人员跳槽风险如何预防? + 团队难带难在哪里?带兵难! [Video]() 6. 本讲小结:[人因工程]() 7. 学习技术园地:[《基于 git 的团队开发协作》视频]() 8. 作业 + [作业2:个人实战](http://www.cnblogs.com/juking/p/9554426.html) + [附加题] 分析自己的代码 - 这一部分介绍了编码风格,同学们可以拿出自己以前写的一段代码,去对照 Google的 编码风格要求,看看如何写更好?思考为什么更好? - Google的 编码风格网址:https://github.com/zh-google-styleguide/zh-google-styleguide - 一定要对照着分析,不求全面,哪怕只分析1~2点 ## 第 3 讲: 软件开发过程 (3 学时) 1. 经典软件过程模型 [slides](/Slides/3.1_经典软件过程模型.pptx) + [理解] 瀑布模型 + [理解] 原型模型 + [理解] 增量模型 + [理解] 螺旋模型 + [了解] 其他模型(写了再改、RUP、老板驱动模型) 2. 敏捷过程 [slides](/Slides/3.2_敏捷开发.pptx) + [理解] 敏捷思想 + [理解] 敏捷原则 + [运用] 敏捷框架(SCRUM) + [了解] 微软敏捷开发框架:MSF + [理解] 以 VS Code 开发为例理解Git Flow 3. 补充技术讨论:基于 Github 的开发流程[slides]() + [理解] 基于版本控制管理的软件开发 + [理解] 持续集成、持续发布 4. 课堂讨论 + Q1:团队难带难在哪里?带兵难! [Video]() + Q2:项目开发时团队管理注意问题? [Video]() + Q3: 螺旋模型 与 RUP 过程模型的比较 5. 本讲小结:[流程之本]() 6. 学习技术园地:[《基于 git 的团队开发协作》视频]() 7. 作业 + [作业 3:结对编程-基本功能](https://www.cnblogs.com/juking/p/9562844.html) - 意图 + 考察学生理解题目要求(需求分析)的能力 + 团队协作能力(结伴能力) + 代码风格 ## 第 4 讲: 软件开发综述 —— 可行性分析 (3 学时) 1. 软件可行性研究 [slides](/Slides/4.1_项目可行性研究) + [理解] 分析软件项目失败的原因?探寻启动软件项目必做的工作? + [理解] 什么是可行性? + [理解] 软件项目的可行性从哪些方面分析?哪些方面的可行性分析更重要? case study + [理解] 可行性分析流程 + [理解] 成本效益分析 2. 课堂讨论 + 微软 Vista 系统失败引发的思考?[slides](/Slides/4.0_Vista操作系统发展的始末.pptx) + NABCD 分析案例。 [Video]() + User Study。 [Video]() + 变化的需求伤不起?!怎么办? PM来帮忙 3. 学习技术园地:[《可行性分析》视频]() 4. 作业 + [作业4:结对编程-增强功能](https://www.cnblogs.com/juking/p/9562855.html) ## 第 5 讲: 软件需求 —— 分析方法 (3 学时) 1. 软件需求分析方法与过程[slides](/Slides/5.1_需求概述.pptx) + 需求种类 + 一般过程 + 干系人 + NABCD方法、电梯演说 + 分析方法:(NABCD 方法、四象限法(2*2 分析法)) 1. 需求分析方法 [slides](/Slides/5.2_需求分析过程.pptx) 「过后删除」 "PS:进一步合并 5.1 5.2 进一步合并" 2. 典型用户与场景分析 [slides](/Slides/5.2_用例与规格说明.pptx) + 用户分析 - 干系人 - 典型用户 + 典型场景 + 用例规格说明 3. 课堂讨论 + 文档的必要性及生成方法 + 文档的质量保障(评审) 4. 学习技术园地:[《典型场景分析》视频]() 5. 本讲小结:[需求分析小结](/Slides/5.3_需求分析小结.pptx) + 需求收集方法 + 分析方法 + 加工方法 6. 作业 + [作业5:团队开发-第一阶段(需求分析)](https://www.cnblogs.com/juking/p/9562855.html) 【需要调整】 ## 第 6 讲: 软件概要设计 (3 学时) 1. 软件概要设计原则与方法 [slides](/Slides/6.1_软件概要设计.pptx) + [掌握] 软件设计原则:内聚、耦合 + [理解] 举例:内聚度量 2. 软件架构与架构师 (待补充) + [熟悉] 常见的架构类型、优缺点 + [理解] 软件架构师的工作 2. 软件度量方法 [扩展] + [理解] 软件度量指标 [度量指标](https://www.aivosto.com/project/help/pm-index.html) + [理解] 度量指标与软件质量之间的关系 + [了解] 试用软件度量工具 [Project Analyzer](https://www.aivosto.com/project/help/index.html) 3. 课堂讨论 + Q1:是否该采用原型工具建模需求? [Video]() + Q2:讨论软件设计中简约主义『less is more VS more is more』。 4. 本讲小结:[设计之本]() + 设计前世今生(建模) + 建模方法 + 大道至简 5. 学习技术园地:[《软件度量工具》视频1]() 6. 作业:团队项目。 + [作业6:团队项目-第二阶段(软件架构设计)](https://www.cnblogs.com/juking/p/9563718.html) ## 第 7 讲: 软件详细设计(3 学时) 1. 软件详细设计方法 [slides](/Slides/7.1_详细设计.ppt) + [运用] 结构化程序设计(过程设计工具) + [理解] 面向数据结构的设计方法(JSP) + [了解] 程序度量方法 + [理解] 源代码管理(SCM)工具及方法 + [理解] 软件项目开发的日常管理 2. 课堂讨论 + Q1: 详细设计描述手段。 [Video](/Slides/) + Q2:提升软件用户体验途径?(动态的:越用越好) 3. 学习技术园地:[《基于 Soot 的 CFG 自动构建》视频]() 4. 作业:团队项目。 + [作业8:团队项目-第三阶段(代码实现)](https://www.cnblogs.com/juking/p/9563718.html) - 代码风格 - 算法描述、复杂度分析 ## 第 8 讲: 用户体验设计 (3 学时) 1. 用户体验 [slides](/Slides/8.1_用户体验设计.pptx) + [理解] UX 原则 + [运用] UX 优化方法 2. 课堂讨论 + Q1: 提升软件用户体验途径?(静态的) [Video](/Slides/) + Q2:提升软件用户体验途径?(动态的:越用越好) 3. 学习技术园地:[《用户体验设计》视频]() 4. 作业:团队项目。 + [作业7:团队项目-第五阶段(用户体验优化)](https://www.cnblogs.com/juking/p/9563718.html) - 用户体验 - UX 优化 ## 第 9 讲: 软件测试基础 (3学时) 1. 软件测试基础[slides](/Slides/9.1_软件测试基础1.pptx) + 软件缺陷 - [理解] 软件缺陷 - [掌握] PIE模型 + 软件测试类别 - [理解] 静态测试 VS 动态测试 - [掌握] 黑盒测试 VS 白盒测试 + 软件测试级别 - [理解] 测试V模型 - [掌握] 单元测试、集成测试(含持续集成)、系统测试、验收测试 + 软件测试计划 - [了解] 测试计划的制定 + 软件测试人员素质 - [了解] 测试人员的责任 - [了解] 优秀测试人员的素质 2. 系统测试[slides](/Slides/9.2_软件测试基础2.pptx) + [理解] 性能测试 + [理解] 回归测试 3. 课堂讨论 + Q1:测试能保障软件质量? + Q2:软件质量? 4. 学习技术园地 + [《基于 Junit 的单元测试》视频]() + [《基于Jenkins的持续集成》视频]() 5. 作业:团队项目。 + [作业9:团队项目-第六阶段(单元测试)](https://www.cnblogs.com/juking/p/9563718.html) - 单元测试 - bug 管理 ## 第 10 讲: 软件测试进阶(3学时) 1. 软件测试进阶 [slides](/Slides/10.1_软件测试进阶.pptx) + 测试用例设计 - [掌握] 黑盒测试用例设计方法 - [掌握] 白盒测试用例设计方法 + 测试报告 - [理解] 测试报告的组成 - [掌握] 测试报告撰写 - [了解] 缺陷跟踪系统 + 软件调试 - [理解] 错误定位、修复缺陷等 - [掌握] 程序调试技巧 2. 课堂讨论 + 缺陷跟踪系统的本质 3. 学习技术园地 + [《基于 Jmeter 的性能测试》视频]() 4. 作业:团队项目。 + [作业10:团队项目-第七阶段(性能测试)](https://www.cnblogs.com/juking/p/9563718.html) - 性能测试 - 本地化和国际化测试 ## 第 11 讲: 高阶软件测试(3学时) 1. 测试自动化 [slides](/Slides/11.1_软件测试高阶.pptx) + 测试自动化内涵 - [掌握] 测试自动化的原理 - [掌握] 测试自动化与手工测试的区别(局限与优势) + 测试自动化实施 - [了解] 常见自动化测试工具、分类 - [掌握] 测试工具的选择依据 - [了解] 自动化测试存在的问题 + 软件测试自动化工具 - [理解] 测试自动化工具的基本架构 - [掌握] 测试自动化工具的特性要求 - [了解] 常见的自动化测试框架(Selenium IDE+WebDriver、Appium) 2. 课堂讨论 + 测试自动化难点 + 回归测试 3. 学习技术园地 + [《基于Jekins 的持续集成》视频]() 4. 作业:团队项目。 + [作业11:团队项目-第八阶段(持续集成)](https://www.cnblogs.com/juking/p/9563718.html) - 持续集成 ## 第 12 讲: 软件发布(3学时) 1. 软件持续发布 [slides](/Slides/12.1_软件发布与维护) + [理解] 软件发布流程 + [掌握] 持续发布方法 + [理解] 维护分类和常用的维护技术 + [理解] 维护工作流 + [掌握] 提高可维护性技术 + [理解] 逆向工程 2. 软件维护 + 维护方法 3. 课堂讨论 - 持续发布 - 常用维护技术手段 4. 学习技术园地 + [《软件发布》视频]() + 持续发布 5. 作业:团队项目。 + [作业13:团队项目-第10阶段(发布)](https://www.cnblogs.com/juking/p/9563718.html) - 由面向过程到面向对象的转化 ## 第 13 讲: 面向对象的软件开发方法(3学时) 1. 面向对象方法概述 [slides](/Slides/13.1_面向对象方法学引论.ppt) + [理解] OO基本思想 + [掌握] 类生存期和软件生存期模型 + [理解] 常用的面向对象技术 + [理解] 结构化方法与OO的区别 + 2. 面向对象分析与设计 [slides](/Slides/13.2_面向对象分析与设计.ppt) 3. 案例分析:[词频统计OO设计](/Slides/13.3_词频统计OO设计.pptx) 4. 课堂讨论 - 面向对象 VS 面向过程 - 面向对象的测试 5. 学习技术园地 + [《面向对象设计》视频]() 6. 作业:团队项目。 + [作业12:团队项目-第九阶段(面向对象)](https://www.cnblogs.com/juking/p/9563718.html) - 由面向过程到面向对象的转化 ## 第 14 讲: 软件开发高级话题(一)(3学时) 1. 移动应用和Web开发 [slides](/Slides/) 2. 实时系统的开发 [slides](/Slides/) 3. 课堂讨论 - 移动应用的优势与劣势 - Web 应用的未来 - 嵌入系统的未来发展 4. 学习技术园地 + [《 Web 应用的兴起》视频]() + 5. 作业:博客作业。 + [作业:web应用的未来](https://www.cnblogs.com/juking/p/9563718.html) ## 第 15 讲: 软件开发高级话题(二)(3学时) 1. 软件开发中创新的思考 [slides](/Slides/15.1_软件创新.pptx) + [理解] 软件应用的创新 2. DevOps初探[slides](/Slides/) + [理解] 理解新型软件工程方法 2. 软件开发未来之路 [slides](/Slides/15.2_遐想SE未来之路.pptx) + [理解] 软件工程的未来发展(方法、工具、应用场景等) 3. 课堂讨论 - 万众创新 - 目前软件开发的成熟度 4. 学习技术园地 + [《万众创新》视频]() + AI技术与SE 5. 作业:博客作业 + [作业:创新的产生](https://www.cnblogs.com/juking/p/9563718.html) ## 第 16 讲: 总复习(3学时) 1. 软件质量及其保障 [slides](/Slides/) 2. 总复习 3. 课堂讨论 - 软件工程的根本任务 4. 学习技术园地 + [《 软工未来》视频]() 5. 作业 + [作业:软工问卷调查](https://www.cnblogs.com/juking/p/9563718.html)