软件工程之软件系统设计与软件开发方法
一.软件系统设计
1.体系结构设计就是架构设计,软件设计包含4个方面:
接口(人机界面设计)设计:软件与操作系统、软件与人之间如何交互;
架构(结构)设计:定义软件系统各主要部件之间的关系。主要目标是开发一个模块化的程序结构,并表示出模块间的控制关系;
过程设计:将系统结构部件转换成软件的过程描述;
数据设计:将模块转化为数据结构的定义。高质量的数据设计将改善程序结构和模块的划分,降低过程复杂性。
2.界面设计
(1).界面设计的三个原则:
置于用户控制之下
减少用户的记忆负担
保持界面的一致性
(2)置于用户控制之下
以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式
提供灵活的交互
允许用户交互可以被中断和撤消
当技能级别增加时可以使交互流水化并允许定制交互
使用户隔离内部技术细节
设计应允许用户和出现在屏幕上的对象直接交互
(3)减少用户的记忆负担
减少对短期记忆的要求
建立有意义的缺省
定义直觉性的捷径
界面的视觉布局应该基于真实世界的隐喻
以不断进展的方式揭示信息
(4)保持界面的一致性
允许用户将当前任务放入有意义的语境在应用系列内保持一致性
如过去的交互模型已建立起了用户期望,除非有迫不得已的理由下要改变它
(5)其他:
系统输入设计应该属于界面设计的一种。
人的因素在系统输入设计中扮演了很重要的角色。
输入应该尽可能地简单,以降低错误发生的可能性,如对于范围可控的数据,使用选择的方式替代用户输入,只输入变化的数据等。
输入应该尽可能使用已有含义明确的设计,需要采用模仿的方式而非创新。
为了避免用户理解的二义性,应该对表格中输入的数据给出提示信息。
数据类型检查确保输入了正确的数据类型,自检位用于对主关键字进行基于校验位的检查;域检查用于验证数据是否位于合法的取值范围;格式检查按照已知的数据格式对照检查输入数据的格式。
3.结构化设计 SD
(1)系统设计的主要内容包括概要设计和详细设计。
设计要点:
抽象化
自顶而下、逐步求精
信息隐蔽
模块独立(高内聚、低耦合)
(2)外部和内部、高内聚和低耦合的角度都是模块(模块是指执行某一特定任务的数据结构和程序代码;每个模块完成相对独立的特定子功能,与其他模块之间的关系最简单;),符合自顶向下的原则。扇入:别人调自己,扇出:自己调别人。
概要设计(外部设计):
外部设计(高层设计/总体设计)处于软件设计的开始阶段,主要是将软件需求转化为数据结构和软件的系统结构,设计出各个功能部分的功能和接口,确定系统功能模块及其相互关系,主要采用模块结构图、层次图、HIPO图描述程序的结构。
其主要任务是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。
在概要设计中,将系统开发的总任务分解成许多个基本的、具体的任务,为每个具体任务选择适当的技术手段和处理方法的过程称为详细设计。
详细设计(内部设计)
内部设计(底层设计)处于软件工程中的详细设计阶段,按照外部设计中确立的系统软件结构,来细化此系统各个功能部件以及各个部件接口的设计,并且详细给出各个功能部件详细的数据结构与算法。
(3)内聚与耦合
内聚:
功能内聚:完成一个单一功能,各个部分协同工作,缺一不可
顺序内聚:处理元素相关,而且必须顺序执行
通信内聚:所有处理元素集中在一个数据结构的区域上
过程内聚:处理元素相关,而且必须按特定的次序执行
瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行
逻辑内聚:完成逻辑上相关的一组任务
偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务
耦合:
非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
数据耦合:一组模块借助参数表传递简单数据
标记耦合:一组模块通过参数表传递记录信息(数据结构)
控制耦合:模块之间传递的信息中包含用于控制模块内部逻辑的信息
外部耦合:一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息
公共耦合:多个模块都访问同一个公共数据环境
内容耦合:一个模块真接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的
需要知道内聚和耦合的两个极端。
最高内聚为:功能内聚;最低内聚为:偶然内聚。
最高耦合:内容/内部耦合;最低耦合:非直接耦合和数据耦合。
4.面向对象设计 OOD
(1)面向对象设计OOD的基本任务是把面向对象分析模型(顶层架构图、用例与用例图、领域概念模型构成)
转换为面向对象设计模型(以包图表示的软件体系结构图、以交互图表示的用例实现图,完整精确的类图,针对复杂对象的状态图和用以描述流程化处理的活动图等)。
(2)面向对象的设计原则如下:
单一职责原则:设计目的单一的类
开放-封闭原则:对扩展开放,对修改封闭
李氏(Liskov)替换原则:子类可以替换父类依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
接口隔离原则:使用多个专门的接口比使用单一的总接口要好
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
(3)23种设计模式
二.软件开发方法
1.常见的软件开发方法有4种:结构化法、面向对象方法、面向服务方法、原型法。
软件开发方法(方法论)比软件开发模型大一号,一个开发方法下面可以挂载多个开发模型。
2.结构化法
用户至上;
严格区分工作阶段,每个阶段有任务和结果;
强调系统开发过程的整体性和全局性;
系统开发过程工程化,文档资料标准化;
自顶向下,逐步分解(求精,先对最高层次中的问题进行定义、设计、编程和测试,而将其中未解决的问题作为一个子任务放到下一层次中去解决)。
相对于自底向上方法,自顶向下方法可以更快地得到系统的演示原型。
3.面向对象方法
拥有更好的复用性,更符合人们的思维习惯;
自底向上(根据系统功能要求,从具体的器件、逻辑部件或者相似系统开始,通过对其进行相互连接、修改和扩大,构成所要求的系统);
分析、设计、实现三个阶段,界限不明确。
4.面向服务方法
基于服务的架构SOA方法有三个主要的抽象级别:
操作(级别低,如数据库的读写操作)
服务(级别中,代表操作的逻辑分组,粒度太小增加通信开销,粒度太大影响服务对需求变化的敏捷性)
业务流程(级别高,为实现特定业务目标而执行的一组长期的动作,通常包含多个服务的调用);
在软件架构风格中会详细说明“基于服务的架构SOA”
5.原型法
适用于需求不明确的开发;一般主要用于需求分析阶段,对用户需求做出快速相应;可以和另外3中开发方法打配合。
按结果分:包括抛弃型原型和进化型原型。
按功能分分为:水平原型(界面)和垂直原型(算法)。
5 其他重要的软件开发方法
(1)形式化方法:所有东西均可证明/验证,而不是代码测试;
形式化方法是一种具有坚实数学基础的方法,从而允许对系统和开发过程做严格处理和论证,适用于那些系统安全级别要求极高的软件的开发。
形式化方法的主要优越性在于它能够数学地表述和研究应用问题及软件实现。但是它要求开发人员具备良好的数学基础。
用形式化语言书写的大型应用问题的软件规格说明往往过于细节化,并且难于为用户和软件设计人员所理解。由于这些缺陷,形式化方法在目前的软件开发实践中并未得到普遍应用。
(2)统一过程方法UP:在软件开发模型->统一过程模型UP/RUP;
(3)敏捷开发方法:在软件开发模型->敏捷开发模型;
(4)基于架构的开发方法ABSD:在软件架构设计->基于架构的软件开发。
三.系统建模
1.逆向工程
分析目标系统,认定系统的构件及其交互关系,并且通过高层抽象或其他形式来展现目标系统的过程。
软件逆向工程就是分析已有的程序,寻求比源代码更高级的抽象表现形式。
在逆向工程导出信息的四个抽象层次中:
实现级:包括程序的抽象语法树、符号表、过程的设计表示。
结构级:包括反映程序各部分之间相互依赖关系的信息,如调用图、结构图、程序和数据结构
功能级:包括反映程序段功能及程序段之间关系的信息。例如数据和控制流模型
领域级:包括反应程序分量和程序诸实体与应用领域概念之间的对应关系的信息,如实体关系模型
2.正向工程:
从高层抽象和独立于实现的逻辑设计到一个系统的物理实现的传统开发过程。
3.再工程(Reengineering)
结合逆向工程、重构和正向工程对现有系统进行审查和改造,将其重组为一种新形式。
相关文章:
软件工程之软件系统设计与软件开发方法
一.软件系统设计 1.体系结构设计就是架构设计,软件设计包含4个方面: 接口(人机界面设计)设计:软件与操作系统、软件与人之间如何交互; 架构(结构)设计:定义软件系统各…...
pip命令行安装pytest 一直报错
其实就是切换不同镜像安装 我最终成功的是阿里云镜像 pip install --trusted-host mirrors.aliyun.com pytest 也可以用其他的 pip install -i https://pypi.org/simple pytest # 或者使用其他的镜像源 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest...
如何在Debian操作系统上安装Doker
本章教程,主要介绍如何在Debian 11 系统上安装Docker。主要使用一键安装Docker脚本和一键卸载脚本来完成。 一、安装Docker #!/bin/bashRED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m BLUE\033[0;34m NC\033[0mCURRENT_DIR$(cd "$(dirname "$0")…...
代码随想录刷题学习日记
仅为个人记录复盘学习历程,解题思路来自代码随想录 代码随想录刷题笔记总结网址:代码随想录 二叉树的迭代遍历(不使用递归实现遍历) 递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,递归是通过栈实现…...
OpenText ALM Octane,为您的 DevOps 管道提供质量保证
实现更高水平的敏捷性、可追溯性和可预测性是一个持续的过程。ALM Octane 可帮助您改进开发和测试流程,从而改善整个软件交付价值流中的工作流程。 产品亮点 对基于软件的创新的需求已经加速,扰乱了几乎每个行业,也改变了我们的生活。快速交…...
【python实操】python小程序之参数化以及Assert(断言)
引言 python小程序之参数化以及Assert(断言) 文章目录 引言一、参数化2.1 题目2.2 代码2.3 代码解释 二、Assert(断言)2.1 概念2.1.1 Assert语句的基本语法:2.1.2 基本断言2.1.3 断言函数参数2.1.4 断言前后状态一致 2…...
探索CSS动画下的按钮交互美学
效果演示 这段代码通过SVG和CSS动画创建了一个具有视觉吸引力的按钮,当用户与按钮交互时(如悬停、聚焦或按下),按钮会显示不同的动画效果。 HTML <button class"button"><div class"dots_border"…...
241024-Ragflow离线部署Docker-Rootless环境配置修改
A. 最终效果 B. 文件修改 docker-compose.yml include:- path: ./docker-compose-base.ymlenv_file: ./.envservices:ragflow:depends_on:mysql:condition: service_healthyes01:condition: service_healthyimage: ${RAGFLOW_IMAGE}container_name: ragflow-serverports:- ${…...
网络基础概念:广播域、冲突域与VLAN解析
一、网络基础概念 在现代计算机网络中,广播域、冲突域和虚拟局域网(VLAN)是网络架构和管理的核心概念。了解这些概念对网络性能优化、流量管理和安全性提升至关重要。 二、广播域 1. 定义 广播域是一个网络逻辑区域,在这个区域…...
【MySQL】C语言连接MySQL数据库3——事务操作和错误处理API
目录 1.MySQL事务处理机制 1.1.autocommit 1.2.autocommit的设置与查看 1.3.使用示例 2.事务操作API 2.1.设置事务提交模式——mysql_autocommit() 2.2.提交事务——mysql_commit() 2.3.事务回滚——mysql_rollback() 3.错误处理的API 3.1.返回错误的描述——mysql_er…...
ARM嵌入式学习--第六天(电子电路基础知识)
电子电路基础知识 -基本元器件 -电阻 电阻(Resistance,通常用“R”表示),表示导体对电流的阻碍作用的大小;电阻导体本身的一种特性;超导体没有电阻,作用是用来降压 上拉电阻:将状态…...
JAVA----单例模式
1.单例模式概念: 单例模式是一种设计模式,他的核心是确保一个类只有一个实例,单例模式主要有两种方式:饿汉式与懒汉式 2.饿汉式 饿汉就是一个迫切的意思,类加载就会导致该单实例被创建 饿汉式第一种方式:…...
基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型
微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 最小二乘法是一种回归估计法,适用于被辨识的参数与系统输出为线性关 系的情况。它是在一定数据量下,基于系统输出误差的平方和最小的准则对参 数进行辨识的方法。此模型通过…...
记录一次部署 k8s 集群无法启动
情况是这样的,k8s 集群(v1.31)所需要的组件已安装完成,通过 kubeadm init 已经安装部署成功,但是等几分钟,集群组件就一直在重启,查看日志是连接 etcd 超时,所以查看了 etcd 的日志&…...
Linux下MySQL8.x的编译安装与使用
Linux下MySQL的安装与配置 1. 安装环境初始化 1.1 查看是否安装过MySQL 如果使用rpm安装, 检查一下RPM PACKAGE rpm -qa | grep -i mysql # -i 忽略大小写 # 或者 yum list installed | grep mysql如果存在mysql-libs的旧版本包,显示如下 #存在 [rootlocalhost ~]…...
cpuinfo实践记录
py-cpuinfo 是一个用于获取 CPU 信息的 Python 库。它可以帮助你获取 CPU 的详细信息,如 CPU 型号、核心数、频率、缓存大小等。以下是对 py-cpuinfo 模块的详细介绍: 安装 你可以使用 pip 来安装 py-cpuinfo 库: pip install py-cpuinfo …...
【Java】ArrayList相关操作及其案例
ArrayList相当于集合,作为一种容器存储数据,与数组类似。不同的是,ArrayList中长度可变,而数组长度不可变。 ArrayList相关API 构造器 public ArrayList() 创建一个空的集合对象 ArrayList<String>arrnew ArrayList<>…...
手机pdf阅读器,用手机也能够阅读、编辑pdf文件
在日常的学习或办公过程中,PDF格式的文件是我们最常遇见的文件格式之一,那么为了更高效、便捷地处理这些文件,选择一款合适的PDF阅读器至关重要,可以帮助我们在阅读文件的同时还可以对文件进行适当编辑处理。今天小编给大家带来几…...
通过 Twitter Token 实现授权与操作
通过 Twitter Token 实现授权与操作 一、Twitter API 概览 1.1 Twitter API 简介 Twitter API 是 Twitter 公司提供的一种编程接口,它允许开发者访问 Twitter 的海量数据,包括用户信息、推文内容、关系网络等。通过这些接口,开发者可以创建应用程序,实现自动化的社交媒体…...
100个SSM框架(Spring + Spring MVC + MyBatis)毕业设计选题
100个SSM框架(Spring Spring MVC MyBatis)毕业设计选题 电子商务 综合性电子商务平台跨境电商管理系统社区团购平台二手商品交易网站农产品直销平台奢侈品鉴定与交易系统电子优惠券管理平台闪购秒杀系统个性化商品推荐系统多商户店铺管理平台 教育培训 在线教育课程平台智…...
STM32F1+HAL库+FreeTOTS学习17——事件标志组
STM32F1HAL库FreeTOTS学习17——事件标志组 1. 事件标志组1.1 事件标志组的的引入1.2 事件标志组简介1.3 事件标志组与队列、信号量的区别 2. 事件标志组下相关API函数2. 1 xEventGroupCreate()2. 2 xEventGroupCreateStatic()2. 3 vEventGroupDelete()2. 4 xEventGroupWaitBit…...
ElasticSearch基本概念
本文内容参考了田雪松老师编著的《Elastic Stack应用宝典》 对比关系型数据库 索引(Index)相当于库映射类型(Mapping Type)相当于表文档(Document)相当于行文档字段(Field)相当于列…...
fluent-ffmpeg操作MP3文件深入解析
软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 引言 fluent-ffmpeg是一个功能强大的Node.js库,它为FFmpeg提供了一个流畅的接口。FFmpeg是一个著名的多媒体框架,以处理音频、视频和…...
做信创项目需要什么资质、信创产品认证标准?
信创项目需要企业具备一些特定的资质和认证,以证明其合规性和专业性。以下是做信创项目可能用到的一些资质: 1. 信息安全管理体系认证(ISO27001):该认证可以证明企业已经建立了完善的信息安全管理体系,能够…...
Spring i18n国际化
从源码MessageSource的三个实现出发实战springi18n国际化 - 简熵 - 博客园 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.MessageSource; import org.spri…...
基于stm32的楼宇照明控制系统设计
基于stm32的楼宇照明控制系统设计 项目说明一、绪论1.1 研究背景1.2 研究意义1.4 研究内容 二、系统方案设计2.1 微控制器方案选择2.2 信息检测模块方案选择2.3 WiFi模块选择2.4 终端显示2.5 WiFi无线通信实现方法 三、系统硬件电路图设计3.1 整体电路图设计3.2 主控制器设计3.…...
ESP32移植Openharmony外设篇(3)OLED屏
模块简介 产品介绍 OLED (Organic Light-Emitting Diode):有机发光二极管又称为有机电激光显示,OLED显示技术具有自发光的特性,采用薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且…...
人工智能:未来生活与工作的变革力量
人工智能(AI)作为21世纪最具变革性的技术之一,正以前所未有的速度改变着我们的生活和工作方式。从医疗行业的突破性进展到企业运营的智能化,以及日常生活中各种智能产品的普及,人工智能正在成为现代社会不可或缺的一部…...
AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件
大概这世上,都是职场牛马对“PPT”这三个字母的头痛反应最大吧! 是的,就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下,将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…...
C# OOP面试题精选 面向新手/SOLID原则/设计模式++ 长期更新
1.整理目的 相当于0.1版本,旨在学习/提升/复习 关于面向对象模块的知识 目前,记录了一些比较容易混淆或者突然想不起的冷门内容 还有一些个人经过实战后总结的内容,其中还指明了很多实例和分析链接以更加方便地复习 【金山文档 | WPS云文…...
营销型网站建设需要多少钱/深圳防疫措施优化
获取当前文件夹下的所有空文件夹路径信息 1usingSystem;2usingSystem.Drawing;3usingSystem.Collections;4usingSystem.ComponentModel;5usingSystem.Windows.Forms;6usingSystem.Data;7usingSystem.IO;89namespace删除空文件夹10{ 11 /**//// <summary> 12 /// Fo…...
上海高端网站建设服务/百度总部
雷帝网 乐天 10月11日报道苹果CEO蒂姆-库克(Tim Cook)今日到访今日头条,并与今日头条CEO张一鸣展开互动。双方显得谈笑风生。库克在今日头条的出现,也引起了今日头条员工的轰动,很多人纷纷分享库克此行的照片。不过&am…...
做视频网站 服务器/肇庆网络推广
先引入jQuery和jqprint插件,为了处理jQuery和jqprint插件的版本不兼容问题,在引入jquery-migrate 文件 https://download.csdn.net/download/y1534414425/13609110 代码如下 <!DOCTYPE html> <html lang"en"><head><me…...
wordpress中文别名分类目录/seow
根据于渊老师的《Orange’s 一个操作系统的实现》我开始了操作系统的制作 首先进行了helloworld的编写,大体过程是: 1.了解什么语言编写操作系统 书中给出:汇编与c,但是helloworld编写仅仅是汇编,我也看不懂 直接复…...
WordPress自动采集豆瓣评分/seo技巧是什么
嗯…无法重现:在下面的片段中,丢失的内容总是在actionPerfomed之前得到通知,独立于我是否单击按钮或使用助记符:final JTextField field new JTextField("some text to change");FocusAdapter focus new FocusAdapter() {Overridepublic voi…...
wordpress方正模板/天猫代运营
1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值 YAML(YAML Ain’t Markup Language) 既是一个标记语言,又不是…...