个人阅读作业

银弹

银弹是指能让狼人一枪毙命的致命子弹,对于软件工程而言,我觉得是不存在银弹的。每一项软件开发都是极为特殊的,有特定的需求、特定的功能,如果存在银弹能够直击要害解决问题,那么软件的开发也只是机械化、流程化的操作了。“瀑布模型”、“敏捷”、“官僚”、“功能团队模式”等等各种被历史验证可行与不可行的模型都有利有弊,目前没有一个模型可以包括历史所有模型的所有优点。在这个从特殊到一般的过程中,还有很长的路要走,甚至没有尽头。

大教堂与集市

•	The Cathedral model, in which source code is available with each software release, but code developed between releases is restricted to an exclusive group of software developers. GNU Emacs and GCC were presented as examples.
• The Bazaar model, in which the code is developed over the Internet in view of the public. Raymond credits Linus Torvalds, leader of the Linux kernel project, as the inventor of this process. Raymond also provides anecdotal accounts of his own implementation of this model for the Fetchmail project.

以上关于大教堂与集市的定义引用自The Cathedral and the Bazaar - Wikipedia,大教堂是代码只属于一个专门的开发团队,相比之下,集市中的代码是开源而且所有开发者都可以直接使用。

我们的团队使用的代码托管是github,代码完全开源而且所有其他开发者都可以直接获取。

Worse?Better?

•	Completeness can be sacrificed in favor of any other quality. In fact, completeness must sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.

感觉Worse Is Better讲求的就是一个快字,为了软件开发简单、快捷,可以牺牲当下的完整性和一致性。没有具体在软件工程领域实践过类似操作,但是基于以往比较naive的编程经历来看,不太认同这个观点。完整性和一致性从本质上来说就是给开发人员一个良好的基础以便于在这之上进行新增、修改与删除,软件只有在有了较好的完整性与一致性之后,对软件的开发才会真正变得简单;Worse Is Better可以过于具体地认识为为了实现某一新功能而不管未来可能对其他模块进行修改存在的潜在漏洞。在软件不需要长期维护或者不需要增量开发的时候,貌似是“一劳永逸”的方法,不然,后期真的会太痛苦。

我们的项目并没有使用这个概念,我们alpha运用了laravel框架,beta用了django,这两个框架在架构上是比较缜密且功能分散,有利于开发的一致性。

瀑布

•	瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。

优点:

  1. 为项目提供了按阶段划分的检查点。
  2. 当前一阶段完成后,您只需要去关注后续阶段。
  3. 可在迭代模型中应用瀑布模型。增量迭代应用于瀑布模型。迭代1解决最大的问题。每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
  4. 它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

缺点:

  1. 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
  2. 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
  3. 通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
  4. 瀑布模型的突出缺点是不适应用户需求的变化。

我们各个阶段的文档做得不好,在个人项目中文档也做得不好。这就导致了开发了一些功能之后还要回头来验证设计上的问题,这应该是软件开发中应该极力避免的。

软件工程的方法论到底有多少用处?

软件工程的方法论相当重要,虽然如第一个问题所说每个软件都具备特殊的需求、特殊的功能,而且软件工程的开发模式也参差不齐,但是不管使用怎么样的开发流程,根本上离不开软件工程的方法论的指导。《Why Software Development Methodologies Suck 》中作者提出缩小开发周期和提升反馈效率这两种方法来进行工程实践,其中提升反馈效率我认为是最重要的,一个产品只有经过市场的考验才能知道其优势与劣势,开发团队才能在此基础上进行研究与修改。软件工程方法论虽不尽完美,但是从思想上指导着每一次软件开发趋于完整、一致、可用、最佳用户体验。

在软工为期三个多月的实践中,我没有收获很多软件开发的成就感,但是从这些挫折之中,可以很清晰地体会到软件工程的方法论是一个明确的指引,可是你要真正运用于实践,除了自身需要百分之百投入,还需要的是co-workers的共同投入、产品经理的大局规划。明白了一点的软件工程方法论之后,在其他课的课程设计上也或多或少地开始运用了起来。

