• 《构建之法》阅读笔记1


    第1章 概论

    程序 = 数据结构 + 算法

    • 软件构建:一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数等,这些都是软件构建的过程。
    • 源代码管理(配置管理):有时为了某个需求写一些特殊功能,不久后要把这些功能再合并回主要版本;有些程序要配置不同的界面,运行在中文、英文或其他语言的操作系统上;有些程序还有32位版本,64位版本等,这是源代码管理的问题
    • 质量保障:有一系列的工具、流程和文档来保证程序的正确性,这些工具、流程应该达到很高的质量,才能保证开发出来的软件的质量。
    • 软件测试:为保证质量保障具体的验证过程叫做软件测试
    • 需求分析:顾客的需求,把合适的需求梳理出来,然后逐步开展后续工作,直到最后发布软件
    • 程序理解:软件团队的人员也会流动,新的成员要尽快读懂已有的程序,了解程序的设计,这叫程序理解
    • 软件维护(服务运营):软件在运行过程中会出现各种问题,需要时不时给软件打一个补丁,或者维护众多的服务,团队的新老成员要一起修复各种各样的问题,这叫软件维护,或者服务运营。
    • 软件的生命周期:维护的一系列过程叫做软件的生命周期
    • 用户体验:一个好的软件,即使功能和同类软件区别不大,但却会让人感觉到非常好用,这就是软件的用户体验
    • 软件的国际化和本地化:软件还要处理不同语言,不同地区的用户对界面和功能的不同需求

    软件 = 程序 + 软件工程

    软件企业 = 软件 + 商业模式

    程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败,软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。

    软件工程是什么?

    软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程

    软件工程包括以下领域:软件需求分析、软件设计、软件构建、软件测试和软件维护

    软件所具有的特殊性?

    复杂性、不可见性、易变性、服从性、非连续性(由软件的本质决定的)

    软件还有其他特性:

    • 有许多不同的程序设计语言、软件工具和软件开发平台
    • 存在许多不同的软件开发流程
    • 软件团队中存在许多不同的角色
    • 软件通常既可以存储在磁带上,也可以存储在CD/DVD上

    作者总结的自己做过的项目的各自特点:

    Build To Learn:开发软件,构建系统的目的是做进一步的试验,试图发现客观规律或某个试验方法的优点与缺点。这些项目经常是科研论文的基础工作。

    Build To Show:为了突出地展现某个技术的作用,开发一些演示为目的的软件,这些项目很吸引眼球,经常获得新闻报道,但是功能未必全面。

    Build To Serve:为了服务一定范围的目标用户而构建的工具等,有时以公开的SDK形式发布。

    Build To Win:以在市场上赢得用户为目标而构建的软件。这也是种种科学发现,技术突破最好的试金石。这是我在研究院之外的十余年中做的最多的项目类型,也是这本书的英文名字。

    第2章 个人技术和流程

    2.1 单元测试

    ①重要的单元测试:有效解决程序员对模块功能的误解、疏忽或不了解模块的变化之类的问题,使自己负责的模块功能定义尽量明确,模块的质量得到稳定的、量化的保证。

    ②好的单元测试的标准:

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

    ③单元测试的基础上能够建立关于这一模块的回归测试,目的是:

    (1)验证新的代码的确改正了缺陷

    (2)同时验证新的代码有没有破坏模块的现有功能,有没有Regression

    2.2 效能分析工具

    效能分析方法:抽样和代码注入

    2.3 个人开发流程

    个人开发流程PSP(Personal Software Process)

    特点:

    (1)不局限于某一种软件技术,而是着眼于软件开发的流程,这样,开发不同应用的软件工程师可以互相比较。

    (2)不依赖于考试,而主要靠工程师自己收集数据,然后分析、提高。

    (3)在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。在这种情况下,程序员的输出(程序/软件)往往质量也不高,然而这并不能全部由程序员负责。

    (4)PSP依赖于数据(工程师输入数据的时间代价、数据可能遗失或者不准确的风险、可能会出现一些数据不利于工程师本人的情况)

    (5)PSP目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度,工程师有可能很高效地开发出一个顾客不喜欢的软件。

    第3章 软件工程师的成长

    3.1 个人能力的衡量与发展

    ①软件工程包括了开发、运用、维护软件的过程中的很多技术、做法、习惯和思想。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”,软件开发流程的目的是为了提高软件开发、运营和维护的效率,以及提升用户满意度、软件的可靠性和可维护性。

    ②初级软件工程师的成长包括以下几种:

    (1)积累软件开发相关的知识,提升技术技能(如对具体技术的掌握,动手能力)。例如:对JAVA、C/C++、C#的掌握,诊断/提高效能的技术,对设备驱动程序、内核调试器的掌握,对于某一开发平台的掌握

    (2)积累问题领域的知识和经验(例如对医疗或金融行业的了解)

    (3)对通用的软件设计思想和软件工程思想的理解

    (4)提升职业技能(区别于技术技能),包括:自我管理的能力、表达交流的能力、与人合作的能力、按质按量完成任务的执行力

    (5)实际成果——最重要的评价标准

    3.2 软件工程师的职业发展

    自我评估,自我评价清单:

    软件工程师能力自我评价表

    第4章 两人合作

    4.1 代码规范

    包括代码风格规范和代码设计规范

    4.2 代码风格规范

    代码风格原则:简明、易读、无二异性

    缩进:4个空格,而不是TAB

    行宽:限定为100字符

    括号

    断行与空白的{}行

    分行

    命名:匈牙利命名法

    下划线:分隔变量名字中的作用域标注和变量语义

    大小写(Pascal形式和Camel形式)

    注释

    4.3 代码设计规范

    函数:只做一件事,并且要做好

    goto:有助于程序逻辑的清晰体现

    错误处理:参数处理、断言

    类的处理

    4.4 代码复审

    形式:自我复审、同伴复审、团队复审

    目的:找出代码错误、发现逻辑错误、发现算法错误、发现潜在的错误和回归性错误、发现可能需要改进的地方、传授经验

    ③代码复审后把记录整理出来:

    (1)更正明显的错误

    (2)记录无法很快更正的错误

    (3)把所有的错误记在自己的一个“我常犯的错误”表中,作为以后自我复审的第一步

    4.5 结对编程

    角色

    驾驶员:控制键盘输入

    领航员:起到领航、提醒的作用

    好处:(1)在开发层次,可以提供更好的设计质量和代码质量,两人合作解决问题的能力更强。

    (2)对开发人员,带来更多的信心,高质量的产出带来更高的满足感。

    (3)企业管理层次上,有效地交流,相互学习和传递经验,分享知识,取得更高的投入产出比。

     

  • 相关阅读:
    index()方法
    extend()方法
    count()方法
    copy()方法
    clear()方法
    append()方法
    IE botton 点击文字下沉
    IE滚动条
    关闭windows10自动更新
    vue文件名规范
  • 原文地址:https://www.cnblogs.com/ltw222/p/14355993.html
Copyright © 2020-2023  润新知