软件工程(四)——结构化设计、模块独立性、面向对象设计、软件测试与维护

news2024/12/26 13:35:01

目录

一、界面设计

二、结构化设计

1.概要设计

2模块独立性

三、面向对象设计

1.面向对象设计的五大基本原则(SOLID)和其他5个原则

2.设计模式

三、软件测试与维护

1.白盒测试和黑盒测试

2.测试的阶段

3.软件维护阶段

四、系统演化策略


一、界面设计

        人机界面设计,就是设计一个软件的界面,供用户与系统交互。 人机界面设计有三个黄金法则

  • 置于用户控制之下:允许用户交互中断和撤销;不强迫用户进入不必要、不希望的动作方式来定义交互方式。例如:你点一个网站,同时跳出来广告页面可能会让你特别恼火 等
  • 减少用户记忆负担:定义直觉性的捷径,界面视觉布局应该基于真实世界的隐喻。
  • 保持界面的一致性:同一个类型的系统,界面布局风格应该保持一致,不要每个模块的界面五花八门。

二、结构化设计

1.概要设计

概要设计主要做模块的划分;详细设计负责对模块内部算法的设计

概要设计主要做模块的划分,模块接口设计。对应的测试阶段是集成测试。概要设计负责设计软件系统总体架构;将系统划分成模块,确定模块功能与接口、调用关系等;数据结构设计(详细设计也有涉及)、数据库设计;编写概要设计文档、数据库设计说明书、用户手册、修订测试计划等。

结构化系统设计基本原理: 抽象;模块化;自顶向下、逐步求精;信息隐蔽、模块独立

围绕这基本原理结构化系统设计有几个基本原则

分解—协调原则 ; 自顶向下原则 ; 信息隐蔽、抽象原则 ; 一致性原则 ; 明确性原则;高内聚低耦合;模块扇入系数和扇出系数要合理;模块规模适当

2模块独立性

三、面向对象设计

1.面向对象设计的五大基本原则(SOLID)和其他5个原则

  1. 单一职责原则(Single responsibility principle),指类的功能应该是尽量单一的;
  2. 开放封闭原则(Open and close principle),指类的功能扩展是开放的,修改内容应该是封闭的
  3. 里氏替换原则(Liskov substitution principle),即一个模块中如果使用了一个基类,那么这个基类应该可以被子类替换,同时不改变程序的正确性;
  4. 接口分离原则(interface segregation principle),即接口要尽量独立,不要把很多接口包含在一个模块中,否则,当用户需要某个接口时,会把用户不需要的接口导入进来。
  5. 依赖倒置原则(dependency inversion principle), 高级别模块不应依赖低级别模块,但都依赖于抽象;或者说应该针对接口编程,而不是针对实现编程。
  6. 重用发布等价原则(Release Reuse Equivalency Principle):重用的粒度就是发布的粒度
  7. 共同封闭原则(Common Closure Principle):包中的所有类对于同一类性质的变化是共同封闭的。一个变化对一个包产生影响,那么包中的类都会产生影响,而其他包的不造成影响
  8. 共同重用原则(Common  Reuse  Principle):一个包中所有的类都是共同重用的。如果重用了包中的一个类,那么就要重用包中所有的类。
  9. 稳定依赖原则:(Stable Dependencies Principle):朝着稳定的方向进行依赖
  10. 稳定抽象原则(Stable Abstractions Principle):包的抽象程度应该和其稳定程度一致。

2.设计模式

        模式一种解决问题的解决方案,也是一种解决问题套路。模式有多个层级

  1. 架构模式属于高层的,例如C/S结构就是架构模式,架构模式反应了开发软件系统过程中所作的基本设计决策
  2. 设计模式属于中层,主要关注软件系统的设计,设计模式与具体的实现语言无关
  3. 惯用法是最低层的模式,关注软件的设计与实现,实现时通过某种特定的程序设计语言来描述构件与构件之间的关系。每种编程语言都有自己特定的模式,即语言的惯用法。例如引用计数就是C++语言的一种惯用法

         设计模式分为创建型模式,结构型模式,行为型模式三大种。创建型模式目的是为了解决对象创建的问题,结构型模式为了组建更大的结构,而行为型模式为了解决交互和职责分配的问题。设计模式具体内容如下

