参考资料《代码中的软件工程》https://gitee.com/mengning997/se
终于系统性的阅读完了这本《代码中的软件工程》,受益匪浅。我本科时也上过软件工程这门课程,但是学到的东西诚然是没有在这本书中学到的多的,这本书的结构非常清晰,读起来只感觉逻辑上很顺畅,下面我将总结一些我觉得记忆比较深刻的东西。
在本节中我接触到了很多之前并不熟悉的快捷键,有了快捷键的帮助在写代码的时候能大大提升自己的效率。
打开文件夹( Ctrl/⌘+O)和关闭文件夹工作区( Ctrl/⌘+K F)
新建文件(Ctrl/⌘+N)、关闭文件(Ctrl/⌘+W)、编辑文件和保存文件(Ctrl/⌘+S) 文件内搜索(Ctrl/⌘+F)
关闭所有文件(Ctrl/⌘+K W) 关闭已保存的文件(Ctrl/⌘+K U)
Ctrl+/用于单行代码注释和取消注释,Alt+Shift+A用于代码块注释和取消注释。 Ctrl/⌘+Shift+E 文件资源管理器
Ctrl+Shift+G 源代码管理 Ctrl/⌘+Shift+F 跨文件搜索 Ctrl/⌘+Shift+D 启动和调试
Ctrl/⌘+Shift+P查找并运行所有命令 Ctrl/⌘+Shift+M查看错误和警告 Ctrl/⌘+Shift+X 管理扩展插件
Ctrl+`切换集成终端
git init
git clone
git status
git add
git reset HEAD FILE
git commit
git reset --hard id
git merge
git rebase origin/master
git rebase -I HEAD~xx
git merge --no-ff xxx
git checkout -b xxx
git checkout xxx
git branch
git log
gir reflog
git pull
git push
在其中我记忆非常深刻的是git merge和git merge --no-ff的区别。
vim中/表示搜索
正则表达式中我加深了对四大通配符的理解,以及更深入的学习了捕获组的用法,通过正则表达式我们可以更方便强大地在文本中检索和替换。
同时在编写处理代码的脚本时,正则表达式也有着很深的应用。(例如python中的re模块)。
^表示字符串的开头。
$表示字符串的结尾。
?表示懒惰匹配
这些是我之前学习但是忘了的地方,通过本书中的例子我有了更深刻的印象。
通过控制结构简化代码。
通过数据结构简化代码。
一定要有错误处理,在代码可能遇到错误情况的时候要考虑到并且及时assert或者抛出。
性能优先的策略背后有着隐藏的代价。
拒绝修修补补,及时重构代码。
其中需要注意的是性能优先的策略背后有着隐藏的代价:
1,开发时间上的代价,性能优先的策略会让开发人员使用更多的时间进行开发,运用在代码上的人力成本可能远远超过对资源的节约。
2,性能测试上的代价,性能优先的代码可能会更加难以测试,会投入大量的人力和精力去测试和提供质量保障。
3,理解代码的代价,代码的可读性可能会变差。
4,修改代码的代价,性能优先的代码可能难以修改。
模块化是非常重要的一种设计思想,其原理是SOC原理,即关注点分离原则。我们可以将一个软件中不同的功能分散成一个个模块去实现,然后在模块间加上接口让它们又能联合起来完成完整的软件功能。模块化可以让我们更专注于一个模块内的实现于功能,也能让我们更容易在出现错误的时候定位到bug,同时软件开发也使得每个软件模块更容易理解。模块化程度已经成为了软件质量衡量的重要指标。
松散耦合,功能内聚。
注意公共耦合,数据耦合,标记耦合的区别于联系。
耦合度:数据耦合小于标记耦合小于公共耦合。
KISS原则。
一行代码只做一件事
一个块代码只做一件事
一个函数只做一件事
一个软件模块只做一件事
使用本地化外部接口,本质上是一种设计模式,代理模式。
接口的目的。
接口的前置条件。
接口的使用者之间的规范。
接口的后置条件。
接口的质量属性。
参数化上下文
消除前置条件
简化后置条件
GET
POST
PUT
DELETE
一个可重入函数可以被多个线程调用,并且线程安全。并且可以随时被中断稍后继续运行,不必担心数据错误。
不可重入函数不可以被多个线程调用,否则一定线程不安全,换而言之,不可重入函数智能被一个线程持有。
不同的可重入函数在多个线程中并发使用时可能会有线程不安全问题。
功能性需求。
非功能性需求。
设计约束。
过程约束。
需求清晰,可实现的,唯一的,无二义性的,全面的,可行的,不与主要目标无关的。
需求可测试的。
需求无冲突的。
1,首先是个业务流程
2,某个参与者开始它
3,隐形地或者显性地被某个参与者结束
4,对某个参与者产生有用的业务工作。
1,抽象用例
2,高级用例
3,扩展用例
用例驱动,架构为中心,增量且迭代。
CMM/CMMI用于评价软件生产能力并帮助其改善软件质量的方法,成为了评估软件能力与成熟度的
一
套标准,它侧重于软件开发过程的管理及工程能力的提高与评估,是国际软件业的质量管理标
准。
CMMI共有5个级别,代表软件团队能力成熟度的5个等级,数字越大,成熟度越高,高成熟度等级
表示有比较强的软件综合开发能力。
一
级,初始级,软件组织对项目的目标与要做的努力很清晰,项目的目标可以实现。但主要取决
于实施人员。
二级,管理级,软件组织在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对
项目相关的实施人员进行了相应的培训,对整个流程进行监测与控制,并联合上级单位对项目
与流程进行审查。这级能保证项目的成功率。
三级,已定义级,软件组织能够根据自身的特殊情况及自己的标准流程,将这套管理体系与流程
予以制度化。科学管理成为软件组织的文化与财富。
四级,量化管理级,软件组织的项目管理实现了数字化,降低了项目实施在质量上的波动。
五级,持续优化级,软件组织能够充分利用信息资料,对软件组织在项目实施的过程中可能出现
的问题予以预防。能够主动地改善流程,运用新技术,实现流程的优化。
在这门高级软件工程课程中,孟宁老师的教学方式让大家深受启发。孟宁老师的知识广博,且在课堂上清晰地传授了许多重要的软件工程概念和技能。孟宁老师的耐心和敬业精神,让大家感受到了孟宁老师对大家学习的关心和支持。
在这门课程中,孟宁老师通过丰富的案例和实例,深入浅出地讲解了软件工程中的关键概念和技能,如需求分析、设计模式、测试方法等。孟宁老师的教学方法注重实践,让大家在实际操作中更加深入地理解这些概念。在孟宁老师的指导下,大家不仅学到了理论知识,还学会了如何将这些知识应用到实际项目中。
除此之外,孟宁老师还鼓励大家与同学们进行交流和合作,这不仅使大家更好地理解课程内容,还培养了大家团队协作的能力。孟宁老师的积极引导和支持,让大家在这门课程中不断进步和提高。
因此,大家再次向孟宁老师表达大家的感激之情。孟宁老师的教学和指导对大家的学习和职业生涯将产生深远的影响。孟宁老师的贡献将永远铭刻在大家的心中。
再次感谢孟宁老师!