[BUAA_SE_2017]个人阅读作业 + 总结的更多相关文章

  1. 个人阅读作业Week17

      个人阅读作业Week17 reading buaa software   解决的问题 这是提出问题的博客链接:http://www.cnblogs.com/SivilTaram/p/4830893 ...

  2. 个人阅读作业 final

    前两次阅读作业链接: http://www.cnblogs.com/SteelPillar/p/4027877.html http://www.cnblogs.com/SteelPillar/p/40 ...

  3. 软件工程M1/M2总结及阅读作业总结

    一.软件工程M1/M2总结 写下这篇总结的时候,我们的软件项目尚未完工.虽然尝试申请了延期答辩,但最终未能成功.这意味着,我们的项目能否正常发布已经处于了一个微妙的状态.可能可以,也可能不可以.只能尽 ...

  4. final个人阅读作业

    一.软件工程M1/M2总结 1.M1阶段总结: 我们团队的软件工程开发是按照前后端来分别开发的,我是负责后端的.我们的项目是做一个北航的社团平台,是一个网站.在后端我们使用的是ruby on rail ...

  5. 个人阅读作业 --软件工程M1/M2总结

    软件工程M1/M2总结 写在前面的话: 这学期的软件工程伴着考期的展开逐渐落下帷幕,回顾这学期的软件工程,我感觉我的热情在一次又一次的失落中逐步消耗殆尽,每个人对于这门课的体验都会有所不同吧,可以确定 ...

  6. 【M2】软件工程终期总结报告——阅读作业

    PhylabWeb——阅读作业 问题回顾 提问博客地址:http://www.cnblogs.com/kibbon/p/4831104.html 尚待解决的问题: Alpha/Beta,ZBB/RC阶 ...

  7. [2019BUAA软件工程]第1次阅读作业

    [2019BUAA软件工程]第1次阅读作业 Tips Link 作业连接 [2019BUAA软件工程]第1次阅读作业 读<构建之法>的疑惑 个人开发流程(Personal Software ...

  8. 【BUAA软件工程】第一次阅读作业

    BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...

  9. [Week17] 个人阅读作业

      个人阅读作业Week17 reading buaa software   解决的问题 这是提出问题的博客链接:http://www.cnblogs.com/SivilTaram/p/4830893 ...

随机推荐

  1. 20155234 2016-2017-2 《Java程序设计》第7周学习总结

    20155234 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 Lambda Lambda表达式会使程序更加地简洁,在平行设计的时候,能够进行并行 ...

  2. mfc 类成员函数

    知识点 类成员变量初值 类的构造函数 类成员函数 类成员函数的位置 一.类成员变量初值 二.类的构造函数 构造函数 是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值. 构造函 ...

  3. Keil 中的Code,RO-data,RW-data,ZI-data

    我们开发项目中,编译.链接完成后,都要看一下RAM和Flash的利用情况,尤其在有bootloader的情况下,确保自己的单片机选型能符合项目的要求.其中ARM程序的组成,是很容易混淆的.此处所说的“ ...

  4. 关于自动AC机

    嗯,,,,自动AC机 在cena评测时: Const SourcePath:string='incantation'; InputFile:string='incantation.in'; Outpu ...

  5. Redis 为什么使用单进程单线程方式也这么快

    Redis 采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由 C 语言编写.官方提供的数据是可以达到100000+的 qps.这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 ...

  6. vue复习(二)

    一.组件介绍 每一个组件都是一个vue实例 每个组件均具有自身的模板template,根组件的模板就是挂载点 每个组件模板只能拥有一个根标签 子组件的数据具有作用域,以达到组件的复用 二.局部组件 & ...

  7. (转)为什么所有浏览器的user-agent都是Mozilla

    最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来. 然后出现了一个新的网页 ...

  8. python 利用urllib 获取办公区公网Ip

    import json,reimport urllib.requestdef GetLocalIP(): IPInfo = urllib.request.urlopen("http://ip ...

  9. mnist手写数字识别(SVM)

    import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.linear_model import ...

  10. 《spark机器学习 第二版》 蔡立宇 分享 pdf下载

    链接:https://pan.baidu.com/s/15Y14eAnfj8zf5mXdixbVeQ 提取码:rkdt