英文捉急,只能挑一段看得比较懂的,而且正好和我们现在编程任务联系比较紧密的内容来谈一谈体会。

  在《No Silver Bullet》中,作者描述了造成软件本质性困难(essence)的四个原因:

1、复杂性(complexity):

  首先我们来看一下作者对软件的定义,其大意是“软件的本质是对一连串相关的概念的构建”:

  The essence of a software entity is a construct of interlocking concepts: data sets, relationships among data items, algorithms, and invocations of functions.

  所以我们开发软件,是从一系列抽象的数据、函数、算法构建出具体的应用。作者在文中提到,对于数学和物理这两门学科,人们是从复杂的现象中抽象出简化的模型,也就是概念。而对于软件来说,从最开始和我们打交道的就是各种各样的“concepts”,我们需要用它们去做出一个具体化的东西。正如作者所提到的:

  In most cases, the elements interact with each other in some nonlinear fashion, and the complexity of the whole increases much more than linearly.

  当我们在构建各种各样的“concepts”时,除了其本身的复杂性,我们还要面临它们之间彼此联系、相互影响而产生的复杂性。因此随着软件规模的增加,软件的复杂度将会以一种非线性的模式增长。

  

2、一致性(conformity):

  一致性是指开发过程中我们开发的部分必须要与其他接口保持一致,这会大大增加软件开发的复杂性。

  作者使用使用了一种很形象的说法,“数学和物理规则是由上帝制定的,而软件是有不同的人开发的”:

  These differ from interface to interface, and from time to time, not because of necessity but only because they were designed by different people, rather than by God.

  这使得开发人员在开发过程中都必须遵守一定的“契约”,按照指定的接口设计自己的程序。

  就用我们现在正在开发的美食应用来举例:

  A的任务:设计每一个菜谱页面具体显示哪些内容(菜谱名、材料、步骤等)。

  B的任务:设计每一个餐厅页面具体显示哪些内容(餐厅名、地址、电话等)。

  C的任务:设计收藏夹。菜谱收藏夹中的每一项必须列出菜谱的名字;餐厅收藏夹中的每一项必须列出餐厅的名字和地址。当点击这些项时,会跳转到相应的菜谱和餐厅页面。

  那么这时C在设计时就必须说明需要A和B把哪些的数据传给自己。否则很可能出现这样的状况:B在传递数据时没有传递餐厅的电话信息,当从C设计的收藏夹中跳转到具体餐厅页面时,餐厅的电话就不见了。

  为了维护这种一致性,每个开发人员都必须严格按照其他开发成员提供的接口设计自己程序。由于开发人员自身的一些原因,以及环境和时间等因素的影响这是非常困的。

3、易变性(changeability):

  软件为了适应不同的人群、需求、硬件条件,必须不断的发生改变,这也增加了软件维护的难度:

  In short, the software product is embedded in a cultural matrix of applications, users, laws, and machine vehicles. These all change continually, and their changes inexorably force change upon the software product.

  比如,当我们的用户希望收藏夹中能显示一下菜谱或者餐厅的图片,A、B、C三个人都必须修改相应的程序。这还只是一个小的应用。试想在一个庞大的系统中,许多的功能彼此依赖,更是“牵一发而动全身”。因此软件的易变性给开发和维护带来了很大的困难。

4、不可视性(invisibility):

    我们很难在开发过程中描绘出一个软件是什么样子的。有时候我们可以画出一些调用关系表,画出类之间的关系,或者大致画出一些界面的样子,但这些都不足以让我们在脑中对整个软件有一个具象化的认识:

   As soon as we attempt to diagram software structure, we find it to constitute not one, but several, general directed graphs superimposed one upon another. 

   比如,我交给A一个任务,让他在引导界面结束之后做出一个“欢迎使用”的动画。由于在实现之前我们谁也看不到具体的效果是什么样的,那么可能我认为自己已经说清楚了,A也以为自己听明白了,结果做出的效果和我想要的效果有不小的差距。正因如此,开发过程中不同开发人员之间也必须保持很好的沟通。

  

  在实际的软件开发过程中,这四点相互交织,给软件开发带来了不小的难度。为了解决好这些问题,我们必须保证成员之间又很好的沟通,必须按照要求完成好自己的任务。

