作业要求 | https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10584
- | -
我在这个课程的目标是 | 讨论软件开发方法的思潮
此作业在哪个具体方面帮我实现目标 | 阅读有关软件工程方法论的文章
作业正文 | https://www.cnblogs.com/wyc1/p/12654693.html
作业要求
迄今为止,我们了解了不少软件工程的方法论。请从下表挑选几篇关于软件工程方法论的文章,仔细阅读(包括相关的讨论),根据你的软件工程经验分享你的看法。
https://www.cnblogs.com/xinz/p/3852390.html
瀑布模型
软件将要经历一个定义、开发、运行维护,直至被淘汰这样的全过程,这个全过程称为软件的生命周期。
为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规程约束,这样的工作模型被称为软件过程模型。
瀑布模型是将软件生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到软件产品。
优点:
1)为项目提供了按阶段划分的检查点。
2)当前一阶段完成后,您只需要去关注后续阶段。
3)可在迭代模型中应用瀑布模型。
4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导
集市
不管开源还是商用,都需要商业机会和商用环境,这就是市场杠杆,在市场需要的基础上,去谈论技术优劣与否,才有意义,否则就是吵吵嚷嚷。
就技术论技术,意义何在?世上哪有完美的事物?
开源不等于拒绝商业,有市场需求,就有其存在的空间,不管你怎么讨厌它
大泥球
大泥球指的是设计结构糟糕,到处补丁,缝缝补补的软件。这种情况常常出现在时间和预算限制的情况下,软件开发者无暇将设计做到完美就匆忙开始发行第一个版本。
不能放任代码变成"大泥球",对应的方法有两个,一是重构,二是复审。
随着软件需求、特性的更新发展,会面临重构,需要对过去的失败原因进行剖析充分吸取经验之后重构。
银弹
Brooks在他最著名的《没有银弹-软件工程中本质性和偶然性》文章里指出,在软件开发过程里是没有万能的终杀性武器(即银弹)的,只有各种方法综合运用,才是解决之道。而各种声称如何如何神奇的理论或方法,都不是能杀死“软件危机”这头人狼的银弹。
而我个人也倾向于“没有银弹"的看法,软件的内在设计本身就有一定的复杂性,这是不可避免的,成熟的软件需要综合各个方面的考虑,实际过程中的复杂度就不是能仅仅依靠技术解决的了。
敏捷开发
敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方式。
它并不是一门技术,而是一种开发方式,也就是一种软件开发的流程。它会指导我们用规定的环节去一步一步完成项目的开发。因为它采用的是迭代式开发,所以这种开发方式的主要驱动核心是人。
那为什么说人才是主要的驱动核心了?我们学过瀑布开发模型,它是以文档作为驱动,开发人员都是根据产品部门提供的需求文档进行开发的,一切的核心是文档,所以说文档是这个模型中的一个核心。而敏捷开发的意义在于它只关注文档中的重要点,或者尽可能的去简化文档,敏捷开发其实更注重的是人与人之间的沟通、交流。所以它强调以人为核心。
敏捷开发的主旨:
1.个体及交互比流程与工具更具价值
2.可用的软件比冗长的文档更有价值
3.与客户的协作比合同谈判更有价值
4.对变化的响应比遵循计划更有价值
敏捷开发的经典做法:
1.极限编程:PM作为用户的模拟者会随时与成员保持沟通交互,从而随时修改代码。同时 前端与后端也各自有两位成员进行结对编程——前者针对页面实现,后者针对数据库model的建立。
2.精益开发:PM以及小组内部在分配任务时,除了一开始的规划外,不会做太长久的任务,同时赋予各自充分的自主权。同时,第一轮迭代整体就是一个成员不断学习的过程。
3.Scrum:每天进行汇报总结,开展例会,并发表报告。每个团队成员需要汇报各自的进展情况,同时提出目前遇到的各种障碍。而在 Sprint 计划会上,将会对所有已经分配Sprint 周期中的产品需求积压进行估计,并对每个条目进行设计和任务分配。
总结
实际的软件项目十分复杂,几乎没有规律可以遵循,这就导致虽然前人总结了许多软件工程中的方法论,例如瀑布,或是敏捷。
但在实际开发过程中,即使我们完美的执行了这些方法中的开发流程,最终得到的产品也有可能是一团糟的。
方法论可以为我们提供大量的关于代码审核、开发模式上的经验与便捷,这是它最大的用处。
但它不能是一成不变的,应该是随着需求不断进步发展到,这才会真正的发挥出作用。
同时,软件开发人员的存在才是最关键的,需求预测,IT技能这些方法论的盲区还是要依靠经验丰富的专业人士来解决。软件开发人员的自主能力与方法论结合,。
我们在做软件开发的过程中也不能教条式的按照固定的流程进行操作,而不做进一步的思考和改进,一切都应该从实际出发。