软件的生命周期
- 计划
- 分析
- 设计
- 实现
- 测试
- 维护
软件构造的传统模式
增量模式(无迭代):
- 线性递进
- 增量式(多个瀑布串行)
- 无迭代
- 容易适应需求的增加
V-模式:
- 增量模式的扩展
- 展示生命周期的每个阶段与相关测试阶段之间的关系
原型设计(迭代):
开发者开发出之后交由用户审评、测试
用户发现问题后,开发者修改原有实现,继续交由用户审评
直到用户满意为止
开源模式:
版本控制的功能、作用:
- 回滚上一个版本
- 比较两个版本的差异
- 备份软件历史
- 获取备份
- 合并
- 多个开发者之间的合作
- 记录每个开发者的“动作”
Git相关
特点:
分布式版本控制系统
Git只存储发生改变的文件(而不是代码行),相同的文件不重复存储
版本在Git中的存储方式:
- 每个commit指向一个父亲
- 多个commit指向一个父亲:分支
- 一个commit指向多个父亲:合并
- HEAD:指向当前commit
Git中的合并示意图:
- 在同一条分支上
- 在不同的分支上
Git的对象图:
Tree中指针指向每个文件,而不只是修改的文件
若文件没有被修改,则指向其父亲
补充:
如果某个节点仅存在于远程服务器的对象图中,则本地仓不能直接push,而需要如下操作:
git fetch origin master
git merge
git push origin master
(先fetch,再merge,最后push)
软讲构造的基本过程:
-
编程:
各类语言
1编程语言
2建模语言:软件设计阶段描述设计思想和设计结果,如UML
3配置语言:为程序配置参数和基础设置、编写build脚本,如JSON -
代码评审:
人工检查代码
借助工具
不用执行代码 -
动态代码分析&程序剖析(profiling):
动态分析:执行程序并观察现象、收集数据、分析不足
Profiling:度量代码运行时的状态和性能,发现潜在问题(也是动态分析) -
测试和调试:
执行代码发现真实出现的问题、找出问题的根源 -
重构:
保持代码的功能
不用执行代码 -
Build:
重用情况
1代码的编译,如.java -> .class
2软件的打包和测试
3基于web的应用程序的打包和编译
4执行静态代码分析工具,检查代码中的潜在漏洞,如checkstyle