2. 上下文和背景

在这一章中,我们为程序设计语言的学习建立了一个实际的背景,并提供了一些背景信息。

2.1. 轻量级开发过程概述

一个成功的开发流程通常包括以下最基本的要素:

  • automated regression testing

    • 测试代表对软件应该如何运行的期望

    • 当表示为代码时,它们是

      • 制作起来很有趣(就像其他编码一样)

      • 便于频繁运行

    • 修复被测系统(SUT)(而不是测试本身),直到测试通过

    • 每次都要重新测试

      • 将添加一个要素

      • 代码被重构

  • refactoring

  • continuous integration

这个 process tree 示例说明了使用各种托管服务的持续集成:

这个 click counter 示例包括适用于移动应用程序开发的其他托管持续集成和交付目标。

2.2. 软件要求

在大多数情况下,我们开发软件是为了提供某种形式的价值:

这三个活动之间通常会有一些紧张。

需求的基本类别包括

  • 功能(FR)

    • 作为输入函数的输出: y = f(x)

    • 或对可观察行为的某些其他描述

      • 批次

      • 交互式/基于事件

  • 非功能性(NFR):其他属性 f ,例如

    • 可测试性

      • 最重要的非功能需求

      • 允许测试是否满足功能要求

      • 良好的体系结构通常会产生副作用(APPP,第36-38页),例如将I/O与核心功能分开

    • 性能

    • 可扩展性

      • 例如,大型数据集的性能:复杂度的渐近顺序

      • (BIG-OH)根据输入大小n

    • 可靠性

    • 可维护性

    • 静电与动态NFR

出现了几个与需求相关的常见问题和问题:

  • 需求与项目开发生命周期有何关系?

  • BUFD与MVP

  • 测试和重构与需求有何关系?

Kazman的下图涉及单元操作(重构的高级概括)和软件质量因素(非功能性需求)。

_images/KazmanQualityFactors.png

2.3. 软件设计原则和模式

软件开发社区已经确定了旨在指导设计和开发过程的各种原则,例如:

  • DRY (不要重复自己的话)

  • SoC (关注点分离)

  • SOLID

社区还发展了一批 design patterns 表示重复出现的问题的可重复使用的解决方案。我们在本课程中将依赖的一些关键设计模式包括

  • 迭代器

  • 战略

  • 命令

  • 复合材料

  • 装饰师

  • 访客

  • 抽象工厂

  • 观察者

我们将根据需要在整个课程中复习这些内容。

备注

特定于语言的设计模式称为 成语

2.4. 编程语言的历史和范例

本节中的资源涵盖计算的基本模型、语言范例和语言原则。

待处理

扩展到适当的部分

2.5. 人气指数与业绩比较

有许多编程语言流行指数和性能比较。在从这些指数中得出任何结论之前,了解它们的 方法论