强调文档。
包括线性过程和迭代过程
线性过程
迭代过程
从头到尾都是线性过程
前提:需求精细明确。 否则当更改需求时需要将前置条件全部重做一遍。迭代
本质上是prototype的改进,引入风险分析
条件:长周期开发软件适用,并对专业的风险分析专业人员有要求。
尽快完成开发
不重视文档(和传统开发的区别)
快速迭代:
快速迭代&小规模持续改进,以快速适应变化软件远比文档重要用户作为开发协作的一部分,以跟进需求强调需求的变换,要求能够灵活地响应变换增量+迭代
每次处理一个小规模增量3个Extreme:
用户参与小步骤迭代确认/验证Model:极限编程(XP:extreme programming)
强调迭代的waterfall
每个阶段可迭代阶段内无需产生特定文档强调实时的review——2 people结对编程测试驱动的开发:要求写代码前先根据需求写test用例这要求编程人员有充足的编程经验
包括代码+数据+文档。 !不只有代码!
复制文件并更改文件名以体现版本之间的区别。
无法直观反映现今版本较之前版本的变化。individuals
回到上一个版本比较两个version的差异备份软件版本历史获取备份合并teamwork
多个开发者合作记录每个开发者的动作,便于“审计”创建分支对某些功能进行扩充——便于多个开发者的合作
本地VCS:版本库和更新都在本地端,他人不可见。 无法协作。
集中VCS:所有version集中在一个版本库服务器
分布VCS:仓库存于server&每个本地computer
git就是分布式的避免了server停止服务带来的巨大不便其中黑色实线左侧为本地端,右侧为server端。
staging在机器上并没有实际存在的文件夹,而其余三个目录有真正的文件夹。
每个version都是一个对象,每次commit都会形成一个新的对象
Object graph:version之间的关系演化(是一个有向无环图)
A→B:在B的基础上修改后形成A合并也会生成一个commit对象
用到 当前需要合并的两个commit对象 以及 这两个commit的祖先 ,因为当前这些祖先中包含了当前合并对象中未更改的文件部分内容commit
和之前commit中没有改变的文件,不需要重复存储
!不是直接复制老版本的全部内容Git理论上可以创建无穷多个分支,且 创建所需的时间和已经有的分支数量没有关系
programming languages编程语言
IDE集成开发环境:如eclipsemodeling languages建模语言
比如UML
解决了代码不易理解的问题,便于中间建模评估软件架构
configuration languages配置语言
比如XML、JSON控制程序执行时的各项行为Review
静态代码分析工具
不需要执行程序比如spotbugs、checkstyle动态代码分析工具
执行程序并观察现象、收集数据、分析不足如test、时间和空间效率性能debugging&testing
程序开发的任何阶段的成果都必须可test。 不通过test→debug,定位发现错误根源
refactoring重构
不改变功能的前提下优化软件代码结构
Build过程: 即编译、打包成可执行程序的过程。