高级软件工程总结

经过一个学期的高级软件工程的学习,收获颇多,在此总结一下本门课程中学到的重要的,平时开发以及面试中用得到的知识点,方便自己复习的同时,希望也能帮助到其他看到这篇文章的小伙伴。

一、git的使用,以及github项目部署

1、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 init,直接git clone url
git fetch 从远程获取最新到本地,不会自动merge
git pull 相当于是从远程获取最新版本并merge到本地
git push 将本地存储库的相关数据对象更新到远程存储库
git merge 把两个分支最新的快照以及二者最新的共同祖先进行三方合并,产生一个新的提交对象
git rebase 把在一个分支里提交的改变移到另一个分支里重放一遍
git branch 分支名 创建一个分支 git checkout 分支名 转换到当前分支环境中

2、通过动手实践,掌握了git的知识以及github项目部署。
(1)创建gitee仓库并克隆到本地
在这里插入图片描述

git clone https://gitee.com/snow1y/menu.git

(2)更新项目至gitee

  1. git add

点击下图“+”,等同于在终端输入“git add 文件名”指令,将文件添加到暂存区,“git add .”可将文件夹所有文件添加到暂存区。
在这里插入图片描述

  1. git commit

在消息栏中输入“ctrl+enter”,并输入提交信息,按“enter”,可以将暂存区内容添加到本地仓库中。相当于“git commit -m 提交信息”指令。
在这里插入图片描述

  1. git push

之后,点击推送,可以将本地版本上传到远程并合并。相当于“git push”。

在这里插入图片描述

此时,刷新gitee可以看到项目已经更新。

二、一些重要的理论概念

v模型
在瀑布模型基础上将需求分析和接受度测试、系统设计和系统测试、详细设计和单元测试结合起来,最后是产品,提高过程活动的内聚度
生死相依原则:创建一个对象和销毁一个对象的代码成对出现便于代码的组织和管理,V模型就是开始一个特定过程活动和评估该特定过程活动成对出现,从而便于软件开发过程的组织和管理
分阶段开发可以让客户在没有开发完成之前就可以使用部分功能,也就是每次交付系统的一小部分
分阶段开发的优点 在系统没有开发完成之前,开始进行交付和用户培训 频繁的软件发布可以让开发者敏捷的应对始料未及的问题 开发团队可以在不同的版本聚焦与不同的功能领域,从而提高开发效率 有助于提前布局抢占市场
CMM
在这里插入图片描述

没有银弹的含义
软件概念结构的复杂性,无法达成软件概念的完整性和一致性,自然无法从根本上解决软件危机带来的困境。

MVVM比MVC更智能的原因
MVVM通过ViewModel实现了View和Model的自动同步,比MVC精简很多,不再用选择器频繁地操作DOM。在MVVM中,Controller不再像MVC那样持有Model,而是持有ViewModel,Model的处理交给ViewModel,Controller不需要关心数据的处理过程,只要最后向ViewModel拿到处理完的数据 视图可以独立于Model变化和修改,一个ViewModel可以绑定到不同的view上,开发人员可以在ViewModel上进行测试开发,而无需改动model或是view,增加了可重用性。

高质量需求的特点
正确的、一致的、无二义性的、完整的、可行的、和主要目标相关、可测试的、可追踪的

统一过程的核心要义
用例驱动、以架构为中心、增量且迭代的过程 敏捷统一过程进一步将软件过程中每一次迭代过程划分为计划阶段和增量阶段

模块化的基本原理
关注点的分离。
每一个软件模块都将只有一个单一的功能目标,并相对独立于其他软件模块,使得每一个软件模块都容易理解容易开发,从而整个软件系统也更容易定位软件缺陷bug,整个系统的变更和维护也更容易。

通用接口定义的基本方法
参数化上下文;移除前置条件;简化后置条件

三、设计模式

创建型模式
单例模式
某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例

原型模式
将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例,原型模式的应用场景非常多,几乎所有通过复制的方式创建新实例的场景都有原型模式

建造者模式
将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象

结构型模式
代理模式
为某对象提供一种代理以控制对该对象的访问,从而限制、增强或修改该对象的一些特性。典型的应用如外部接口本地化将外部的输入和输出封装成本地接口,有效降低模块与外部的耦合度。

适配器模式
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作,对象组合方式的适配器模式比较常用

装饰模式
在不改变现有对象结构的情况下,动态地给对象增加一些职责,即增加其额外的功能。装饰模式实质上是用对象组合的方式扩展功能,如Java I/O 标准库

外观模式
为复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问

享元模式
运用共享技术来有效地支持大量细粒度对象的复用。比如线程池、固定分配存储空间的消息队列等往往都是该模式的应用场景

行为型模式
策略模式
定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。策略模式是多态和对象组合的综合应用

命令模式
将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开

模板方法模式
定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤

职责链模式
将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链

中介者模式
定义一个中介对象来简化原有对象之间的交互关系 降低系统中对象间的耦合度,使原有对象之间不必相互了解。如控制器就是模型和视图的中介者,采用“中介者模式”大大降低了对象之间的耦合性,提高系统的灵活性

观察者模式
指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为 这样所有依赖于它的对象都得到通知并被自动更新

四、vue.js中的MVVM

讲得非常详细的一部分,能够深刻理解vue.js中MVVM模型的运行机制。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

五、总结和感想

非常感谢孟老师一个学期的教导,通过该课程,我学习到了软件开发中的常用工具的使用,完整的软件开发流程,软件架构与设计,软件危机等软件工程中实用且必须掌握的知识,不仅丰富了知识储备,也通过学习与实践提高了代码能力与代码规范。在课程中非常印象深刻的点在于,老师多次强调了软件工程开发流程的完整性与重要性,在学习这门课之前我对此一直是有所疏忽的,一直以为程序员只要代码能力过关就能开发好一个新项目。然而经过该课程的学习,我深刻地体会到了,软件开发过程中需求分析,概要设计,详细设计等在编码之前的工作甚至比编码本身更重要。良好的需求分析能够更好地把握用户需求,从而更好地设计,而设计牵涉到整体项目的架构以及模块化的分类,前期需要考虑清楚。好的需求分析和设计往往能缩短整个开发流程的工期,能够令编码更轻松。至于,是否未来能够出现“银弹”真正地解决软件危机,我个人看法是乐观的,就像基于组件的软件产业链的提出,虽然没有从根本上解决危机,却从人的角度有效地缓解了危机,带来了整体软件产业的提升,未来会有各种各样新的方案提出,就像现在比较火的深度学习,基于它来对解决软件危机提供方案,不断地提升软件概念的完整性和一致性。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值