软件工程学习总结

本文主要总结了中科大软件学院孟宁老师开设的《高级软件工程》课程中的内容。

课程内容有如下几个部分:

  1. 工欲善其事必先利其器:在这一部分中主要介绍了5个码农的必备技能:Typing,VS Code,Git,Vim,Regular Expression。
  2. 代码中的软件工程:在这一部分中进行了五个工程化的编程实战,第一个实战实现了一个命令行的菜单小程序,最终目标是完成一个通用的命令行的菜单子系统便于在不同项目中重用;第二个实战主要涉及了模块化代码;第三个实战主要涉及了接口的概念和定义;第四个实战主要涉及了线程、函数调用堆栈、可重入函数、线程安全等知识,并进行了软件模块的线程安全分析;第五个实战主要涉及了menu子系统的可重用接口设计、Makefile、复杂命令函数接口等。
  3. 从需求分析到软件设计:这一部分从需求分析讲起,先介绍了需求相关的基本概念,例如什么是高质量的需求,以及需求分析的方法、用例图等知识。后面介绍了面向对象的分析和设计,提供了一种从需求分析到软件设计的基本建模方法。以对象作为基本元素构建起来了一种主流的看待软件的范型,形成了从编程语言、UML、开发方法、设计模式、软件架构以及工程思想方法等一系列成果。
  4. 软件科学基础概论:这一部分的内容围绕软件展开,主要内容包括软件的基本构成元素、基本结构、特殊机制、内在特性。
  5. 软件危机和软件过程:这一部分主要围绕软件危机和软件过程展开。软件危机部分介绍了相关的背景,历史上解决软件危机的种种方法。软件过程部分介绍了软件的生命周期概述、瀑布模型、带原型的瀑布模型、V模型、分阶段增量和迭代和螺旋模型。

在学到“工欲善其事必先利其器”这一章节的内容时,我对于VS Code和Git有了较为深刻的认识。

1. VS Code

VS Code,全称Visual Studio Code,是一个轻量且强大的代码编辑器,支持Windows,OS X和Linux。内置JavaScript、TypeScript和Node.js支持,而且拥有丰富的插件生态系统,可通过安装插件来支持C++、C#、Python、PHP等其他语言。下图展示了VS Code中关于C++开发的部分主要插件:

 VS Code为什么能这么牛?VS Code的成功离不开如下几点特性:

1. 简洁而聚焦的产品定位 

VS Code界面一目了然,上手容易。

2. 进程隔离的插件模型

VS Code是基于Node.js的,而Node.js是单线程的,为了提升稳定性,VS Code选择将插件放到单独的进程里,插件的崩溃不会干扰到主进程。

 3. UI 渲染与业务逻辑隔离,一致的用户体验
VS Code 没有给插件开发者设计新界面的机会,自身统管所有用户界面交互,制定用户界面交互的标准,所有用户的操作被转化为各种请求发送给插件进程,插件能做的就是响应这些请求,插件进程只能专注于业务逻辑处理,从而做到从始至终插件都不能“决定”或者“影响”界面元素如何被渲染,比如颜色、字体等一概不行,至于用户交互过程中弹对话框一类的动作更是完全不可能的。这样UI界面渲染与业务逻辑隔离,从而做到一致的用户体验。

4. 代码理解和调试——LSP和DAP两大协议

代码理解和调试,绝大部分功能都是由第三方插件来实现的,这些用于代码理解和调试的第三方插件与VS Code主进程之间的桥梁就是两大协议——Language Server Protocol(LSP)和 Debug Adapter Protocol(DAP)。

Language Server Protocol(LSP)协议为VS Code提供了多语言支持,它具有设计节制、抽象合理、细节周全等特点,是微软最重要的IP之一。

5. 集大成的 Remote Development

虚拟机、远程服务器、WSL都可以成为一个Remote,仅需一个Remote-SSH插件,就可以在本地开发Remote上的项目。

2. Git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,是是目前世界上最先进的分布式版本控制系统(没有之一)。

Git的官网:Git

Git的基本操作逻辑如下图所示:

对于本地版本库,有如下基本用法:

git init # 初始化一个本地版本库
git status # 查看当前工作区(workspace)的状态
git add [FILES] # 把文件添加到暂存区(Index) 
git commit -m "wrote a commit log infro” # 把暂存区里的文件提交到仓库
git log # 查看当前HEAD之前的提交记录,便于回到过去
git reset —hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 # 回退
git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来
git reset —hard commit-id/commit-id的头几个字符 # 回退

 对于远程版本库,有如下基本用法:

git clone # 即克隆一个存储库到一个新的目录下
git fetch # 下载一个远程存储库数据对象等信息到本地存储库
git push # 将本地存储库的相关数据对象更新到远程存储库
git merge # 合并两个或多个开发历史记录
git pull # 从其他存储库或分支抓取并合并到当前存储库的当前分支

若需要团队协作,则有如下用法:

git checkout -b mybranch # 创建一个本地名字为mybranch的分支
git branch # 查看当前分支
git add FILES # 将文件添加至本地git版本库
git commit -m "commit message" # 提交当前的改动,并附上提交的信息

VS Code中集成了Git,如果一个项目文件夹是含有.git文件夹的(即受Git版本控制的),那么VS Code就会自动读取版本库中的相应信息,并在主界面上提供相应的图形化界面,帮助开发者更加直观的看到本地分支所做的改动,并且可以很快的将当前错误的改动一键回退到初始状态。

在个人开发的场景下,Git的作用也许体现的不是很明显,但是在团队或者多团队协作的大型项目中,Git是不可或缺的。如果再搭配上VS Code,那么项目中存在多个开发语言的问题也得以解决,并且可以快速地创建本地的调试脚本,并且为不同的模块创建不同的调试工作。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值