软件工程
基础理论
1.软件概述
软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。
工程是将理论和知识应用于实践的科学,其目的是经济有效的解决实际问题。
2.软件本质特性
软件=程序+数据+文档
软件具有复杂性、一致性、可变性和不可见性等固有的内在特性,这是造成软件开发困难的根本原因
软件工程=过程+方法+工具
3.工程思维
工程方法:有目的、有计划、有步骤地解决问题的方法就是工程方法。
4.瀑布模型
Code And Fix
瀑布模型的问题 不能及时响应需求变更。
5.其他模型
1.快速原型模式
为了解决客户的需求不明确和需求多变的问题。以牺牲质量为代价
两种处理策略 抛弃策略和附加策略
2.增量模型
模块分批次交付
3.迭代模型
每次迭代都有一个可用的版本
增量模型是按照功能模块来拆分,而迭代模型是按照时间来拆分的。看单位时间内能完成多少功能。
6.敏捷开发
1.敏捷开发是什么
敏捷不是一种方法论,也不是一种软件开发的具体方法,更不是一个框架或过程,而是一套价值观和原则。
2.敏捷开发解决了什么问题
快速迭代 持续集成 拥抱变化
3.怎么用敏捷开发
敏捷开发更注重软件开发中人的作用,需要团队成员以及客户之间的紧密协作。
7.大厂再用那些敏捷方法-上
Ticket
todo inprogress Done
基础Git和CI的开发流程
部署上线流程
每日站立会议
1.成员轮流发言
2.检查最先的Ticket
3.停车场问题
8.大厂在用那些敏捷方法(下)
9.怎样平衡软件质量与时间成本范围的关系?
项目管理金三角
前面我们说日常生活中“多、快、好、省”最多只能选两样,其实如何平衡好软件质量与时间成本范围的关系也是一样的道理,我们只能最多选择两样,然后在另一边或者另两条边去寻找平衡。
所以第一件事就是:从时间、成本和范围这三条边中找出来固定的一条或者两条边,再去调整另一条边。
项目规划篇
9.为什么软件工程项目普遍不重视可行性分析?
1.可行性分析主要从哪几个方法进行
1.经济可行性 2.技术可行性 3.社会可行性
10.如果你想技术转管理,先来试试管好一个项目
全局观。
11.项目计划:代码未动,计划先行
制定项目计划
1.任务分解
2.估算时间
3.派任务路径
12-流程和规范:红绿灯不是约束,而是用来提高效率
提升效率
从个人来看,因为流程规范的存在,确实可能存在效率降低的情况,但从团队的角度来看,好的流程规范反而是提升效率的。
将好的时间标准化流程化,共享经验
借助流程规范
如何制定好流程规范
1.明确要解决的问题
2.提出解决方案
敏捷开发的流程 代码规范 源代码管理流程 部署流程
3.达成共识 推广执行
4.持续优化 不断改进
流程规范化
13-白天开会,加班写代码的节奏怎么破?
14-项目管理工具:一切管理问题,都应思考能否通过工具解决
15-风险管理:不能盲目乐观,凡事都应该有B计划
16-为什么你不爱写项目文档?
需求分析篇
17-需求分析到底要分析什么?怎么分析?
需求分析要分析什么
1.挖掘真实需求
1.目标用户 用户不同 述求也不一样
2.使用场景 使用场景不一样 解决方案也会有所不同
3.想要解决的问题 用户背后想要解决的问题是什么
2.提出解决方案
3.筛选和验证方案
怎样做需求分析
1.收集需求
2.分析需求
3.需求评估
4.需求设计
5.验证需求
系统设计篇
21-架构设计:普通程序员也能实现复杂系统?
为什么软件项目需要架构设计
1.需求让技术变复杂
2.人员会让技术变复杂
3.技术本身也是复杂的
4.要让软件稳定运行是复杂的
首先,架构设计可以降低满足需求和需求变化的开发成本。
复杂需求 架构设计通过对系统抽象和分解。分而治之
需求的变化 分层架构
其次架构设计可以帮助组织好各种技术
最后架构设计可以保保障服务稳定运行
什么是架构设计
架构设计的目标 是用最小的人力成本来满足需求的开发和响应需求的变化,用最小的运行成本来保障软件的运行。
架构设计的道,就是组织人员和技术把系统和团队拆分 并安排好分后的排序关系,让拆分后的部分能通过约定好的协议相互通信 共同实现最终的结果。
如何做好架构设计
1.需求分析
了解主要用户角色和其使用的场景
2.选择相似的成熟的架构设计方案
3.自顶向下层层细化
- 部署
调整后 备用机
- 分层和分模块
用户界面层:用户界面,负责展现功能以及和用户交互。
服务层:API服务和Web网站服务。
业务逻辑层:实现业务逻辑,比如说如何读取用户订阅的专栏列表。
数据访问层:对数据库的访问。
数据存储:用数据库保存数据,文件库保存音频文件。
- API设计 数据库设计 模块的设计
4.验证和优化架构设计方案
23-架构师:不想当架构师的程序员不是好程序员
这也适用于技术领域,对于程序员来说,并不代表一定要有一个架构师的头衔,而是心中有大局观,有架构师的思维。从而能理解架构设计,能写出好的程序。
什么是架构师思维
抽象思维
抽象思维,帮助我们隐藏很多无关紧要的细节
分治思维
复用思维
迭代思维
好的架构师什么样
一个好的架构师,不仅技术要好,还要懂业务;能从整体设计架构,也能在局部实现功能。
如何成为好的架构师
- 要成为一个优秀的程序员
- 多学习多模仿
- 选择好行业和平台
开发编码篇
25-有哪些方法可以提高开发效率
积极主动,行动起来改变自己
想想在回应
减少关注圈,扩大影响圈
以始为终 想清楚在开工
经常停下来想想目标
制定原则
先运行在优化
不要复制粘贴代码----复用
每个pull requesu尽可能小—分而治之
公开自己的计划
要事第一,把时间用在刀刃上
重要紧急的事情马上处理
重要不紧急的要事,要花最多的时间在上面
紧急不重要的事凑一起集中做
不重要不紧急的事情能不做就不做
27-软件工程师的核心竞争力是什么?(上)
学习能力
编程语言、框架、工具,这些都不是软件工程师的核心竞争力,能快速学习掌握编程语言、框架、工具的学习能力才是软件工程师最基础的核心竞争力。
解决问题的能力
软件工程师这些日常开发工作的核心还是在发现问题、分析问题和解决问题