嵌入式系统开发项目管理

2023-11-07

项目生命周期五大阶段

1、项目启动阶段

(1)项目可行性分析

一个成功的产品,应该从以下3个方面来观察评估:

  • 设计产品:商业行为

    • 产品设计前,要做好市场调查和评估,要考虑产品的时效性、市场需求和技术可行性;

    • 产品设计结束后要写下详细的产品规格(技术层次、人力资源、开发费用、产品成本)

    • 尽量避免中途更改产品规格;

    • 凡事以最终用户需求或体验为准。

  • 管理项目:管理行为

    • 项目经理必须清楚了解其任务事在规定的期限内完成质量可接受的产品开发,在此前提下必须衡量人力及其它相关资源,只做该做的事,能够因时制宜。
  • 开发系统:技术行为

    • 不要追求完美,只需达到在规定的时限,有限的资源条件下,设计开发出“足够好”的满足需求的产品就好。

    • 设计工作一定要确实执行,绝对要文件化。不能为了敢进度而跳过设计直接进行程序编写。

需求管理者确定 ——> 需求分析&Review ——> 项目规模估算 ——> 项目风险分析 ——> 初步项目执行计划&Review

(2)项目授权书

明确说明项目目标与管理方向

明确对授权PM

任何与项目有关的信息

(3)理清必要的约束

确认产品规格(成本/性能/质量/。。。需求)

确认产品限制

初步确认将参与项目的公司与单位

确认开发模式(S/W Development Life Cycle)

Waterfall Model

Prototype Model(初期需求不明确)

Spiral Model(Waterfall + Prototype的多次迭代)

。。。


2、项目规划阶段

初期规划:是否该接这个项目?

  • 没规划,一定挂!在确定接项目前,一定要做过极为仔细的分析。

  • 完成不可能的任务!因为客户交付的项目肯定不会太简单。

(1)Scope/Time/Cost/Quality Plan

(2)Resource/Communication Plan

(3)Risk Plan

(4)Configuration Plan

(1)项目范围(Scope)管理

妥协的艺术:进度 VS 规格

质能守衡原则,如果客户一再压缩进度,那只能降低规格;若客户一再变更规格,那只能delay进度。

当项目启动后,首先就是要花时间做好项目的范围管理(哪些该做,哪些不该做),唯有定义出正确的范围,之后做的进度、成本和人力计划才是有意义的。

项目管理工具——Work Breakdown Structure,WBS和变更管理

  • WBS

    • 工作分解,其它项目计划最重要的依据

    • 分解的标准:

      • 按“功能组成”分解

      • 按“项目生命周期”分解

      • 按照“系统架构”分解

    • WBS的最小分解单元(Work Package)要非常具体,至少拆分到一周或40HRs的工作量。

    • 表述方式(树状图+列表)

    • image-20201110210209743
  • 变更管理

    • 所有的变更一定要经过CCB(Change Control Board,变更管理委员会,即与此变更有关的关系人参与决策的会谈)的同意,并造出新的计划书,严禁接受客户私下变更规格的请托。

    • image-20201110211121028

(2)项目进度(Time/Schedule)管理

  • 时间与其他资源特性不同,它具有单向性、不可重复性、不可替代性。

  • 规划“进度计划”:

    • 从WBS中取得所有的最小活动单元(树状图中的叶节点leaf)

    • 确认各任务间的关系(持续时间、次序关系)

      • FS(Finish to Start):任务A结束后,任务B才可以开始;

      • FF(Finish to Finish):任务A结束后,任务B才可以结束;

      • SF(Start to Finish):任务A结束后,任务B才可以结束;

      • SS(Start to Start):任务A开始后,任务B才可以开始;

    • 进度管理图表(Gantt图+网络图)

      • 甘特图描述各任务的起讫时间,也可用来执行“进度追踪”;

      • 网络图描述各任务间的先后关系(节点代表任务,箭头指示任务次序,箭头边的数字代表所需时间),用来找到关键路径CPM(图中用时最长的路径),唯有缩短关键路径上任务的时间,才能缩短整个项目的周期。

  • 管理预留

    • 为整个项目预留时间(一般是整个项目周期的10-15%),不到不得已,不要拿出来用。

    • 根据帕金森定律,不论你给员工多少时间,他总倾向于用完分配给他的时间。

  • 需知道的原则

    • 进度计划是用来遵守而不是修改的。当延迟发生时,PM和主管应该积极设法解决问题并设法赶上进度,而不是修改进度。

    • 规划进度表时,应该由粗到细,协调并整合各单位的意见,切记闭门造车。

    • 进度与成本呈反比。

    • WBS分解的好坏直接影响项目进度计划

    • 执行时期必须不断检查项目计划与实际进度是否存在偏差,并及时追踪和处理。

