如今,云服务通过网络提供各种服务接口,如RESTful应用程序编程接口(APIs)被广泛使用于应用程序中。在新的云服务中模型BaaS(后端即服务),应用程序委派后端云服务提供商的实现。例如,应用程序如身份验证、消息传递和存储通常由云提供商提供。

重用最好是系统地实践,根据定义明确,可重复的过程。系统重用可以改进软件生产力、质量和成本。系统重用是由软件等方法支持产品线工程及各种软件框架和平台。广泛使用的框架,如Spring提供企业可重用的基础结构,因此软件团队可以关注的应用程序特定于应用程序的业务逻辑。商业平台提供各种可重用的框架、库、组件以及支持应用程序开发的工具建立他们的生态系统。

3.6构建质量

除了发生在需求和设计活动的缺陷,在构建过程中引入的缺陷可引起严重的质量问题(如安全问题漏洞)。这不仅包括在安全功能上的缺陷,还有其他地方绕过安全性功能或创建其他安全性弱点或违反安全性的缺陷。

有许多技术可以保证代码构建时的质量。主要采用的保证构建质量的技术有以下几点:

●单元测试和集成测试(见3.4节,结构测试)
●测试优先开发(见章节软件测试KA中的6.1.2)
●使用断言和辩护编程
●调试
●检查
●技术评审,包括面向安全的审查(参见软件质量第2.3节KA)
●静态分析(见第2.2.1节软件质量KA)

所选择的特定技术取决于构建的软件和软件工程师的技能进行构建活动。程序员应该知道好的实践方式和常见的漏洞(例如,从广泛认可的列表关于常见漏洞)。自动化静态代码可以对安全弱点进行分析。

对于几种常见的编程语言并且可以在安全关键项目中使用。施工质量活动为与其他质量活动的区别在于他们的焦点。这些活动关注于工件与代码密切相关的—例如细节设计——与其他设计不同,不直接连接到的工件代码,如需求,高层次设计和规划。

3.7集成

在构建过程中,一个关键的活动是整合单独构造的程序,类、组件和子系统组成单一的系统。另外,特别软件系统可能需要集成与其他软件或硬件系统。

与构建整合相关的关注包括计划顺序组件是集成的,识别什么需要硬件,创建脚手架支持软件的临时版本,确定测试程度和质量在组件上执行的工作都是综合的,并且决定点在的临时版本软件进行测试。

程序可以通过以下方法进行集成分阶段或增量方法。1)阶段性集成,又称大爆炸整合,需要延迟的整合组件软件部件,直到全部部件计划在某个版本中发布的是完整的。2)增量集成被认为是提供的与传统的分期相比有许多优点集成(例如,更容易的错误定位,更早地改进了进度监测产品交付和改善客户关系)。在增量集成中,开发人员用小程序编写和测试程序然后在a处将它们组合起来时间。额外的测试基础设施,包括,例如,存根、驱动程序和模拟对象,通常需要启用增量集成。此外,由构建和一次集成一个单元(例如,一个类或构件),施工过程中即可向开发人员提供早期反馈客户。增量的其他优点集成包括更容易的错误定位,改进了进度监测,更加全面测试单元等等。

目前,持续集成(CI)已经具备了在实践中被广泛采用。一个软件使用CI的团队经常集成其工作,每天进行多次集成。CI是通常由构建的管道自动化并测试每个集成以检测错误和提供快速反馈。

3.8.跨平台开发及迁移

一些应用程序,比如手机应用,严重依赖具体平台(如苹果、安卓)、通常包括操作系统,
开发框架和api。支持多平台的开发人员,需要开发和构建一个应用程序,分别为每个目标平台使用相应的程序语言和软件开发工具包(SDK)。然而,多平台开发就是这样需要更多的时间和成本,并可能造成不同实现中有不同的用户体验。

