【软件工程之美】软件工程之美学习笔记

软件工程

【软件工程之美】软件工程之美学习笔记_第1张图片

基础理论

1.软件概述

软件是软件工程的研究对象,也是软件工程的产品形态与客观存在。

工程是将理论和知识应用于实践的科学,其目的是经济有效的解决实际问题。

2.软件本质特性

软件=程序+数据+文档

【软件工程之美】软件工程之美学习笔记_第2张图片

软件具有复杂性一致性可变性和不可见性等固有的内在特性,这是造成软件开发困难的根本原因

【软件工程之美】软件工程之美学习笔记_第3张图片

软件工程=过程+方法+工具

3.工程思维

工程方法:有目的、有计划、有步骤地解决问题的方法就是工程方法。

【软件工程之美】软件工程之美学习笔记_第4张图片

4.瀑布模型

Code And Fix

【软件工程之美】软件工程之美学习笔记_第5张图片

瀑布模型的问题 不能及时响应需求变更

【软件工程之美】软件工程之美学习笔记_第6张图片

5.其他模型

1.快速原型模式

为了解决客户的需求不明确和需求多变的问题。以牺牲质量为代价

两种处理策略 抛弃策略和附加策略

2.增量模型

模块分批次交付

3.迭代模型

每次迭代都有一个可用的版本

增量模型是按照功能模块来拆分而迭代模型是按照时间来拆分的。看单位时间内能完成多少功能。

6.敏捷开发

1.敏捷开发是什么

【软件工程之美】软件工程之美学习笔记_第7张图片
敏捷不是一种方法论,也不是一种软件开发的具体方法,更不是一个框架或过程,而是一套价值观和原则。

2.敏捷开发解决了什么问题

快速迭代 持续集成 拥抱变化

3.怎么用敏捷开发

敏捷开发更注重软件开发中人的作用,需要团队成员以及客户之间的紧密协作。

7.大厂再用那些敏捷方法-上

【软件工程之美】软件工程之美学习笔记_第8张图片

Ticket

todo inprogress Done

基础Git和CI的开发流程

【软件工程之美】软件工程之美学习笔记_第9张图片

部署上线流程

每日站立会议

1.成员轮流发言

2.检查最先的Ticket

3.停车场问题

8.大厂在用那些敏捷方法(下)

9.怎样平衡软件质量与时间成本范围的关系?

【软件工程之美】软件工程之美学习笔记_第10张图片

项目管理金三角

前面我们说日常生活中“多、快、好、省”最多只能选两样,其实如何平衡好软件质量与时间成本范围的关系也是一样的道理,我们只能最多选择两样,然后在另一边或者另两条边去寻找平衡。
所以第一件事就是:从时间、成本和范围这三条边中找出来固定的一条或者两条边,再去调整另一条边。

项目规划篇

9.为什么软件工程项目普遍不重视可行性分析?

1.可行性分析主要从哪几个方法进行

1.经济可行性 2.技术可行性 3.社会可行性

【软件工程之美】软件工程之美学习笔记_第11张图片

10.如果你想技术转管理,先来试试管好一个项目

全局观。

【软件工程之美】软件工程之美学习笔记_第12张图片

【软件工程之美】软件工程之美学习笔记_第13张图片

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.需求分析

了解主要用户角色和其使用的场景

【软件工程之美】软件工程之美学习笔记_第14张图片

2.选择相似的成熟的架构设计方案

【软件工程之美】软件工程之美学习笔记_第15张图片

3.自顶向下层层细化

  • 部署

【软件工程之美】软件工程之美学习笔记_第16张图片

调整后 备用机

【软件工程之美】软件工程之美学习笔记_第17张图片

  • 分层和分模块

用户界面层:用户界面,负责展现功能以及和用户交互。
服务层:API服务和Web网站服务。
业务逻辑层:实现业务逻辑,比如说如何读取用户订阅的专栏列表。
数据访问层:对数据库的访问。
数据存储:用数据库保存数据,文件库保存音频文件。

【软件工程之美】软件工程之美学习笔记_第18张图片

  • API设计 数据库设计 模块的设计

4.验证和优化架构设计方案

23-架构师:不想当架构师的程序员不是好程序员

这也适用于技术领域,对于程序员来说,并不代表一定要有一个架构师的头衔,而是心中有大局观,有架构师的思维。从而能理解架构设计,能写出好的程序。

什么是架构师思维

抽象思维

抽象思维,帮助我们隐藏很多无关紧要的细节

分治思维

复用思维

迭代思维

好的架构师什么样

一个好的架构师,不仅技术要好,还要懂业务;能从整体设计架构,也能在局部实现功能。

【软件工程之美】软件工程之美学习笔记_第19张图片

如何成为好的架构师

  • 要成为一个优秀的程序员
  • 多学习多模仿
  • 选择好行业和平台

开发编码篇

25-有哪些方法可以提高开发效率

积极主动,行动起来改变自己

想想在回应

减少关注圈,扩大影响圈

以始为终 想清楚在开工

经常停下来想想目标

制定原则

​ 先运行在优化

​ 不要复制粘贴代码----复用

​ 每个pull requesu尽可能小—分而治之

公开自己的计划

要事第一,把时间用在刀刃上

重要紧急的事情马上处理

重要不紧急的要事,要花最多的时间在上面

紧急不重要的事凑一起集中做

不重要不紧急的事情能不做就不做

27-软件工程师的核心竞争力是什么?(上)

学习能力

编程语言、框架、工具,这些都不是软件工程师的核心竞争力,能快速学习掌握编程语言、框架、工具的学习能力才是软件工程师最基础的核心竞争力。

解决问题的能力

软件工程师这些日常开发工作的核心还是在发现问题、分析问题和解决问题

影响力

【软件工程之美】软件工程之美学习笔记_第20张图片

28-软件工程师的核心竞争力是什么? (下)

如何提升学习能力

首先需要在一个技术领域深耕

然后往相近的领域逐步横向拓展

如何提高解决问题的能力

软件测试篇

运行维护篇

经典案例解析篇

你可能感兴趣的:(#,软件工程之美)