设计模式的理解:对23个设计模式的总结_superSmart_Dong的博客-CSDN博客_充分理解23设计模式

三、软件测试与维护

软件测试应该要尽早,不断地测试;最要交叉检查代码,尽量避免测试自己的程序,因为测试自己的程序容易惯性思维,从而容易忽略错误;程序不仅要有正确的数据进行测试,“不合理”的数据也要进行测试,至少不能导致系统崩溃;修改程序后要进行影响性分析要做回归测试;发现的错误越多那么隐藏的错误数量越多。

测试分为动态测试和静态测试。静态测试就是不依赖于计算机纯手工检查代码,比如桌前检查,代码审查,代码走查。动态测试就是依赖于计算机运行的测试,比如黑盒测试、白盒测试,黑白结合的灰盒测试。

1.白盒测试和黑盒测试

黑盒测试不看程序结构,只看输入和输出,从而设计测试用例。而白盒测试需要观察程序结构设计测试用例。

对于黑盒测试,等价类划分的主要思想就是根据相同输出结果对应的输入归成一个等价类,不同等价类至少要一个测试用例。而边界值分析的思想是,程序中条件判断的分界线处最容易出错,比如大于等于容易在开发中写成大于,因此需要在条件判断的区间两端处设计测试用例。而错误推测根据开发经验测试容易出错的环节。因果图,列出输入项和输出项之间的逻辑关系和约束 ,把输入项列表列成二进制分别取值进行测试,统计实际结果与预期输出的差异。

对于白盒测试,就是画出简易程序流程图,根据运行流程设计测试用例,从而判断出实际结果和预期结果的差异。其中语句覆盖是最松的测试,路径覆盖是最严的。

2.测试的阶段

  • 单元测试:主要是模块的功能测试、性能等
  • 集成实施,主要测试模块间的接口
  • 确认测试:由用户参与进来,验证软件与需求的一致性。对于α 和β测试,其中 α测试是在开发环境,把软件交给用户,运行软件随意操作。而β测试,就是将产品对外发布一个测试版本,供用户运行软件且可以随意操作。
  • 系统测试:模拟在真实环境下,验证完整的软件配置项能否和系统正确连接。通常在与生产环境高度一致的测试环境进行运行测试。
  • 回归测试:程序变更后,可能会误改动到不需要变更的用例,因此需要对老用例的正确性进行重新测试。

 

         在集成测试中,分为一次性组装和增量组装。一次性组装测试工作量小,而增量式组装测试更为细致。增量式组装有自顶向下和自底下上的测试方案。当自顶向下测试时,测试高层模块,就要先写下层的被调用的测试模块来配合高层模块的测试,配合高层测试的下层demo就是桩模块。当自底下上,或两者混合测试时,上层模块demo来调用下层模块进行测试,这个上层模块就称为驱动模块。

        系统测试的测试主要内容就是非功能测试。比如说请求响应时间,高数据量测试,高并发测试,系统重启后软件是否能够恢复运行等。负载测试主要看重高并发时运行效果,强度测试主要看重系统可用资源较低时软件能否正常运行,容量测试主要看系统能够正常运行的最高并发量、最高请求量是多少。

3.软件维护阶段

        维护阶段发生在软件上线发布之后,是软件生命周期中最长的一个阶段。上线后的程序变更通常就是维护。维护大致分为四种:

  • 正确性维护:又称改正性维护。指修正开发时造成的漏洞,但是未在上线之前发现的软件BUG。
  • 适应性维护:指在软件运行环境变化,软件为了适应新的运行环境所做的变更。比如数据库,操作系统升级,导致软件被动地修改。
  • 完善性维护:指在增加功能,提升性能的维护操作。
  • 预防性维护:目的是为了改进应用软件的可靠性和可维护性,指适应未来可能产生的风险进行的维护操作。

