作者回复: 这个总结很赞👍
建议也可以分享到微博或者博客
作者回复: 总结的赞👍
这些技术得以流行,还有大公司近些年越来越多的实施敏捷,就是因为能帮助把大团队拆分成小团队,大服务变微小服务
作者回复: 是的,云计算的兴起可以减少很多劳动,但不代表你就什么都不用做了,还是要做需求分析,再去做架构设计,做完架构设计你才能清楚哪些可以用云计算,那些需要自己去实现。最后编码完了,一样还要测试的。
作者回复: 软件开发,核心就是人,如果没有人,规范和文档都没意义的。要留住人,一个么得舍得给钱,另一个得有个好的环境,还有就是要有梯队,能把新人培养上去。
饭店里只有一个大厨,大厨当然敢乱提要求,如果大厨多几个,就不担心了。还是得要舍得下本钱招优秀的人。
作者回复: 你说的问题确实存在,导致常说的技术债务问题,所以需要定期去重构,改进这些问题。
迭代过程中的重复工作确实存在,但是软件开发中的浪费其实主要不是在于迭代过程中的重复工作,而是在于需求不明确和需求变更导致的返工或失败。敏捷开发持续发布稳定版本的理念还是利大于弊。
有一些项目其实是瀑布模型和敏捷开发的结合,需求分析和系统设计的时候用瀑布模型,开发和测试阶段用敏捷,也是个不错的选择。
作者回复: 👍
作者回复: 👍确实如此,《构建之法》中也有提及。
我们现在所实践的瀑布模型,和论文中提出的模型还是有些差别。
作者回复: 是的,最初大家都以为软件是靠人数堆出来的,以为加人就能减少开发时间,所以后来有了《人月神话》。
不过这个问题,我建议你还是客观分析一下,为什么4个月完不成?是工作量估算问题?还是实现的方法不当?
如果你能帮助找出来原因,并有可以改进的优化方案,对你学习理解《软件工程》是有极大帮助的。
有具体问题欢迎留言。
作者回复: 👍
还需要注意软件工程的目标是构建高质量的软件。
作者回复: 早期软件工程很多借鉴建筑工程的,相信可以帮助你更好的理解👍
作者回复: 需求需要反复沟通确认的,是一个从粗到细的过程。
最开始可以画草图,找相似产品对比,确认大方向。
然后把你的理解制作成原型,用原型去确认,根据反馈再反复修改。
最终确认了后再去开发。
作者回复: 👍
作者回复: 👍总结的很好
作者回复: 你说的这种是常见的现象,在团队扩大后,需要注意几件事:
- 对已有项目要考虑偿还技术债务,进行重构。《23| 技术债务:是继续修修补补凑合着用,还是推翻重来?》
- 要考虑逐步规范项目流程,例如要有代码审查、单元测试等规范,不能一味追求速度走捷径绕过这些好的实践《11 | 流程和规范:红绿灯不是约束,而是用来提高效率》
- 可以使用敏捷开发或者借助敏捷开发的一些好的实践,用固定的周期、用持续交付的思路,持续稳定的交付需求。
可以先从这几个角度思考一下。
作者回复: 这个话题有点大,我建议你可以结合《03 | 瀑布模型:像工厂流水线一样把软件开发分层化》这篇文章阅读。
这里我简单介绍一下:
一个项目立项后,首先要有负责人,组织和推进整个项目的进行,一般这个角色就是项目经理。《10 | 如果你想技术转管理,先来试试管好一个项目》
在项目开始的时候,也就是瀑布模型的需求分析阶段,需要有人去确认需求,根据确定好的需求去设计产品,这个角色就是产品经理。《19 | 作为程序员,你应该有产品意识》
在需求确定后,需要有人设计架构,对需求进行抽象,对模块进行设计和合理组合,这样的角色就是架构师。《23 | 架构师:不想当架构师的程序员不是好程序员》
在架构设计有了后,就可以开始基于需求和架构设计进行编码了,这个角色大家都比较熟悉,就是程序员。《27 | 软件工程师的核心竞争力是什么?(上)》
在编码完成后,需要有人对完成的结果进行校验,以确认满足需求,这样的角色就是测试工程师。《32 | 软件测试:什么样的公司需要专职测试?》
在测试验收通过后,就需要有人将完成的产品发布部署到生产环境,并且对生产环境的运行进行监控,这样的角色就是运维。《36 | DevOps工程师到底要做什么事情?》
作者回复: 我认为过程应该包含过程模型采用的方法。而方法是指基于过程模型之下的方法。
因为过程模型决定了软件开发过程是什么样的,进而决定了采用什么开发方法。
比如你选择了瀑布模型,整个软件开发过程就是按照瀑布模型的分阶段来进行,对应的方法就是瀑布模型中的方法,例如需求分析、架构设计;如果你选择了敏捷开发,则整个开发过程就是一种敏捷迭代方式,后面的方法对应的就是敏捷开发的一套方法体系,例如Scrum、用户故事、持续集成等。
作者回复: 赞👍
总结的很好,后面可以再看看软件工程是怎么去达到这个目标的。
作者回复: 赞
在《构建之法》里面,也有另一种定义:
软件=程序+软件工程
编辑回复: 你的求知精神,也是很赞呢😁😄
作者回复: 是的,还是需要经验的积累,学习不是一蹴而就的事。还是有些方法可以帮助你做的更好。比如说需求不明确,可以尝试原型设计;可以尝试快速迭代,早确认需求。