个人博客作业
快速阅读教材, 列出仍然不懂的5到10个问题
1 回归测试
教材中2.1.3写到
在3.1.5版本, 模块A的编号为125的测试用例是通过了的, 但是在新的版本3.1.6上, 这个测试用例却失败了, 这就是一个倒退。 工程师们应该在新版本上运行所有已通过的测试样例
我有一点疑问, 新的版本的软件可能在新加的部分有缺陷, 也可能是因为破坏了以前的功能, 或者是二者链接起来出了问题, 而要检测这样的bug需要跑所有的测试, 这样是否会有很大的时间成本开销? 是否有好的方式能够把新增的代码单独测试? 以及用更通用的测试去验证流程的正确性?
2 如何理解软件的泛化?
在教材3.2中写到
过早扩大化\泛化
请问如何理解泛化? 为什么过早泛化不是很好的事情?
3 瀑布模型和生鱼片模型
教材 5.3.2中提到
生鱼片模型是瀑布模型的变形
请问生鱼片模型和瀑布模型有什么不同? 各自有什么优缺点?
4 认知阻力
教材中12.2提到
倘若认知阻力大, 学习曲线就会比较陡; 但是经过学习和练习, 如果用户适应了新的认知模式, 工作效率就会有较大的提高
我认为这并不完全正确, 有些时候, 认知阻力大是因为软件团队没有考虑完全用户的使用简便性, 以及给出清晰的说明文档, 所以造成了很大的认知阻力。
比如LaTeX在安装, 编译过程中的一些报错和版本有很大关系, 以及缺少像git那样有interactive的教程, 如果增加这些内容的话, 软件的认知阻力大大减少。
再比如colmap和vsfm都是三维重建中非常优秀的软件, 但是colmap用的会简单很多, 因为colmap给出了详细的教程和文档来适应不同的人群。
在软件开发的过程中, 我认为要考虑不同用户的认知能力和需求, 不能一味让用户适用自己的认知模式。
5 验收测试和构建验证测试
请问构建验证测试和一般的验收测试有什么区别。
6 敏捷开发
书中6.5提到
我们需要敏捷的开发流程, 但是不需要冲忙或者忙乱的开发流程
请问在敏捷开发中, 什么样的设计模式和软件架构能够适应敏捷开发的流程? 在招聘中, 如何判断一个成员是否能够胜任敏捷开发的工作?
请问软件和软件工程这些词汇是如何出现的?
- 软件这个词最早出现在Tukey 1958年的论文, “The teaching of concrete mathematics", 包含了soft ware这个词
- 软件工程(software engineering)这个词由Hamilton发明, 最早在阿波罗计划中就出现了这个理念, 在hamilton之前, 没有人很在意这一工程的实践方法。
软件工程开发的过程中有什么有趣的冷知识和故事
分享一个关于科学写作神器tex的故事
高德纳在写完TAOCP第三卷的时候, 觉得排版技术太粗糙, 于是开始开发tex, 本来以为半年时间就能开发完, 之后可以用方便的工具写作, 没想到用了十年时间。 tex的版本号码也非常有趣, 每次在小数点后面加入一个新数字, 高德纳曾经表示等自己过世后把版本改为$\pi$ 那时任何漏洞都被当做程序的功能。
上网调查下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
- git
- 优点
- 用户群广泛
- 代码库占的空间少
- 易于代码的分支管理
- 缺点
- 图形界面差
- 学习难度高
- 优点
- Bugzilla
- 优点
- 开源
- 和很多测试管理工具继承
- 自动文档
- 缺点
- 用户群不广泛
- 优点
- trac
- 优点
- 定制化
- 权限丰富
- 缺点
- 缺乏中文支持
- 学习成本高
- 优点
- github
- 优点
- 代码资源丰富, 用户群广
- 免费
- 缺点
- 速度慢
- 优点
- apple xcode
- 优点
- 自带完备的profile工具
- 可以自动跟踪函数调用
- 缺点
- 自定义功能不方便
- 编辑功能不如vs, sublime强大
- 优点
- svn
- 优点
- 操作简单
- 中文支持好
- 没有使用难度
- 缺点
- 功能不完善
- 占据空间较大
- 优点