(3)项目成本(Cost)管理

  • 软件系统的项目成本预估永远不会很精确,只能依靠经验或业界共识来提高精度。

  • 项目是商业行为,开发出一件不赚钱的产品不如不开发。一切要为成本让步。

  • 成本的几个主要来源:

    • 管理成本

    • 硬件/结构设计成本

    • 生产&材料成本

    • 软件开发成本(代码行、函数点、人月。。。)

    • COCOMO模型估算成本

    • image-20201110225129815
  • 成本估算误差来源:

    • 基础数据不足,项目仍存在许多不定因素

    • 项目成本对需求敏感

    • 经验不足或低劣的成本估算技术

    • 签约前后不连贯

    只有等WBS做出来后,且工作被分割的越细,估算才能最接近实际。但往往实际工作做不可能等你做完WBS才报价。推荐《人月神话:软件项目管理之道》。在嵌入式软件项目中人力成本是总成本最主要的部分;

  • 挣值管理

    主要用于项目成本和进度的监控,它将目前为止所完成的工作与项目计划里的估计值比较,以提供关于项目距离完成还有多远的估量,PM可以得到距离项目完成还需花费多少资源。

(4)项目质量(Quality)管理

  • 基本思想

    • 质量是规划出来的,而不是检查出来的,预防重于治疗,要在规划阶段就做好“质量计划”,并明文公布;可以先粗线条定下baseline,再制定细则。

    • 项目质量是所有开发人员工作质量之

    • 质量管理并非一次性活动,而是贯穿整项目生命周期;

    • 质量等级是相对的,以客户需求和价格而定;

    • 质量管理是一种精神,并非通过ISO9000或CMM就能做出有质量的产品。

    • 质量管理系统:ISO9000或CMMI

    • CMM的5级管理体系
  • QA(Quality Assurance)

    专注在流程的正确性上,是一种管理职能。QA的主要目的就是确保产品在既定进度与预算下,能达成预期质量水平与可靠度目标。QA的工具就是稽核(Audit),从计划拟定、模块设计、Code Review、测试计划、生产流程、备料计划等各阶段都要进行稽核。规划阶段的工作产品是制定质量规划书,明确项目采用的质量标准,确定如何满足该标准的要求。特别是:

    • 完成了某个里程碑

    • 提出了变更要求

    • 项目即将进入下阶段时

  • QC(Quality Control)

    专注在流程bug的查找和追踪上,是一种检查职能。QC必须确定项目结果与质量标准是否相符,同时查找不符的原因(bug)和跟踪是否妥善解决(每个bug的处理流程都必须记录下来)。规划阶段的工作产品是制定测试计划

    质量规划流程图

(5)项目人力资源(Human Resource)管理

  • 人员的组织管理是否得当,是影响软件项目的决定性因素。

  • MS有一个明确的规则——项目组的人员不要超过10人。

  • 组织结构:

    • 职能型组织(组织与项目利益可能冲突)

    • 项目型组织(资源重复,无法贯彻公司策略)

    • 矩阵型组织(职能或部门经理与项目经理的冲突)

    • 强矩阵组织

    • 矩阵式组织图
  • 团队管理

    • 创建由实际存在感的项目团队

    • 建立奖励机制

    • 确立良好的人际关系

    • 设定工作授权系统

    • 激励理论:因才适所、投其所好

(6)项目沟通(Communication)管理

  • 管理中70%的错误是因为不善于沟通造成的,PM 80%以上的时间是用在沟通上。

  • 沟通计划:

    • 沟通需求:哪些人、哪些时候、需要哪些需求?

    • 沟通内容:沟通的格式、内容、详细程度等

    • 沟通方法:明确沟通方式与沟通管道(会议、bug管理软件、工作报告)

    • 沟通职责:谁发送消息,谁接收消息

    • 沟通安排:在项目计划中必须包含重要沟通事件的Schedule。(例如review meeting)

  • 沟通渠道计算:若项目中有N个人,那么需要建立N(N-1)/2条沟通渠道,相当于沟通成本就很高。

