USTC高级软件工程-课程学习总结

       高级软件工程是软院一门重要的核心课。作为转行的学生,此前虽然也学习了一些计算机基础课程和程序项目,但总感觉代码写得零碎不成体系。经过这门课的学习,我才发现是缺失了软件工程相关知识和习惯的缘故。软件工程不仅能使软件开发流程化、标准化、系统化,提高开发的效率和复用性,还能使开发中的团队合作更加简明高效。

       以下是课程的主要内容,作为回顾。

一、课程学习内容

1. 工欲善其事必先利其器

Typing训练

VsCode的基本配置、常用快捷键;作为产品的优点以及开发思路

Git使用

常用命令,基本操作逻辑(如图),本地和远程版本库

USTC高级软件工程-课程学习总结_第1张图片

团队项目中的分叉合并

克隆或同步最新的代码到本地存储;为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;在该分支上完成某单一功能模块或代码模块的开发工作;最后,将该分支合并到主分支

Git Rebase

Fork+Pull request

Vim的基本操作、快捷键

正则表达式

VsCode中搜索的方式,通配符用法(. + * ? {a,b} [] ^ [0-9] \s),贪婪匹配和懒惰匹配,捕获组的概念和使用

2. 代码中的软件工程-工程化编程实战

C/C++编译调试环境配置

代码规范和代码风格(简明、易读、无二义性)

编写高质量代码的基本方法

通过控制结构简化代码;通过数据结构简化代码;一定要有错误处理;性能优先策略背后隐藏的代价;拒绝修修补补,要不断重构代码。

模块化软件设计

模块化(Modularity)是在软件系统设计时保持系统内各部分相对独立,以便每一个部分可以被独立地进行设计和开发。这个做法背后的基本原理是关注点的分离。

耦合度和内聚度的定义,低耦合高内聚

软件设计中的一些基本方法

1.KISS(Keep It Simple & Stupid)原则

2.使用本地化外部接口来提高代码的适应能力

3.不要和陌生人说话原则

4.先写伪代码的代码结构更好一些

5.using design to frame the code(matching design with implementation)

可重用软件设计

1.消费者重用和生产者重用

2.接口的基本概念:接口就是互相联系的双方共同遵守的一种协议规范,在面向对象的编程中,接口是对象对外开放(public)的一组属性和方法的集合

3.软件模块接口举例

4.微服务接口举例(微服务的概念)

5.接口与耦合度之间的关系(公共耦合,数据耦合,标记耦合)

6.可重用软件模块的接口设计范例

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

可重入函数与线程安全

1.线程的基本概念:线程(thread)是操作系统能够进行运算调度的最小单位。它包含在进程之中,是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

2.函数调用堆栈

3.可重入函数

4.什么是线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题。

5.Linktable软件模块的线程安全分析

3. 从需求分析到软件设计

需求: 定义、类型、获取方法、高质量需求

对需求进行分析和建模

1.原型化方法(Prototyping)和建模的方法(Modeling)

3.用例建模(Use Case Modeling)

4.面向对象分析涉及的基本概念

5.业务领域建模(Domain Modeling)

6.关联类及关系数据模型

7.关系数据模型的MongoDB设计与实现

UML图、时序图的画法

从需求分析到软件设计

1.敏捷统一过程(Agile Unified Process)

2.对象交互建模(Object Interaction Modeling)

3.形成软件设计方案的基本方法

4. 软件科学基础概论

软件的基本构成元素:对象(Object),函数和变量/常量,指令和操作数

软件基本结构:顺序结构,分支结构,循环结构,函数调用框架,继承和对象组合

一些特殊机制:继承(Inheritance)、对象组合(object composition)和多态(polymorphism);回调函数(callback)、闭包(closure)、异步调用和匿名函数

设计模式

1.分类(创建、结构、行为;类、对象)

2.常用的设计模式及案例

3.背后的设计原则:开闭原则,Liskov替换原则,依赖倒置原则,单一职责原则,迪米特法则,合成复用原则

观察者模式

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

常见的软件架构

1.三层模式

2.MVC:  Model-View-Controller(模型-视图-控制器), 可以采用将模型(Model)、视图(View)和控制器( Controller)相分离。

USTC高级软件工程-课程学习总结_第2张图片

3.MVVM:  Model-View-ViewModel,ViewModel负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model。

USTC高级软件工程-课程学习总结_第3张图片

软件架构风格与描述方法

软件架构风格与策略:  管道-过滤器, 客户-服务,P2P,发布-订阅,CRUD, 层次化

软件架构的描述方法:分解视图 Decomposition View ,依赖视图 Dependencies View ,泛化视图 Generalization View,执行视图Execution View,实现视图Implementation View,部署视图 Deployment View,工作任务分配视图 Work-assignment View

软件质量

不同的视角下的质量(用户,生产,产品,市场价值)

能力成熟度模型CMM/CMMI

几种重要的软件质量属性: 易于修改维护(Modifiability),良好的性能表现(Performance),安全性(Security),可靠性(Reliability), 健壮性(Robustness), 易用性(Usability),商业目标(Business goals)

5. 软件危机和软件过程

软件危机:产生的背景,“银弹“争论,软件工具链

软件过程模型:软件生命周期的模式我们称之为软件过程模型。瀑布模型,V模型,螺旋模型,增量和迭代的定义

PSP和TSP

CMM/CMMI

敏捷方法:敏捷宣言,Scrum

DevOps: 开发(软件工程)、 技术运营和质量保障(QA)三者的交集

二、课程实验

1. Typing >30 WPM

2. 安装使用VS Code

3. 五大场景玩转Git

4. 正则表达式10步通关

5. 选用go或rust编写menu项目,创建一个版本库(gitee或github),采用VS Code作为编译调试环境。撰写一个帖子,从创建版本库、配置VS Code编译调试环境、编写menu第一版简单程序,以及最终调试运行,完整记录下来,目标是为go或rust的开发者提供一个开发环境配置和工作流程的参考。

帖子:

http://t.csdn.cn/D8bYT

6.用Rust或Go编写一个Linktable的库,写一个帖子分享一下定义接口和设计一个程序库的心得体会,同时将代码的版本库链接贴上。

帖子:

http://t.csdn.cn/vrM6F

gitee链接:

https://gitee.com/statelogin/se-menu

三、感想

       感谢孟宁老师对这门课的讲解,通过这门课程的学习,我体会到了软件开发背后工程体系的庞大和严谨。软件工程的一系列模式、架构、标准和流程,不但体现了计算机程序的逻辑与哲学,也反映了工业化和管理学思想介入软件领域的成果。要成为一名合格的程序员,不仅要掌握扎实的计算机知识和编程技能,也要对软件的逻辑体系和软件开发的过程有深刻的认识;对不同的语言、工具或框架,不但要会使用,也要充分理解其在软件架构中的作用和意义,结合整体看待其内部结构和思路。

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

 作者:SA21225245

你可能感兴趣的:(高级软件工程,软件工程,学习)