《代码中的软件工程》学习总结/心得体会

《代码中的软件工程》阅读总结回顾

参考资料《代码中的软件工程》https://gitee.com/mengning997/se

终于系统性的阅读完了这本《代码中的软件工程》,受益匪浅。我本科时也上过软件工程这门课程,但是学到的东西诚然是没有在这本书中学到的多的,这本书的结构非常清晰,读起来只感觉逻辑上很顺畅,下面我将总结一些我觉得记忆比较深刻的东西。

VSCODE中的快捷键

在本节中我接触到了很多之前并不熟悉的快捷键,有了快捷键的帮助在写代码的时候能大大提升自己的效率。

打开文件夹( 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的学习

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

vim中/表示搜索
正则表达式中我加深了对四大通配符的理解,以及更深入的学习了捕获组的用法,通过正则表达式我们可以更方便强大地在文本中检索和替换。
同时在编写处理代码的脚本时,正则表达式也有着很深的应用。(例如python中的re模块)。

^表示字符串的开头。
$表示字符串的结尾。
?表示懒惰匹配

这些是我之前学习但是忘了的地方,通过本书中的例子我有了更深刻的印象。

代码规范与代码风格

编写高质量代码的方法有:

通过控制结构简化代码。
通过数据结构简化代码。
一定要有错误处理,在代码可能遇到错误情况的时候要考虑到并且及时assert或者抛出。
性能优先的策略背后有着隐藏的代价。
拒绝修修补补,及时重构代码。

其中需要注意的是性能优先的策略背后有着隐藏的代价:
1,开发时间上的代价,性能优先的策略会让开发人员使用更多的时间进行开发,运用在代码上的人力成本可能远远超过对资源的节约。
2,性能测试上的代价,性能优先的代码可能会更加难以测试,会投入大量的人力和精力去测试和提供质量保障。
3,理解代码的代价,代码的可读性可能会变差。
4,修改代码的代价,性能优先的代码可能难以修改。

模块化代码设计

模块化的基本原理

模块化是非常重要的一种设计思想,其原理是SOC原理,即关注点分离原则。我们可以将一个软件中不同的功能分散成一个个模块去实现,然后在模块间加上接口让它们又能联合起来完成完整的软件功能。模块化可以让我们更专注于一个模块内的实现于功能,也能让我们更容易在出现错误的时候定位到bug,同时软件开发也使得每个软件模块更容易理解。模块化程度已经成为了软件质量衡量的重要指标。

耦合度和内聚度

松散耦合,功能内聚。

注意公共耦合,数据耦合,标记耦合的区别于联系。
耦合度:数据耦合小于标记耦合小于公共耦合。

模块化的基本方法

KISS原则。
一行代码只做一件事
一个块代码只做一件事
一个函数只做一件事
一个软件模块只做一件事
使用本地化外部接口,本质上是一种设计模式,代理模式。

接口

接口的基本要素

接口的目的。
接口的前置条件。
接口的使用者之间的规范。
接口的后置条件。
接口的质量属性。

通用接口的定义方法

参数化上下文
消除前置条件
简化后置条件

RESTful API

GET
POST
PUT
DELETE

可重入函数

一个可重入函数可以被多个线程调用,并且线程安全。并且可以随时被中断稍后继续运行,不必担心数据错误。
不可重入函数不可以被多个线程调用,否则一定线程不安全,换而言之,不可重入函数智能被一个线程持有。
不同的可重入函数在多个线程中并发使用时可能会有线程不安全问题。

需求

需求的类型

功能性需求。
非功能性需求。
设计约束。
过程约束。

确定需求的方法

  1. 原型化方法
    原型化方法可以很好地整理出用户接口方式(UI,User Interface),比如界面布局和交互操作
    过程。
  2. 建模的方法
    建模的方法可以快速给出有关事件发生顺序或活动同步约束的问题,能够在逻辑上形成模型来
    整顿繁杂的需求细节。

高质量需求的特点

需求清晰,可实现的,唯一的,无二义性的,全面的,可行的,不与主要目标无关的。
需求可测试的。
需求无冲突的。

用例

用例的定义

1,首先是个业务流程
2,某个参与者开始它
3,隐形地或者显性地被某个参与者结束
4,对某个参与者产生有用的业务工作。

用例的三个层级

1,抽象用例
2,高级用例
3,扩展用例

统一过程

用例驱动,架构为中心,增量且迭代。

团队

基本要素

  1. 团队的规模
  2. 团队的凝聚力
  3. 团队协作的基本条件

评价团队的方法

CMM/CMMI用于评价软件生产能力并帮助其改善软件质量的方法,成为了评估软件能力与成熟度的

套标准,它侧重于软件开发过程的管理及工程能力的提高与评估,是国际软件业的质量管理标
准。
CMMI共有5个级别,代表软件团队能力成熟度的5个等级,数字越大,成熟度越高,高成熟度等级
表示有比较强的软件综合开发能力。

级,初始级,软件组织对项目的目标与要做的努力很清晰,项目的目标可以实现。但主要取决
于实施人员。
二级,管理级,软件组织在项目实施上能够遵守既定的计划与流程,有资源准备,权责到人,对
项目相关的实施人员进行了相应的培训,对整个流程进行监测与控制,并联合上级单位对项目
与流程进行审查。这级能保证项目的成功率。
三级,已定义级,软件组织能够根据自身的特殊情况及自己的标准流程,将这套管理体系与流程
予以制度化。科学管理成为软件组织的文化与财富。
四级,量化管理级,软件组织的项目管理实现了数字化,降低了项目实施在质量上的波动。
五级,持续优化级,软件组织能够充分利用信息资料,对软件组织在项目实施的过程中可能出现
的问题予以预防。能够主动地改善流程,运用新技术,实现流程的优化。

在这门高级软件工程课程中,孟宁老师的教学方式让大家深受启发。孟宁老师的知识广博,且在课堂上清晰地传授了许多重要的软件工程概念和技能。孟宁老师的耐心和敬业精神,让大家感受到了孟宁老师对大家学习的关心和支持。
在这门课程中,孟宁老师通过丰富的案例和实例,深入浅出地讲解了软件工程中的关键概念和技能,如需求分析、设计模式、测试方法等。孟宁老师的教学方法注重实践,让大家在实际操作中更加深入地理解这些概念。在孟宁老师的指导下,大家不仅学到了理论知识,还学会了如何将这些知识应用到实际项目中。
除此之外,孟宁老师还鼓励大家与同学们进行交流和合作,这不仅使大家更好地理解课程内容,还培养了大家团队协作的能力。孟宁老师的积极引导和支持,让大家在这门课程中不断进步和提高。
因此,大家再次向孟宁老师表达大家的感激之情。孟宁老师的教学和指导对大家的学习和职业生涯将产生深远的影响。孟宁老师的贡献将永远铭刻在大家的心中。
再次感谢孟宁老师!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

APSIM模型的参数优化

随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。 APSIM (Agricultural Production Systems sIMulator)模型[1]是世界知名的…

C++STL:无序关联容器

文章目录 1. 无序关联容器1.1 概述1.2 无序容器种类 2. unordered_map2.1 概述2.2 成员方法2.3 创建C unordered_map容器的方法2.4 迭代器2.5 C STL unordered_map获取元素的几种方法2.6 C unordered_map insert()方法2.7 C unordered_map emplace()和emplace_hint()方法2.7.1 …

【稳定性验证】视频流mesh环境下稳定性验证

目录 正常保持上线状态 延时丢包 丢包(很稳) 延时 丢包 乱序 (也很稳) webGL lost 正常保持上线状态 延时丢包 丢包(很稳) 延时 丢包 乱序 (也很稳) webGL lost

Flink SQL之常用函数

官方函数查询地址&#xff1a;https://nightlies.apache.org/flink/flink-docs-release-1.12/dev/table/functions/systemFunctions.html 可根据使用的版本查找&#xff0c;该链接为1.12版本。 1.比较函数 <> > > < < 注意&#xff1a;select nullnull…

手写Spring框架---MVC实现

目录 预备 自研框架MVC的实现 MVC架构草图&#xff1a; 大致流程 实现思路 自定义注解 JavaBean 请求的拦截-建立DispatcherServlet 责任链处理请求 RequestProcessor矩阵 Render矩阵 预备 在DispatcherServlet&#xff1a; 解析请求路径和请求方法依赖容器&#xf…

PostgreSQL 笔记

PostgreSQL 笔记 一、简介 这里主要是记录学习 PostgreSQL 常用操作命令&#xff0c;方便今后查阅&#xff01;&#xff01;&#xff01; PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS)&#xff0c;在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress…

水库大坝安全监测系统是由什么组成的?

水库大坝是防洪抗灾的重要设施&#xff0c;它们的安全性直接关系到人民群众的生命财产安全。因此&#xff0c;水库大坝的安全监测必不可少。水库大坝安全监测系统是一种集成了数据采集、传输、处理和分析的技术平台&#xff0c;能够实时、准确地监测大坝的状态&#xff0c;及时…

一.《某三国》人物属性及其相关属性

人物属性 1.找一个可以操控变化的属性来找 比如血量.坐标或者五铢(绑定金币),这里我们用五铢找 五铢只要打一个怪就会加一点 2.我们直接搜变化即可搜到 五铢地址0AD64EAC 3.我们CE给地址下访问 4.这里我们最后找第一条访问 因为他是被改变的 或者你CE给地址下写入 5.然后我…

APSIM作物生长模拟模型:农田管理、土壤碳氮平衡、土壤水平衡、作物产量、物候发育光合生产、作物产量等

查看原文>>>基于R语言APSIM模型高级应用及批量模拟实践技术 目录 专题一、APSIM模型应用与R语言数据清洗 专题二、APSIM气象文件准备与R语言融合应用 专题三、APSIM模型的物候发育和光合生产模块 专题四、APSIM物质分配与产量模拟 专题五、APSIM土壤水平衡模块 …

前端浏览器缓存的好处和弊端以及如何处理弊端

浏览器缓存 好处&#xff1a; 减少冗余的数据传输&#xff0c;节省带宽。减轻服务器的请求压力&#xff0c;因为有缓存可以减少向服务器发送请求&#xff0c;资源从缓存中读取&#xff0c;加快客户端的访问速度。因为无需从服务器请求等待响应 缺点&#xff1a; 系统更新时…

使用docker-file 将springboot项目打成镜像,发布成容器服务

一 docker-file将jar包发布成容器服务 1.1 docker的安装 [rootlocalhost ~]# uname -r 3.10.0-862.el7.x86_64 [rootlocalhost ~]# yum install docker [rootlocalhost export]# systemctl start docker [rootlocalhost export]# docker -v Docker version 1.13.1, build…

CANoe测试车载以太网 Link up/Link down时间

系列文章目录 文章目录 系列文章目录前言一、CANoe配置Link up/Link down1、配置端口2、打开端口二、CANoe测试Link up /Link down时间1、打开Trace监听窗口2、CANoe查看Link up时间3、CANoe查看Link down时间前言 随着智能电动汽车的行业的发展,车载以太网的应用越来越广泛,…

学习react,复制一个civitai(C站)-更新3

更新内容 优化了一下加载速度 图片列表 初步更新了199张图片&#xff0c;大部分都有stable diffusion 的prompts。 可以直接复制到AI绘画里面使用。 先来看看效果图吧&#xff1a; 我还是挺喜欢这种砌砖流布局 技术点 同样使用了砌墙瀑布流布局:masonry js 安装方法 npm …

修复Google翻译小工具

修复Google翻译小工具 前言自己改的&#xff0c;小点声用 sudo vim /etc/hosts加上以下内容即可 nslookup google.cn |grep Address: |head -n 2|tail -n 1 |awk {print $2} translate.google.com

Golang 面向对象编程 概念

在Golang里面没有类的概念&#xff0c;它是使用结构体的东西来替代这个类的概念。 //张老太养了2只猫猫&#xff1a;一只名字叫小白&#xff0c;今年3岁&#xff0c;白色。还有一只叫小花&#xff0c;今年8岁&#xff0c;花色。 请编写一个程序&#xff0c;当用户输入小猫的名…

Redis第一天

Redis第一天 Redis基本数据结构数据结构字符串Redis链表字典跳跃表压缩列表 对象字符串对象列表对象哈希对象集合对象有序集合对象类型检查键回收 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络…

ios 启动页storyboard 使用记录

本文简单记录ios启动页storyboard 如何使用和注意事项。 xcode窗口简介 以xcode14为例&#xff0c;新建项目如下图&#xff0c;左边文件栏中的LaunchScreen.storyboard 为默认启动页布局。窗口中间部分是storyboard中的组件列表&#xff0c;右侧为预览&#xff0c;可以看到渲…

摩尔投票算法(Moore‘s Voting Algorithm)及例题

摩尔投票算法&#xff08;Moores Voting Algorithm&#xff09;及例题 摩尔投票算法简介摩尔投票算法算法思想摩尔投票算法经典题目169. 多数元素229. 多数元素 II6927. 合法分割的最小下标 上午打力扣第 354 场周赛最后十五分钟用摩尔投票算法直接秒了第三题。 摩尔投票算法简…

matlab数组中元素位置

%判断某个元素的位置 find(a2)就得到2所在的位置Matlab判断某数组中是否包含某元素及其位置

torch.nn.BCEWithLogitsLoss与torch.nn.BCELoss

torch.nn.BCEWithLogitsLoss相当于sigmoidtorch.nn.BCELoss。代码示例如下&#xff0c; import torch import torch.nn as nnBCEWithLogitsLoss nn.BCEWithLogitsLoss() BCELoss nn.BCELoss()x torch.randn((1,)) y torch.FloatTensor([1])Loss_BCEWithLogits BCEWithLog…