EBU6304 Software Engineering 知识点总结_2 process models

Software process

a set of structured activities to produce software.

includes: required specification, development(analysis, design, implementation), validation (test), evolution.

  • required specification: what should this system do? a complete desc of the problem and environment constraints. contains: system function, future extension, documentation amount, time and preformance response
  • analysis: create a conceptual model.
  • design: implementable model (architecture, components of this system).
  • implementation: implementation of interfaces.
  • testing: unit, functional, integration, system, acceptance. test and implementation should run in parallel.
  • deployment: install, run and test on real environment.
  • evolution: corrective, adaptive, perfective, preventive.

process models

a abstraction of process. activities must be modelled to be managed.

waterfall

1685629715429

易于管理 monitor,结构化很好。前面的模块必须完成才能跳到下一个,也就要求我们在最初设计的时候对需求很清楚,但是很难不遇到一些问题,很难按照正常流程正常走。

evolutionary development

1685629943510

交互性的活动,及时的反馈。核心需求能很好的满足,但是扩展性很差,结构性很差,缺少过程中的可见性。适合小型项目。

rational unified process

1685630556923

inception: 分析项目可行性。

elaboration: 分析风险,架构。

construction: iterative 迭代开发到 beta 版本为止。

transition: 交付到客户手中。

通用的完整流程,动态。但是开销大了。

Agile Software Development

现代软件开发流程:敏捷开发。

Rapid software development 快速开发:争取每一版都交一个可以交付的东西给客户。

敏捷开发:系统在一次一次迭代小增量过程中建立而成。specification, design, implementation, testing 并行。专注于代码,轻量级代码频繁发布,维护简单。

image-20230507002834816

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

敏捷开发需要程序员之外的项目经理,运营,测试……

敏捷开发重视价值,不要设计没价值的东西。实践一定要解决文分体,文档一定要有对应受众,不要过度设计系统。

敏捷开发注重 steer而不是percise prediction。由customer priorities 和 programmer estimates of feature difficulty 共同制定不断迭代的计划。

开发原则:

• Emphasis on simple design and refactoring.

• Removing duplication.

• Increasing cohesion.

• Reducing coupling

常见的敏捷开发方法:如极限开发 Extreme Programming.

  • 每天构建几次新版本
  • 每两周给用户提交一版增量
  • 需求由用户描述
  • 程序员Pair programming(两个人坐一起一起开发,效率差不多,而且对彼此代码更加了解)
  • 先开发测试单元,再写代码
  • 测试过了才算构建完成

Test Driven Development (TDD):

  • Define both an interface and a specification.
  • 先写test后写code。
  • 基于增量设计测试 Incremental。
  • 每次构建后自动化测试 Automated。
  • 客户参与测试 User involvement,测试包括程序员单元测试(unit test),客户确认测试(acceptance test,看是否符合需求)。

敏捷开发的问题:

  • 客户易失去积极性 customers interests.

  • 团队成员未必喜欢团队开发。

  • 多方利益相关,prioritising change is difficult.

  • 难维持简洁性,maintaining simplicity.

  • 频繁变化,合同设计困难 contract。

适用于多变的,客户要求明确的中小型系统。

猜你喜欢

转载自blog.csdn.net/jtwqwq/article/details/130998538