跨平台开发允许开发人员开发应用程序使用通用语言,并将其输出到各种语言平台。这通常可以分两步完成移动应用的方式。一种方法是使用特定的可以编译通用语言的工具转换为特定于平台的格式。另一种是开发结合的混合应用程序使用语言开发的Web应用程序,像超文本标记语言5版(HTML5)和级联样式表(CSS)和本地容器或包装的各种操作系统。

对于不是在这样开发的应用程序,开发人员可以考虑迁移将应用程序从一个平台到另一个平台。迁移通常涉及到的翻译不同的编程语言和特定于平台的api,并且可以部分通过工具实现自动化。

4.构建技术

4.1.API设计与使用

API是导出的一组签名并提供给图书馆或图书馆的用户框架来编写他们的应用程序。除了签名,API应该始终包括关于项目的陈述效果和/或行为(即,它的语义)。

API设计应该使API易于学习和记忆,导致可读的代码,是难于误用,易于推广,难于完成,并保持向后兼容性。因为api的寿命通常较长它们的实现为广泛使用库或框架,API应该是直接稳定,方便客户应用程序开发和维护。

API的使用包括选择、学习、测试、集成并可能扩展api由库或框架提供(参见第3.5节,建筑再利用)。

4.2.面向对象运行时问题

面向对象语言支持运行时机制,包括多态性和反射。这些运行时机制增加灵活性和适应性面向对象的程序。

多态是一种语言的能力在不知情的情况下支持一般操作直到运行时具体对象是什么样的该软件将包括。因为程序不知道的类型对象提前,确切的行为是在运行时确定(称为动态的绑定)。

反射是程序的观察能力改变它的结构和行为运行时。例如,反射允许检查类、接口、字段和方法,而不知道它们的在编译时命名。它还允许在运行时实例化新对象使用参数化的方法调用类和方法名。

4.3.参数化、模板和泛型

参数化类型,也称为泛型(Ada, Eiffel)和模板(c++),启用类型或类定义而不指定所有使用的其他类型。未指定的类型在使用点作为参数提供。参数化类型提供了第三种方法(除了类继承和对象组合)在面向对象软件中组合行为。

4.4.断言、契约式设计和防御性编程

断言是可执行谓词放在一个程序中-通常是一个例行公事或的运行时检查程序。断言在高可靠性的程序。它们使程序员要更快地冲出来不匹配的接口假设,错误当代码被修改时就会出现这种情况其他问题。断言通常是在开发时编译到代码中和稍后从代码中编译出来,所以它们不要降低性能。

契约式设计是一种发展其中前置条件和每个例程都包含后置条件。当前置条件和后置条件使用时,每一个程序或类都被说成是一个与项目的其他部分签订合同。一个契约精确地指定的语义一个例程,从而帮助阐明它的行为。契约式设计被认为可以改善软件构建的质量。

防御性编程是指保护一个例程避免被无效输入破坏。处理无效输入的常用方法包括检查所有输入的值参数和决定如何处理坏的输入。断言通常用于防御编程检查输入值。

4.5.错误处理,异常处理与容错

如何处理错误影响软件的能够满足相关要求正确性,鲁棒性等非功能属性。断言有时用于检查错误。其他错误处理技术——例如返回一个中性值,替换为下一个有效数据,记录一个警告消息,返回错误代码或关闭软件——也是被使用的。

异常用于检测和处理错误或异常事件。异常的基本结构如下:例程使用throw抛出检测到的对象异常,异常处理块将在try-catch块中捕获异常。try-catch块可以处理错误的状态或返回控制调用例程。异常处理策略应该遵守共同的原则精心设计,如包括在异常消息的所有信息导致例外,避免空捕获块,了解库代码的异常抛出,也许构建一个集中的异常报告器,以及标准化程序对异常的使用。

容错是一种技术的集合,通过检测来增加软件的可靠性然后从错误中恢复,或者如果无法恢复,就控制其影响可能的。最常见的容错策略包括备份和重新尝试,使用辅助代码和投票算法,用一个替换错误的值虚假价值会产生良性影响。

4.6.可执行模型

