第二章--第二节:软件构建的过程、系统和工具(软件构造学习笔记)

第二章:软件建设的过程和工具

第二节:软件构建的过程、系统和工具


问题一:广义的软件构造过程

    :Programming(coding)(编码)-->Build(构建)-->Code review Static code analysis(代码评审)-->

Dynamic code analysis /profiling(性能分析)-->Testing(测试)-->Debugging(调试和测试)-->Refactoring(重构)

问题二:各个阶段的叙述及其相关概念

    1.Programming编码

  • Programming languages(e.g., C, C++, Java, Python)编程语言

      编程语言的工具:Integrated development environment (IDE)(集成开发环境): comprehensive facilities to programmers for software development. (such as Eclipse)

         集成开发环境包括:源代码编辑器、智能代码补全工具、代码重构工具、文件管理、库管理、软件逻辑实体可视化、图形化用户界面构造器、编译器、解释器、自动化build工具、版本控制系统、外部的第三方工具。

  • Modeling languages 建模语言(e.g.,UML)

        含义:建模语言是一种人工语言,它常用来表达信息或者知识或者系统。在一个由一致的规则定义的结构中,它的目的是可视化、推理、验证和交流系统的设计。

  • Configuration languages 配置语言

        配置文件(XML,YAML,JSON):配置文件用来配置程序的参数和初始设置

   2.Build

  • 典型的使用Build的场景:

     (1)编写用传统编译语言编写的软件

     (2)用Perl和Python等解释语言编写的软件的打包和测试

     (3)基于web的应用程序的编译和打包

     (4)执行unit测试,以及与代码的其余部分隔离,以验证软件的一部分

     (5)执行静态分析工具,以识别程序源代码中的错误。

     (6)生成PDF或HTML文档

  • Build系统的组件

        版本控制工具、原树、对象树、编译工具 (编译器、链接器、文件生成器)

        Build工具:一个在编译工具之上级别的程序。它必须对源文件和对象文件之间的程序有足够的了解,它可以编排整个构建过程。构建工具调用必要的编译工具来生成最终的构建输出。

        Build机器:编译和构建工具执行的机器

        Release Packaging and Target Machines(发布包裹和目标机器)

  • Build过程

        含义:Build工具调用每一个编译工具来完成任务,这是一端到另一端的时间序列

         示意图如下:

        第二章--第二节:软件构建的过程、系统和工具(软件构造学习笔记)

  • Build的使用方式类型

        (1)Developer (or private) build:开发人员已经从VCS中检出源代码,并在私有工作区Build软件

        (2)Release build:提供完整的软件。对测试组的包进行验证。当测试人员确信软件具有足够高的质量时,可以使用相同的包来检验客户

        (3)Sanity build:这个Build过程决定当前的源代码是否没有错误,并通过一组基本的Sanity 测试。这种类型的Build可以每天多次进行,并且趋向于完全自动化(Daily build / nightly build 每日构建、Continuous Integration (CI) 持续集成)

        (持续集成CI:示意图:)

第二章--第二节:软件构建的过程、系统和工具(软件构造学习笔记)

    3.review Static code analysis(代码评审)

        包括:结对编程、走查、正是评审会议、自动化评审

    4.Dynamic code analysis / profiling(性能分析)

  •     动态分析:要执行程序并观察现象、收集数据、分析不足
  • 对代码的运行时状态和性能进行度量,发现代码中的潜在问题

    5.Debugging and Testing(调试和测试)

  •     测试(testing):发现程序是否有错误
  •     调试(debugging):定位错误、发现错误根源

    6.Refactoring(重构)

        含义:在不改变功能的前提下优化代码