《A++ 敏捷开发》- 18 软件需求
需求并不是关于需求 (Requirements are not really about requirements)
大家去公共图书馆寄存物品,以前都是扫二维码开箱,有些图书馆升级了使用指纹识别。
“是否新方法比以前好?”我问年轻的开发人员。
“当然用指纹识别好。新技术!现在已经很少看到使用条码的系统了。”
“如果取物时指纹识别失败怎么办?以前还有条码纸条作为凭证,找管理员人工开箱处理,但用指纹识别的话,就无法证明自己是寄存那个人,甚至连寄存在哪箱都可能忘记了。而且指纹识别的错误率比条码高,所以虽然是新科技,成本也提升了,但未必带来价值。”
每次培训,我都会用这例子提醒学员需求并非只谈需求,必须为拥有它的人提供最理想的价值。有些产品经理混淆了解决方案与需求本身:“寄存需要用指纹识别开箱”,
但如果把需求写成:“让寄存者取得凭证,之后用来开箱”
设计师就不一定选择用指纹识别,它只是其中一种方案。
如果希望IT系统给用户带来价值,就需要从整个业务全面分析,有些需要由IT系统支持,有些不需要。
下面会举例说明。
很多团队都未能做好以下3点:
- 需求分析
- 识别关键干系人
- 非功能性需求
需求分析
业务用例,包括产品用例,可以帮助我们分析整个业务流程,确保能为业务产生价值。
使用下面的模型,可以有效地按以下顺序系统地分析与设计业务用例(Business Use Case BUC) 、产品用例 (Product Use Case PUC)。
- 现在业务流程(Now,How)
- 现在业务用例(Now,What)
- 未来增强后的业务用例(Future,What)
- 未来的产品用例(Future,How)
例如:线上在超市购物,产品用例就包括处理买家的结账请求,连接信用卡数据,更新买家的购物历史和等待发货的订单信息。但业务用例就包括系统以外的其他配合工作,包括:超市员工在货架上按订单取货,联系物流公司把货品送到买家地址。
首先描述现在的处理方式(左下角)。
在左上角描述现在业务用例,柜台处理的方式,然后在右上角想象用了系统后,网上选购与下订单的未来业务用例,哪些流程应该在线上做更容易(右下角)。
“刚年底审查了我们某针对医院临床软件系统,发现整年开发的功能中,有86%都未被使用。”
我们从而了解到,把需求分优先级很重要,所以要制定开发什么功能,集中精力这些会被使用的20%功能,而不是浪费时间在开发完都没有用的80%功能。
有人提出,其实可以反过来看,怎么筛选哪些功能不应该做,可能更容易。
但应怎么筛选呢?
某家专门做高端安防系统的P公司,为一家大卖场S公司开发一款廉价的安防系统,如下:
请问你作为产品经理会如何反应? --==+++==-- “增加一个缺失的需求去检测损坏的窗口”很多学生会立马问(因为刚刚听完第一条的解读。):“客户为什么要做这个功能?” |
从以上例子看到产品经理不仅仅是传话,要利用业务的知识,了解和过滤需求,拒绝没有价值的需求。
需求人员过滤了不合理的需求后,还是要分析成本和给客户的价值,对价值比成本高的需求分优先级。
如果我们必须构建软件,那么它必须为拥有它的人提供最理想的价值。 |
以上面储物柜故事举例:
因为指纹识别成本高,但没有提供更多价值,所以不应该做。
用例与场景
用户故事针对“做什么”与“为什么”(“What”,“Why”); 场景针对“如何做”(“How”),例如普通市民用手机程序搜索下周一央视7台有什么节目。所以它们之间是互补,没有冲突。每个需求都应考虑各类场景,以银行个人用户用银行卡去ATM机取款为例:
正常情况:使用个人银行卡取300元
其他可选情况:从其他银行卡取款
异常情况:取款后没有及时取回银行卡,导致吞卡
正常场景是基础;但如果没有全面考虑各种场景便会导致最后开发出来的产品不满足客户需求。
实例:护照到期续证
比如我们护照更新,以前是要到柜台手工办理,如果我们把那个过程数字化,让市民可以在线做,不需要亲身到柜台办理。应怎样做呢?
某国家的做法是本来的手工填写模板直接变成系统页面(每个输入与手工表格一一对应),申请人在系统里按本来模板填写并提交,上传个人新照片,也是经过系统,我有一次尝试用系统线上填电子表单申请,但因表单很繁琐,有很多护照原有信息都需要重新填写,光是填那表就花了我接近一个小时,最大问题还不是在我花时间填手工表,而是最后要上传照片,因为照片像素高的话就很大,需要很好的网络才可以传得上,如果照片像素小,便导致模糊不清,不能通过。最后,一个半小时后,我用尽所有方式都还是无法传上照片,我最终放弃了在线上提交申请,直接预约去在柜台做!
之前描述的整个过程只是把原有的手工步骤信息化,和原本的申请手续一样。但线上办理和在柜台现场办理不同,在现场你可以要求对方直接把照片给你,也可以要求对方提供老护照,但在线上办理,应很容易从系统里找到个人护照信息,所以很多本来在柜台要手工填写的老护照信息就不需要再填了。
客户:怎么可以简化整个过程?最困难应是照片的更新?
我:有些国家是这样做法,比如你申请续证,只需要填上老证件的基本信息,系统就立马能识别出本来的证件 你确实有那个“旧”证后,便可立马提交申请。跟在网上购物一样,你确认过内容没问题,就在网上付费,然后打印申请表并在表上亲手签字,然后附上几张符合规格的照片,邮寄到政府机关。他做好新证件以后再邮寄回你。或者你自己到他规定的地点领取也可以。这样就能很简单地利用“低”科技解决方案,解决了刚才上传照片的困难。
从上面例子看到,我们应不仅是把那些本来手工的流程自动化,应该全局看要解决的问题本身,哪些过程自动化,哪些不应该自动化(比如传照片)。
甲方对怎么可以在线上做这个过程也没有概念,他只是知道,本来手工需要填表。
乙方也不知道,他只是做开发,也不知道有什么方面可以不用IT方式,而用其他方式更合理。
必须要一起探讨才可以有最好的解决方法。
以上例子,业务用例是线上续护照。但有些功能不靠系统处理,如上传照片,不归纳为产品用例,用其他方式手工处理。
以上只是考虑了正常业务流程,也要考虑各种异常场景才算全面。(请动脑筋,写出各种异常场景,附件里有以往学员的答案,供参考。)
所以作为业务分析师,你很可能要改变用户思考问题的方式,例如利用业务过程模型,配合场景与页面原型,与利益相关者一起探索问题的本质。软件系统必须为拥有它的人提供最理想的价值,构建软件系统本身(例如只是把现有流程自动化)不一定能解决客户业务问题。
识别利益相关者
和杭州客户领导吃晚饭,领导就跟同桌的项目经理开玩笑说:“你们刚刚完成内部项目管理自动化工具,做调研的时候好像没有找过我? 其实我是其中一位经常要使用这系统的管理者,下面项目的监控、申请都是经过我,但我发现这个系统很不合用,对收集我需要的项目信息没有作用。比如没办法处理一些批准信息。”
从上面对话,可以了解如果没有全面识别项目的利益相关者,可能会影响到项目的成败。例如我接触一些有些具备开发经验的需求人员,但他们通常只注意功能需求的技术细节。
问他们:“哪些是你的项目干系人?”
答:“甲方有协调员,要访谈哪些人都是由甲方协调员安排,我们听他安排。”所以为了避免未能识别所有干系人的风险,就要主动跟甲方一起策划。我们说沟通计划必须是甲乙方一起合作做出来,而且会牵涉甲乙方各个层次的人。
例如要听甲方出资人的需求,可能就要乙方的总经理出马,乙方的需求人员顶多可以跟甲方对口的项目组人员沟通。(如何可以做好识别干系人,并制订沟通计划,可详见附件。)
非功能性需求
虽然很多项目有性能、易用性等非功能需求部分,但缺乏可衡量的量化指标。
例如,多少用户量、数据量、什么平台与网络环境下的反应时间。
“客户没有提非功能的具体需求。”需求人员可能说。
“但没有明确可衡量的需求不等于没有要求。假如验收时甲方项目经理换了人,项目可能会因为反应时间太慢,甲方说不能接受,但因为非功能需求不明确,你们也无法证明产品满足需求,最终项目可能被拒收。所以建议你们也要写上具体可验证的性能需求,保障自己。如果客户没有具体要求,可以依据以前同类项目性能测试结果,制定容易达到的性能规格,成为需求模板。”
除了性能 (Performance) 外,其他主要非功能需求包括:
- 产品观感(Look and Fell)
- 产品的外观和感觉越来越受重视,例子:苹果iPAD MacBook 等都让客户觉得产品设计精简但高贵
- 可用性与易用性(Usability and Humanity)
- 线上网购手机APP,能否容易找到喜欢的菜式、挑选并下单
- 操作环境(Operational and Environmental)
- 从肩高跌落时,产品仍能存活
- 产品应在什么温度、湿度等条件下使用
- 产品应节省电池寿命
- 可维护性和支持(Maintainability and Support)
- 产品应易于移植到Android和iOS
- 能简单、快速地从原有的产品导出资料,更新到新一代同类产品
- 应翻译成各种外文
- 安全(Security)
- 权限(Access),例如:只允许哪些人使用
- 隐私(Privacy),例如:防止打印任何个人及机密资料;防止未经授权的人进一步或二手使用
- 完整性(Integrity),例如:确保传输的数据相对应
- 审计(Auditing),例如:在法定期间保留所有交易的日记账。
- 文化(Cultural),法律(Legal)
其他最佳实践
用户故事卡
用户故事卡片目的是让用户(业务)与开发沟通的桥梁。
需求卡片除了包括需求描述,理由,验收标准外,还应有以下内容:
- 顾客满意度/顾客不满意度:
用两个数比单纯用优先级能更全面反应客户声音。
(如想多了解为什么要这样分,请看附件里的“客户声音:Kano Diagram”)
- 来源:每项需求都应可追溯到源头.例如需求是哪个人,什么岗位提出.
- 冲突与依赖其他需求:是/否; 确保需求之间的一致性。
- 独立的需求编号:
因为设计、编码、测试用例都应与需求相互对应,有明确编号才能对应。
(用实体卡片,团队难以互动、分享,有些公司采用系统 记录与跟踪需求。电子卡也应包括以上内容。)
做好需求评审
很多团队都有做需求评审,但因为没有主要关注点,起不了质量把关的作用,可以利用以下的检查单提醒需求有没有犯了这些错误,尽早改正。
评价和验收的准则可包括:
|
总结
上面简述了3类需求常见问题:
- 需求没有按价值过滤与分析,分优先级;没有全面考虑各种场景
- 没有全面识别利益相关者
- 没有明确描述非功能需求,并可验证
和2条实践:
- 用户故事卡
- 需求评审
都可以与CMMI模型对应:
- 需求分析:RDM 3.5, 3.6, 3.2 ( 场景 )
- 干系人:PLAN 2.4, MC 2.2 ( 沟通的策划与监控 )
- 非功能需求:RDM 2.2 ( 客户需求,包括功能与非功能需求 )
- 需求卡片:RDM 2.2 , 2.4 ( 客户需求与活动或工作产物之间双向可追溯 )
- 需求评审:RDM 2.3
附件
利益相关者
利益相关者计划检查单 (Stakeholders Plan Checklist):
1) 列出所有潜在的利益相关者(List all potential stakeholders)
1a. 类型/分组 (What are the base Segments)
1b. 可否再细分(Any sub-segments)
2)把她们分为 F(友好)、I(忽略)、U(不友好)
Assign F (Friendly)、I (Ignore)、 U (Unfriendly) to them
3)他们最关注什么?
What is important to them?
4)学习目标 (Learning objectives):
针对某利益相关者,我们需要了解什么?
For each stakeholder, what will we need to learn?
5)怎样沟通 (How)
6)什么时间 (When)
抽样计划 (Sampling plan)
如何招募(How to recruit)
如何能获得承诺(How to get commitment)
[针对以上第1至第3项,参阅以下实例/解读]
实例/解读(Examples / Explanation)
某公司专门设计、开发新一代手提电脑产品。
1) 全面考虑各类利益相关者(Stakeholders)
出资人 (Sponsor):出资人为产品的开发付钱
顾客 (Customer):顾客购买产品。必须对他们有足够的了解,理解他们认为什么有价值,所以会购买什么产品。
用户 (User):确定用户的目的是为了理解他们所做的工作,以及他们认为哪些改进有价值。
在开发消费产品、大市场软件时,应该考虑用一个“假想用户”。假想用户是一个虚拟用户,它是大多数用户的原型。
类型/分组的例子如下:
未来笔记本电脑的潜在用户:
大类:
- 商业人士 (Business)
- 媒体专业人士(Media Pro)
- 家庭用户(Home)
细分:
- 主要用户(Lead User)
- 有极高要求者(有挑战的 Demanding)
- 潜在用户(有潜力的 Potential)
- 追求技术完美者 (技术流 Tech-Phobic)
2) 策划包括哪些用户(User inclusion strategy)
依据设计人员会怎么对应,把不同识别出来的利益相关者分成 F、I、U
例:以针对笔记本电脑创新产品
F(Friendly)友好,比如家庭用户、商业用户、媒体专员
I(Ignore)忽略 ,比如忽略残疾人士
U(Unfriendly)不友好,比如黑客、小孩(禁止他下载游戏、玩游戏)
3) 他们注重什么(主要关注点)
干系人 | 角色/概况 | 质量关注重点 |
---|---|---|
商业用户 | 长期出差者 -坐长途飞机 -做演示 -保护某些秘密文档 | -待机时长 -屏幕清晰度 -安全性 |
专业媒体 | 创造性工作;并要协同。 录音和录视频 | 数字带宽(声音和视频) 电脑速度和内存 |
家庭用户 |
- 以上有那些在调研之前已知,其他有那些需要挖掘。
客户声音:Kano Diagram
可以用下图分析用户对需求优先级:
解读上下两个箭头应怎样看:
- 下面的箭头代表理所当然(Take it for granted),如果缺乏,客户会很不满意,包括觉得是理所当然 (例如满意度:中立1,非常不满5)
- 上面的箭头代表是加分项 (Attractive),如果包括会非常满意,但如果缺乏不会觉得不满意 (例如满意度:非常满意5 ,不满意度:中立1)
所以“需求卡片”用两个系数:顾客满意度+顾客不满意度,能更好判断某功能属于哪类功能需求。
线上续护照的 异常场景
以下是部分异常场景: 个人信息类
- 信息不符,无法识别
- 生僻字姓氏,系统无法识别
付款
- 支付失败
- 直接经银行付款
- 经渠道支付验证出错
系统类
- 系统间接口兼容性问题,提交失败
- 系统出现故障,无法登录或无法上交
- 浏览器兼容性问题
特殊情况
- 法定假日,不接受申请
- 紧急情况:申请人遇到急病,亲人海外死亡等紧急情况,需加急处理
- 信息错误:申请表信息填写不完整或填写错误,需补正
- 照片不符合规格
特殊人群
- 申请人属于未成年人
- 父母国籍不一致,无法线上判断国籍
参考 References
- Beck, Kent , with D. West. "User Stories in Agile Software Development" , Ch.13 of Scenarios, Stories, Use Cases: Through the Systems Development Life-Cycle edited by F. Alexander(2004)
- Robertson, S. Mastering the requirements process. (2006) 2/e
相关文章:

