计算与软件工程作业五
问题|答案
--|:--😐--:
作业要求|讨论软件方法的思潮
课程目标|了解软件开发思想
在哪方面帮我实现目标|帮助我们学习关于软件工程的方法论
参考文献|(https://www.cnblogs.com/xinz/p/3852390.html)(https://www.jianshu.com/p/9593bd7b28d9)
软件开发模式对比
瀑布模型
瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求分析、设计、编码、集成、测试、维护的步骤顺序进行。
瀑布式的主要的问题是它的严格分级导致的自由度降低,项目早期即作出承诺导致对后期需求的变化难以调整,代价高昂。瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。
迭代式开发
迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。
迭代式开发的优点:
1、降低风险
2、得到早期用户反馈
3、持续的测试和集成
4、使用变更
5、提高复用性
螺旋开发
螺旋模型,它将瀑布模型和快速原型模型结合起来,强调了其他模型所忽视的风险分析,特别适合于大型复杂的系统。“螺旋模型”刚开始规模很小,当项目被定义得更好、更稳定时,逐渐展开。
“螺旋模型”的核心就在于您不需要在刚开始的时候就把所有事情都定义的清清楚楚。您轻松上阵,定义最重要的功能,实现它,然后听取客户的意见,之后再进入到下一个阶段。如此不断轮回重复,直到得到您满意的最终产品。
敏捷软件开发
敏捷软件开发又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。
方法论基本原则
(1)推动信息共享与沟通(Foster open communications)
(2)为共同的远景而工作(Work toward a shared vision)
(3)充分授权和信任(Empower team members)
(4)各司其职,对项目共同负责(Establish clear accountability and shared responsibility)
(5)重视商业价值(Focus on delivering business value)
(6)保持敏捷,预期变化(Stay agile, expect change)
(7)投资质量(Invest in quality)
(8)学习所有的经验(Learn from all experiences)
我的看法
软件开发经常会有这样以一种隐喻——软件开发就像建筑工程,建一幢楼,有基础,有结构,有可以使用的房间,在这之前必须要设计,最后一样要通过验收,最终用户可以住进去,也就是可以使用软件的各种功能。但是,比喻只能是比喻,要想了解软件开发的方法论,我们应该从软件开发的本质推导,而不是从一些隐喻里抄袭过来。
软件开发的定义是:“软件开发,就是在一个受到限制的环境中,利用环境提供的可能性,修改或添加环境允许的各种状态(编程),去满足某一组需求。”
软件开发过程中遇到的独特的困难:
1、沟通困难:通往软件开发,可能面对的思维模式,是完全不同的世界。比如二进制的世界、函数的世界、逻辑的世界、过程的世界、对象的世界、二维表的世界等等。在这些不同的世界中开发软件,需要的思考方式和思维习惯都是不同的。开发项目到一定程度以后,不同的世界必须再一个完整的项目中和谐并存,这些差异,有时候就会带来沟通障碍。
2、控制困难:在软件开发过程中,往往需求会频繁变动,计划一改再改。
3、评价困难:在项目开放过程中建立及时有效的反馈机制十分重要,以小而高密度的评价手段,来对开发过程进行较为准确的控制,这一切,都必须建立在合理的评价机制的基础上,但是,这样一套评价机制,非常困难。
4、估算困难:软件开发与其它行业的一个重大区别,就在于对于软件开发的估算成本,不能忽略不计。因为项目的时间、人力、成本变动的范围较大。
因此现有的软件开发方法没有绝对的好与不好,只有合适不合适,要能够检验软件开发方法优劣,必须基于对软件开发本质的正确认识,这样才能量化两个因素:软件需求的复杂程度以及软件开发的实际工作量。