zoukankan      html  css  js  c++  java
  • 软件工程的瀑布, 大泥球, 教堂,集市,银弹以及我的感想

    银弹

        Brooks在他最著名的《没有银弹-软件工程中本质性和偶然性》文章里指出,在软件开发过程里是没有万能的终杀性武器(即银弹)的,只有各种方法综合运用,才是解决之道。而各种声称如何如何神奇的理论或方法,都不是能杀死“软件危机”这头人狼的银弹。

        而我个人也倾向于“没有银弹"的看法,软件的内在设计本身就有一定的复杂性,我认为这是必须,有时也是不可避免的。成熟的软件需要综合各个方面的考虑,实际过程中的复杂度就不是能仅仅依靠技术解决的了。

    大泥球

        大泥球指的是设计结构糟糕,到处补丁,缝缝补补的软件。这种情况常常出现在时间和预算限制的情况下,软件开发者无暇将设计做到完美就匆忙开始发行第一个版本。我认为,在这种情况下应该加强对代码的控制,比如团队中加强对代码的严格的管理,增加代码的复审以提高正确率和代码可读性。

    教堂和集市

    • 大教堂模式(The Cathedral model):源代码在软件发行后公开,但在软件的每个版本开发过程中是由一个专属的团队所控管的。作者以GNU Emacs及GCC这两软件为例。

    • 市集模式(The Bazaar model):源代码在开发过程中即在互联网上公开,供人检视及开发。作者以Linux核心的创始者林纳斯·托瓦兹带领Linux核心的开发为例,亦引用fetchmail的开发为例。

    瀑布模型

        瀑布模型是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段。

        瀑布模型的优点

    1)为项目提供了按阶段划分的检查点。

    2)当前一阶段完成后,您只需要去关注后续阶段。

    3)可在迭代模型中应用瀑布模型。增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。

    4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

    敏捷开发思想

        敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

        对于我的团队而言,敏捷开发的思想体现在:

    • 前期精简

        在一轮迭代中,我们把一个物理实验报告的项目进行分类,首先挑选其中几个而不是全部实验作为一轮迭代的成果展示部分,从而减少了工作量,使得一个物理实验报告网站的形能先出来,之后再把其他的实验加进去。

    • 接受变化

        团队一开始是打算用图片转文字的软件工具处理上一届的实验报告,但是在做了几分报告之后,我们发现预习报告的部分大体上和课本的内容差不多,便重新转换PDF版的教材再加以处理,使得识别率更高。

    • 快速反馈

        一方面每个人的每天的任务完成时会进行反馈,以便及时调整项目进度;另一方面,我们在网站发布后,建立了一个群,吸引学弟学妹们来体验,并收集他们的意见和建议,并及时进行调整。

    心得体会

    一轮迭代的总结

        在一轮迭代的过程中,我认为我们的团队整体做的还是比较好的。看到最终的效果和成绩大家都非常满意。当然,除此之外,我们还对整个团队的配合以及整个软件开发过程感到满意,基本没有出现沟通方面的问题,团队里每个人各司其职、尽职尽责,大家都是乐在其中也学到了很多东西。

    分工明确到每天

        在这一段时间,我认为有一条对团队项目的帮助非常大,就是分工细化。最好能将每个人的任务明确到每天。我们的团队确实是这么做的。开始团队项目以来,我们团队的项目经理坚持在每天早上或者前一天的晚上将每个人一天的任务放在群里进行公示与明确。并在每天晚上检查今天任务完成情况,以便及时调整项目进度。这样的弊端是项目经理的任务会很重很繁琐,但是我认为这样做非常有成效:团队项目很顽固的一个问题就是如何保证团队中每个人的工作量,而一个大而化之的分工很容易使个人的任务虚化、不具体,从而不好下手,加之deadline距离较远,很容易使人拖延。作为学生来讲,除了软件工程还有其他的课程,那么就很容易产生“没关系还有时间我先处理别的事务”的想法。以我自己的切身体会,每天的任务和汇报机制逼迫我每天不得不挤出时间来做团队项目,从而保证了工作量。

    及时的反馈机制

        由于分配的任务是以“天”计,使得反馈和沟通也能更及时。我曾经卡在一个问题上一直找不到解决方案。到了晚上没有完成当天任务,项目经理便想办法和我一起解决。但是事后他告诉我再遇到这种问题在第一时间告诉他效率会更高。我真的非常感谢我们组的项目经理,在他的帮助下我也逐渐学会如何进行有效的沟通,整个团队的交流也越来越频繁高效,运行也越来越顺利。

    不停地学

        这个也是我在这一段时间内收获最多的一点。我的计算机知识不是很扎实,事实上,我们团队并不是一个人人都是大神的配置。为了配合整个项目,每个人都需要了解新的内容去完成自己的任务。而我们的团队在保证进度的前提下也是鼓励这个的。我就这样在每天任务的逼迫之下熟悉使用LaTeX处理物理实验报告、了解了在网页中嵌入PDF的方法、学会用Python编程处理数据、熟练使用Markdown编辑器……这一段时间真的学到了太多的知识,收获非常大。

  • 相关阅读:
    大数据架构师技能图谱
    2018年,Java程序员转型大数据开发,是不是一个好选择?
    如何将java web项目上线/部署到公网
    Flume调优
    Spark流处理调优步骤
    zookeeper的WEB客户端zkui使用
    HBase各版本对Hadoop版本的支持情况
    java 代码实现使用Druid 链接池获取数据库链接
    安装postgreSQL出现configure: error: zlib library not found解决方法
    修改postgres密码
  • 原文地址:https://www.cnblogs.com/lydiavitani/p/4963456.html
Copyright © 2011-2022 走看看