可执行模型抽象了细节特定的编程语言和关于软件组织的决策。不同于传统的软件模型在可执行建模中构建的规范像xUML(可执行的UML)这样的语言可以可部署在各种软件中没有变化的环境。此外,可执行模型编译器(转换器)可以将可执行模型转换为实现使用一组关于的决策目标硬件和软件环境。因此,构造可执行文件模型是一种构造可执行文件的方法。

软件可执行模型是一个基础支持模型驱动的体系结构(MDA) OMG的计划。一个可执行的model是指定平台独立模型(PIM)的一种方法;PIM是一个模型解决问题的方法,不依赖在任何实现技术上。然后一个平台特定模型(PSM),它是一种类的详细信息的实现时,可通过编织生产PIM和其平台它依赖。

4.7.基于状态和表驱动构建技术

基于状态的编程,或基于自动机的编程,是一种编程使用有限状态机的技术描述程序行为。一个状态机的转换图在软件开发的所有阶段都被使用(规范,实现,调试和文档)。主要思想是用同样的方法编写计算机程序技术过程自动化的方式。基于状态的编程通常是结合面向对象编程,形成一种新的复合方法称为基于状态的、面向对象的编程。

表驱动方法是一种使用表显示的信息而不是用逻辑语句传递信息(如if和case)。当用于适当的情况下,表驱动的代码比复杂的逻辑更简单更容易修改。当使用表驱动方法时,程序员解决了两个问题:什么信息要存储在表里和如何有效地获取表格信息。

4.8.运行时配置和国际化

为了获得更大的灵活性,程序是通常构造来支持其变量的late绑定的时间。例如,运行时配置绑定变量值和程序设置时的程序运行,通常通过更新和读取即时模式下的配置文件。

国际化是一种技术活动指准备节目,通常是互动的软件,以支持多个地区的相应的活动,定位,修改程序以支持特定的本地程序语言。互动软件可能包含数十或数百个提示,状态显示、帮助消息、错误消息和等等。设计和构建过程应该容纳字符串和字符集问题,包括使用哪个字符集,使用什么类型的字符串,如何使用的情况下维护字符串代码以及如何将字符串转换为不同的语言,最小的影响处理代码和用户界面。

4.9.基于语法的输入处理

基于语法的输入处理涉及输入标记的语法分析或解析流。它创建了一个数据结构(称为解析树或语法树)表示输入数据。解析的按顺序遍历树通常给出刚解析过的表达式。接下来,解析器检查符号表填充的程序员定义的变量这棵树。在构建解析树之后,程序使用它作为输入计算过程。

4.10.并发原语

同步原语是提供的编程抽象编程语言或操作便于并发的系统同步。著名的并发性原语包括信号量、监视器和互斥锁。

信号量是受保护的变量或抽象数据类型,提供了简单的但是控件访问的有用抽象公共资源由多个进程或并发编程中的线程环境。

监视器是一种抽象数据类型给出了一组程序员定义的互斥执行的操作。监视器包含共享的声明变量和过程或函数对这些变量进行操作。监视器Construct确保在一个监视器中的时间是活动的。

互斥锁(互斥)是授予仅通过独占访问共享资源一次一个进程或线程。

4.11.中间件

中间件是一个广泛的分类提供上述服务的软件操作系统层仍低于应用程序层。中间件可以为软件提供运行时容器提供消息传递的组件,软件结构持久性和跨透明位置一个网络。中间件可以被看作是一个组件之间的连接器中间件。现代的面向消息的中间件通常提供一个企业支持面向服务的交互和通信的服务总线(ESB)在多个软件应用程序中。

4.12.分布式和基于云的软件的构建方法

分布式系统是物理上独立的、可能是异构的计算机系统的集合,这些计算机系统联网以向用户提供对系统维护的资源的访问。分布式软件的构建与传统的软件构建在并行性、通信和容错等问题上有所不同。

分布式编程通常分为几个基本的架构类别:客户端服务器、三层架构、n层架构、分布式对象、松耦合或紧耦合(参见计算基础KA中的第5.6节和软件架构KA中的2.2节)。