四、系统演化策略

        一个系统要演化成一个新系统。通常有4中策略,淘汰、集成、重构(继承)、改造。对于业务价值低,同时技术水平也很低的模块通常采用将模块抛弃的策略。对于有业务价值的模块,但是技术水平低,比如代码乱七八糟,通常采用重构的策略。对于有技术水平的模块,但是业务价值低的,通常认为是因为信息孤岛的现象造成的,也就是系统间没有互联互通,因此要将此类模块集成。对于高技术水平,高业务价值的模块,只要小修小改就可以。

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

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

相关文章

50条必背JAVA知识点(一)

1.编写:编写的Java代码保存在以“.java”结尾的源文件中。 2.编译:使用javac.exe命令编译java源文件,生成字节码文件。格式:javac 源文件名.java 3.运行:使用java.exe命令解释运行字节码文件。格式:java …

深入浅出PyTorch-PyTorch的主要组成模块

目录1.基本配置2.数据读入3.模型构建3.1神经网络的构造3.2神经网络中常见的层常见网络层的构造常见的网络层3.3模型示例卷积神经网络(LeNet)深度卷积神经网络(AlexNet)4.模型初始化5.损失函数6.训练和评估深度学习和机器学习在流程…

python小游戏——塔防小游戏代码开源

♥️作者:小刘在这里 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿所有的美好&#…

TCP/IP网络编程——优雅的断开套接字的连接

完整版文章请参考: TCP/IP网络编程完整版文章 文章目录第 7 章 优雅的断开套接字的连接7.1 基于 TCP 的半关闭7.1.1 单方面断开连接带来的问题7.1.2 套接字和流(Stream)7.1.3 针对优雅断开的 shutdown 函数7.1.4 为何要半关闭7.1.5 基于半关闭…

AST入门与反混淆初体验

