Alpha阶段结束了,内心可以说是五味杂陈。不是说我们的产品拿不上台面那般差劲,复杂的心绪主要来源于和别的队的比较,别的队才刚刚发布没多久访问量和注册量就破百了,并且还发起了找bug送红包的活动。可能是觉得付出了相同的努力,却没办法换回相同的效果,看来还是得审视自己的问题。

  本周的个人作业是阅读关于软件开发本质和开发方法的博客/文章,结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得。借这个机会找一下我们的不足吧。

  阅读材料目录:http://www.cnblogs.com/jiel/p/4892734.html

银弹 / Silver Bullet

  (阅读材料:http://www.cs.umd.edu/class/spring2003/cmsc838p/General/NoSilverBullet.html  &  http://www.drdobbs.com/there-is-a-silver-bullet/184407534/

  《没有银弹:软件工程的本质性与附属性工作》(英语:No Silver Bullet — Essence and Accidents of Software Engineering)是IBM大型机之父佛瑞德·布鲁克斯所发表一篇关于软件工程的经典论文,原先是在1986年都柏林IFIP研讨会的一篇受邀论文,隔年电机电子工程师学会《Computer》也转载了这篇文章,他们用了几张《伦敦狼人》(The Werewolf of London)之类的电影剧照来当作说明,还加上了一段〈终结狼人〉的附注,用来引出非银弹(silver bullet)则不能成功的(现代)传说。该论述中强调由于软件的复杂性本质,而使真正的银弹并不存在;所谓的没有银弹是指没有任何一项技术或方法可使软件工程的生产力在十年内提高十倍。(摘自:维基百科)

  其实我还没有太明白这部分,关于这颗“银弹”到底有没有,还需待我细读。

瀑布模型 / Waterfall Model

  (阅读材料:http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf

  瀑布模型(Waterfall Model) 是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好 “返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。包括软件工程开发、企业项目开发、产品生产以及市场销售等构造瀑布模型。1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。(摘自:百度百科)

  可以看一下上面这张图,“瀑布模型”的意思也就理解了。从软件的计划开始,完成每个层次之后就可以进行下一个层次,这样依次执行,发现问题之后返回上一个层次解决问题,有点像“回溯算法”。瀑布模型强调的就是一个软件项目的开发应该是按照阶段一步一步来实现的,不能越级也不能同时进行,因为这些层次是相互依赖的,从基础到高级,如果基础没有打好,“高楼”就会出现问题。所以没有按照这样“瀑布式”的开发模式进行开发,那么这样的工程是不可能一帆风顺的,并且是会出现很多问题的。

  我们的团队在这个方面似乎有些欠缺。特别是在UI的设计中,我们把原来的UI没有经过重新设计就直接进行新的“拆拆补补”了,所以Alpha现在的样子不能说是Material Design的风格,虽然界面外表看起来还可以,但是内里很杂乱。这就是我们没有在发现问题之后返回设计层次进行修改在继续开发的结果。这一方面,我们会在下一次会议中重点讨论的。

大泥球 / Big Ball of Mud

  (阅读材料:http://www.laputan.org/mud/

  所谓大泥球,是指杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。

  这个解释还是比较容易理解的,不像上面那么复杂难懂。从个人的观点来说,我认为“大泥球”在所有的工程中都会存在,至少是出现过,所以大泥球的出现应该是十分正常的。

  之所以说大泥球在每个工程中都会存在,是因为任何一个工程无论是在开发初期的设计,还是开发过程中都不能做到和预期结果百分百的相匹配,更别说因为需求的变化也随之变化的预期结果了。我们总是期待工程能够十分顺利的进行,其实不然,面对“浩瀚”的代码海洋,即使是最有条理的人也不能永远对这些代码保持理智,所以接连不断的bug就会出现。修复了旧的bug,新的bug就会出现,这时我们说的大泥球就会越来越多。

  于是就不得不说我们的工程了。我们自己对Alpha版本也不是很满意的,就在发布前夕,我们都还在不断地修复bug,同样也出现旧的bug修复完整新的bug出现的情况,不过好在Alpha版本顺利发布了。说我们的程序中没有大泥球那是不可能的,这些大泥球的正是代码碎片式的修补造成的。然而,面对这些大泥球,在时间的压力下,我们也只能睁一只眼闭一只眼。

  由于大泥球的危害不仅限于代码阅读和理解方面,它的潜在影响会在后期的工作中逐渐显现出来,所以我们在Beta版本中会特别注意这方面,我们没有办法阻止大泥球的产生,只能在后期的工作中不断地消除它们。

大教堂与市集 / The Cathedral and the Bazaar

  (阅读材料:http://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar

  《大教堂与市集》(The Cathedral and the Bazaar)是埃里克·斯蒂芬·雷蒙(Eric Steven Raymond)所撰写的软件工程方法论。以Linux的核心开发过程以及作者自己主持开发的开放原始码软件──Fetchmail为讨论案例。文章在1997年5月27日发表,并在1999年出版成书。本书讨论两种不同的自由软件开发模式︰大教堂模式(The Cathedral model)和市集模式(The Bazaar model)。(摘自:豆瓣)

  大教堂模式,指的是源码是公开的,但在软件的每个版本开发过程是由一个专属的团队所控管的。市集模式,指的是源码是公开的,不过却是放在因特网上供人检视及开发。

  我们这样理解会更形象:大教堂是每个人都可以去的,进去参观和瞻仰,你可发现富丽堂皇内部的瑕疵,但是你却不能自己去擅自修复,只能由这座大教堂的拥有者来进行修复,所以有的人说大教堂拉长了bug修复时间;同样的,市集也是每个人都可以去的,但是市集里没有这么多规矩,你可以随时对自己不满意的地方提出改善的意见,因为这是众人的市集,也是众人共同创造的市集。

  在我看来,大教堂模式只适用于小规模的工程开发,因为这样的工程不需要太多外界的意见和建议,内部团队就可以完成所有的需求;相对的,市集模式就需要应用于涉及范围更广的工程开发之中,因为只有一己之力不太可能面面俱到,所以要借助大众的力量。无论是大教堂模式还是市集模式,都有自己的优点和缺陷,只是在不同的开发背景下各有各的突出。

  我们的工程开发类似一个大教堂模式,很小的一个工程,不需要太多人的介入,团队内部就可以自己解决,唯一一点和这两个模式不同的是我们没有开源,没有把代码公之于众,也导致许多bug隐藏着还未被发现。

Lost In CatB

  (阅读材料:http://queue.acm.org/detail.cfm?id=2349257

  这篇文章主要讲的就是软件对于软件包的依赖性在增多,同时软件的复用性在降低。现在的开源项目太多了,随手可得还不要钱,中国人最高兴……这么好的资源素材放在你面前,你不要?

  我们不能否认各种软件包给工程带来了或多或少的便捷,但是这种便捷也只是短暂的。市场的需求是不断变化的,随着这些变化,之前已有的各种软件包、开源软件等等都会渐渐失去其独特性,过度依赖软件包会让降低程序的扩展性,到最后只能推翻重做。

  就拿我们的App做例子,我们的工程中也使用了许多包,像百度的地图和其他开源的代码包,我们之所以这么做,是因为为了完成特定的功能,在较短的时间内只能使用别的软件包。好在我们并没有完全依赖于这些包,不过还是要在Beta版本时多谨慎一些。

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

  (阅读材料:http://agile.dzone.com/articles/jez-humble-why-software  &  http://continuousdelivery.com/2012/08/why-software-development-methodologies-suck/

  有些人提到“方法论”就头大,比如我。我们真的需要学习软件工程的方法论吗?

  你可能会这么问:“我们学了那么多年的哲学,什么时候有用到过?”有,我们一直都在和方法论打交道。软件从零发展到现在,从简单的计算器到现在层出不穷的各类软件,软件工程的复杂度也在不断的提高,需要更精准、更全面的科学的方法论来支撑。我们总认为做工程就是靠自己的知识和经验来,却总不愿意承认当我们面对困难走投无路时,站在科学的方法论上审视全局,才能找到最终的解决方案。也只有运用科学的方法论才能在软件工程开发中有的放矢、有条不紊地进行工作。

  所以,如果要问软件工程的方法论到底有什么用?有多少用处?你可以尝试着使用这些方法论来做一些对比。

个人博客作业Week7(阅读文章,心得体会)的更多相关文章

  1. 【个人博客作业Week7】软件工程团队项目一轮迭代感想与反思

    (发布晚原因:发到团队博客了 一.关于银弹 在佛瑞德·布鲁克斯于1986年发布的<没有银弹:软件工程的本质性与附属性工作>这篇软件工程的经典论文中,作者向我们讲述了软件工程没有银弹这样的理 ...

  2. 个人博客作业week7

    个人阅读作业week7 一.瀑布 软件工程的瀑布模型是1970年由Winston Royce提出来的,即软件的开发按照一个严格的.顺序的.单次的瀑布流开发周期.例如需求分析阶段.概要设计阶段.详细设计 ...

  3. [个人博客作业Week7]软件工程团队项目感想与反思

    在阅读了推荐阅读的材料之后,我想了很多东西.最终还是决定,以团队项目的经历为主线,叙述我关于软件工程的一些思考与体会. 凤凰涅槃,浴火重生 如果要我来概况这几周团队项目的经历的话,那么句话是我所能想到 ...

  4. 个人博客作业-Week7

    团队任务中个人感想 我们团队选的题目是爬虫, 采用用AVA平台开发了, 我原来JAVA语言不熟悉了, PM考虑这部分之后分配任务这部分感觉很多谢 团队当中的PM很清楚每个组员的力量, 所以PM跟每个组 ...

  5. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  6. 初窥构建之法——记2020BUAA软工个人博客作业

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 完成一次完整的软件开发经历并以博客的方式记录开发过程的心得掌握 ...

  7. Java课程设计——博客作业教学数据分析系统(201521123082 黄华林)

    Java课程设计--博客作业教学数据分析系统(201521123082 黄华林) 一.团队课程设计博客链接 博客作业教学数据分析系统(From:网络五条狗) 二.个人负责模块或任务说明 1.网络爬虫 ...

  8. OO第二次博客作业——电梯调度

    OO第二次博客作业——电梯调度 前言 最近三周,OO课程进入多线程学习阶段,主要通过三次电梯调度作业来学习.从单部电梯的傻瓜式调度到有性能要求的调度到多部电梯的调度,难度逐渐提升,对同学们的要求逐渐变 ...

  9. [2017BUAA软工]第三次博客作业:案例分析

    第三次博客作业:案例分析 1. 调研和评测 1.1 BUG及设计缺陷描述 主要测试博客园在手机端上的使用情况. [BUG 01] 不能后退到上一界面(IOS) 重现步骤:打开博客首页中任意博文,点击博 ...

随机推荐

  1. File类_常见的方法(获取目录中指定规则的内容)

    首先定义过滤器 import java.io.File; import java.io.FilenameFilter; public class FileByJava implements Filen ...

  2. Cocos2d-x CCControlPotentiometer之圆形音量button及特效

    1. 圆形音量button 事实上作者的本意应该是叫做"电位计button".可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果: 好了,不多解释,本篇到此 ...

  3. day16 Python filter函数

    前戏 movie_people = ["alex","charon","pluto","liu","sb&qu ...

  4. B轮公司技术问题列表(转)

    1.异构系统的接口对接我们有自己的一套统一接口,但是需要与其它公司的接口做对接,但是各个公司的接口各不相同,有什么好的方式能够方便与各公司的接口做对接的同时我们这边也能尽量少或者不需要改动代码就能实现 ...

  5. JavaScript高级程序设计学习(六)之设计模式

    每种编程语言都有其自己的设计模式.不禁让人疑惑设计模式是用来做什么?有什么用? 简单的说,设计模式是为了让代码更简洁,更优雅,更完美. 同时设计模式也会让软件的性能更好,同时也会让程序员们更轻松.设计 ...

  6. 剑指offer题解

    数组中重复的数字 题目描述:在一个长度为n的数组里面的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次,请找出数组中任意一个重复的数字.例 ...

  7. matlab:inv,pinv逆与伪逆

    对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆   inv:   inv(A)*B实际上可以写成A\BB*inv(A)实 ...

  8. jmeter(四)HTTP请求

    启动jmeter,建立一个测试计划 这里再次说说怎么安装和启动jmeter吧,昨天下午又被人问到怎样安装和使用,我也是醉了:在我看来,百度能解决百分之八十的问题,特别是基础的问题... 安装:去官网下 ...

  9. 数据库隔离级别深入理解(ORACLE)

    TRANSACTION_READ_UNCOMMITTED 1 这种隔离级别最低,脏读,不可重复读,幻读都会发生,我用的oracle,并没有支持这个级别,不作研究. TRANSACTION_READ_C ...

  10. MongoDB的地理位置查询,以及和mysql的使用对比

    MongoDB的一个特色就是具有丰富的查询接口,比如地理位置查询. 在地理位置查询上,MongoDB有着比传统关系型数据库的优势,下面举个例子. 当前移动互联网应用,按用户离目标门店距离排序上的场景很 ...