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

  在《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. python 计时累积超过24小时时继续往上累加

    最近在做一个工具,要求在工具上面加上程序运行的时间,所以做了个计时器 在网上找了很多发现都是24小时制的,超过24小时后就会回0 然后自己根据24小时制修改了一个不停累加时间的 若是想超过24小时后以 ...

  2. 解决 Mac 突然没有声音

    前言 偶尔早上上班时发现Mac突然没有声音了,不明所以.虽然重启也可以,但是也不免太麻烦了.也许是人品不太好,遇到过多次这种情况,就在快要砸了的自己mac的时候,脑中灵光一闪,难道这是因为核心音频守护 ...

  3. css理论

    1css语法 2css的四种引入方式 3css选择器 4css四种属性操作 5float属性操作 6盒子模型 1 css语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. '' se ...

  4. Sublime Text的使用

    本文目录 1.下载安装Sublime Text 2.配置Python IDE环境 3.sublime anaconda载入出现错误 4.Sublime Text快捷键 1.下载安装Sublime Te ...

  5. Springmvc导出Excel(maven)

    一.导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</ar ...

  6. 在Eclipse中运行Web项目Jsp网页时提示端口被占用的解决办法:Several ports (8005, 8888, 8009) required by Tomcat v9.0 Server at localhost are already in use.

    问题: 在Eclipse中运行Web项目Jsp网页启动Tomcat时提示端口被占用: Several ports (8005, 8080, 8009) required by Tomcat v9.0 ...

  7. [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务

    一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...

  8. 理解 DocumentFragment

    理解 DocumentFragment 含义:创建文档片段,它继承了Node的所有方法,对DOM操作性能非常好.创建文档片段 如下方法: var frag = document.createDocum ...

  9. PAT A1024 Palindromic Number (25 分)——回文,大整数

    A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...

  10. AI 梯度下降

    梯度下降(gradient descent),是一种用于最优化(通常是最小化),代价函数/损失函数/目标函数/误差函数/准则,的方法. 不过,最值有时很难找到,尤其是在高维情况下,所以常常把局部最优解 ...