(7)项目风险(Risk)管理

  • Risk三要素:

    • 是某个事件

    • 有发生的概率

    • 会对项目造成一定的影响

  • 风险管理最容易被忽略也是最难以管理的

  • 风险管理流程(循环往复):

    • 风险识别:列出风险列表

      • 项目缺乏可见度

      • 新技术的吸引力

      • 技术兼容性风险

      • 性能风险:增加执行设计阶段的力度、制作原型(Prototype)等

      • 仓促上线风险

      • 可用性问题

      • 缺料、零件涨价

      • 合约风险:同法务详细检查合约内容

      • 需求变更风险:提前以书面形式约定好变更处理流程

      • 沟通不良风险:项目沟通计划制定与公布

      • 缺乏高层支持风险

      • 进度风险:若Schedule无法调整,则尽量多获取资源与预算,或者分阶段交付产品。

      • 质量风险:慎重制定项目质量策略,成立质控小组。

      • 团队成员能力风险:提前培训或变更成员。

      • 团队合作风险:目标明确,绩效制度公平。

      • 人员流动风险:核心工作分派给多人执行。

      • 协助厂商风险:合作前即制定审核稽核与验收流程。

    • 风险评估

      • 定性分析

        • 列出概率/严重性矩阵

        • 对项目的薄弱环节有一定的了解

      • 定量分析:基于定性分析成果的数学处理与表达

      • 列出风险排行榜(概率 X 严重性)

    • 风险规划(处理)

      • 回避风险:主动放弃或拒绝使用导致风险的方案,寻找替代方案

      • 转移风险:将风险转移给外包公司

      • 损失控制:减缓风险发生时的危害程度

      • 承担风险:对发生概率低或影响小的风险,可选择先不处理

    • 风险控制

(8)项目采购/合约管理

  • 软件外包:实际比自身开发的净投资多15%至20%

  • 外包项目的管理比自己开发更复杂:

    • 技术难度

    • 沟通复杂度

    • 外包成本

  • 外包项目注意事项:

    • 沟通问题

    • 做好详细计划

    • 避免延误

    • 明确验收标准(软件规格与API。。。)

(9)项目配置(Configuration)管理

  • 贯彻开发的全过程,目的是用于建立和维护产品的完整性和可追溯性

  • 对应软件开发项目中成熟的版本控制流程

  • 软件配置管理——简单说就是项目资产管理,对开发过程中的产品进行标识、追踪、控制的过程,包括:

    • 项目的全貌,包含产品规格与设计规格。

    • 项目原始的计划,以及项目运行期间所有曾做过的变更。

    • 设计阶段的任何重大转折点、与项目运行期间技术上的重大突破。

    • 软件开发期间曾遇到哪些问题,解决的方式是什么?对应的程序代码是什么?

    • 重要软件版本或项目里程碑所代表的意义,以及该事件点项目状况的快照

    • 硬件设计与生产阶段的问题履历即解决方式。


3、项目执行/控制阶段

  • 软件工程与项目管理如何配合执行?

  • image-20201114130434239
image-20201114130549788

软件工程包含三个循环过程:

  • 开发过程定义:包含软件需求、软件开发过程、软件配置管理SCM

  • 软件开发:包含软件设计、软件构建、测试、维护和更新

  • 软件质量保证:软件质量

项目管理过程包含三个循环过程:

  • 项目规划

  • 项目实施

  • 项目监控

(1)产品规格设计

产品规格写完,最后必须再让客户确认一次并签字!以后所有设计工作必须以此为模板。一旦客户要将新的需求变成“规格”,必须改动已通过审查的正式文件,而这要经过质量管理体系的同意。

一般来说产品规格包含以下方面:

  • 硬件规格简介

  • 产品设计理念、限制与应用范围

  • 使用者功能说明书

  • 操作流程图

  • 使用者界面与美工图案

  • 性能规定

  • 特殊注意事项

(2)硬件设计

硬件设计阶段的工作如下,除了外观与结构设计外,固件工程师应尽量参与:

  • CPU选择

  • 主要芯片选择

  • 电路设计

  • Layout

  • 零件、物料管理

  • 产品外形设计

  • 结构设计

  • 开模前的模型制作