文章目录1.什么是AST?2. AST反混淆的目的3. babel库安装4. 直观的理解AST5.如何用AST解混淆?思路是什么?6. babel库的学习7. AST反混淆初体验-常量折叠1.什么是AST? ​ 在计算机科学中,抽象语法树(Abstrac…

【服务器数据恢复】raid5中3块磁盘先后掉线的数据恢复案例

服务器数据恢复环境&故障: 某单位同友存储设备,该存储有大于5台的虚拟机,其中有3台linux系统虚拟机存储重要数据。存储设备中组建的raid5由于未知原因崩溃导致存储无法启动。 存储结构: 服务器数据恢复过程: 1、对…

C语言进阶——字符函数和字符串函数(上)

目录 一、前言 二、正文 1.求字符串长度 ♥strlen 2.长度不受限制的字符串函数 ♥strcpy ♥strcat ♥strcmp 三、结语 一、前言 一日不见,如隔三秋;几日不见,甚是想念。猜想小伙伴们在平常进行有关字符的练习时遇到有关字符的操作却无从下手…

GEC6818 移植 rtl8723bu wifi驱动

文章目录1. 配置内核2、RTL8723BU 模块驱动编译2.1 下载解压2.2 配置编译3. openssl 移植3.1 下载解压3.2 配置3.3 编译安装4. libnl 移植4.1 下载解压4.2 进入源码目录并配置4.3 编译安装5. wpa_supplicant 移植5.1 解压源码5.2 配置5.3 make编译6. 启动wifi网卡6.1 配置WiFi连…

Python调用Go语言编译的动态链接库(CGO)【待续】

CGO C 语言作为一个通用语言,很多库会选择提供一个 C 兼容的 API,然后用其他不同的编程语言实现。Go 语言通过自带的一个叫 CGO 的工具来支持 C 语言函数调用,同时我们可以用 Go 语言导出 C 动态库接口给其它语言使用。 hello world程序 p…

【定时同步系列11】各种开环定时同步算法与MCRB性能对比的MATLAB仿真

重要声明:为防止爬虫和盗版贩卖,文章中的核心代码和数据集可凭【CSDN订阅截图或公z号付费截图】私信免费领取,一律不认其他渠道付费截图! 引言 开环定时同步包括内插控制、定时误差估计等环节,其中内插控制在之前的博客里有详细的描述,请翻阅之前的博客! 【定时同步系…

Python编程技巧分享:6 个必知必会高效 Python

编写更好的Python 代码需要遵循Python 社区制定的最佳实践和指南。遵守这些标准可以使您的代码更具可读性、可维护性和效率。 本文将展示一些技巧,帮助您编写更好的 Python 代码 遵循 PEP 8 风格指南 PEP 8 是 Python 代码的官方风格指南。它提供了一组用于格式化…

Maven parent多项目打包找不到reversion变量问题

项目结构:packagetest:顶级父级c1:子项目(web项目)c2:子项目(jar包)c1依赖c2的jar包。在父级maven中deploy成功,package也成功,私服上有都有包了。但是在c1上package的时候&#xff…

二十、操纵管道

本章将讨论如何在应用程序中使用多种方式操作管道。本章的部分内容都是很底层的,所以在开始阅读之前,请确保你需要一些编程知识,并对GStreamer有很好的理解。 这里将讨论的主题包括如何从应用程序向管道中插入数据,如何从管道中读…

电商项目之Mailgun邮件退信率升高

文章目录1 项目背景2 前言3 采取的措施4 排查的思路5 原因6 技术实现方案1 项目背景 运维人员进行日常巡检发现Mailgun邮件代发渠道的退信率不寻常,在某个时间段会飙高。这会有2个影响: (1)针对运维的角度,Mailgun官方…

3.SpringBoot配置

一、IOC的好处在对象依赖关系复杂的对象中,只需要考虑“我自己”依赖什么,减少程序员思考负担方便的进行依赖概念(接口、抽象类)的实现类对象的替换。二、什么是SpringBoot?1.SprigBoot是Spring的一个子工程,目标就是…

JS逆向技巧汇总---给普通爬虫学习者的吐血建议

爬虫实战的JS逆向,就像是做侦探。很多时候,我们要尝试不同方式和手段寻找线索,不能放过蛛丝马迹,通过仔细观察和比较,然后顺藤摸瓜,找到加密入口。再调试JS代码的时候,需要保持清晰的目标和方向…

专科逆袭入职腾讯,真是小母牛坐飞机,牛逼上天了..

在踏入腾讯,办理入职手续的那一天,作为一个男子汉,确实是落泪了。特地分享一波我的真实经历,共勉。 先说一下自己的个人情况,18 届应届生,通过校招进入到了国内某二线城市传统互联网公司,然后一…

优化算法:曲径步长通优处,优化半天白优化

本文来自公众号“AI大道理” 训练一个神经网络,我们想要得到误差最小,就是要我们的损失函数最小。 如何得到最小值呢? 这就是优化算法。 梯度下降法是众多优化中的一种。 1、损失函数 2、GD(梯度下降法) 3、BGD&a…

Java集合基础

文章目录集合基础一、集合介绍1. 什么是集合&#xff1f;2. 集合类型3. ArrayList 长度可变原理4. 集合和数组的使用选择二、ArrayList 集合快速入门集合创建语句泛型(<>)三、集合常用成员方法1. 增加元素2. 删除元素3. 修改元素4. 查找数据四、集合遍历1. 集合存储字符串…

国联易安:2023年网络安全“五大技术”预测

我国对网络安全非常重视&#xff0c;明确指出“安全是发展的前提&#xff0c;发展是安全的保障&#xff0c;安全和发展要同步推进”。作为国内专注于保密与非密领域的分级保护、等级保护、业务连续性安全和大数据安全产品解决方案与相关技术研究开发的领军企业&#xff0c;国联…