个人阅读作业2:结合《No Silver Bullet》谈谈我在软件开发过程的遇到的困难与体会的更多相关文章

  1. 个人阅读作业2—《No Silver Bullet: Essence and Accidents of Software Engineering》读后感

    在进行了一次结对编程.一次团队编程和一次个人编程项目后,读了<No Silver Bullet: Essence and Accidents of Software Engineering> ...

  2. [2017BUAA软工]个人阅读作业+总结

    阅读作业 没有银弹 No Silver Bullet - Essence and Accidents of Software Engineering - Brooks 在这篇论文中,作者阐述了软件的四 ...

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

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

  4. [阅读]个人阅读作业week7

    People-oriented in Agile People-oriented in Agile One Leader Prepare Good ideas from users People-or ...

  5. 个人阅读作业WEEK7 (软件工程的瀑布, 大泥球, 教堂,集市,和银弹)

    一 . 关于银弹 (Silver Bullet) 银弹,被引申为解决问题的有效办法.IBM大型机之父福瑞德·布鲁克斯在1986年的论文<没有银弹>中表达了他的观点:软件工程中不存在银弹—— ...

  6. 【SE】Week7 : Silver Bullet & Cathedral and Bazaar & Big Ball of Mud & Waterfall ...

    1. Silver Bullet No Silver Bullet: Essence and Accidents of Software Engineering —— 无银弹理论,出自于美国1999年 ...

  7. 个人阅读作业Week17

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

  8. 个人阅读作业 final

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

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

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

随机推荐

  1. February 5th, 2018 Week 6th Monday

    The world is what it is; men who are nothing, who allow themselves to become nothing, have no place ...

  2. Django之ORM查询复习与cookie

    ORM查询总结: models.Book.objects.filter(**kwargs): querySet [obj1,obj2] models.Book.objects.filter(**kwa ...

  3. forever start app.js 启动node时,服务访问一次后第二次就不能访问了

    开始总是找不到原因,是因为在启动服务时,没有设置日志文件.突然想到了是不是forever安装的有问题,就重新安装forever , 这时候提示系统 no space left on device  , ...

  4. 乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

    首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁.传统的关系型数据库里边就用到了很 ...

  5. 贪心之oj.1797

    1797:金银岛 查看 提交 统计 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品, ...

  6. Cesium学习1:如何在本机的Apache tomcat9.0.8服务器中打开cesium的index.html页面

    Cesium的官方网站:https://cesiumjs.org/ 点击这个按钮来获取最新的Cesium:下载Cesium. 下载完成之后将zip文件解压到你选择的新目录,解压之后文件目录类似于下图. ...

  7. 【Codeforces 204E】Little Elephant and Strings

    Codeforces 204 E 题意:给\(n\)个串,求对于每一个串在至少\(k\)个串中出现的它的子串\(S_{l..r}\)有多少个. 思路:后缀自动机上\(dp\)... 我们首先构造出这\ ...

  8. Linux下DHCP服务安装配置

    简介 安装配置 一.简介 DHCP (Dynamic Host Configuration Protocol,动态主机管理协议)是一种基于UDP协议且仅限用于局域网的网络协议,主要用途是为局域网内部设 ...

  9. android.view.WindowManager$BadTokenException: Unable to add window

    这是在加载dialog时出现的一个异常.转载地址:http://hi.baidu.com/fbdfp/item/7dea2d0ade9121813d42e23d 扔了好久的android又开始断断续续 ...

  10. day82

    今日内容: 1.CBV源码分析: CBV:class base view(基于类的视图函数) FBV:function base view(基于方法的视图函数) 要想使用CBV首先需要导入 from ...