如今,越来越多的应用程序迁移到云。基于云的软件通常采用微服务架构和基于容器的部署。除了传统的分布式软件问题,基于云的软件开发人员还需要考虑云基础设施问题,如API网关的使用、服务注册和发现。

4.13.构建异构系统

异构系统由各种不同类型的专用计算单元组成,如数字信号处理器(DSP)、微控制器和外围处理器。这些计算单元被独立控制并彼此通信。嵌入式系统通常是异构系统。

异构系统的设计可能需要结合多种规范语言来设计不同的系统部件(硬件/软件代码设计)。关键问题包括多语言验证、协同模拟和接口。

在硬件/软件代码设计期间,软件和虚拟硬件开发通过逐步分解同时进行。硬件部分通常在现场可编程门阵列(FPGA)或专用集成电路(ASIC)中进行模拟。软件部分被翻译成低级编程语言。

4.14.性能分析和调整

代码效率-由体系结构、详细设计决策、数据结构和算法选择决定-影响执行速度和大小。性能分析使用程序执行时收集的信息来调查程序的行为,以确定程序中需要改进的可能热点。

代码调优可以提高代码级别的性能,它可以修改正确的代码,使其更高效地运行。代码调优通常只涉及影响单个类、单个例程或更常见的几行代码的小更改。有一套丰富的代码调优技术,包括用于调优逻辑表达式、循环、数据转换、表达式和例程的技术。使用低级语言是改进程序热点的另一种软件构造通用技术。

4.15.平台标准

平台标准使程序员能够开发可移植的应用程序,这些应用程序可以在兼容的环境中执行而无需更改。平台标准通常涉及兼容平台实现必须使用的标准服务和API。平台标准的典型示例有Java 2平台、企业版(J2EE);操作系统的可移植操作系统接口(POSIX)标准,它代表了主要为基于Unix的操作系统实现的一组标准;HTML5定义了开发可在不同环境(如Apple iOS、Android)上运行的web应用程序的标准。

4.16.测试优先编程

测试优先编程(也称为测试驱动开发(TDD))是一种流行的开发风格,其中测试用例是在任何代码之前编写的。与传统编程风格相比,测试优先编程通常可以更早地检测缺陷并更容易地纠正缺陷。此外,编写测试用例首先迫使程序员在编码之前考虑需求和设计,从而更快地暴露需求和设计问题。

4.17.施工反馈回路

施工活动的早期和持续反馈是敏捷开发和DevOps最重要的优势之一。敏捷开发通过开发过程中的频繁迭代为构建提供早期反馈。DevOps提供更快的操作反馈,让开发人员了解他们的代码在生产环境中的表现。这种快速反馈是通过DevOps管道中的技术和实践实现的,例如自动化构建和测试、金丝雀发布和A/B测试。

5.软件构建工具

5.1.开发环境

开发环境或集成开发环境(IDE)通过集成一组开发工具为程序员提供软件构建的综合设施。程序员对开发环境的选择会影响软件构建的效率和质量。

除了基本的代码编辑功能外,现代IDE通常还提供其他功能,如编辑器内的编译和错误检测、与源代码控制的集成、构建/测试/调试工具、程序的压缩视图或大纲视图、自动化代码转换以及对重构的支持。

如今,基于云的开发环境可以在公共或私有云服务中使用。这些环境可以提供现代IDE的所有功能,甚至更多(例如,集装箱化构建和部署),由云提供支持。

5.2.可视化编程和低代码/零代码平台

可视化编程允许用户通过图形化操作可视化程序元素来创建程序。作为一种可视化编程工具,GUI(图形用户界面)生成器使开发人员能够以WYSIWYG(所见即所得)模式创建和维护GUI。GUI生成器通常包括一个可视化编辑器,使开发人员能够设计表单和窗口,并使用拖放和参数设置功能管理小部件的布局。一些GUI构建者可以使用自动生成与可视化GUI设计相对应的源代码。由于GUI应用程序通常遵循事件驱动风格(其中事件和事件处理决定程序流),GUI生成器工具通常提供代码生成助手,以自动执行事件处理所需的最重复的任务。支持代码将小部件与触发提供应用程序逻辑的函数的传出和传入事件连接起来。一些现代IDE提供了集成的GUI生成器或GUI生成器插件。还有许多独立的GUI生成器。

