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

  在《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. NFS服务搭建与配置

    启动NFS SERVER之前,首先要启动RPC服务(CentOS5.8下为portmap服务,CentOS6.6下为rpcbind服务,下同),否则NFS SERVER就无法向RPC服务注册了.另外, ...

  2. Beta冲刺(4/5)(麻瓜制造者)

    今日已完成 邓弘立:完成了商品管理(下架)和搜索功能 符天愉:完成了后台管理员界面的登录和其他视图的载入 江郑:昨天来决定跨域执行请求,后台参考一些意见以后,操作起来没有那么容易实现,和队友交流以后本 ...

  3. node爬虫扒小说

    Step 1:  万年不变的初始化项目,安装依赖 cnpm i express cheerio superagent superagent-charset async -S express 就不用多说 ...

  4. 帝国CMS 列表模板页面 list.var 内容截取

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code list.var 中没有好的办法,只能用程序代码来实现.将整个HTML以一个变量来拼接.如下: ...

  5. java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer

    启动eclipse报错:java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer 解决办法: 删除以下文件.metad ...

  6. 搭建LNMP环境(CentOS 6)

    本文档介绍如何使用一台普通配置的云服务器ECS实例搭建LNMP平台的web环境. Linux:自由和开放源码的类UNIX操作系统. Nginx:轻量级网页服务器.反向代理服务器. MySQL:关系型数 ...

  7. MP实战系列(七)之集成springboot

    springboot是现在比较流行的微服使用的框架,springboot本质上就是将spring+springmvc+mybatis零配置化,基本上springboot的默认配置符合我们的开发.当然有 ...

  8. Python脱产8期 Day03 2019/4/15

    一 变量的命名规范 1.只能由 字母, 数字,  _, 组成. 2. 不能以数字开头 3.避免与系统关键字重名:重名不会报错,但系统的功能就被自定义的功能屏蔽掉了(严重不建议这样来做) 4.以_开头的 ...

  9. Quartz的JobDetail没有触发器指向时会被删除的问题

    之前项目里使用的是老版本的Quartz,才1.6.5.发现一个问题,如果我触发器配置的时间已经过了,想去手动触发一个任务,就会报找不到这个任务的异常,通过debug可以发现,Scheduler里添加j ...

  10. 更换apt-get官方源为163源

    更换apt-get官方源为163源 1.# mv /etc/apt/sources.list /etc/apt/sources.list.bak 2.覆盖原来源文件 tee /etc/apt/sour ...