《软件开发本质论》读书笔记

news2024/12/25 9:22:04

目录

  • 第一部分——价值的循环
    • 开发取向
      • 频繁交付小的,价值大,代价小的特性
    • 测试
      • 同时要有业务测试和开发测试
      • 开发测试应在代码开发的同时完成甚至先于代码完成
    • 重构
    • 第一部分总结
  • 第二部分——说明与论述
    • 团队
      • 目的
      • 自主
      • 专精
    • 五卡法预测软件计划
    • 控制好自己所参与项目的数量
    • 提高团队的效率,提高个人的能力
    • “速度最快的团队总是平稳、优雅地前进”
    • 重构

在这里插入图片描述

第一部分——价值的循环

开发取向

频繁交付小的,价值大,代价小的特性

因为软件需求难免会变。把开发进度切成小块,利于快速迭代。
下图每一个小矩形代表一个功能特性。其宽度代表需要付出的人力,高度代表带来的收益。原则就是尽量沿着绿色路径走。
在这里插入图片描述

测试

同时要有业务测试和开发测试

业务测试关注软件功能,是相对重型的测试;
开发测试注重软件底层实现

开发测试应在代码开发的同时完成甚至先于代码完成

代码开发过程中,更清楚当前开发的这些代码哪里最需要测试。所以开发测试要尽早做。
最好就是先写测试代码,再开发。这通常被称为测试驱动开发(test-driven devlepment, TDD)

开发测试不是浪费了人力。而是把后期发现问题并找问题的时间前置。并且通常在前期测试并修复问题,远比后期测试再修复问题更容易,花费时间更少。

重构

在软件开始开发时,拥有比较好的设计比较容易。但是在软件迭代过程中,设计退化是很难避免的事情。
因此,重构就是一项必备技能。“测试与重构结合在一起,使得增量式开发成为可能”

同时,业务测试和技术层面的测试,则是重构过程中软件特性及质量不受影响的保障。
在这里插入图片描述

在这里插入图片描述

第一部分总结

在这里插入图片描述

第二部分——说明与论述

团队

目的

产品推动人为团队提供目的,包括大方向和细节上的目的。并使得团队深入理解为什么要做这个事情。

自主

团队成员自主做决定,来判断如何解决问题,如何具体实现需求。自主可以带来创造力,以及更高的工作效率

专精

专精来自迭代过程。

五卡法预测软件计划

把项目整体分成3-5 个部分,然后将拆分的3-5个部分继续各自拆分成3-5 个部分。重复这一过程,直到拆分后的每一个小部分都能够在一周内完成。

控制好自己所参与项目的数量

“同时做太多事情,只会使所有事情的进展都变得缓慢”

提高团队的效率,提高个人的能力

提高团队的效率而不是个人的工作效率。

  1. 团队有良好的技能组合
  2. 关键技能团队成员必须是全职的
  3. 专家指导来提高其他成员的能力

提高个人能力来提高个人的效率。单纯的压力只会使个人在交付时减少测试,减少代码的设计重构,降低交付的质量。这样短期内能交付,但是会埋下巨大隐患,从而延误整体进度。员工很难会自己利用闲暇时间提升自己,因此团队培训非常必要。

“速度最快的团队总是平稳、优雅地前进”

每几周就有一个可发布的,已完成的产品增量版本。这个版本经过了充分的测试。
这样的开发方式中,团队在每次迭代中承担的工作比以前要少(因为要有测试),但是交付质量会提升。从而在整体上提高了效率。

重构

在这里插入图片描述
重构应遵循“露营地原则”:在离开营地时,要让它变得比你来的时候更好。
重构时,不应停下所有功能开发进行重构,而是一边开发,一边清理代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/446759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二叉树一定是完全二叉树

一、树的概念及其结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 1、树的特点 ①有一个特殊的结点&…

ARM Coresight 及 DS-5 介绍 5 - ARM Cortex-M DS-5 加载 ELF 文件运行

文章目录 1.1.1 DS-5 工程创建1.1.2 DS-5 加载 ELF 脚本创建1.1.3 DS-5 脚本读写 Memory1.1.4 DS-5 扫描脚本 1.1.1 DS-5 工程创建 在使用ARM DS-5 连接 board(或者PFGA)之前首先需要能够扫描到相应的硬件信息,比如对应的cpu的相关信息:coresight 相关组…

【Zblog搭建博客网站】windows环境搭建属于自己的博客并发布上线 - cpolar内网穿透

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自远程内网穿透的文章:【Zblog建站】搭建属于自己的博客网站&#…

【C++】初始化列表,explicit 关键字,静态成员

初始化列表 构造函数内可以对于成员的赋值,故不能称为是初始化,初始化只能初始化依次,C中类对象的初始化可由初始化列表完成 内置类型成员可以通过设置缺省值实现初始化,但对于const修饰的成员、引用成员、没有默认构造函数的自…

hive解析json