可视化编程和其他快速应用程序开发工具已经发展成为低代码/零代码平台。这些平台允许开发人员通过拖放界面以最少的手工编码直观地构建完整的应用程序。

它们通常基于模型驱动设计、可视化编程和代码生成的原则。低代码开发和零代码开发的区别在于手工编码;前者需要少量手工编码,而后者几乎不需要。

5.3.单元测试工具

单元测试验证软件模块与其他可单独测试的软件元素(例如,类、例程、组件)隔离的功能。

单元测试通常是自动化的。开发人员可以使用单元测试工具和框架来扩展和创建自动化测试环境。例如,开发人员可以使用单元测试工具和框架将标准编码到测试中,以验证单元在各种数据集下的正确性。每个测试都作为一个对象实现,测试运行者运行测试。失败的测试用例将在测试执行期间自动标记并报告。

5.4.分析、性能分析和切片工具

性能分析工具通常用于支持代码调优。最常见的性能分析工具是分析工具。

执行分析工具在代码运行时监视代码,并记录每条语句的执行频率或程序在每条语句或执行路径上花费的时间。在代码运行时对其进行评测,可以深入了解程序的工作方式、热点所在以及开发人员应该将代码调优工作集中在哪里。

程序切片涉及计算一组程序语句(即程序切片),这些语句可能会在某个感兴趣的点上影响指定变量的值,这被称为切片标准。程序切片可用于定位错误源、程序理解和优化分析。

程序切片工具使用静态或动态分析方法计算各种编程语言的程序切片。

MATRIX: TOPICS VS. REFERENCE MATERIAL 话题与参考材料表



REFERENCES参考文献

[1] McConnell, S., Code Complete, 2nd edition, Redmond, WA: Microsoft Press, 2004.
[2] Sommerville, I., Software Engineering, 10th edition, Addison-Wesley, 2016.
[3] Kim, G., et al., The DevOps Handbook: How to Create World-Class Agility, Reliability & Security in Technology Organizations, 2nd edition, IT Revolution, 2021.
[4] Heitkötter, H., Hanschke, S., Majchrzak, T.A., Evaluating Cross-Platform Development Approaches for Mobile Applications, 2013, in Cordeiro, J., Krempels, K.H. (eds.), Web Information Systems and Technologies. WEBIST 2012. Lecture Notes in Business Information Processing, vol. 140, Springer, Berlin, Heidelberg.
[5] Clements, P., et al., Documenting Software Architectures: Views and Beyond, 2nd edition, Boston: Pearson Education, 2010.
[6] Gamma, E., et al., Design Patterns: Elements of Reusable Object-Oriented Software, 1st edition, Reading, MA: Addison-Wesley Professional, 1994.
[7] Mellor, S.J., and Balcer, M.J., Executable UML: A Foundation for Model-Driven Architecture, 1st edition, Boston: Addison-Wesley, 2002.
[8] Null, L., and Lobur, J., The Essentials of Computer Organization and Architecture, 2nd edition, Sudbury, MA: Jones and Bartlett Publishers, 2006.
[9] Silberschatz, A., et al., Operating System Concepts, 8th edition, Hoboken, NJ: Wiley, 2008.

