《构建之法》1、2、16章总结及疑惑

 第一章 概论

1.内容概述
(1)软件=程序+软件工程
    源程序是建立在数据结构上的一些算法。程序还要对数据进行操作。一个复杂的软件不但要有合理的软件架构,软件设计和实现,还要有各种文件和数据来描述各个程序之间的依赖关系,编译参数,链接参数等等。这些都是软件构建的过程。
软件开发活动(构建管理,源代码管理,软件设计,软件测试,项目管理)。
    一个推理:软件=程序+软件工程
    扩展推理:软件企业=软件+商业模式

(2)软件工程是什么
    涵盖以下领域:软件需求分析,软件设计,软件构建,软件测试和软件维护。
    软件的特殊性:①复杂性 ②不可见性 ③易变性 ④服从性 ⑤非连续性
    该工程的目标是:

    ①研发出符合用户需求的软件
    ②通过一定的软件流程,在预计的时间内发布”足够好“的软件
    ③能证明所开发的软件是可以维护和继续发展的


2.问题提出
(1)程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量。——《构建之法》P4

    在我仔细阅读了这段文字及其上下文之后,我对软件质量的决定因素产生了疑惑。
    算法和数据结构这种基本功的掌握归结于程序员的编程水平,“编程水平决定软件的质量”;软件工程涵盖需求费,软件设计、构建、测试及维护。软件构建过程则是彰显程序员编程水平的一刻,程序做得好,此后软件运行过程的bug就会减少,同时减少了调试和再开发软件的时间;在这个时期程序员的编程水平仍旧发挥了巨大的作用,较后期对产品的质量有更大的影响。
(2)软件的行为和用户的期望值不一样,就叫bug。是否是BUG,取决于用户和开发者的不同角度。——《构建之法》P16

    程序员好与不好的评价只有模糊的定义,在我所查资料中“调试Debug能力是评价一个程序员的标准之一”。然而在阅读完这段话之后,我思考自己写的程序里没有BUG是不是也可以作为一个程序员是否好的标准。如果你实现了用户不需要的功能算不算BUG ?这对于程序员来说到底是一件好事还是坏事?

 

第二章 个人技术和流程

1.内容概述
(1)单元测试
    单元测试是一个很有效的解决方案。
    创建单元测试的主要步骤是:
    ①设置数据
    ②使用被测试类型的功能
    ③比较实际结果和预期的结果

(2)好的单元测试的标准
    单元测试应该在最基本的功能/参数上验证程序的正确性;
    单元测试必须由最熟悉代码的人来写;
    单元测试过后,机器状态保持不变;
    单元测试要快;
    单元测试应该产生可重复、一致的结果;
    独立性——单元测试的运行/通过/失败不依赖与别的测试,可以人为构造数据,以保持单元测试的独立性;
    单元测试应该覆盖所有代码路径;
    单元测试应该集成到自动测试的框架中;
    单元测试必须和产品代码一起保存和维护。

(3)回归测试
    针对一个BUG FIX 要做REGRESSION TEST,目的是:
    ①验证新的代码的确改正了缺陷
    ②同时要验证新的代码有没有破坏模块的现有功能,有没有REGRESSION
(4)效能分析工具
    ①抽样 ②代码注入

 

2.问题提出
    单元测试应覆盖所测单元的所有代码路径,包括错误处理路径。为了保证代码覆盖率,单元测试必须测试公开的和私有的函数/方法。——《构建之法》P27

    单元测试对提高编程的质量有着重要的作用,然而编写单元测试也需要花费大量时间和精力以及后期的更新;好的单元测试的标准包含应该覆盖所有的代码路径这一点。然而现实中真的所有代码都需要单元测试覆盖吗?
    软件是需要单元测试,而且单元测试要跟软件更新同步。但是单元测试不能解决所有的问题,不能期望它会发现所有的缺陷。而且书中也说到100%的代码覆盖率不等同于100%的正确性。“与其追求代码覆盖率,不如将重点关注在确保写出有意义的测试”和“测试越多,额外测试的价值越少”这是另一篇文章的基本观点,我认为这样的观点是正确的。

 

第十六章 IT行业的创新

1.内容概述
(1)创新的迷思
    灵光一闪现,伟大的创新就紧随其后;大家都喜欢创新;好的想法会赢;创新者都是一马当先;要成为领域的专家,才能创新;技术的创新是关键;成功的团队更能创新。
(2)创新的时机:技术成熟曲线
(3)新的招数
    SWOT分析框架;动量和加速度;技术产品的发展周期;效能过剩和竞争的各个局阶段;影响产品竞争的各个因素;四个象限划分产品;打出组合拳和套路。
(4)创新和作坊
    ①自己手工劳动,做出产品
    ②人不多,师傅带徒弟,或家传手艺
    ③只做某种行业,不太改行,商业技巧比较缺乏
    ④不太做广告,主要靠扣扣相传,容易被技术进步淘汰

 

2.问题提出
    迷思之六:技术的创新是关键——《构建之法》P48

    整个16.1.6都围绕在技术创新这一点,当然,此后还提出了商业模式的创新、用户体验的创新等等。然而始终没有我所认为的“思维的创新”的重要性。在我看来,一个软件企业的成功,思维的创新才是关键。“没有先进的想法,何来先进的技术?”在人才济济的中国,技术的创新并不是特别的困难,想法的创新才是困难的。如果一个企业只有技术的创新而没有想法的创新,在同一个领域中其他企业也同时在进行着技术的创新,想要自己的软件成功则是一件极其困难的事;若是有了思想的创新,当然这种创新是软件需要的,那么一旦这种想法所创造的东西吸引了大片的用户,这个企业毫无疑问将在这一领域站稳脚跟。
    如果一个企业的软件没有自己独特的优势,是不可能得到巨大的成功的——技术和想法都是其中之一,所以究竟是哪个才是关键?

原文地址:https://www.cnblogs.com/mx123422/p/8584258.html