目录 一、背景 二、hive 解析 json 数据函数 1、get_json_object 2、json_tuple 3、使用嵌套子查询(exploderegexp_replacesplitjson_tuple)解析json数组 4、使用 lateral view 解析json数组 一、背景 我们进行ETL(Extract-Transfer-Load) 过程中,经常会遇到从不同数据…

编码拓展:链接库

一.认识链接库 1.1库 计算机中,有些文件专门用于存储可以重复使用的代码块,例如功能实用的函数或者类,我们通常将它们称为库文件,简称“库”(Library)。 以 C 语言为例,如下为大家展示的就是…

JUC高级十-并发加锁原理之AbstractQueuedSynchronizer(AQS)

1. 前置知识 公平锁和非公平锁可重入锁自旋锁LockSupport数据结构之双向链表设计模式之模板设计模式 AQS重要性 JAVA ------>JVM AQS ------>AQS 2. AQS入门级别理论知识 2.1 是什么? 2.1.1 字面意思 Abstract Queued Synchronizer----抽象的队列同步器 源码位置: …

【Microsoft Edge】如何彻底卸载 Edge

文章目录 一、问题描述二、卸载 Edge2.1 卸载正式版 Edge2.2 卸载非正式版 Edge2.2.1 卸载通用的 WebView22.2.2 卸载 Canary 版 Edge2.2.3 卸载其他版本2.3 卸载 Edge Update 2.4 卸载 Edge 的 Appx 额外安装残留2.5 删除日志文件2.6 我就是想全把 Edge 都删了 一、问题描述 …

预测模型的局部评价?

预测模型的局部评价 为什么要进行局部评价? 首先是临床决策曲线分析通常会给预测模型的使用规定一个阈值范围,相应地预测模型的评价也应该局限在这个范围之内才是合理的; 其次,全局性地评价往往不够敏感,即好的模型和坏…

本地搭建属于自己的ChatGPT:基于Python+ChatGLM-6b+Streamlit+QDrant+DuckDuckGo

本地部署chatglm及缓解时效性问题的思路: 模型使用chatglm-6b 4bit,推理使用hugging face,前端应用使用streamlit或者gradio。 微调对显存要求较高,还没试验。可以结合LoRA进行微调。 缓解时效性问题:通过本地数据库…

C语言实现银行家算法

一.银行家算法 1.由来 银行家算法最初是由荷兰计算机科学家艾兹赫尔迪杰斯特拉(Edsger W. Dijkstra)于1965年提出的。当时他正致力于解决多道程序设计中产生的死锁问题。在多道程序设计中,由于不同进程之间共享有限的系统资源,如…

【JavaEE初阶】多线程(一)认识线程 线程的创建 Thread的用法

摄影分享! 文章目录 认识线程(Thread)概念执行多线程编程创建线程的写法1.继承Thread,重写run2.实现Runnable接口3.使用匿名内部类,继承Thread4.使用匿名内部类,实现Runable5.使用Lambda表达式 Thread用法…

C语言模拟银行排队叫号(链队)

一.队列 队列是一种具有先进先出(FIFO)特性的线性数据结构,它只允许在队列的两端进行插入和删除操作。队列的一端称为队尾(rear),另一端称为队头(front)。新元素总是插入在队列的队…

怎么把m4a转换成mp3,分享几个方法给大家!

录音文件中经常出现m4a后缀的音频格式,但通常只能在特定的音频播放器中播放。如果你想把m4a转换成mp3,下面是四种简单易行的方法,适用于Windows 10操作系统。 方法一:使用记灵在线工具转换m4a成mp3 工具地址:记灵在线…

elsticsearch入门

查看所有索引(表) 向索引(表)中添加数据: 自定义id添加数据: 自定义id添加数据:方式二 查询数据: 查询索引(表)中全部数据: 全量修改单条数据&…

File类与IO流

1. java.io.File类的使用 1.1 概述 File类及本章下的各种流,都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象)File 能新…

【Leetcode -剑指Offer 22.链表中倒数第k个结点 -203.移除链表元素】

Leetcode Leetcode -剑指Offer 22.链表中倒数第k个结点Leetcode -203.移除链表元素 Leetcode -剑指Offer 22.链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表…

数据结构(三)—— 哈希表

文章目录 一、哈希表积累1.1 哈希map1.2 哈希set 二、哈希表基础三、题3.1 242 有效的字母异位词3.2 349 两个数组的交集3.3 202 快乐数3.4 1 两数之和3.5 54 四数相加II 一、哈希表积累 什么时候想到用哈希法:当要需要查询一个元素是否出现过、判断一个元素是否出…

awvs安装批量扫描

文章目录 安装批量扫描 安装 1.2.AWVS下载   该工具可在官方网站下载,但免费下载的是14天试用版本。   官网下载:AWVS   百度云下载:百度云下载https://pan.baidu.com/s/1UO7GzL0CMemJ_TMQnHNOuA?pwdg1bm 提取码:g1bm 批…

浏览器状态同步和路由-前端路由和服务端路由原理

目录 前端路由和History API 浏览文境(Browser Context) 会话历史(Session History) History API history.go()切换当前会话,并不改变会话栈 history.back() history.go(-1) & history.forward() history.…