软工作业-第四章-软件构件【下】相关推荐

  1. 第一次软工作业(构建之法)

    第一次软工作业(构建之法) 关于构建之法的若干个问题 1.第一章32页,原文:"有人认为,"中文编程",是解决程序员编程效率的一个秘密武器,请问它是一个"银弹& ...

  2. 软工作业 5:词频统计——增强功能

    一.基本信息 1.1 编译环境.项目名称.作者 1 #编译环境:python3.6 2 #项目名称:软工作业5-词频统计-增强功能 3 #作者:1613072055 潘博 4 # 1613072056 ...

  3. 第一次软工作业(数独)

    第一次软工作业(数独) 1.该项目的github地址: https://github.com/514DNA/sudoku 2.各个模块耗费的时间: PSP2.1 Personal Software P ...

  4. 第三次软工作业——实现最大字段和算法并进行判定条件覆盖

    第三次软工作业 实现最大子段和的算法并进行条件组合覆盖测试 (一)什么是最大子段和? 我自己的理解: 一个数组可以若干个子数组,包含自身.每一个字数组都有一个数组元素之和,求这些和之间的最大值. 最朴 ...

  5. 第一次软工作业展示——潘学

    第一次软工作业完成啦! 回首这个作业的完成过程,我是很有收获.这个作业有几个难点:1.在给定目录下读取TXT文件的内容:2.从读到的内容中分析出单词:3.统计单词的出现频率并输出. 我之前只学习过C和 ...

  6. CDISC的ADaMIG (V1.2) 中英文对照【4】_第四章(下)实施问题,标准解决方案和示例

    本AdaMIG (v1.2)来自CDISC官网以下链接: https://www.cdisc.org/standards/foundational/adam/adam-implementation-g ...

  7. 软工实践第四次作业——团队展示

    软工实践团队展示--WorldElite 本次作业链接 团队成员 031602636许舒玲(组长) 031602237吴杰婷 031602634吴志鸿 081600107傅滨 031602220雷博浩 ...

  8. 2018福大软工实践第四次作业

    如果记忆是一个罐头的话,我希望这一罐罐头不会过期----<重庆森林> 404 Note Found Team 如果记忆是一个备忘录的话,别说了,它不会过期----<404 Note ...

  9. 软工实践第四次作业-团队展示

    作业链接 队员 031602111 傅海涛 风格:喜欢做有挑战性的 擅长的技术:后端和运维 编程的兴趣:后端 希望的软工角色:后端 一句话宣言:如果想做,就一定能做 031602115 黄家雄 风格: ...

最新文章

  1. Netty整合SpringMVC,实现高效的HTTP服务请求
  2. linux安装weblogic9,linux_weblogic9_安装说明.doc
  3. 牛客题霸 [子数组最大乘积] C++题解/答案
  4. Java程序员该如何学习才能成长为一名优秀的架构师
  5. 【Python】ffmpeg模块处理视频、音频信息
  6. 在线音视频时代来临!
  7. JQuery中使用cookie记住背景颜色
  8. 移远EC20开发环境搭建
  9. Junit + Mockito 使用资料整理
  10. 浏览器能上网,qq,百度云不能上
  11. Android Kotlin仿iOS底部选择框
  12. 黑白图转RGB(Matlab)
  13. 台灯哪个牌子的比较好保护视力的?盘点五款护眼台灯排行榜
  14. 腾讯员工绩效被打2星,情绪接近崩溃!大厂“内卷”太凶残......
  15. 09.语义分割和数据集
  16. 计算机网络虚电路数据报,计算机网络——网络层-虚电路和数据报网络
  17. Eclipse为什么要先安装Tomcat
  18. C#/.NET 获取当前时间戳
  19. 应用案例分析1:华为数据湖治理中心(DGC) 软件产品介绍
  20. 无法访问工作组部分计算机,无法访问工作组计算机的解决方法

热门文章

  1. Xlinx FFT IP的注意点
  2. 提取斗鱼直播源的图文教程
  3. 使用JWPL工具操作wikipedia数据
  4. oracle数据泵导入append,Impdp数据泵导入
  5. Linux设置gedit运行python
  6. fatfs应用层实例
  7. 一个很好用的计划管理软件——飞项
  8. 罗杰斯RT/duroid® 5880高频电路板材参数
  9. 网页数据抓包模块推荐/抓包/拦截/爬虫/调试必备神器
  10. vue微信小程序uniapp添加悬浮菜单