在此阶段输出的文件有:

  • 硬件设计规格书

  • BOM表

  • 3D外观图

  • 结构图

  • 原理图

  • Layout图

(3)系统设计

根据项目大小或硬件环境,选择合适的设计方法。如果是CPU主频仅有几十M,且内存又很小,建议选择结构化方法设计,并选择C语言进行开发。如果项目较大,CPU主频几百M,且存储资源丰富,则选择面向对象方法,语言上可选择C++或Java语言。

(4)测试计划设计

软件测试也有标准,IEEE 829详细描述了测试计划书的规定与注意事项,但实际情况是,要按照项目本身特点,传承该标准的思想和精神。在测试前,需要着重了解较复杂的功能、新功能、客户特殊的要求或规格书中描述较模糊的地带,然后才设计测试个案testing case和计划。

(5)风险评估

最普遍的风险有以下几个

  • 进度拖延

  • 需求膨胀

  • 人员流失

  • 规格崩溃

  • 绩效低落

  • 技术落差

  • 文化差异

  • 软硬件整合

  • 生产制造问题

风险识别流程

风险识别流程图

面对风险的4种处理方法

  • 回避:不去碰触会产生风险的部分

  • 抑制:准备足够的时间与金钱,在风险成型时砸下去

  • 舒缓:在风险成型前,就先采取某些措施

  • 逃避:什么都不做,祈求老天保佑

(6)动手编码前先写设计文件

从项目开始就应该准备一个服务器存放并管理项目的所有文件,并让所有项目成员都可以很容易取得所需的文件或记录。

应该被记录的文件包含:

  • 产品规格

  • schedule

  • 硬件设计相关文件(CPU PIN脚配置图、原理图、Layout图等)

  • 技术文件-芯片的datasheet、3rd party软件函式库的API等

  • 系统架构设计规格书(包含各模块API)

  • 测试计划书

  • 测试报告及bug sheets

  • 质量文件

  • 重要会议记录

  • 重要邮件备份

  • 其它需要记录的文档

(7)设计审查(design review)

设计审查的原则:

  • 设计审查必须师渐进式的。且要贯穿设计的全过程

  • 设计审查时要邀请该设计的客户参加

  • 越是大范围的设计,越要召集所有项目人员参加。

(8)实作阶段

当所有设计文件都通过审查后,就可以进入实作阶段了。其包含以下内容:

  • 程序开发与调试

  • 硬件(电子、结构)开发

  • 软件与硬件测试

  • 质量相同执行

  • 工厂试产

项目的每一个阶段都应该根据PDCA(Plan、Do、Chick、Act)循环。当在程序编写时发现设计有问题,切不可自行修改,必须暂时局部停下实作的脚步,找出对策,确认影响范围,通过相关单位的设计审查后,才可以再继续实作。也即就是“设计变更”流程

嵌入式相同开发的成果最终要产品化,所以不可避免要和工厂打交道。

  • 软件工程师必须交付给工厂的项目有:

    • 用来烧录的Binary File

    • 生产线专用自动测试程序与说明书

    • 环境测试专用的测试程序

  • 硬件、电子工程师必须交付给工厂的项目为:

    • 电子电路

    • 电气工程规格

    • 特殊规格测试说明(工厂之前没生产过的功能)

  • 结构工程师必须交付给工厂的项目为:

    • 组合图(把所有零件一一展开)

    • 特殊部品外形图

    • 特殊加工组合图

4、项目结项阶段

(1)对外合约结项

(2)对内项目结项

项目资料归档

技术数据归档

记录经验,累计企业的项目资产

close meeting,人员解散

在项目执行期间,制定流程,并使用自动化工具,将项目开发的轨迹(包含程序、文件、bug管理、issue管理、变更管理等)记录下来,并定期备份。

