摘要
课程目的
- 阅读、思考软件工程历史中的经典书籍、论文,了解软件工程思想的来龙去脉。
- 学习最新的软件工程管理方法论、实践、工具。
- 知其然,知其所以然。
- 学会自主的思考软件开发,自主判断
- 需要广泛、深刻的知识学习;批判性思维习惯
- “记忆”、“分析”这些相对低水平的认知
- “综合”、“判断”和“运用”等深层次的学习
软件工程和其它相关学科关系
软件工程知识体
软件工程?
1968 年秋季,NATO(北约)的科技委员会召集了近 50 名一流的编程人员、计算机科学家和工业界巨头,讨论和制定摆脱“软件危机”的对策。在那次会议上第一次提出了软件工程(software engineering)这个概念,研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。其后的几十年里,各种有关软件工程的技术、思想、方法和概念不断被提出,软件工程逐步发展为一门独立的科学。
“软件工程”一词在 1968 年的北约(NATO)软件工程学会议中提出。会议的组织者没有断定出“软件开发就像是工程学”。他们故意创造了“软件工程”一词而变得很有煽动性。
引言“会议背景”(Naur 1968,第 8 页):
“1967 年秋天,科学委员会建立了一个关于计算机科学的研究小组。赋予这个研究小组的任务是:评估整个计算机科学,特别是要精心制定一个科学委员会的建议。
该研究小组尤其关注于软件的问题。在 1967 年后期,该研究小组建议举办一个关于软件工程学的工作会议。他们慎重地选择了‘软件工程’一词,因为它具有煽动性,也暗示着软件制造需要基于一些理论基础和实践原则,而在工程学的那些已建立的分支中,那些理论基础和实践已成为了传统。”
SE 定义 [IEEE 1993]
软件工程是 [IEEE Standard 610.12]:
- 系统化、规范化的、可定量的方法应用于软件的开发、运行和维护,即对软件的应用工程化,以及
- 对上述方法的研究。
SE 其他定义
软件工程(SE)是应用计算机科学、项目管理、工程学、应用领域以及其他领域的技术和实践来设计、创建和维护软件的学科。
软件工程与计算机科学
- 软件工程是建立在计算机科学基础上的学科。
- 计算机科学:“做的出”
- 软件工程:“做的好”、“做的快”
- 很多人认为软件工程之于计算机科学和信息科学就如传统意义上的工程学之于物理和化学一样。
- 类似于电子学与物理学的关系。
- 数学 \(\to\) 计算机科学 \(\to\) 软件工程
课程内容(暂定)
- 软件工程本质难题;
- 开源软件开发方法学:大教堂与市集;Linus 定律;
- 人月神话;
- 软件开发成熟度模型;
- Scrum 方法,软件项目估算与计划故事点;扑克牌估算法;计划会议;迭代周期(短周期迭代);每日站立会议;燃尽图;
- 极限编程:简单设计;重构;测试驱动开发;持续集成;DevOps;
- 看板方法;
- 敏捷软件开发宣言和原则;
- 敏捷软件开发与传统开发方法异同;
- 企业软件工程:Google、百度。
课程考核方式
- 阅读、思考相关著作,完成读书笔记。
- 2000 字左右,不得摘抄书籍内容。
- 读书笔记模板 https://mercurial-eoraptor856.notion.site/620751bd018448d5bea4d69f11bb9a48?pvs=4
- 《软件工程管理》课程完成作业时请不要直接使用生成式人工智能(GAI)
- 半开卷考试。