《A++ 敏捷开发》- 18 软件需求
需求并不是关于需求 (Requirements are not really about requirements) 大家去公共图书馆寄存物品,以前都是扫二维码开箱,有些图书馆升级了使用指纹识别。 “是否新方法比以前好?”我问年轻的开发人员。 “当然用指纹识别好。新技术&#x…...

计算机网络:计算机网络的组成和功能
计算机网络的组成: 计算机网络的工作方式: 计算机网络的逻辑功能; 总结: 计算机网络的功能: 1.数据通信 2.资源共享 3.分布式处理:计算机网络的分布式处理是指将计算任务分散到网络中的多个节点(计算机或设备&…...

Upload-Labs-Linux 1-20
前端校验绕过:pass 01 两种思路:1.通过抓包,修改后缀 2.前端禁用js绕过前端后缀检验 首先写一个木马,改为图片格式GIF89a<?php eval($_POST[cmd])?>抓包之后改为PHP格式: 使用蚁剑连接木马,第一次尝…...

Compose笔记(八)--权限
这一节主要了解一下Compose中权限的申请,其中主要用到accompanist-permissions这个权限库,它是一个简化的Android Compose 中权限管理的库,如下使用: 栗子: 依赖添加 dependencies {implementation("com.google.accompani…...

单例模式:确保一个类只有一个实例
目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定(Double-Checked Locking) 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…...

推荐一个好用的在线文本对比网站 - diffchecker
推荐网址:https://www.diffchecker.com UI设计也很不错,响应也很快,广告少 生成的对比还可以生成在线链接:(点击右上角“分享”) 可设置过期时间等 我生成的示例:https://www.diffchecker.c…...

学习第八十五行
[capture](parameters) -> return_type {// function body }capture: 捕获列表,指定如何捕获周围作用域中的变量。parameters: 参数列表,与普通函数类似。return_type: 返回类型,可以省略,编译器会自动推断。function body: 函…...

基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程
一、Django项目初始化 1.创建Django项目 Django-admin startproject 项目名 2.安装 djangorestframework pip install djangorestframework 解释: Django REST Framework (DRF) 是基于 Django 框架的一个强大的 Web API 框架,提供了多种工具和库来构建 RESTf…...

【Python 2D绘图】Matplotlib绘图(统计图表)
【Python 2D绘图】Matplotlib绘图(统计图表) 1. 概述1.1 简介1.2 安装1.3 导入1.4 保存1.5 数据来源1.5.1 Numpy ndarray1.5.2 Pandas DataFrame 1.6 中文显示 2. 基础样式2.1 颜色2.1.1 简称2.1.2 全称 2.2 布局2.2.1 Matplotlib 画布划分2.2.2 绘制子图…...

vue3框架的响应式依赖追踪机制
当存在一个响应式变量于视图中发生改变时会更新当前组件的所以视图显示,但是没有视图中不写这个响应式变量就就算修改该变量也不会修改视图,这是为什么?我们能否可以理解宽泛的理解为vue组件的更新就是视图的更新,单当视图中不存在…...

.Net 6 上传文件接口 文件大小报错整体配置
/// <summary>/// 上传文件/// </summary>/// <param name"file"></param>/// <returns></returns>[HttpPost("UploadifyFile")][RequestSizeLimit(2000 * 1024 * 1024)] // 设置最大请求体大小为 100MBpublic async …...

Git基础之工作原理
基础概念 git本地有三个工作区域,工作目录 Working Directory,暂存区Stage/Index和资源区Repository/Git Directory,如果在加上远程的git仓库就是四个工作区域 四个区域与文件交换的命令之间的关系 WorkSpace:工作区,就…...

小程序 wxml 语法 —— 41列表渲染 - 进阶用法
这一节讲解列表渲染的两个进阶用法: 如果需要对默认的变量名和下标进行修改,可以使用 wx:for-item 和 wx:for-item: 使用 wx:for-item 可以指定数组当前元素的变量名使用 wx:for-index 可以指定数组当前下标的变量名 将 wx:for 用在 标签上&…...

ElasticSearch 入门教程
ElasticSearch 入门教程 ElasticSearch 是一个分布式、可扩展的搜索和分析引擎,基于 Apache Lucene 构建,支持全文检索、结构化查询和聚合分析。本教程将带你深入了解 ElasticSearch 的核心概念、安装配置、常见操作,并提供示例代码…...

用Python写一个算24点的小程序
一、运行界面 二、显示答案——递归介绍 工作流程: 1. 基本情况:函数首先检查输入的数字列表 nums 的长度。如果列表中只剩下一个数字,它会判断这个数字是否接近 24(使用 abs(nums[0] - 24) < 1e-10 来处理浮点数精度问题&…...

分布式网络
分布式网络(Distributed Network)指的是一种计算机网络架构,其中计算资源(计算、存储、数据处理等)分布在多个物理或逻辑上的节点上,而不是集中在单一的服务器或数据中心中。这种架构的主要目标是提高系统的…...

忘记dedecms后台超级管理员账号和密码的解决方案
解决方案: 方案一、数据库修改: 1、前提是您能登录到数据库后台,登录MySQL数据库管理工具(如phpMyAdmin) 2、打开数据库中的 dede_admin 表,找到管理员记录,将 pwd 字段的值改成 f297a57a5a7…...

【Linux学习笔记】Linux基本指令分析和权限的概念
【Linux学习笔记】Linux基本指令分析和权限的概念 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】Linux基本指令分析和权限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…...

Git基础之分支
常用指令 git branch 列出本地所有分支 git branch -r 列出所有远程分支 git branch [branch-name] 新建一个分支,但依然停留在当前分支 git checkout -b [branch] 新建一个分支,并切换到该分支 git merge [branch] 合并指定分支当前分支 git branch -d …...

MAC电脑常用操作
环境:M3芯片 ,macOS15.2 🚀 快捷键 🖥️ 窗口管理 ✅ 退出/进入全屏模式 • 浏览器等应用:⌘ Command Ctrl F ✅ 最小化当前窗口 • ⌘ Command M • 💡 隐藏窗口但保留应用在后台运行 ✅ 关闭当前标…...

【计算机网络】深入解析 HTTP 协议的概念、工作原理和通过 Fiddler 抓包查看 HTTP 请求/响应的协议格式
网络原理— HTTP 1. 什么是HTTP? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议: HTTP 往往是基于传输层的 TCP 协议实现的 (HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3基于UDP实现) 我们平时打开一个网站,就是通过HTTP协议来…...

Springboot redis bitMap实现用户签到以及统计,保姆级教程
项目架构,这是作为demo展示使用: Redis config: package com.zy.config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.Ob…...

【C++】:STL详解 —— 红黑树封装map和set
目录 红黑树的源代码 正向迭代器的代码 反向迭代器的代码 set的模拟实现 map的模拟实现 红黑树的源代码 #pragma once #include <iostream>using namespace std; // set ->key // map ->key/value// set ->key // map ->key/valueenum Colour {RED,BLAC…...

FPGA设计时序约束用法大全保姆级说明
目录 一、序言 二、时序约束概览 2.1 约束五大类 2.2 约束功能简述 2.3 跨时钟域约束 三、时序约束规范 3.1 时序约束顺序 3.2 约束的优先级 四、约束示例 4.1 设计代码 4.2 时序结果 4.2.1 create_clock 4.2.2 create_generated_clock 4.2.3 Rename_Auto-Derive…...

【前缀和与差分 C/C++】洛谷 P8218 求区间和
2025 - 03 - 09 - 第 72 篇 Author: 郑龙浩 / 仟濹 【前缀和与差分 C/C】 文章目录 洛谷 P8218 求区间和题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 说明/提示思路代码 洛谷 P8218 求区间和 题目描述 给定 n n n 个正整数组成的数列 a 1 , a 2 , ⋯ , a n a_…...

C++修炼之路:初识C++
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞,关注! 引言 …...

Pytorch 第九回:卷积神经网络——ResNet模型
Pytorch 第九回:卷积神经网络——ResNet模型 本次开启深度学习第九回,基于Pytorch的ResNet卷积神经网络模型。这是分享的第四个卷积神经网络模型。该模型是基于解决因网络加深而出现的梯度消失和网络退化而进行设计的。接下来给大家分享具体思路。 本次…...

2025-3-9 一周总结
目前来看本学期上半程汇编语言,编译原理,数字电路和离散数学是相对重点的课程. 在汇编语言和编译原理这块,个人感觉黑书内知识点更多,细节更到位,体系更完整,可以在老师讲解之前进行预习 应当及时复习每天的内容.第一是看书,然后听课,在一天结束后保证自己的知识梳理完整,没有…...

如何在el-input搜索框组件的最后面,添加图标按钮?
1、问题描述 2、解决步骤 在el-input组件标签内,添加一个element-plus的自定义插槽, 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话,请关注本博主~~...

[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信
基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯(飞控部分)六.移植2.4g通讯(遥控部分) 一.Si24Ri原理图 Si24R1芯片原理图如下: 右侧为晶振。 模块…...