软件构造第二章2

第2章:软件构建的过程和工具2.2软件构建的过程,系统和工具
2.2软件构建的过程,系统和工具
大纲
软件构建的一般过程:设计⇒编程/重构⇒调试⇒测试⇒构建⇒发布 - 编程/重构 - 审查和静态代码分析 - 调试(转储和日志记录)和测试 - 动态代码分析/分析狭义过程软件构建(构建):验证⇒编译⇒链接⇒测试⇒包装⇒安装⇒部署 - 构建系统:组件和流程 - 构建变体和构建语言 - 构建工具:Make,Ant,Maven,Gradle,Eclipse总结
2.2软件构建的过程,系统和工具本讲座的目标
了解软件构建的一般过程(设计⇒编程⇒调试⇒测试⇒构建⇒发布)使用Eclipse IDE作为Java构建环境和工具了解用于审查和静态分析,调试(转储,记录)的典型工具)和测试,动态分析/分析学习狭义的软件构建过程(构建:验证⇒编译⇒链接⇒测试⇒包装⇒安装⇒部署)使用构建工具之一(make,Ant,Maven,Gradle) ,Eclipse IDE)构建自己的Java项目。
软件构建
1软件构建的一般过程
2.2软件构建的过程,系统和工具软件构建的一般过程
编程(编码)
代码审查静态代码分析
调试
动态代码分析/分析测试
重构
建立
验证编译链接测试包安装部署
软件构建
(1)编程
2.2软件构建的过程,系统和工具构造语言
编程语言(例如,C,C ++,Java,Python)建模语言(例如,UML)配置语言(例如,XML)
基于语言的基于数学(正式)基于图形(视觉)
2.2软件构建的过程,系统和工具(1)编程语言
2.2软件构建的过程,系统和工具
2.2软件构建的过程,系统和工具
编程工具
集成开发环境(IDE):为程序员提供全面的软件开发工具。 IDE通常包括: - 具有智能代码完成的源代码编辑器,代码重构工具 - 文件管理工具 - 库管理工具 - 类浏览器,对象浏览器,OOP的类层次结构图 - 图形用户界面(GUI)构建器 - 编译器,解释器 - 构建自动化工具 - 版本控制系统 - …IDE应该可以通过更多外部第三方工具进行扩展。Eclipse作为IDE示例
EclipseIDE:用于Java的开源IDE,但不限于,C / C ++,PHP,Python等,作为专有的IBM产品(Smalltalk / Java的Visual age)启动 - 它包含一个带有编码工具的基础工作区,构建,运行和调试应用程序,以及用于自定义环境的可扩展插件系统。 - 插件是为系统提供功能的结构化代码和/或数据包。功能可以以代码库,平台扩展甚至文档的形式提供。 - 插件可以定义扩展点,定义明确的地方,其他插件可以添加功能。
2.2软件构建Eclipse IDE组件的过程,系统和工具
菜单栏完整的下拉菜单以及快速访问常用功能
编辑器窗格这是我们编辑源代码的地方
透视切换器我们可以在这里切换各种视角
大纲窗格这包含源文件的分层视图
Package Explorer窗格这是列出我们的项目/文件的地方
杂项窗格此窗格中可以显示各种组件 - 通常,它包含控制台和编译器问题列表
任务列表窗格这包含要完成的“任务”列表
2.2软件构建的过程,系统和工具Eclipse IDE的核心组件
运行时核心 - 平台运行时核心实现启动平台基础并动态发现和运行插件的运行时引擎。 - Aplug-inis是一个结构化组件,它使用OSGi清单(MANIFEST.MF)文件和插件清单(plugin.xml)文件向系统描述自己。该平台维护已安装插件的注册表及其提供的功能。 资源管理 - 资源管理插件定义了用于管理工具插件工件的公共资源模型。插件可以创建和修改项目,文件夹和文件,以便在磁盘上组织和存储开发工件。
2.2软件构建的过程,系统和工具Eclipse IDE的核心组件
WorkbenchUI Core - 此插件实现工作台UI并定义了许多扩展点,允许其他插件提供菜单和工具栏操作,拖放操作,对话框,向导以及自定义视图和编辑器。 - 标准窗口小部件工具包(SWT)和JFace框架Java开发工具(JDT) - 它通过提供编辑,查看,编译,调试和运行Java代码的功能来扩展平台工作台。 插件开发。信封。 (PDE) - 自动创建,操作,调试和部署插件的工具。 http://help.eclipse.org/mars/index.jsp
2.2软件构建的过程,系统和工具(2)建模语言和工具
建模语言是可用于在由一组一致规则定义的结构中表达信息或知识或系统的任何人工语言,其目的是可视化,推理,验证和传达系统的设计。 http://modeling-languages.com
2.2软件构建的过程,系统和工具UML作为建模语言和工具示例
UML:统一建模语言
第三年在“软件过程和工具”中学习UML
2.2软件构建的过程,系统和工具UML作为建模语言和工具示例
UML用例图
2.2软件构建的过程,系统和工具UML作为建模语言和工具示例
UML类图
2.2软件构建的过程,系统和工具UML作为建模语言和工具示例
UML序列图
2.2软件构建的过程,系统和工具UML作为建模语言和工具示例
UML组件图
2.2软件构建的过程,系统和工具(3)配置语言
配置文件配置程序的参数和初始设置。 - 应用程序应提供工具来创建,修改和验证其配置文件的合理性; - 某些计算机程序仅在启动时读取其配置文件。其他人定期检查配置文件是否有变化。 目的示例: - 部署环境设置 - 应用程序功能的变体 - 组件之间连接的变体配置语言示例: - 键值文本(.ini,.properties,.rc等) - XML,YAML,JSON分离稳定和不稳定的部分
2.2软件构造配置语言的过程,系统和工具
软件构建
(2)审查和静态代码分析检查和静态分析/检查
代码审查是对源代码的系统检查(同行评审)。 - 旨在发现在初始开发阶段忽略的错误,提高软件的整体质量。 - 评论以各种形式完成,例如结对编程,非正式演练和正式检查。
2.2软件构建的过程,系统和工具
正式的代码审查
正式的代码审查,例如Fagan检查,涉及一个仔细而详细的过程,包括多个参与者和多个阶段。 - 正式的代码审查是传统的审查方法,其中软件开发人员通过一系列会议和逐行审查代码,通常使用材料的打印副本。 - 正式检查非常彻底,并且已经证明可以有效地发现所审查代码中的缺陷。
2.2软件构建的过程,系统和工具轻量级代码审查
轻量级代码审查通常比正式代码检查需要更少的开销,但如果正确完成,它可以同样有效。 轻量级评论通常是作为正常开发过程的一部分进行的: - 当一个开发人员通过代码时,一个开发人员会看着作者的肩膀。 - Emailpass-around-source代码管理系统在签入后自动通过电子邮件将代码发送给审阅者。 - Pairprogramming-两位作者在同一工作站上一起开发代码,因为它在极限编程中很常见。 - 工具辅助代码审查 - 作者和审阅者使用软件工具,非正式的,如aspastebins和IRC,或专为同行代码审查而设计的工具。
2.2软件构建的过程,系统和工具
静态代码分析
静态代码分析是在没有实际执行程序的情况下执行的计算机软件分析(对执行程序执行的分析称为动态分析)。 该过程提供对代码结构的理解,并有助于确保代码符合行业标准。 自动化工具可以帮助程序员和开发人员进行静态分析。 - 例如,CheckStyle,FindBugs,PMD for Java
软件构建
(3)动态代码分析/分析
2.2软件构建的过程,系统和工具动态代码分析/分析
动态程序分析是对通过执行程序执行的软件的分析。 目标程序必须通过足够的测试输入来执行,以产生有趣的行为。 使用代码覆盖等软件测试措施有助于确保观察到程序的一组可能行为。
性能分析(“程序分析”,“软件性能分析”)是一种动态程序分析形式,用于测量程序的空间(内存)或时间复杂度,特定指令的使用或函数调用的频率和持续时间。
2.2软件构建的过程,系统和工具动态代码分析/分析
软件构建
(4)调试和测试什么是测试?
软件测试是为了向利益相关者提供有关被测产品或服务质量的信息而进行的调查。 测试技术包括执行程序或应用程序的过程,目的是查找软件错误(错误或其他缺陷),并验证软件产品是否适合使用。 软件测试涉及软件组件或系统组件的执行,以评估一个或多个感兴趣的属性。
2.2软件构建的过程,系统和工具
什么是调试?
调试是识别错误的根本原因并进行纠正的过程。 与测试形成对比,测试是最初检测错误的过程,调试是成功测试的结果。 - 在某些项目中,调试占用了总开发时间的50%。 - 对于许多程序员来说,调试是编程中最难的部分。 与测试一样,调试不是提高软件质量的一种方法,但它是诊断缺陷的一种方法。 - 必须从一开始就内置软件质量。构建高质量产品的最佳方法是仔细开发需求,设计好并使用高质量的编码实践。 - 调试是最后的手段。
2.2软件构建的过程,系统和工具Eclipse中的调试透视图
断点列表
这些按钮允许您单步执行代码
注意新的Debug透视图 - 单击Java以恢复正常
此处列出了范围中的变量及其当前值(通过右键单击可以在程序运行时更改变量的值)
当前的高级位置(类和方法)
此窗格显示我们打破的当前代码行
输出控制台,就像在正常运行模式下一样
软件构建
(5)重构
2.2软件构建的过程,系统和工具
重构
重构是一种改变软件系统的过程,它不会改变代码的外部行为,同时改善其内部结构。 - 提供短期时间/工作成本以获得长期利益,并长期投资于系统的整体质量。 重构是: - 重构(重新排列)代码… - …在一系列小的,保留语义的转换中(即代码保持工作)… - …以便使代码更易于维护并且修改重构不仅仅是任何旧的重组 - 您需要保持代码工作 - 您需要保留语义的小步骤 - 您需要进行单元测试以证明代码有效
软件构建
2狭义的软件构建过程(Build)
软件构建
(1)构建系统
2.2软件构建的过程,系统和工具典型的构建场景
用传统编译语言编写的软件汇编,如C,C ++,Java和C#。 用Perl和Python等解释语言编写的软件的打包和测试。 基于Web的应用程序的编译和打包。 - 这些包括静态HTML页面,用Java或C#编写的源代码,使用JSP(JavaServer Pages),ASP(Active Server Pages)或PHP(超文本预处理器)语法编写的混合文件,以及多种类型的配置文件。典型的BUILD场景
repementofunittest可以独立于其余代码验证软件的所有部分。 repertostaticanalysists用于识别程序源代码中的错误。此构建系统的输出是错误报告文档而不是可执行程序。 生成PDF或HTML文档。这种类型的构建系统使用各种格式的输入文件,但生成人类可读的文档作为输出。
2.2软件构建的过程,系统和工具
编译语言
编译语言,如C,C ++,Java和C#。在此模型中,源文件被编译为目标文件,然后链接到代码库或可执行程序中。 生成的文件将收集到可以安装在目标计算机上的发行包中。
2.2软件构建的过程,系统和工具
编译语言
版本控制工具源树和对象树:特定开发人员使用的源文件集和编译对象文件集。 编译工具:获取输入文件和生成输出文件的工具(例如,将源代码文件转换为目标代码和可执行程序)。编译工具的常见示例包括C或Java编译器,但它们还包括文档和单元测试生成器。 构建机器:执行编译工具的计算设备。 发布打包和目标计算机:将软件打包,分发给最终用户,然后安装在目标计算机上的方法。
2.2软件构造解释语言的过程,系统和工具
解释的源代码不会编译成目标代码,因此不需要对象树。源文件本身被收集到一个发布包中,准备安装在目标计算机上。 编译工具专注于转换源文件并将其存储在发布包中。 编译成机器代码不会在构建时执行,即使它可能在运行时发生。
2.2软件构建基于Web的应用程序的过程,系统和工具
基于Web的应用程序的构建系统是编译代码,解释代码和配置或数据文件的混合体。如图1.3所示,某些文件(如HTML文件)直接从源树复制到发布包,而其他文件(如Java源文件)则首先编译为目标代码。
2.2软件构建基于Web的应用程序的过程,系统和工具
静态HTML文件,仅包含要在Web浏览器中显示的标记数据。这些文件将直接复制到发行包中。 包含要由最终用户的Web浏览器解释的代码的JavaScript文件。这些文件也会直接复制到发行包中。 包含HTML和程序代码混合的JSP,ASP或PHP页面。这些文件由Web应用程序服务器而不是构建系统编译和执行。这些文件也会复制到发行包中,随时可以在Web服务器上安装。 将Java源文件编译为目标代码并打包为Web应用程序的一部分。构建系统在打包Java类文件之前执行此转换。 Java类在Web应用程序服务器上执行,甚至在Web浏览器中执行(使用Java小程序)。单元测试,静态分析等
软件构建
(2)构建系统的组件
2.2构建系统的软件构建组件的过程,系统和工具
版本控制工具源树:程序的源代码存储为多个磁盘文件。将文件排列成不同的称为源树。源树的结构通常反映了软件的体系结构。 对象树:一个单独的树层次结构,用于存储构建过程构造的任何目标文件或可执行程序。 编译工具:将人类可读的源文件转换为机器可读的可执行程序文件的程序。 - 编译器:源文件⇒对象文件 - 链接器:多个相关的目标文件⇒可执行程序映像 - 基于UML的代码生成器:模型⇒源代码文件 - 文档生成器:脚本⇒文档
2.2构建系统的软件构建组件的过程,系统和工具
构建工具:一种在编译工具之上运行的程序。它必须充分了解源文件和目标文件之间的关系,它可以协调整个构建过程。构建工具调用必要的编译工具来生成最终的构建输出。 构建机器:编译和构建工具执行的机器。 - 本机编译环境:软件在与构建机器相同的目标机器上执行; - 交叉编译环境:需要两台不同的计算机,目标计算机上具有不同的操作系统或CPU。
2.2软件构建的过程,系统和工具本机编译与交叉编译
2.2构建系统的软件构建组件的过程,系统和工具
发布打包和目标计算机:生成可以在用户计算机上实际安装的内容。 - 从源树和对象树中提取相关文件并将其存储在发布包中。 - 发行包应该是单个磁盘文件,应该进行压缩以减少下载所需的时间。 - 应删除任何不必要的调试信息,以免混乱软件的安装。 包装类型: - 存档文件:zip和unzip - 包管理工具:UNIX风格,如.rpm和.deb - 自定义GUI安装工具:Windows风格
软件构建
(3)构建过程和构建描述
2.2软件构建的过程,系统和工具
构建过程
构建过程:构建工具调用每个编译工具来完成工作,这是一个端到端的事件序列。
2.2软件构建的过程,系统和工具
构建描述
构建工具需要以基于文本的格式编写构建描述。 例如,在使用Make时,以规则的形式指定文件间相关性信息,这些规则存储在名为Makefile的文件中。
2.2软件构建的过程,系统和工具如何使用构建系统
开发人员(或私人)构建:开发人员已从VCS检出源代码,并在私有工作区中构建软件。生成的发布包将用于开发人员的私有开发。 发布版本:为测试组提供完整的软件包以进行验证。当测试人员确信该软件具有足够高的质量时,可以向客户提供相同的软件包。用于发布版本的源树只编译一次,源树永远不会被修改。 完整性构建:这与发布版本类似,不同之处在于软件包不是针对客户的。相反,构建过程确定当前源代码是否没有错误并通过一组基本的健全性测试。这种类型的构建可以每天发生多次,并且往往是完全自动化的。 - 每日构建/每晚构建每日构建(4)Java编译工具
2.2软件构建的过程,系统和工具
Java怎么样?
Java语言的一大卖点是“一次编写,随处运行”的理念。 也就是说,应该可以在Linux机器上编译Java程序,但无需任何修改即可在Windows或Solaris机器上运行它。 这是通过使用由Java虚拟机(JVM)解释的一组标准字节代码来实现的。 由于Java的安全功能,可以限制Java程序执行的环境,因此允许执行不受信任的程序而不必担心损坏主机。
2.2 Java中的软件构建编译工具的过程,系统和工具
JavaDevelopment Kit(JDK)GNUJava编译器EclipseJava编译器(ECJ)
2.2软件构建的过程,系统和工具
Java中的源文件
Hello.java
Main.java
2.2软件构建的过程,系统和工具
Java中的对象文件
Java类的目标文件格式称为类文件,后缀为.class。 与机器无关的字节代码,用于描述程序流程,而不是直接编译为本机机器代码。 需要Java虚拟机(JVM)来加载和解释这些字节代码,尽管JVM可能会在实际执行程序之前首先将它们转换为本机代码。
使用javaccommand将Java源文件转换为类文件。
2.2软件构建的过程,系统和工具Java的可执行程序
Java编程是动态类加载。生成可执行程序不需要构建时链接步骤。相反,当运行的程序需要时,Java类会单独加载到内存中。没有可加载的单个可执行程序映像。 Java程序只是动态库的集合,尽管一次加载一个类而不是作为更大的共享库的一部分。 Java程序需要执行两项操作: - 必须为JVM提供包含main方法的类的名称。这用作执行的起点。 - 还必须为JVM提供类路径,该路径用于标识其他类的位置。
2.2软件构建的过程,系统和工具Java的可执行程序
2.2软件构建的过程,系统和工具
Java中的库
除了指定可以找到.class文件的目录列表之外,还可以将Java类放入更大的归档文件中,称为JAR文件。 大多数Java应用程序更喜欢JAR文件格式(后缀为.jar),因为它比包和分发大量.class文件更容易操作JAR文件。 要创建JAR文件:
要使用JAR文件:Java中的库
JAR文件通常用作分发程序的方法。您不仅可以在JAR文件中打包自己的软件,还可以通过获取其他人的JAR文件并将它们添加到您自己的类路径中来合并第三方软件包。 由于动态加载系统,您可以随时替换和升级JAR文件。
软件构建
(5)子目标和构建变体
2.2软件构建的过程,系统和工具三种不同的构建方式
构建子目标:仅对构建树的一部分进行增量更改的开发人员更喜欢仅重建他们正在积极处理的树的部分。 构建不同版本的软件:定制输出以改变软件的行为。这些变体可能包括对自然语言的支持或对产品功能的不同组合的支持,例如家庭版或专业版。 构建不同的目标体系结构:要在不同的目标计算机上支持软件产品,必须为各种不同的CPU类型和操作系统编译相同的源文件集。这包括x86,MIPS和PowerPC等CPU,以及Linux,Windows和Mac OS X等操作系统。
2.2软件构建的过程,系统和工具
建立子目标
任何大型软件都可以分为多个子组件,通常采用静态或动态库的形式。每个组件仅提供程序的全部功能的一部分,并且在某种程度上独立于其他组件而开发。 为了避免在构建整个源树以创建最终可执行程序时耗费时间,最好选择限制它们构建的子组件的数量,而不是总是重建整个源树。
2.2软件构建的过程,系统和工具构建软件的不同版本
构建不同的版本 - 语言和文化,本地化 - 硬件变化 - 定价选项指定构建变体:
改变代码: - 逐行变体 - 每个变体文件 - 每个变体目录 - 每个变体构建描述文件
2.2构建不同目标体系结构的软件构建过程,系统和工具
只有在编译为本机代码的C和C ++等语言编程时,此类变体才有用。
与使用与机器无关的虚拟机的Java和C#无关。
软件构建
(6)构建工具
构建工具
对于Java: - Make - Ant - Maven - Gradle - Eclipse
软件构建
使
2.2软件构建的过程,系统和工具
Java make
使用Makeand makefile构建Java项目 - https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.ht ml - https://www.cs.swarthmore.edu/~newhall/unixhelp/javamakefiles.html - http://www.cnblogs.com/jiqingwu/archive/2012/06/13/java_makefile.html命令: - #make new生成子目录(src,bin,res) - #make build编译并在bin中生成java类 - #make clean清理编译结果 - #make rebuild清理编译结果并重新编译(clean + build) - #make run检查执行结果 - #make jar生成可执行jarfiles
软件构建
Apache Ant
2.2软件构建的过程,系统和工具
Apache Ant
Antis是Apache Software Foundation开发的构建工具。 遵循Ant是将构建系统中的每个活动封装为高级任务。 - ant compile:用于将所有Java源文件编译成类文件 - antjar:用于将类文件打包到单个Jar文件中 - antpackage:用于创建完整的软件发行包,包含版本号 - antclean:用于删除所有生成的构建树中的文件 - antjavadoc:用于使用Javadoc工具生成API文档 - ant:用于执行默认目标,该目标很可能与包目标相同Buildfile:build.xml
2.2软件构建的过程,系统和工具Ant的内置和可选任务
基本文件操作,如mkdir,复制,移动和删除使用不同格式的数组(如.tar,.gz,.zip,.jar和.rpm)创建文件存档Java的编译代码,包括用于RMI和JSP编译的特殊工具使用Javadoctool自动生成API文档直接访问版本控制工具,如CVS,Perforce和ClearCase构建生命周期功能,例如更新构建版本号,发送电子邮件消息,播放声音表示构建过程完成检查完成任务列表:http://ant.apache.org/manual/tasksoverview.html
2.2软件构建的过程,系统和工具
一个Ant的例子
详细帮助可以在http://ant.apache.org/manual/index.html找到
Apache Ant
阅读教科书“软件构建系统:原理和经验”的第7章Ant。
软件构建
Apache Maven
2.2软件构建的过程,系统和工具
Apache Maven
ApacheMaven是一个软件项目管理和理解工具。 - 基于项目对象模型(POM)的概念,Maven可以从中心信息管理项目的构建,报告和文档。 IDE集成:Eclipse IDE-M2EclipseMaven的主要目标是让开发人员在最短的时间内理解开发工作的完整状态。 - 简化构建过程 - 提供统一的构建系统 - 提供高质量的项目信息 - 提供最佳实践开发指南 - 允许透明迁移到新功能
2.2软件构建的过程,系统和工具
Apache Maven
2.2软件构建的过程,系统和工具
Apache Maven
验证 - 验证项目是否正确并且所有必要信息都可用编译 - 编译项目的源代码使用单元测试框架测试编译的源代码。这些测试不应该要求打包或部署代码包 - 获取已编译的代码并将其打包成可分发的格式,例如JAR。 验证 - 运行对集成测试结果的任何检查,以确保满足质量标准安装 - 将软件包安装到本地存储库,作为本地其他项目的依赖关系在构建环境中部署完成,复制最终软件包到远程存储库以与其他开发人员和项目共享。
https://maven.apache.org/index.html
软件构建
摇篮
2.2软件构建的过程,系统和工具
摇篮
在Eclipse IDE中使用Gradle构建系统(教程)
http://www.vogella.com/tutorials/EclipseGradle/article.html
软件构建
在Eclipse中构建Java项目
2.2软件构建的过程,系统和工具在Eclipse中构建Java项目
EclipseIDE为代码编辑,编译,版本控制,测试和任务跟踪提供了一整套开发工具。 Eclipse中的构建功能只是更广泛的工具集的一部分,编译在幕后进行,您甚至不知道它正在发生,Eclipse GUI使构建无缝地协同工作。 您不编写构建描述文件(例如makefile):Eclipse已经足够了解软件的结构。 依靠GUI来提供构建功能使构建系统变得容易,但也限制了可用功能的集合。
阅读教科书“软件构建系统:原理和经验”的第10章Eclipse。
软件构建
摘要本讲座摘要
软件构建的一般过程:设计⇒编程/重构⇒调试⇒测试⇒构建⇒发布 - 编程/重构 - 审查和静态代码分析 - 调试(转储和日志记录)和测试 - 动态代码分析/分析狭义过程 软件构建(构建):验证⇒编译⇒链接⇒测试⇒包装⇒安装⇒部署 - 构建系统:组件和流程 - 构建变体和构建语言 - 构建工具:Make,Ant,Maven,Gradle,Eclipse
软件构建
结束

猜你喜欢

转载自blog.csdn.net/t03010/article/details/93406061