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

news2024/11/20 22:42:42

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(字符串 ) 剑指 Offer 58 - II. 左旋转字符串 ——【Leetcode每日一题】

❓剑指 Offer 58 - II. 左旋转字符串 难度:简单 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的…

Codeforces Round 875 (Div. 2)

Problem - D - Codeforces 思路&#xff1a; 注意到bibj<2*n&#xff0c;所以ai*aj<2*n&#xff0c;即我们实际只需要枚举个a的匹配即可为了不重不漏&#xff0c;我们可以枚举x从1到&#xff0c;寻找所有与x匹配且大于等于x的[a,b]对这样复杂度就是 #include <bits…

OpenCV笔记整理【人脸检测之Harr级联分类器dlib库】

1. 级联分类器&#xff1a; OpenCV提供的级联分类器有Harr、HOG、LBP这3种&#xff0c;这些分类器以XML文件保存&#xff0c;这里主要演示Harr检测人脸&#xff08;OpenCV提供的分类器不仅限于检测人脸&#xff0c;还包括下表特征检测&#xff0c;当然OpenCV还支持训练自己的级…

Vim学习笔记【Ch02】

Vim学习笔记 系列笔记链接Ch02 Buffers, Windows, TabsBuffers什么是buffer查看所有bufferbuffer之间的切换删除buffer退出所有窗口 Windows窗口的创建窗口切换快捷键其他快捷键 Tabs什么是tabtab相关命令 window和buffer结合的3D移动小结 系列笔记链接 Ch00&#xff0c;Ch01 …

python介绍——入门

前言 Python 是一种面向对象的解释型计算机程序设计语言&#xff0c;它继承了传统编译语言的强大性和通用性&#xff0c;同时也借鉴了脚本语言和解释语言的易用性。今天我就来给大家简单介绍一下python&#xff1a; 一、python的起源 1989年的圣诞节期间&#xff0c;吉多▪范…

Redis底层学习(二)—存储类型-String篇

这里写目录标题 应用场景底层结构知识普及 应用场景 服务器命令&#xff1a; 1.单值缓存 存储key,value &#xff1a;SET key value2.对象缓存 存储key,value :SET key value&#xff08;json 格式数据&#xff09; 3.分布式锁 底层结构 我们可以通过命令查看 value…

C++ 学习 ::【基础篇:14】:C++ 类的基本成员函数:析构函数的作用 及 自定义析构函数情形

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…

scratch找食物 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年5月

目录 scratch找食物 一、题目要求 1、准备工作 2、功能实现 二、案例分析

全志V3S嵌入式驱动开发(多按键输入驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;荔枝派的开发板上面&#xff0c;有4个按键本身不是通过gpio连接到soc上面的。它是通过ad的方法&#xff0c;连接到主芯片…

SpringCloud GateWay-Filter学习

3 Filter/过滤器 文章目录 3 Filter/过滤器1 GatewayFilter 使用 -- 路由过滤器2 GatewayFilter 使用 -- 自定义过滤器 路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应Spring Cloud Gateway 内置了多种路由过滤器&#xff0c;他们都由GatewayFilter的工厂类来产生 1 Gat…

华为OD机试真题B卷 Java 实现【IPv4地址转换成整数】,附详细解题思路

一、题目描述 存在一种虚拟 IPv4 地址&#xff0c;由4小节组成&#xff0c;每节的范围为0~255&#xff0c;以#号间隔&#xff0c; 虚拟 IPv4 地址可以转换为一个32位的整数&#xff0c;例如&#xff1a; 128#0#255#255&#xff0c;转换为32位整数的结果为2147549183&#xff0…

以技术实践赋能开源安全|2023开放原子全球开源峰会开源安全技术与实践分论坛即将启幕

作为数字化转型时代的重要技术和协作模式&#xff0c;开源软件在各行各业得到广泛应用&#xff0c;由此也引发了诸多与安全相关的问题。6月12日&#xff0c;2023开放原子全球开源峰会“开源安全技术与实践”分论坛将在北京经开区北人亦创国际会展中心举行。 本次分论坛由开放原…

为什么说 Go 语言字符串是不可变的?

原文链接&#xff1a; 为什么说 Go 语言字符串是不可变的&#xff1f; 最近有读者留言说&#xff0c;平时在写代码的过程中&#xff0c;是会对字符串进行修改的&#xff0c;但网上都说 Go 语言字符串是不可变的&#xff0c;这是为什么呢&#xff1f; 这个问题本身并不困难&am…

SAP-QM-物料主数据-质量管理视图字段解析

过账到质检库存&#xff1a;要勾选&#xff0c;否则收货后库存不进入质检库存HU检验&#xff1a;收货到启用HU管理的库位时产生检验批&#xff0c;例如某个成品物料是收货到C002库位&#xff0c;该库位启用了HU管理&#xff0c;那么此处要勾选。但是如果勾选了&#xff0c;却收…

30天学会vue.js?|vue.js 3 移动应用开发实战 阅读笔记

最近又在折腾vuejs, 计划用30天的时间来掌握这个前端语言。 大概用了一周时间看完这本书。 这本书需要有编程基础的同学阅读。如果从零开始学前端的话&#xff0c;个人不建议&#xff0c;书本内容跳跃性很大&#xff0c;甚至个人觉得有点凌乱。PS&#xff1a;阅读此书一定要配…

黑马Redis视频教程实战篇(五)

目录 一、达人探店 1.1、发布探店笔记 1.2、查看探店笔记 1.3、点赞功能 1.4、点赞排行榜 二、好友关注 2.1、关注和取消关注 2.2、共同关注 2.3、Feed流实现方案 2.4、推送到粉丝收件箱 2.4、实现分页查询收邮箱 一、达人探店 1.1、发布探店笔记 发布探店笔记 探…

自定义组件和样式学习

一、使用组件3步 例如&#xff1a;APP.vue中使用另外两个组件Left.vue,Right.vue &#xff08;3个页面&#xff09; 1.在APP.vue中用import *** from **** 导入Left.vue、Right.vue页面 2.在APP.vue的js中和data同级注册&#xff0c;components{Left,Rirght} 3.注册完后可在APP…

JAVA内存深度分析报告

文章目录 理论部分&#xff1a;1.Heap Memory&#xff08;堆内存&#xff09;2.Non-heap Memory&#xff08;堆外内存&#xff09;3.Direct Memory&#xff08;直接内存&#xff09; 实验部分&#xff1a;1.Platform MXBeans API 监控快照2.MetaSpace 快照:3.Native Memory 快照…

线程池的实现原理

线程池的实现原理 所谓线程池&#xff0c;通俗的理解就是有一个池子&#xff0c;里面存放着已经创建好的线程&#xff0c;当有任务提交给线程池执行时&#xff0c;池子中的某个线程会主动执行该任务。如果池子中的线程数量不够应付数量众多的任务时&#xff0c;则需要自动扩充…

华为OD机试真题B卷 Java 实现【素数之积】,附详细解题思路

一、题目描述 RSA加密算法在网络安全世界中无处不在&#xff0c;它利用了极大整数因数分解的困难度&#xff0c;数据越大&#xff0c;安全系数越高。 给定一个32位正整数&#xff0c;请对其进行因数分解&#xff0c;找出是哪两个素数的乘积。 二、输入描述 一个正整数num …