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

  在《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学习—Pycharm连接mysql服务器

    安装pymysql pip3 install pymysql 安装Mysql客户端驱动(基于Pycharm工具) 点击download,下载mysql驱动 等待驱动安装成功后,点击OK即可 创建数据库 ...

  2. 房企大裁员;争议贺建奎;破产阴影下的ofo:4星|《财经》第29期

    <财经>2018年第29期 总第546期 旬刊 高水平的财经杂志.本期重要话题有:1:房企大裁员;2:争议贺建奎;3:破产阴影下的ofo; 总体评价4星,非常好. 以下是书中一些内容的摘抄 ...

  3. January 28th, 2018 Week 05th Sunday

    I wish you all I ever wanted for you, I wish you the best. 我希望你不负我的期望,愿你一切安好. I hope I can live up t ...

  4. Git学习记录 力做全网最强入门教程

    目录 Git学习记录 力做全网最强入门教程 什么是GitHub? 什么是Git? Git的配置 Git的安装(只介绍windos操作系统下) Git的配置 至此我们的入门教程到此结束,更新中级教程要等 ...

  5. 17秋 软件工程 团队第五次作业 Alpha Scrum4

    17秋 软件工程 团队第五次作业 Alpha Scrum4 今日完成的任务 世强:部门基础信息模块数据更新.部门审核提交: 港晨:设计编写登录界面的一部分: 树民:学习python基本语法.flask ...

  6. 【学习笔记】cache/buffer

    cache 是为了弥补高速设备和低速设备的鸿沟而引入的中间层,最终起到**加快访问速度**的作用.buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 ...

  7. 文件上传之Servlet

    导包 commons-fileupload-1.3.1.jar commons-io-2.2.jar import java.io.File; import java.io.FileOutputStr ...

  8. Qt Creator中如何选择某个子项目为启动项目

    Qt Creator中的子目录项目类似于Visual Studio中的Solution(解决方案),可以用来管理多个子项目.但是在Qt Creator IDE中由不能像Visual Studio中那样 ...

  9. Centos 7 KVM安装win10

    KVM架构: KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案.KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 L ...

  10. C# 语法三 抽象类和接口

    1.抽象类 2.接口 一 抽象类 跟普通类的区别: a)用abstract标识类.抽象方法 b)抽象方法,只能声明,不能定义 c)抽象类不能实例化 二 接口 接口用interface标识,所有的成员( ...