EBU6304 Software Engineering 知识点总结_4 analysis, design, implementation, testing

analysis

仅仅从用户的需求来看得到的消息不全面,还需要分析。用户可能认为你明白了,或者他考虑不全面,觉得一些地方是不需要的。

因此我们需要分析来 Refining requirements。

gather requirements-analyse in real world context-develop the architecture

分析包括:Textual analysis (针对文档分析),Entities and concepts(应用层面分析),Experience(过往经验分析)

conceptual model

面向对象的UML图。

边界类用于系统外部环境与内部交互进行建模的类。我的理解是不同系统之间的胶合层。能够减少系统之间的耦合。

控制类用于对一个或几个用例所特有的控制行为进行建模。控制类源于对用例场景中行为的定义。

实体类是对必须存储的信息和相关行为建模的类。

UML-分析类_Iron_Sky的博客-CSDN博客

image-20230602013913446

attributes: 属性和相应数据类型。比如姓名,字符串。

Operations:行为方法。一个operation一般只做一件事。

relationships: – Association – Inheritance.

  • associations 指两个类之间存在双向联系。比如一个老师教多个学生。有1对1,1对多等关系。
  • Inheritance 继承,父类泛化子类特化。

Activities:

  1. Identify Entity, Boundary and Control classes
  2. Identify class relationships
  3. A conceptual class diagram
  4. Identify attributes for each entity class
  5. Add constraints

design

design 是把分析模型转换成设计模型,不是代码实现!implementation才是实现。

design must have a purpose: how things works.

A software design: enough information for a development team to implement the solution.

roles

  • finish non-functional requirements
  • break down the overall task.
  • Create a ‘skeleton’ of the system 创建易于实现的骨架结构。

Fundamental Concepts

  • Abstraction:抽象类和行为的功能。
  • Encapsulation:information hiding。限制某些对象对内容的直接访问。
  • Modularity:封装成模块,提供接口给其他模块。
  • Coupling:耦合,模块间关系紧密程度。最好是loose 松耦合,这样不容易牵一发而动全身。
  • Cohesion:内聚,模块内部自己元素的相关度。最好是high的。
  • Refactoring:在代码正常完成要求的前提下修正代码减少重复。主要改进非功能属性。

面向对象设计的好处:对象就是实体;对象可以重用,继承;有的系统对象是现实世界的明显映射。

steps

conceptual class diagram

Class Relationships

operations

Describing methods

Captures implementation requirements

Produce detailed design class diagram

Implementation

分析和设计阶段基本上把创意都列出来了。实现就是比较机械地按照前面的设计去敲代码。

利用一些组件去实现。组件主要包括:excutable 可执行文件,file 源码和数据,document,table 数据库表。

implementing subsystem 实现部分功能,利用打包功能导出一个有接口的模块.

Integration Build Plan 迭代构建项目,每次构建指出构建实现的功能和构建需要的子系统、组件。

OOP:有类,对象,方法。但是关联不是双向的,而是只能单向的,比如:

1685692184183

1685692194908

一对多可以在一个类里包含另一个类的一个对象集合。

类的实现要从最小耦合到最大耦合 least coupled to most coupled。

Testing

在交付给用户前尽可能发现错误,验证每个阶段的结果。测试占据了40%。

组件层面:开发者测试。

集成测试:测试工程师,专注于质量。

  • Validation testing:验证测试,测试系统正常需求已经满足。
  • Defect testing:检测系统的缺陷。

Testing policies

我们不可能把所有可能情况都找到并且测试出来。因此只能选取有代表性的子集。

好的测试:测试人员能预料到可能哪里出错;没有多余的测试用例;应选取“最可能出错”的用例;合适的复杂程度。

1685693050733

test case:输入的规范和预期的输出。

test data:输入。

1685693215844

testing strategy

what 测试用例?when 测试?how to 测试?如何比对输出是否正确?

test cases 示例(正确的输入。错误的输入比如学号输入英文):

image-20230602160905111

Test Procedures 测试程序,通常设置为可通用的,便于之后修改重用。这个程序不一定是代码,可能以流程指导的形式(比如按下login按钮,输入账号99001122登录……)

test matrix:

image-20230602161119974

发现缺陷:比如上例,错误的密码也能登录,于是测试工程师把错误信息返回给开发者:

image-20230602161157432

Testing: Techniques

黑盒测试,black box/behavior test,即我们要测试的模块,对我们来说像一个内部结构不可见的黑盒子,我们重点关注他行为对不对,与外界的接口是否正确,访问外界数据库正不正确。

  • Partition testing:典型的黑盒测试,把数据分成等效的几个区域,比如正数负数0.
  • Scenario-based testing:从用户角度触发,分析用户可能的正确和错误操作。
  • Regression Testing:集成测试,随着添加增量也不断添加新测试,每次运行所有测试用例,确保系统更新的时候以前的功能没有受干扰。

白盒测试,white/glass/clear box test,主要关注程序内部结构按规范运行,所有内部组件都正确。

确保盒内的所有路径都被正确执行过;考虑正确和错误用例;在边界内外测试;尽量使用内部数据结构。

  • Basis Path Testing:执行所有路径的最少用例数。

1685696256126

总体测试流程:白盒测试,建立 test harness 测试装置,测试正确性,测试健壮性;然后黑盒测试。

TDD

assertEquals(20, student.getAge());//判断返回值是不是20岁

在开发代码前编写测试。 simple, short-cycled mechanism。

1685710646767

small cycle:编写测试,编写代码,测试失败,修改代码,测试通过。

猜你喜欢

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