第一部分:打好基础

第一章

构建包括的范围很大:

定义问题

需求分析

规划构建

软件架构(高层设计)

详细设计

编码与调试

单元测试

集成测试

集成

系统维护

保障维护

----------------

平时接触的也就是从详细设计到系统维护,

后面的测试和技术支持都是必须要打交道的,

但是定义问题和需求,基本都属于产品部门。

----------------

P7:“很多项目,程序员得到的唯一文档就是源代码本身。需求规格书和设计文档可能过时,但是源代码是最新的”

——基本如此,很多工程只有在编码之前有需求文档和设计文档,在以后的修改中,基本都不会去修改这2个文档。

----------------

构建活动主要是从详细设计到开发者测试,也就是程序员的工作,从设计到编码实现,到最后的自测试。

P7:“构建活动是唯一一项确保会完成的工作”

因为时间原因,需求可能是临时的,测试可能是不充分的,但是代码必须编码完成。

——以前有个培训,排名程序员的各项条件,我把诚实放到后面了,不是它不重要,而是没有办法去不诚实,跟卖商品不一样,有没有实现需求,靠嘴说谎马上就要露馅。

 

第二章

“隐喻的重要性。”

“使用隐喻的方法叫建模。比如分子运动理论是撞球,光的波粒二象性。”

“编程最大的调整是问题概念化,编程中很多错误是概念性的错误。”——个人认为,不应该是编程中,开始编程基本概念已经确定了,而是在前三步(定义问题,需求分析,规划构建)

“把软件的构建过程比作房屋的建设过程,移动承重墙肯定比移动隔墙成本低,软件的结构改变也根本比周边功能改动成本高。”

 

第三章

“准备工作的中心目标是减低风险。”

“建设大厦和搭建狗舍的前期准备肯定不一样。”

“测试不能测试出‘设计了一个错误的产品’,解决缺陷要在构建活动之前完成”

准备工作不周全的原因“

1、绝大多数开发人员没有需求、产品方面的经验和训练。

2、程序员无法抵御‘尽快开始编码’的欲望。

3、管理者对准备工作的重要性不理解。

--------------------

——对2深有体会,每次总是喜欢写个大致的详细设计,然后立刻投入编码,不过似乎只有在编码中才能更好的去构想细节,如果不编码那么脑袋里面就没有具体的印象,可能是没有使用伪代码编程的习惯,在后面的章节里面有伪代码编程的例子。

这也同样导致了我宁愿一个人加班完成工作,也不原因和别人合作完成一个程序。

不过在实际中,可能是我的团队人数都很少,一个人的效率要比几个人合作高的多。而且就算是分开每人维护一个模块,接口的调试都会花去很多时间。如果2个模块是自己一个人负责的,接口的调试很快就通过了。这或许也是最早设计报文格式的时候不周全导致的。

-------------------

“有时候用户一开始不完全确定自己想要什么,找出他们真正想要的,比做一个错误的东西再修正要好多了。”

没有直接面对客户,也没有直接的感觉,但是客户经常会提出永远都用不到还必须要有的功能。

 

“需求、架构、构建,缺陷越靠前,修改的成本越大。”

------------------

“我们最好立即编码,后面有很多调试要做。”和“我们没有为测试安排太多时间,因为将来不会发现太多的缺陷。”

相对而言,第二个比第一个好。

-----------------

“迭代法开发比序列开发节约成本”

迭代法就是随着项目的进展,开始检查并返工,再进行下一步的开发。

序列法是开发完成后检查并返工。

-----------------

“问题定义只是定义了问题是什么,而不涉及解决方案。”

“问题定义要用顾客的语言来书写,而不是用计算机的专业术语来叙述。”

‘我们的出口带宽总是跑满’,‘我们需要优化缓存系统,让出口带宽不要跑满’

明显前一个是问题,而后一个不像问题,倒像一个解决方案了。

----------------

“明确需求有助于用户驾驭系统功能,有助于避免程序员之间的争论”

——感觉很多程序做出来,发现需求理解的不一样,往往研发之间无关紧要的就糊过去了,最多的争论在于研发和测试对它的不同理解。

“客户经常改动需求,IBM的统计平均开发过程中,需求会有25%的改动。”

“客户往往喜欢拍脑门,用成本和进度可以提醒他们。”

——哈

 

P42针对功能需求有疑问,这么详细的外部接口,包括握手协议,通信协议到底是属于需求还是属于详细设计?感觉不应该是需求层的啊。

P46数据设计也一样的疑问,不过里面提到的,使用什么数据结构或算法要写出为什么这么用的好处,便于让程序员洞察构架师的思想。

“数据通常只有一个子程序或一个类之间访问”

“程序员会处于专业自豪感,对自己编写的类做过度工程”

——的确是事实啊,但是如果有时间的话,难道不好吗?

“架构应该描述所有主要决策的动机,而不是向来如此”

“优秀的架构很大程度上与机器和编程语言无关,但是也不能忽视环境。独立于环境的好处是避免过度架构。”

 

第四章

构架决策:

选择编程语言

编程约定(代码规范和风格、性能or稳定)

团队工作(代码管理cvs,如何分工)

质量保证(先写测试用例,评审)

工具(代码管理工具、编译工具)