软件构建

开发计算机软件是一个复杂的过程,在过去很长的一段时间时间里,计算机软件的开发被开发者们规整为以下这些常见的不同活动(Activity):

  1. 定义问题(Problem Definition)
  2. 需求分析(Requirements Development)
  3. 规划构建(Construction Planning)
  4. 软件架构(Software Architecture)或者高层设计(High-level Design)
  5. 详细设计(Detailed Design)
  6. 编码调试(Coding and Debugging)
  7. 单元测试(Unit Testing)
  8. 集成测试(Integration Testing)
  9. 集成(Integration)
  10. 系统测试(System Testing)
  11. 保障维护(Corrective Maintenance)

构建有时候被简单的理解为编码(Coding)或者编程(Programming),但是编码并不算是最贴切的,因为它有一种“把已经存在的设计机械化地翻译成计算机语言”的意味,而构建并不都是这么机械化的,需要可观的创造力与判断力。下面列出了一些软件构建活动中的具体任务(Task):

  • 验证有关的基础工作都已经完成,因此构建活动可以顺利的进行下去
  • 确定如何测试所写的代码
  • 设计并编写类(Class)和子程序(Routine)
  • 创建并命名变量(Variable)和具名常量(Named Constant)
  • 选择控制结构(Control Structure),组织语句块
  • 对你的代码进行单元测试和集成测试,并排除其中的错误
  • 评审开发团队其他成员的底层设计和代码,并让他们评审你的工作
  • 润饰代码,仔细进行代码的格式化和注释
  • 将单独开发的多个软件组件集成为一体
  • 调整代码(Tuning Code),让它更快,更省资源

为什么构建活动很重要?

  • 构建活动是软件开的主要组成部分
  • 构建活动是软件开发中的核心活动
  • 把主要精力集中于构建活动,可以大大提高程序员的生产率
  • 构建活动的产中物 —— 源代码 —— 往旆是对软件的唯一精确描述
  • 构建活动是唯一一项确保会完成的工作

用隐喻更充分的理解软件开发

你走进一间安全严密、温度精确控制在 20 摄氏度的房间,并在里面发现了病毒(Virus)、特洛伊木马(Trojan horse)、蠕虫(Worm)、臭虫(Bug)、逻辑炸弹(Logic bomb)、崩溃(Crash)、论坛口水战(Flame)、双绞线转换头(Twisted sex changer),还有致使错误(Fatal Error)……

重要的研发成果常常产自类比(Analogy),通过把不太理解的东西和一些你较为理解、且十分类似的东西做比较,可以对不理解的东西产生更深刻的理解,这种使用隐喻的方法,叫作“建模(Modeling)”。建模有其不好的一面,但是总的来说,模型是有好处的,它的威力在于其生动性,让你能够把握整个概念,能隐隐地暗示各种属性(Properties)、关系(Relationships)以及需要补充查证的部分(Additional areas of inquiry)。

隐喻的价值绝不应实低估,隐喻的优点在于其可预期的效果,能被所有人理解。不必要的沟通和误解也因此大为减少,学习与教授更为快速。实际上,隐喻是对概念进行内在化(Internalizing)和抽象(Abstracting)的一种途径,它让人们在更高的层面上思考问题,从而避免低层次的错误

-- Fernando J. Corbato

人地心说到日心说,从以计算机为中心到以数据为中心

托勒密的地心说模型持续了1400年,直到1543年哥白尼提出了以太阳为中心的理论,最终帮助人们找到了更多的行星,并将月亮重新界定为地球的卫星而不是一个独立的行星,它使人们对人类在宇宙中的地位有了一个完全不同的理解。

20世纪70年代早期计算机编程方面的变化就像从日心说到地心说一样,以前的编程观点是以计算机为中心(Computer-centered),数据处理是把所有的数据看作是流经计算机(Flowing through a computer)的连续卡片流(stream of crads),而后转变为以数据为中心(Database-centered),把焦点放到的数据池(Pool of data),而计算机偶尔涉足其中。

与其说是隐喻是一张路线图,不如说它是探路明灯,它不会告诉你该去哪里寻找答案,而是告诉你该如何去寻找答案,隐喻的作用更像是启示(Heuristic),而不是算法(Algorithm)。算法是一套定义明确的指令,使你能完成某个特定的任务,算法是可预测的(Predictable)、确定性的(Deterministic)不易变化的(Not subject to chance)。

启发式方式是一种帮你寻求答案的技术,但是它给出的答案是具有偶然性的(Subject to chance)

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章