明确规定执行项目结项流程的起讫时间,最好不超过一周,并于项目成员的部门主管以及现任的项目经理沟通与协调,请这些同事们在某段时间内帮这个项目最后的忙。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式系统开发项目管理 的相关文章

  • 具有更高可见性的重写方法是良好的实践吗?

    回答这个问题 如何使用 GUI 使用 PaintComponent 初始化 GUI 然后添加基于鼠标的 GUI https stackoverflow com questions 21336141 how to gui using pain
  • HashMap不写入数据库

    我尝试在我的数据库中写入 但只写入发件人和消息 我不明白为什么会发生这种情况 我认为问题出在我使用 sendMessage 的地方 我认为问题是我没有什么可以做的读 写其他用户的主键 我在数据库中写入消息的活动 public class M
  • 未找到 MessageSource 的 ResourceBundle [消息]:找不到基本名称消息的包

    在 applicationContext xml 中 我定义了 MessageSource 如下所示
  • Android 2.2 SDK - Droid X 相机活动无法正常完成

    我注意到我在 Droid X 上调用的默认相机活动与我的 Droid 和 Nexus One 上的默认相机活动看起来不同 在 Droid 和 Nexus One 上选择 确定 后 活动将完成 Droid X 有一个 完成 按钮 它将带您返回
  • 禁用 Eclipse Java 调试器的热代码替换 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Eclipse 中禁用热代码替换 https stackoverflow com questions 2594408 how do i disable hot code replace in
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • Java:使用 HttpURLConnection 的 HTTP PUT

    如何执行 HTTP PUT 我正在使用的类似乎认为它正在执行 PUT 但端点将其视为我执行了 GET 我做错了什么吗 URL url new URL https HttpURLConnection conn HttpURLConnectio
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Java 服务器-客户端 readLine() 方法

    我有一个客户端类和一个服务器类 如果客户端向服务器发送消息 服务器会将响应发送回客户端 然后客户端将打印它收到的所有消息 例如 如果客户端向服务器发送 A 则服务器将向客户端发送响应 1111 所以我在客户端类中使用 readLine 从服
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 如何在 Quartz 调度程序中每 25 秒运行一次?

    我正在使用 Java 的 Quartz Scheduling API 你能帮我使用 cron 表达式每 25 秒运行一次吗 这只是一个延迟 它不必总是从第 0 秒开始 例如 序列如下 0 00 0 25 0 50 1 15 1 40 2 0
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • Java &= 运算符应用 & 或 && 吗?

    Assuming boolean a false 我想知道是否这样做 a b 相当于 a a b logical AND a is false hence b is not evaluated 或者另一方面 这意味着 a a b Bitwi
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • 常见的内存数据库有哪些

    Redis 键值存储数据库 常用于缓存 消息代理和应用程序数据处理 Memcached 分布式内存对象缓存系统 用于缓存Web应用程序数据 VoltDB 高速内存数据库 用于实时数据处理和实时决策 Aerospike 高性能的键值存储和文档
  • 基于Ribbon自定义负载均衡策略

    微服务间通过FeignClient互相调用默认使用的是ribbon的轮询负载均衡策略 而实际场景中我们可能需要自定义一些规则或者约束来实现特定的负载均衡策略 背景 微服务开发 多租户 API接口隔离 这些在现在开发过程中会经常遇到的问题 服
  • 第2章 R语言编程基础(超详细)

    目录 2 1 数据管理 2 1 1 变量重命名 2 1 2 缺失 异常与重复值的清洗 2 1 3 数据转换 排序 抽样与概率统计 2 1 4 案例分析 工程管理 2 1 5 字符串处理 2 2 控制语句与函数编写 2 2 1 控制语句 分值
  • Python3 数据类型转换

    目录 Python3 数据类型转换 隐式类型转换 显式类型转换 Python3 数据类型转换 有时候 我们需要对数据内置的类型进行转换 数据类型的转换 一般情况下你只需要将数据类型作为函数名即可 Python 数据类型转换可以分为两种 隐式
  • js中int与string之间的转换

  • 关系型数据库和非关系型数据库

    数据库总结 关系型数据库和非关系型数据库 NOSQL 关系型数据库和非关系型数据库 NOSQL NoSQL 指的是非关系型的数据库 NoSQL有时也称作Not Only SQL的缩写 是对不同于传统的关系型数据库的数据库管理系统的统称 No
  • 护网HVV(蓝队)小白必知必会

    前言 在HVV期间 蓝队主要就是通过安全设备看告警信息 后续进行分析研判得出结论及处置建议 在此期间要注意以下内容 内网攻击告警需格外谨慎 可能是进行内网渗透 1 攻击IP是内网IP 攻击行为不定 主要包括 扫描探测行为 爆破行为 命令执行
  • 小金的2019年终总结

    文章目录 一 各平台年报 简书 中国移动 微信读书 支付宝 建设银行 二 值得说一说的事 我的舒适区 刷海贼王 致敬特斯拉惊叹达芬奇 小柠檬降世 当舅舅 换mac电脑 总结 一 各平台年报 简书 研究区块链 gt gt 投资简书 gt gt
  • 万字长文解析!复现和使用GPT-3/ChatGPT,你所应该知道的

    关于作者 英文原版作者 杨靖锋 现任亚马逊科学家 本科毕业于北大 硕士毕业于佐治亚理工学院 师从 Stanford 杨笛一教授 杨昊桐 译 王骁 修订 感谢靳弘业对第一版稿件的建议 感谢陈三星 符尧的讨论和建议 英文原版 https jin
  • 10.Vue简单项目之crud+表单验证

    Vue简单项目之crud 表单验证 1 准备工作 配置action js 2 新增书籍前台页面编写 3 修改和删除 4 表单验证 1 准备工作 配置action js 启动前端项目 启动后端项目 在action js中添加下列接口 BOOK
  • tomcat如何进行优化?

    对于tomcat的调优 可以从两个方面来进行调整 内存和线程 1 首先启动tomcat 实际上就是启动了一个jvm 所以可以jvm调优的方式来进行调整 从而达到tomcat调优的目的 另外tomcat中设计了一些缓存区 比如aappRead
  • npm link用法总结

    npm link用法总结 npm link用来在本地项目和本地npm模块之间建立连接 可以在本地进行模块测试 具体用法 1 项目和模块在同一个目录下 可以使用相对路径 npm link module 2 项目和模块不在同一个目录下 cd到模
  • Android 01:AutoCompleteTextView-简单实现实现自动输入文本效果

    在Android中 可以使用控件AutoCompleteTextView实现自动输入的文本功能 当用户输入一个字符 能够根据其字符提示显示出与之相关的数据 举大家一个熟悉的例子 当我们在百度中输入关键字 android 在列表中会出现相关的
  • C++程序分多文件编写

    为了让一个项目的结构更加清晰 需要学习函数的分文件编写 一般是4个步骤 创建后缀名为 h的头文件 创建后缀名为 cpp的源文件 在头文件中写函数的声明 在源文件中写函数的定义 主函数所在的源文件 要包含必要的头文件和这句using name
  • 测试用例逻辑梳理

    拿到一个页面怎么测 先看页面的整体布局 包括的内容是什么 页面之间的交互逻辑 按照总 分 总的逻辑测试 总 即总体概括页面的整体布局 包含的内容是什么 分 即是分模块对页面进行描述 页面包括的配置项是什么 输入框 搜索框 下拉框 分页 是否
  • 添加TAP虚拟网卡

    方法一 1 如果需要不同的Mac地址 可以添加虚拟网卡TAP 2 先安装uml utilities sudo apt get install uml utilities 3 使用tunctl添加虚拟网卡 sudo tunctl b 4 激活
  • stm32 web服务器实现

    最在做stm32 web服务器的东西 忙了一段时间终于弄完了 把这几天关于stm32服务器的工作记录一下 刚接到这个任务的时候 不知道怎么下手 网上资料似乎不是很多 于是在下载了一个官方demo测试了一下 看了一下代码 不是很懂 于是继续百
  • AWS EC2入门指南中创建和配置云虚拟机实例的基本步骤

    文章目录 创建 AWS 账户 登录 AWS 控制台 导航到 EC2 控制台 启动 EC2 实例 选择 AMI Amazon Machine Image 选择实例类型 配置实例 添加存储 审查和启动实例 创建密钥对 连接到 EC2 实例 管理
  • Python中的Lambda函数:简洁而强大的匿名函数

    引言 Python是一种功能强大且易于学习的编程语言 它提供了许多方便的语法和功能 以简化代码的编写和理解 其中之一就是Lambda函数 Lambda函数是Python中的一种匿名函数 它使得在需要函数对象的任何地方都能使用函数表达式 本文
  • 嵌入式系统开发项目管理

    项目生命周期五大阶段 1 项目启动阶段 1 项目可行性分析 一个成功的产品 应该从以下3个方面来观察评估 设计产品 商业行为 产品设计前 要做好市场调查和评估 要考虑产品的时效性 市场需求和技术可行性 产品设计结束后要写下详细的产品规格 技