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

  • 相关阅读:
    友盟上报 IOS
    UTF8编码
    Hill加密算法
    Base64编码
    Logistic Regression 算法向量化实现及心得
    152. Maximum Product Subarray(中等, 神奇的 swap)
    216. Combination Sum III(medium, backtrack, 本类问题做的最快的一次)
    77. Combinations(medium, backtrack, 重要, 弄了1小时)
    47. Permutations II(medium, backtrack, 重要, 条件较难思考)
    3.5 find() 判断是否存在某元素
  • 原文地址:https://www.cnblogs.com/mx123422/p/8584258.html
Copyright © 2011-2022 走看看