Soft engineering

定义

Software engineering is an engineering discipline that is concerned with all aspects of software production from early system specification to maintaining the system after it has gone into use

软件工程是一门工程学科,涉及软件生产的各个方面,从早期的系统规范到系统投入使用后的维护

Engineering discipline

  1. Theories
  2. methods
  3. tools (formal or less formal approach)

Software Engineering Solving Problems--软件工程三要素

  • Method
    • 提供一系列软件开发技术。包括完成开发过程中各方面任务的方法并用某种特殊的语言或图形来描述。
      • UML and other models
      • Design Pattern
      • Formal method
      • Agile Development
  • Tool
    • 软件工具为软件方法提供了自动的或半自动的支撑环境。将多种工具集成在一起可构成计算机辅助软件工程( Computer-Aided Software Engineering 即CASE)的软件开发支撑系统。
  • Procedure
    • 软件过程是将软件工程的方法和工具综合起来,进行软件开发活动。
      • Analysis (requirement specification)
      • Design
      • Implementation
      • Testing

需要解决的问题

软件产品庞大而复杂

发展需要分析和综合(analysis, synthesis)

  • 分析:将一个大问题分解成更小的、可以理解的部分

    • 抽象是关键
  • 综合:从较小的构建块构建(组合)软件

    • 组合具有挑战性

分析

综合

The Software Life Cycle

Software Process

software process model

a simplified description of a software process

  • include activities of software process, software products and the role of people involved
software development model
  • Waterfall approach
  • Iterative development
  • Component-based software engineering

Development process models

four phases

  • analysis (requirement specificiation)
  • design
  • implementation
  • testing
The waterfall model

a phase cannot be started until the previous phase is completed.

除非前面的阶段结束,否则不会开始新的阶段

The iterative model

software is developed in a series of steps.

ANALYSIS PHASE

  • 开发过程从分析阶段开始
  • 此阶段产生一个规范文档,该文档显示软件将做什么,而不指定如何做
  • 分析阶段可以使用两种不同的方法,这取决于实现阶段是使用过程编程语言还是面向对象语言完成的。

Procedure-oriented analysis

  • also called structured analysis or classical analysis
  • 是系统实现阶段使用过程语言时使用的分析过程。

Data flow diagrams

展示系统中数据的移动

Entity-relationship diagrams

State diagrams

Object-oriented analysis

  • 在实现使用面向对象语言时使用的分析过程。

Use case diagrams

four components:

  • system, use cases, actors and relationships

Class diagrams

DESIGN PHASE

  • 定义了系统将如何完成分析阶段定义的内容。
  • 在设计阶段,定义了系统的所有组件。

Procedure-oriented design

  • 需要设计过程和数据
  • 在面向过程的设计中,整个系统被划分为一组过程或模块。

Structure charts

在面向过程的设计中,说明模块之间关系的常用工具是结构图。

Modularity 模块化

  • 模块化意味着将一个大型项目分解为易于理解和处理的较小部分。
  • 模块化意味着将一个大任务划分为可以相互通信的小任务
  • 当系统被划分为模块时,有两个主要问题:耦合和内聚(coupling and cohesion)
coupling 耦合
  • 耦合是衡量两个模块相互绑定紧密程度的一种方法。
  • 软件系统中模块之间的耦合必须最小化
  • 当两个模块相互依赖时,它们紧密耦合--Tightly coupled
  • 松耦合模块具有一定的依赖性,但它们的互连较弱--Loosely coupled
  • 未耦合的模块完全没有互连;他们完全没有关系--Uncoupled modules

cohesion 内聚
  • 在计算机编程中,内聚性是指模块中的元素属于一起的程度。
  • 从某种意义上说,它是一个类的方法和数据与该类所服务的统一目的或概念之间关系强度的度量。
  • 具有高内聚性的模块往往更可取,因为高内聚性与软件的几个理想特性相关,包括健壮性、可靠性、可重用性和可理解性。
  • 软件系统中模块内的内聚必须最大化。

Object-oriented design

  • 在面向对象设计中,设计阶段通过详细说明类的细节继续进行。
  • 一个类由一组变量(属性)和一组方法组成。
  • 面向对象设计阶段列出了这些属性和方法的详细信息

IMPLEMENTATION PHASE

在这个阶段,程序员在面向过程的设计中为模块编写代码,或者在面向对象的设计中编写程序单元来实现类

Choice of language

Software quality

  • 高质量的软件系统是指满足用户需求、满足组织的操作标准并在为其开发的硬件上高效运行的系统。
  • 如果我们想要实现高质量的软件系统,我们必须能够定义一些质量属性。

Software quality factors

  • 操作性
  • 兼容性
  • 可移植性

TESTING PHASE

  • 测试阶段的目标是发现错误,这意味着一个好的测试策略是发现最多错误的策略。
  • 有两种类型的测试:玻璃盒(白盒)和黑盒

Glass-box testing

  • 玻璃盒测试(或白盒测试)基于了解软件的内部结构。
  • 测试的目标是确定软件的所有组件是否都达到了设计的目的。
  • 玻璃盒测试假设测试人员了解软件的一切。
    • 在这种情况下,软件就像一个玻璃盒子,盒子里的一切都是可见的。玻璃盒测试由软件工程师或专门团队完成。

Basis path testing--基本路径测试

此方法创建一组测试用例,这些测试用例至少执行软件中的每个语句一次。

Black-box testing

  • 黑盒测试的名字来源于测试软件的概念,它不知道软件内部是什么,也不知道它是如何工作的。换句话说,软件就像一个测试人员看不见的黑匣子。
  • 黑盒测试根据软件应该完成的功能(如输入和输出)测试软件的功能。

Exhaustive testing

  • 最好的黑盒测试方法是测试软件在输入域中的所有可能值
  • 然而,在复杂的软件中,输入域是如此巨大,以至于这样做通常是不切实际的。

Random testing

  • 随机测试中,选择输入域中的值子集进行测试。
  • 选择子集的方式必须确保值分布在域输入上,这一点非常重要。
  • 在这种情况下,使用随机数生成器非常有用。

Boundary-value testing

  • 遇到边界值时,经常会发生错误。
    • 例如,如果模块定义其输入之一必须大于或等于100,则测试模块的边界值100非常重要。
  • 如果模块在此边界值处失败,则模块代码中的某些条件(如x)可能会失效≥ 100写为x>100。

DOCUMENTATION

  • 为了正确使用和有效维护软件,需要文档。
  • 通常,为软件准备三套独立的文档:用户文档、系统文档和技术文档。
    • user documentation, system documentation and technical documentation.
  • 文件编制是一个持续的过程。

User documentation

  • 为了正确运行软件系统,用户需要文档,传统上称为用户指南,它显示了如何一步一步地使用软件。
  • 用户指南通常包含一个教程部分,用于指导用户了解软件的每个功能。 一个好的用户指南可以是一个非常强大的营销工具:用户文档在营销中的重要性怎么强调都不过分。
  • 用户指南应该为新手和专家用户编写,一个具有良好用户文档的软件系统肯定会增加销量。

System documentation

  • 系统文档定义了软件本身。
  • 它的编写应该使软件能够由原始开发人员以外的人进行维护和修改。
  • 系统开发的所有四个阶段都应有系统文档。

Technical documentation

  • 技术文档描述了软件系统的安装和维修。
  • 安装文档定义了软件应如何安装在每台计算机上,例如服务器和客户端。
  • 服务文档定义了在必要时应如何维护和更新系统。