程序员修炼之道(七)(八)

时间:2023-02-12 08:36:27

程序员修炼之道

第七章

在项目开始之前

启动太快是一个问题,但等的太久可能会更糟。

1.需求之坑

完美,不是在没有什么需要增加,而是在没有什么需要去掉时达到的。

  • 挖掘需求,而不是搜集需求,与用户一同工作,以像用户一样思考
  • 建立需求文档
  • 使用用例图
  • 规定过度,制作需求文档时一大危险就是太过具体,好的需求文档要保持抽象
  • 看远些,抽象比细节活的更长久。所以设计的时候,也要更长远的考虑
  • 特性膨胀,需求蔓延,可以参考石头汤与煮青蛙,合适的管理需求
  • 维护词汇表,维护数据字典,词汇表真的是很重要,新人很容易被你的专业术语弄懵,想想打开数据库,三四十个不认识的表,你内心有多崩溃。
  • 把话说出来,将文档写在web上

2.解开不可能解开的谜题

弗里几亚的国王系出一个没有人能解开的结,据说解开的人将会统治整个亚洲,亚历山大大帝来了,用剑劈开了这个结,只是对需求做了小小的不同的解释

  • *度,在盒子外面思考,鼓励我们找出可能不适用的要求,并忽略他们。不要在盒子外面思考,要找到盒子
  • 一定有更容易的方法!如果再处理问题的时候,发现非常困难,感觉好像是自己走错了路,你认为这个问题是不能解决的,那么退回一步,问问自己

    有更容易的方法吗?
    你是在设法解决真正的问题,还是被外围的技术问题转移了注意力?
    这件事情为什么是一个问题?
    是什么使它如此难以解决?
    它必须以这种方式完成吗?
    它真的必须完成吗?

3.等你准备好

倾听反复出现的疑虑,等你准备好再开始。当你面对一件任务时,如果你反复感觉到疑虑,或是体验到某种勉强,要注意它。

  • 是良好的判断,还是拖延?

4.规范陷阱

对于一些事情,做胜于描述

4.圆圈与箭头

不要做形式方法的奴隶

  • 形式方法的缺点

    大多数形式方法结合图和某些说明问题来捕捉需求
    形式方法似乎鼓励专门话
    我们喜欢编写有适应能力的动态系统,使用元数据让我们在运行时改变应用的特征

  • 是否使用形式方法,批判的去看待方法学,并从各种方法学中提取出精华,融合成不断进步的工作习惯

第八章

注重实效的项目

1.注重实效的团队

  • 不留破窗户,团队作为整体,不应该容忍破窗户
  • 煮青蛙,确保可以持续的监视周围环境的变化
  • 交流,开发者互相交流才能更加高效,为你的项目取一个名字
  • 不要重复你自己,团队指定某个成员担任资料管理员,负责文档和代码仓库,指定多人负责工作的各个方面
  • 正交性
  • 自动化,自动化生成代码,自动化的测试等
  • 知道何时停止绘画,抵抗不断画下去的诱惑

2.无处不在的自动化

  • 项目的编译
  • 生成代码
  • 回归测试
  • 构建自动化,以前使用过Jenkins一键部署构建,很方便。Docker也可以学一学
  • 自动化管理
  • 网站生成,使用内网来进行项目交流
  • 批准流程

3.无情的测试

早测试,常测试,自动测试
要通过全部的测试,编码才算完成

  • 测试什么?
  • 单元测试
  • 集成测试
  • 验证和校验
  • 资源耗尽,错误和恢复
  • 性能测试
  • 可用性测试
  • 怎样测试?
  • 回归测试
  • 测试数据
  • 演练GUI系统
  • 对测试进行测试
  • 彻底测试
  • 何时进行测试?任何产品代码一旦存在,就需要进行测试
  • 把网收紧,一旦测试人员找到了某个bug,这应该是测试人员最后一次发现这个bug

4.全部是写

把文档当做整个开发过程的完整组成部分加以接受

  • 代码中的注释,注释源码给你了完美的机会,让你把项目中难以描述的,容易忘记的,却又不能记载到别的地方的东西记载下来。但有些东西不应该出现在源码注释中,如:

    文件中的代码导出的函数的列表
    修订历史
    该文件使用的其他文件的列表
    文件名

  • 可执行文档

  • 技术文档撰写者
  • 打印还是编排
  • 标记语言

5.极大的期望

温和的超出用户的期望

  • 交流期望,主动控制用户对他们能从系统中得到什么应该抱有的期望
  • 额外的一英里,要让用户惊讶,而不是惊吓。给他们的东西要比他们期望的多一点