本学期我选修了孟宁老师开设的《高级软件工程》课程,作为一名软件工程专业的学生,本课程的内容以及《代码中的软件工程》一书让我受益匪浅。在课程以及书本内容中,我了解到软件工程的概念和重要性。软件工程是一门研究如何以系统化、规范化和可量化的方式开发和维护软件的学科。通过学习软件工程,我们可以提高软件开发的效率和质量,并降低软件项目的风险。以下是我在每一具体章节的感受与收获:
-
工欲善其事必先利其器: 这个章节介绍了一些在软件开发过程中常用的工具和技术。我学习了如何使用 Visual Studio Code 这个强大的编程神器,以及如何在不同场景下灵活运用 Git 版本控制工具。Git是一个分布式版本控制系统,它可以帮助开发人员有效地管理和跟踪代码的变化。学习的内容主要包括:
- Git的基本概念:了解Git的基本概念,如仓库(Repository)、分支(Branch)、提交(Commit)等。
- 版本控制:掌握Git的基本命令,如初始化仓库、添加文件、提交更改、查看提交历史等,以便对代码进行版本控制。
- 分支管理:学习如何创建和切换分支,并了解分支的概念和用途,如开发新功能、修复错误等。
- 远程仓库和协作:掌握与远程仓库的交互,包括克隆仓库、推送和拉取代码,以及协同工作的流程。
此外,我还学习了正则表达式的基本语法和应用,这对于处理文本和模式匹配非常有用。 正则表达式是一种强大的文本模式匹配工具,它可以用于检索、替换和验证字符串,其中包括:
- 基本语法:了解正则表达式的基本语法,如字符匹配、元字符、字符类等。例如,使用
.
匹配任意字符,使用[]
表示字符集合,使用*
表示重复零次或多次等。 - 常用模式:学习常用的正则表达式模式,如匹配数字、字母、空白字符等特定模式的字符串。例如,使用
\d
匹配数字,使用\w
匹配字母数字字符等。 - 高级技巧:了解一些高级的正则表达式技巧,如捕获组、非贪婪匹配、前后查找等。这些技巧可以帮助更精确地匹配和提取所需的文本模式。
-
代码中的软件工程: 在这个章节中,我学习了如何在代码层面应用软件工程的原理。首先,我了解到代码规范和代码风格的重要性,通过编写规范的代码可以提高代码的可读性和可维护性。接着,我学习了模块化软件设计和可重用软件设计的方法,这些方法可以帮助我将复杂的系统划分为独立的模块,并实现代码的复用性和可扩展性。此外,我还学习了可重入函数和线程安全的概念,这对于多线程编程和并发控制非常重要。最后,通过参与一个Menu的实战项目,我深入了解了工程化编程的实践方法和技巧。
-
从分析到设计的基本方法: 在这个章节中,我学习了如何从需求分析到软件设计。首先,我学习了需求获取的主要方法,包括用户访谈、文档分析和场景模拟等。然后,我学习了如何对需求进行分析和建模,以确保需求的准确性和完整性。最后,我了解了从需求分析到软件设计的过程和方法,包括用例图、类图和时序图等。用例图建模过程包括确定参与者、确定用例、建立参与者和用例之间的关系、使用关联关系将参与者与用例进行关联。类图建模过程:包括确定类、确定类之间的关系、添加类的属性和方法、识别接口和抽象类。时序图建模过程包括识别参与者和对象、确定消息流、定义生命周期和交互顺序、添加控制结构和循环。这些建模工具可以帮助开发人员和设计师更好地理解系统的需求和结构,并提供一种可视化的方式来表示系统的行为和交互。通过使用用例图、类图和时序图,可以更好地进行软件设计和系统架构,从而实现高质量的软件开发。
-
软件科学基础概论: 在这个章节中,我学习了软件的基础概念和软件设计模式。我了解到软件是由代码和数据组成的,而软件设计模式是解决常见设计问题的经验性的可复用方案。此外,我还学习了一些常见的软件架构举例,以及如何描述和选择适合的软件架构风格。最后,我了解了高质量软件的特征和标准,包括可靠性、可维护性和可扩展性等。
-
软件危机的前生后世: 在这个章节中,我了解了软件危机和软件过程模型。软件危机是指在软件开发过程中遇到的困难和挑战,而软件过程模型是一种组织和管理软件开发的方法。我学习了个人软件过程(PSP)和团队软件过程(TSP)的概念,它们可以帮助开发人员提高工作效率和质量。此外,我还学习了 CMM/CMMI 模型和敏捷方法,它们是软件过程改进和敏捷开发的重要方法和框架。最后,我了解了 DevOps 的概念和实践,它通过将开发和运维紧密结合,加强了软件交付和运维的协同性和效率。
通过本学期的学习,我深入了解了软件工程的原理和实践,提高了对软件开发过程的理解和能力。我将继续在实际项目中应用所学知识,并不断提升自己在软件工程领域的技术和专业能力。
参考资料:《代码中的软件工程》