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:编写测试,编写代码,测试失败,修改代码,测试通过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/26272.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache网页安全与安全优化--网页缓存、隐藏版本信息、Apache 防盗链

目录 --------网页缓存-------- 1.检查是否安装 mod_expires 模块 2.如果没有安装mod_expires 模块,重新编译安装 Apache 添加 mod_expires模块 3.配置 mod_expires 模块启用 4.检查安装情况,启动服务 5.测试缓存是否生效 --------隐藏版本信息--…

Nginx+Tomcat(多实例)实现动静分离和负载均衡四层、七层(总有些惊奇的际遇,比方说当我遇见你)

文章目录 一、Tomcat 多实例部署二、反向代理的两种类型三、NginxTomcat实现负载均衡和动静分离(七层代理)1.动静分离和负载均衡原理2.实现方法3.部署实例(1)部署Nginx负载均衡服务器(2)配置Tomcat多实例服…

web的基本漏洞--弱口令漏洞

目录 一、弱口令漏洞介绍 1.弱口令漏洞的原理 2.漏洞识别 3.攻击方式 4.漏洞的危害 5.漏洞防御 一、弱口令漏洞介绍 弱口令漏洞是指系统登录口令的设置强度不高,容易被攻击者猜到或破解。造成弱口令漏洞的主要原因是系统的运维人员、管理人员安全意识不足。 弱…

Java领域的序列化与反序列化,Java的对象如何传输,常用序列化技术

文章目录 一、引出问题:Java原生的序列化1、基于Socket传输对象案例2、什么是序列化3、Java 原生序列化4、serialVersionUID 的作用5、transient 关键字绕开 transient 机制的办法writeObject 和 readObject 原理 6、Java 序列化的一些简单总结 二、分布式架构下常见…

python基础知识(八):字典

目录 1. 字典及其创建2. 字典元素的获取3. 字典元素的删除与清空4. 字典元素的增加5. 字典元素的修改6. 字典的键、值和键值对的获取7. 字典元素的遍历8. 字典的特点9. 字典生成式 1. 字典及其创建 在Python中,字典是一系列键—值对。每个键都与一个值相关联&#…

0301依赖使用以及配置优先级-基础-springboot2.7.x系列

文章目录 1 依赖方式1.1 spring-boot-starter-parent依赖1.2 spring-boot-dependencies依赖1.3 对比 2 使用方式2.1 SpringbootApplication2.2 高度定制 3 springboot各种配置优先级顺序4 sprinboot配置文件解析顺序结语 1 依赖方式 这里项目以开源的renren和pig为例&#xff…

小学课后兴趣班选课平台的设计与实现(ASP.NET,SQLServer)

系统功能模块设计 中小学课后兴趣班选课平台包括前台功能模块和后台功能模块:前台功能模块是给会员使用的功能模块,在前台功能模块中会员可以实现在线注册,登录,查看发布的新闻资讯信息,查看教师,在线留言&…

SouapUI接口测试之创建性能测试

SouapUI也是一个能生动的体现一个系统(项目)性能状态的工具,本篇就来说说如何在SouapUI工具下创建性能测试 一、创建测试用例 由于在《SouapUI接口测试之使用Excel进行参数化》篇已经创建好了测试用例,本篇就不讲解如何创建测试…

360浏览器如何屏蔽某搜索网站的热搜

1.安装油猴(Tampermonkey插件) 下载油猴:官网油猴tampermonkey官网_油猴脚本手机版油猴插件下载 安装:360浏览器安装可以参考这边文章。 地址:http://www.xz7.com/article/86938.html 其实就是下载crx文件后&#xff…

6月6号软件资讯更新合集......

Yao 0.10.3 正式发布,拥抱 AIGC 时代! ChatGPT 解锁了新的人机交互方式,人类可以与电脑直接交流了!AIGC 时代已经到来,万千应用正在升级或重构,Yao 提供了一个开箱即用的解决方案,可以快速开发…

Spark SQL概述、数据帧与数据集

文章目录 一、准备工作1、准备数据文件2、启动Spark Shell 二、加载数据为Dataset1、读文件得数据集 三、给数据集添加元数据信息1、定义学生样例类2、导入隐式转换3、将数据集转换成学生数据集4、对学生数据集进行操作(1)显示数据集内容(2&a…

Zabbix5通过脚本自定义Nginx监控

1、客户端配置 1.1、nginx开启nginx status 使用 zabbix 监控 nginx,首先 nginx 需要配置 ngx_status,nginx.conf加入以下配置,并重启Nginx或reload location /ngx_status { stub_status on; access_log off; #allow 127.0.0.1; #deny all…

【操作系统】03.内存管理

存储器的层级结构 程序的运行 现代操作系统使用的连接方式:运行时动态链接 对某些模块的链接推迟到程序执行时才进行 现代操作系统使用的装入方式:动态重定位 程序装入内存后,逻辑地址不会立即转换成物理地址,而是推迟到指令执行…

Linux 终端安装并使用tmux管理远程会话 tmux使用教程

文章目录 1 Tmux简介1.1 会话与窗口1.2 tmux功能 2 tmux安装2.1 源码安装2.2 命令行安装 3 基本用法(命令行)3.1 创建窗口3.2 分离会话 切换会话3.3 连接会话3.4 关闭会话并杀死进行对会话进行重命名 4 Tmux 的快捷键5 窗口操作与窗格操作参考 1 Tmux简介…

【事务】@Transactional 注解参数详解

文章目录 前言一、参数详解1.1、isolation(事务隔离级别)1.2、propagation(事务传播机制)1.3、readOnly(事务读写性)1.4、noRollbackFor 和 noRollbackForClassName(遇到时不回滚)1.…

智能出行 驱动未来|2023 开放原子全球开源峰会 CARSMOS 开源智能出行生态年会即将启幕

由开放原子开源基金会主办,元遨 / CARSMOS 开源智能出行项目组协办,深信科创、Futurewei Technologies、Open Motors、北极雄芯等单位共同承办的 2023 开放原子全球开源峰会 “CARSMOS 开源智能出行生态年会” 将于 6 月 12 日在北京经开区北人亦创国际会…

华为OD机试真题 Java 实现【分糖果】【2022Q2 200分】,附详细解题思路

一、题目描述 小明从糖果盒中随意抓一把糖果,每次小明会取出一半的糖果分给同学们。 当糖果不能平均分配时,小明可以选择从糖果盒中(假设盒中糖果足够)取出一个糖果或放回一个糖果。 小明最少需要多少次(取出、放回…

基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度家禽猪检测识别系统可用于日常生活中或野外来检测与定位家禽猪目标,利用深度学习算法可实现图片、视频、摄像头等方式的家禽猪目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检…

维护嵌入式 Linux 内核——So Easy

导读Pengutronix 内核黑客 Jan Lbbe 总结了嵌入式 Linux 中正在不断增长的安全威胁,并在这次欧洲嵌入式 Linux 会议上概述了一个计划,以保持长期设备的安全和功能完整。 安全漏洞只发生在 Windows 上的好日子正在快速过去。恶意软件黑客和拒绝服务老手们…

【JavaSE】Java基础语法(三十八):并发工具类

文章目录 1. Hashtable2. ConcurrentHashMap基本使用3. ConcurrentHashMap1.7原理4. ConcurrentHashMap1.8原理5. CountDownLatch6. Semaphore 1. Hashtable Hashtable出现的原因 : 在集合类中HashMap是比较常用的集合对象,但是HashMap是线程不安全的(多线程环境下…