从实习到《代码中的软件工程》

文章讲述了软件工程的重要性,强调了vscode、git、vim等工具在开发中的应用,以及正则表达式的实用性。文中还讨论了模块化设计、需求分析、软件设计模式和架构,提倡高质量软件的开发,并提及了敏捷开发方法和CMMI等过程模型。
摘要由CSDN通过智能技术生成

前言

        软件工程一直是一门被认为是水课的课程,但是自从接触到生产实践,才发现软件工程是一门庞大的学问。《代码中的软件工程》可以作为一本步入工作岗位的预备书来阅读,颇有裨益。值此复习之际,结合自己实习中的实践,对每一章知识点进行简单的总结。

一、工欲善其事必先利其器

1、vscode

        前端开发的利器,非常容易通过插件的使用来跟进小组的开发风格和工程结构。常用的代码格式化插件以及语言、框架提示插件十分好用。本身也比较轻量级,不需要额外的环境配置,只需要针对项目进行一些环境的搭建即可。

        常用命令:mac和win不同,而且我有改键的习惯。。。

重要概念

插件进程隔离

ui渲染与业务逻辑隔离

LSP 

2、git

合作的基础,十分方便快捷。好的团队他的git flow自然也是十分完善的。虽然很多操作在vscode界面上很容易实现,而且也有gitlens这种辅助的展示工具,但git基本命令还是要牢记。

重要概念

版本控制:独立文件,补丁,中心版本控制,分布式版本控制

rebase

3、vi/vim

常用,比如配置多仓库ssh的时候,不过对于我这个前端程序员来说,vim确实用的不熟悉。

重要概念

命令模式、输入模式、底线命令模式

4、正则

常用,url的匹配、用户输入的校验,包括一些邪道的拍平数组。很好用,很通用,就是难记,现用现查。

二、工程化编程实战

1、menu.c实验

这个实验贯穿了许多章节,整个流程体现出了一个简单的软件工程分析改进重构过程,十分具有学习意义。

2、代码风格

常用prettier风格,在合并分支时也不会和团队出现代码缩进、换行等差异。eslint也需要

重要概念

规范:简明、易读、无二义性

编写高质量代码的基本方法:控制、数据、异常处理、重构、性能优化、团队合作

3、模块化设计

前端中,比如commonjs和es6的模块化,以及vue的组件渐进式开发,都很符合模块化的概念

重要概念

高内聚低耦合

kiss,一行代码/一个块代码/一个函数/一个模块只做一件事

本地化外部接口,适配器模式

4、可复用软件

npm的每一个轮子都是一个可复用的软件,发布npm包也有相对应的约束。当然往小了说,vue中的mixin,plugin也是可复用的代码组。

重要概念

消费者重用,生产者实现重用

接口:目的,前置条件,协议规范,后置条件,质量属性

微服务

耦合度与接口:无耦合、数据耦合、标记耦合、控制耦合、公共耦合、内容耦合

通用接口定义:参数化上下文,移除前置条件,简化后置条件

5、可重入函数和线程安全

pure和readonly一般都可重用,readonly可能进入临界区

可重入函数:

6、子系统工程化

软件质量角度:产品、用户、商业

软件设计的方法原则:不断重构;模块化、接口、信息隐藏、增量开发、抽象、泛化

三、需求分析和软件设计

1、获取需求的方法

实习中,一般是用户反馈需求给项目经理,在经过评估后合理的加入迭代过程中。这个过程充满了折衷,很像集市买菜一样。

重要概念

需求类型:功能性需求、非功能性需求(质量需求)、设计约束、过程约束

需求相关人员:客户、顾客、用户、行业专家、市场研究院、法务人员、软件工程师、相关技术专家

获取需求的方法:访谈、查阅资料、观察工作方法、向用户学习、头脑风暴、特定领域策略

高质量需求:正确性、一致性、无二义性、完整、可行、可跟踪;可测试、可解决冲突、独特

2、需求分析建模

前端开发中我比较倾向于先规划页面交互原型,使逻辑逐渐清晰,说实话这种方案比起建模方案来说更加直观易懂,而且更加适合页面开发的逻辑。

重要概念

原型方法、建模方法

用例是业务过程:抽象用例、高层用例、扩展用例

面向对象:继承、组合、关联

业务领域建模

数据库设计

反范式化

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

敏捷!但是很容易出现返工等问题,需求分析至关重要。

重要概念

瀑布模型:需求分析,概要设计,详细设计,编码,测试,部署,维护

统一过程:用例驱动,架构为中心、增量且迭代

敏捷统一过程步骤:确定需求、用例满足需求、用例分配到增量阶段、完成迭代

四、软件科学基础概论

这一部分,第一学期的软件体系结构详细学过,当时没有什么意识,越做项目越感觉怎么这么多似曾相识的东西

1、软件是什么

重要概念

对象、函数和变量、指令和操作数、0|1

顺序结构、分支结构、循环结构、函数调用框架、继承和对象组合

特殊机制:回调函数、多态、闭包、异步调用、匿名函数

软件内在:复杂、多变、抽象vs逻辑、不统一

s系统,抽象后不管了,p系统,需要不断从现实世界抽象,e系统,全部的环节都在现实世界抽象

2、软件设计模式

前端常见的有单例模式(vue router)、迭代器模式(生成器函数,迭代器等)、ts有模板模式等等,设计模式随处可见

重要概念

分类:创建模式,结构模式,行为模式,

设计原则:开闭原则,里氏替换原则,依赖倒置原则,单一职责,迪米特,合成复用

3、软件架构

mvvm虽然好用,但也会出现很多控制难题,双向数据绑定总有一些复杂的控制情况

重要概念

三层架构,mvc,mvvm

mvvm,低耦合 ,可重用,独立开发,可测试

4、软件架构风格

重要概念

复用方法:克隆,重构

面向功能/特征/数据/并发/事件/对象的分解

架构风格:管道过滤器,客户服务,p2p,发布订阅,crud,层次化

架构视图:分解、依赖、泛化、执行、实现、部署、工作任务分配

CMM/CMMI

5、高质量软件

高质量软件必然是能经得起风吹雨打的,易用性、鲁棒性、可用性十分重要。当软硬件的能力比较充足时,用户体验永远是摆在第一位。但高质量的软件如果不及时重构,随着技术的革新和时代的变迁就会变成shi山

重要概念

三种视角:产品、过程、价值

质量属性:易于修改维护、可靠性、易用性、安全性、健壮性、商业目标

五、软件危机和软件过程

软件真的是一个十分复杂的系统,他沉浮在这个现实世界中,无时无刻不在走向堕落,维护者只能减缓而不能逆转这个过程。比如目前前端新兴的框架逐渐有一席之地,包括go对java的替代等等,从技术栈的角度来说,软件存在风险。当然,从用户、商业的角度更有许多未知的难题。

重要概念

过程模型:瀑布模型、v模型、增量和迭代开发、螺旋模型

psp和tsp

cmm/cmmi:五种:初始级、管理级、已定义级、量化管理级、持续优化级

敏捷宣言:

个体和互动>流程和工具

工作的软件>详细的文档

客户合作>合同谈判

响应变化>遵循计划

总结

《代码中的软件工程》是一本循序渐进接触软件工程的书籍。我认为前些章节,到menu设计完毕,都很接地气,可以由浅入深。但是有一个小小的建议,后几章对于第一次接触软件工程的人来说较为难以理解,如果能搭配上代码讲解,可能更好。另外,关于设计模式推荐一个网站,可以赋给同学们查缺补漏。常用设计模式有哪些? (refactoringguru.cn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值