软构笔记 chapter 3 软件构造过程与配置管理

本文详述了软件开发的完整流程,包括传统瀑布模型、增量模型、V模型、原型模型和敏捷开发。重点介绍了敏捷开发中的极限编程实践。同时,阐述了软件配置管理的重要性,特别是Git作为版本控制工具的角色。内容涵盖从计划、分析到维护的每个阶段,强调了代码审查、静态分析、动态检测、调试和重构在软件构造过程中的作用。

软件开发的基本过程

传统的软件开发模型

敏捷开发

软件配置管理(Software Configuration Management)

git作为配置管理工具

广义的软件构造过程

  1. 软件开发生命循环(Software Development Lifecycle SDLC)

是一个从无到有的过程:
SDLC软件的生命周期如下:
计划(planning)- >分析(analysis)-> 设计(Design)-> 完成功能(implementation)-> 测试与集成 (testing&integration)-> 维护(maintainance)
并不断周而复始循环,从无到有,从有到好

  1. 传统软件过程模型
    (根据用户参与程度//适应变化的能力、开发效率/管理复杂度、开发出的软件质量来选择核实的模型)

主要分为两类:线性过程和迭代过程

现存的过程模型有:

  1. 瀑布模型 waterfall(是线性非迭代的)
    管理简单、无法适应需求的增加与变化

  2. 增量模型 increment(是非迭代的)
    线性推进,是增量式的(也就是多个瀑布的穿行),比较容易适应需求的增加

  3. V字模型 V-model (验证并核实)
    可视为瀑布模型的延伸,只是变成了V字形而已

  4. 原型模型 prototyping (迭代)
    在分析与设计之间增加一个原型模块提供给用户,并在原型上持续不断的迭代发现用户变化的需求,开发者不断与用户进行交互,通过用户对开发出来的产品试用的问题反馈修改原有实现,并持续迭代这个过程,直到用户满意为止。
    特点:时间代价高但开发质量高。
    原型模型

  5. 螺旋模型 spiral(迭代)
    是瀑布模型与原型模型的结合,非常复杂。在每轮迭代拥有明确的目标,每轮通过瀑布模式进行设计,但遵循“原型”过程,进行严格的风险分析后才能进行下一轮迭代。
    螺旋模型3. 敏捷开发(Agile Development)
    即通过快速迭代和小规模的持续改进,以快速适应变化。
    在这里插入图片描述敏捷开发3Extreme:
    在这里插入图片描述即:

  6. 极限的用户参与

  7. 极限的小步骤迭代

  8. 极限的确认/验证
    Agile Development的极限迭代eXtreme Programming(XP)极限编程
    在这里插入图片描述pair programming

  9. 软件配置管理和版本控制系统

A. 软件配置管理:
作用:追踪和控制软件的变化。
几个概念:
软件配置项:Software Configuration Item(SCI)是软件中发生变化的基本单元(例如文件)
基线:软件持续变化过程的“稳定时刻”(对外发布版本的文件使用情况//见下图)
发布版本与基线配置管理数据库CMDB(configuration management database)
存储软件的各配置项虽时间发生变化的信息+基线

B. 版本控制
版本的概念就不细述了,根据修改的比重可以分为major、minor、patch
version我们经常用的古老的版本控制方法:复制黏贴产生副本并在副本的基础上修改。(往往浪费大量空间)

版本控制的好处:
个人方面:

  1. 便于回滚到上一个版本
  2. 便于比较两个版本之间的差异
  3. 便于备份软件版本历史
  4. 便于获取备份
  5. 可以合并先前的版本

团队方面:

  1. 便于在多个开发者之间共享和协作
  2. 版本控制记录每个开发者的动作,便于“审计”

几个术语:

  • 仓库(repository):即软件配置管理(SCM)中的配置管理数据库(CMDB)
  • 工作拷贝(working copy):即在开发者机器上的一份可编辑的本地拷贝。
  • 版本(version):在某个特定时间点的所有文件的共同状态
  • 变化(diff/change/code churn):两个版本之间的差异
  • Head:程序员正在其上工作的版本

三种版本控制系统(Version Control System)

  • 本地(local)版本控制系统:仓库存储于开发这本地机器无法共享和协作
    本地式
  • 集中式(centralized)版本控制系统:仓库存储于独立的服务器支持多开发者之间的协作
    集中式
  • 分布式(Distributed)版本控制系统:仓库存储于独立的服务器+每个开发者的本地机器
    分布式5. git作为软件控制管理工具

A. Git的仓库
一般说来,git的仓库通常有三个部分:.git目录(本地的配置管理数据库)、工作目录(即本地文件系统)、暂存区:隔离工作目录和git
软件在工作区修改,在暂存区暂时存放,提交至git远程git仓库中。

B. 常用的git指令有:

  • git add/mv/rm
  • git commit
  • git reset
  • git push
  • git clone/pull
  • git diff
  • git merge

具体使用见下:
git常用指令C. git的对象图
在各种操作以后,git会形成一个关于版本的有向图,如果想要获得版本变化的对象图,在git bash中使用下述指令获取:

-git clone URL local_repository

Object Gragh长这样:
Object Gragh有向边从儿子(更新版本)指向父版本,Head为当前版本,一个commit的版本可以有一个父亲也可以有两个(使用merge时),一个父亲可拥有无穷多个分支。
当文件commit的时候,只会存储软件中与原版本相比修改的文件,对于未发生变化的文件不重复存储
一个小练习:
tips:
创建新分支:git branch branchName
切换到新分支:git checkout branchName //checkout实上是将head指向BranchName
以上两个指令可以合并成:git checkout -b branchName
6. 软件构造的过程步骤
过程步骤没什么好讲的其实,看图就行
建造语言有:编程语言(C,C++,Java,Python),建模语言(UML),配置语言(XML),构建语言(XML)
在这里插入图片描述附:编译器和解释器的区别:

1、解释器

解释器是一种计算机程序,它将每个高级程序语句转换成机器代码。

2、编译器

把高级语言编写的程序转换成机器码,将人可读的代码转换成计算机可读的代码(0和1)。

两者都是将高级语言转换成机器码,解释器在程序运行时将代码转换成机器码,编译器在程序运行之前将代码转换成机器码

二者对比注:
Java既是编译的又是解释的,Java代码本身被编译成目标代码。在运行时,JVM将目标代码解释为目标计算机的机器代码。【1】

Review and static code analysis

– 结对编程
– 走查
– 正式评审会议
– 自动化评审

一般错误:

  • 错误使用 == 和equals()
  • 使用整数参与浮点运算
  • list可变时使用了固定数组
  • 规约撰写错误
  • 发生表示泄露
  • 使Immutable类型数据发生改变
  • 未声明的变量
  • 对象的实现出现问题
动态代码检测

即在执行程序时观察现象、收集数据、分析不足,对代码的运行时状态和性能进行度量,发现代码中的潜在问题。

debug和测试

通过测试发现程序是否有错误,通过debug定位错误发现错误根源。“debugging is a last resort.”

重构:在不改变功能的前提下优化代码

【1】https://www.cnblogs.com/lemon-le/p/13840014.html

计及源荷不确定性的综合能源生产单元运行调度容量配置优化研究(Matlab代码实现)内容概要:本文围绕“计及源荷不确定性的综合能源生产单元运行调度容量配置优化”展开研究,利用Matlab代码实现相关模型仿真。研究重点在于综合能源系统中多能耦合特性以及风、光等可再生能源出力和负荷需求的不确定性,通过鲁棒优化、场景生成(如Copula方法)、两阶段优化等手段,实现对能源生产单元的运行调度容量配置的协同优化,旨在提高系统经济性、可靠性和可再生能源消纳能力。文中提及多种优化算法(如BFO、CPO、PSO等)在调度预测中的应用,并强调了模型在实际能源系统规划运行中的参考价值。; 适合人群:具备一定电力系统、能源系统或优化理论基础的研究生、科研人员及工程技术人员,熟悉Matlab编程和基本优化工具(如Yalmip)。; 使用场景及目标:①用于学习和复现综合能源系统中考虑不确定性的优化调度容量配置方法;②为含高比例可再生能源的微电网、区域能源系统规划设计提供模型参考和技术支持;③开展学术研究,如撰写论文、课题申报时的技术方案借鉴。; 阅读建议:建议结合文中提到的Matlab代码和网盘资料,先理解基础模型(如功率平衡、设备模型),再逐步深入不确定性建模优化求解过程,注意区分鲁棒优化、随机优化分布鲁棒优化的适用场景,并尝试复现关键案例以加深理解。
内容概要:本文系统分析了DesignData(设计数据)的存储结,围绕其形态多元化、版本关联性强、读写特性差异化等核心特性,提出了灵活性、版本化、高效性、一致性和可扩展性五大设计原则。文章深入剖析了三类主流存储方案:关系型数据库适用于结化元信息存储,具备强一致性高效查询能力;文档型数据库适配半结化数据,支持动态字段扩展嵌套结;对象存储结合元数据索引则有效应对非结化大文件的存储需求,具备高扩展性低成本优势。同时,文章从版本管理、性能优化和数据安全三个关键维度提出设计要点,建议采用全量增量结合的版本策略、索引缓存优化性能、并通过权限控制、MD5校验和备份机制保障数据安全。最后提出按数据形态分层存储的核心结论,并针对不同规模团队给出实践建议。; 适合人群:从事工业设计、UI/UX设计、工程设计等领域数字化系统开发的技术人员,以及负责设计数据管理系统架设计的中高级工程师和系统架师。; 使用场景及目标:①为设计数据管理系统选型提供依据,合理选择或组合使用关系型数据库、文档型数据库对象存储;②建支持版本追溯、高性能访问、安全可控的DesignData存储体系;③解决多用户协作、大文件存储、历史版本管理等实际业务挑战。; 阅读建议:此资源以实际应用场景为导向,结合具体数据库类型和表结设计进行讲解,建议读者结合自身业务数据特征,对比分析不同存储方案的适用边界,并在系统设计中综合考虑成本、性能可维护性之间的平衡。
先展示下效果 https://pan.quark.cn/s/6208c60fd188 以RFID技术为支撑的指纹面部双重生物识别方案,已成为当代门禁系统安全性能提升的关键象征,该方案综合运用了指纹确认和面部确认两种生物识别手段,旨在建更为严密的防护屏障。 射频识别(Radio Frequency Identification)技术在此过程中承担着数据交互身份核实的重要辅助角色,促使门禁系统展现出更高的智能化水平运行效能。 **一、指纹门禁系统**指纹门禁系统依托于个体指纹的特异性进行身份核实,其特征具有不可替代性和不可复制的属性。 系统运用了前沿的数字图像处理方法、生物识别运算逻辑以及数字信号处理(Digital Signal Processing)技术,从而保障了门禁操控的安全性。 使用者只需将手指放置于指纹感应装置上,系统便能迅速且精准地完成身份核实。 此类系统不仅强化了安全性,还规避了传统钥匙、IC卡或密码锁可能遭遇的遗失、盗用或被破解等问题,并且通过屏幕汉字显示功能的结合,进一步强化了门禁系统的防护能力,实现了安全管理模式的现代化。 **二、面部门禁系统**面部识别,亦称作人脸识别,是一种通过剖析个体面部特征进行身份判定的技术。 该技术可分为常规视频捕捉分析热成像技术两种实施路径。 常规视频捕捉分析借助摄像头获取并解析面部特征,而在光线不足或完全黑暗的环境中,热成像技术则通过探测面部血液散发的热能形成面部影像,即便在无光状态下亦可正常运作。 面部识别技术在企业、住宅安保以及公共安全等多个领域得到了普遍应用,为无需物理接触的身份核实提供了有效途径。 **指纹识别技术的长处应用**1. **独特性**:个体指纹具有唯一性,为身份核实提供了坚实的依据。 2. **稳定...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值