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

  在《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. SQL中的每一张表都必须设有主键吗

    问题描述: 公司的数据库表有时候会看到没有主键的,SQL中的每一张表都必须设有主键吗? 主键的作用: 1)保证实体的完整性: 2)加快数据库的操作速度: 3)在表中添加新记录时,数据库ACCESS会自 ...

  2. 遇到电脑IP地址冲突了怎么解决

    由于路由器是自动分配IP地址的,如果多个设备设置的是IP地址自动获取,就会出现IP地址冲突的情况当局域网内有相同IP,并且该机器启动了防火墙,那就没办法自动更新到下一个IP的地址了,所以此时发生了冲突 ...

  3. Java中实现多线程继承Thread类与实现Runnable接口的区别

    Java中线程的创建有两种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 在实际应用中, ...

  4. Linux 下安装Node.js

    安装 node.js 安装包 http://nodejs.org 通过 rz 上传到 CentOS 进行解压 tar -xvf node-v8.0.0-linux-x64.tar.xz 进入到 bin ...

  5. oracle中nvarchar2字符集不匹配

    oracle当多表union时遇到nvarchar2类型时报错 字符集不匹配对使用nvarchar的地方,加上 to_char( nvarchar 的变量或字段 ) 如:select to_char( ...

  6. Codeforces Round #245 (Div. 2)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/yew1eb/article/details/25609981 A Points and Segmen ...

  7. MySQL比like语句更高效写法locate position instr find_in_set

    你是否一直在寻找比MySQL的LIKE语句更高效的方法的,下面我就为你介绍几种. LIKE语句 SELECT `column` FROM `table` where `condition` like  ...

  8. WIN10安装时msxml4.0提示2502、2503解决办法

    原文地址:https://jingyan.baidu.com/album/b87fe19e54535552183568f5.html?picindex=1 在Win10中,在安装msi安装包的时候常常 ...

  9. 0 vs工程添加sdk

    配置64位 库目录:(VC++目录) 可选配置 VS SDK(如果报错缺少kernel32.lib) C:\Program Files (x86)\Microsoft SDKs\Windows\v7. ...

  10. 在 Server 2008 企业版下, 安装 IIS 7 后,勾选好 请求筛选模块了。安装完毕后,"请求筛选"却不显示!

    下载并安装 Administration Pack 到你的Windows Server 2008 上.可以通过下面的链接来下载Administration Pack. https://www.iis. ...