架构-软件工程模块-1

news2024/11/16 17:53:52

概述

这一模块选择题的分值比较多,案例题和论文也有能用上的地方。主要知识点会特殊标注或说明。

软件开发生命周期

软件工程三要素:方法、工具、过程。不会直接考,但可帮助记忆理解。

  • 传统软件生命周期方法学分为:(选择题)

    • 软件定义
    • 软件开发
    • 软件运行与维护
  • 软件定义分为:(了解)

    • 问题定义:目标系统是什么,系统的定义与范围。
    • 可行性研究:技术、经济、操作、社会方面的可行性。
    • 需求分析:功能(基础)、性能(安全可靠可维护精度容错响应速度适应性)、环境约束(软件硬件)。
  • 软件开发分为:(选择题)

    • 概要(总体设计):系统总体结构、子系统划分、模块间关系
    • 详细设计:模块逐步细化,数据的结构,分布,组织,接口,界面等。
    • 编码:可运行程序
    • 测试:单元、集成、确认、系统测试。
  • 软件运行和维护:(了解)

    • 交付使用
    • 对产品和需求的修改做出响应

软件开发方法

软件开发方法
开发模型
**瀑布模型**
**原型模型**
**螺旋模型**
**喷泉模型**
基于可重用构件的模型
快速应用开发RAD
统一过程RUP/UP
分类
按照开发风范
**自顶向下**
**自底向上**
按照性质
形式化开发
**非形式化开发**
**结构化方法**
**面向对象方法**
**原型方法**
构件化开发方法
面向服务的方法
**敏捷开发方法**
按照适用范围
整体性
局部性
**软件重用与逆向工程**
净室软件工程

软件开发方法分类

开发风范

  • 自顶向下:将一个大问题分化为多个可以解决的小问题
  • 自底向上:从具体的器件、逻辑部件或者相似系统开始,需要开发者富有经验技巧

性质

  • 形式化:基于严密的,数学上的形式机制的计算机系统研究方法。
  • 非形式化:各种开发模型

非形式化开发

结构化开发方法

将一堆零件按规则逻辑组织起来,变成一辆汽车,汽车就是结构化的结果。其中的规则逻辑,就是结构化思维。

  • 开发目标清晰化
    • 与用户保持沟通,用户了解工作进展,校准工作方向。
  • 开发工作阶段化
    • 每个阶段完成后评审,便于项目管理与控制
  • 开发文档规范化
    • 每个阶段生成文档,保证系统维护工作的便利
  • 设计方法结构化
    • 自顶向下分解,分析设计,实现模块
      缺点:开发周期长,难以适应需求变化,很少考虑数据结构

面向对象方法

对象就是站在某个角度,某个个体具有属性和操作,那么这个个体就是对象。
比如:在汽车驾驶员的角度看车这个个体关心的一些状态和操作。在驾驶时,关注的状态大概有车速、转速、剩余的油、胎压等等,这些属性状态都可以用数字来表示。除了这些属性之外,还有具体的操作,刹车、油门、转向灯开关等等。这些是具体的动作,汽车会会有有相应的行为。状态就是属性,这些行为就是方法。两个加起来就是一个对象。不同的车,属性都是类似的,把这些类似的属性和方法提取出来,就变成了类。

面向对象方法的类别

类别说明
Coad/Youedon方法特别强调OOA和OOD采用完全一致的概念和表示法,使分析和设计之间不需要表示法的转换
Booch方法分为动态模型和静态模型,静态模型分为逻辑模型和物理模型,描述系统构成和结构。动态模型包括状态图和顺序图,表示交互过程
OMT方法建模思想,采用对象模型(对象图)、动态模型(状态图)、和功能模型(DFD)建立一个实际的应用模型
OOSE使用用例,取代DFD需求分析和建立功能模型

构件化开发方法

构件/组件是同一个概念,通过连接件连接在一起共同构成一个系统整体

构件与对象的关系

  • 构件
    • 独立部署单元
    • 作为第三方的组装单元
    • 没有外部可见的状态
  • 对象
    • 一个实例单元具有唯一标志
    • 可能具有状态,状态外部可见
    • 封装了自己的行为和状态

构件并非一定包含类,一个类元素只能属于一个构件。这样设计的好处是,构件与构件之间不会互相影响。

  • 类/对象之间的通过消息来交互,当多个类组合完成完整的功能时,可以成为一个构件
  • 构件与构件之间通过接口来进行交互

构件的获取

  • 从现有构件中获得符合要求的构件,直接使用或做适应性修改,得到可复用的构件。
  • 通过遗留工程,将具有潜在复用价值的构件提取出来,得到可复用的构件。
  • 从市场上购买线程的商业构件。
  • 开发新的符合要求的构件。

构件的分类

  • 关键字分类法:将应用领域的概念从抽象到具体的顺序逐次分解为树形或有向无回路图的结构,每个概念用一个描述性的关键字表示。
  • 刻面分类法:定义若干刻画构件特征的“刻面”,包含若干概念,这些概念描述构件在概念上的特征。
  • 超文本方法:检索者可以任意跳转

构件复用方法

  • 检索与提取构件
  • 理解与评价构件
  • 修改构件
  • 构件组装

检索分为

  • 基于关键字的检索
  • 刻面检索法
  • 超文本检索法

面向服务的方法

将构件进一步扩展为服务,过载服务总线上为客户提供服务。
例如:电子商城中,订单管理系统,用户管理系统,物流系统等等变成服务,通过网页服务统一为用户提供服务。

抽象级别

  • 操作:最底层,如读、写等操作
  • 服务:代表操作的逻辑分组,如将读写,开关作为文件IO服务
  • 业务流程:最高层,为了实现特定的业务目标而执行的长期运行的动作或者活动。

原型方法

也称为快速原型法,根据初步需求快速建立系统模型,与用户交流,主要用来确定需求。
按照实现功能划分

  • 水平原型:界面,用来细化需求,但无实际的功能。
  • 垂直原型:结构化原型,用于复杂算法的实现,实现了部分功能

按照最终结果划分

  • 抛弃式:探索,解决需求不确定性,二义性等
  • 演化式:逐步演化为目标系统,用于易于升级和优化的场合

敏捷开发

以人为核心、迭代、循序渐进。两个特征

  • 适应性而非预设性:重型方法试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划开发。这类方法在计划制定完成后拒绝变化。而敏捷开发欢迎变化。
  • 敏捷型方法是面向人的而非面向过程的:它们试图使软件开发工作能够利用人的特点,充分发挥人的创造性,强调开发应该是一项愉快的活动。

核心思想

  • 敏捷方法是适应性,而非可预测性
  • 敏捷方法是以人为本,而非以过程为本
  • 迭代增量式的开发过程

主要内容:四个核心价值观,12条过程实践规则

沟通简单反馈勇气
设计者、开发者和客户三者之间的有效交流是开发成功的关键是设计和编码的指导原则,强调只满足当前功能需求,尽量使代码简单化强调设计者、开发者和客户之间及时和详尽的意见反馈是开发成功的保证要求设计者和开发者在必需做出取舍或重构时,勇于抉择,勇于实践
实践类型内容
计划游戏快速制定计划、随着细节的不断变化而完善
小型发布系统的设计要尽可能早的交付
隐喻找到合适的比喻传达信息
简单设计只处理当前的需求,使设计保持简单
测试先行先写测试代码,然后再编写程序
重构重新审视需求和设计,重新明确的描述它们以符合新的和现有的需求
结对编程两个程序员在一个计算机上共同工作。一个输入代码,而另一个审查
集体代码所有制开发人员轮换完成系统不同领域中不同模块的不同任务。每个人都对程序负责
持续集成可以按日甚至按小时为客户提供可运行的版本
每周工作四十个小时保证工作质量
现场客户系统用户代表全程配合XP团队
编码标准规范代码的编写

敏捷方法分类

  • XP极限编程:高效,低风险,测试先行
  • Cockburn水晶方法:**不同项目,不同策略。**水晶有很多个切面,每个切面都不同。
  • SCRUM并列争球法:迭代。30天一周期。优先级
  • FDD功用驱动方法:开发人员分类。指挥者、类程序员
  • 开放式源码:虚拟团队,成员遍布各地
  • ASD自适应方法:预测-协作-学习

SRUM并列争求法

  • 产品待办列表
  • 迭代待办列表
  • 四周为一个周期
  • 每日站立会议
  • 迭代燃尽图
  • 迭代复盘会议

开发模型

软件生存周期模型,又称软件开发模型,或软件过程模型。

软件过程模型的软件活动主要有:

  • 软件描述
  • 软件开发
  • 软件有效性验证
  • 软件进化

瀑布模型

缺点:现实软件需求很难确定需要很长时间才能得到软件初始版本

计划
需求分析
设计
编码
测试
运维
  • 上一次的开发成果作为本活动的输入
  • 本次活动的输出成果输出给下次活动
  • 对本次活动成果评审。成功继续下一项开发活动,否则返回上一项甚至更前

原型模型

交流
快速计划
快速设计方式建模
构建原型

在这里插入图片描述
原型模型使用应注意:

  • 用户对系统模糊不清,无法准确回答目标系统的需求
  • 要有一定的开发环境和工具支持
  • 经过对原型的若干次修改,应收敛到目标范围内,否则可能失败
  • 对大型软件来说,原型可能非常复杂且难以快速完成,如果没有现成的,就不考虑使用原型法。

螺旋模型

在这里插入图片描述

  • 瀑布模型与原型模型的结合
  • 适用于庞大、复杂并具有高风险的系统

喷泉模型

在这里插入图片描述

基于可重用的构件模型

软件需求
标识构件
检索构件库
开发构件
存入构件库
集成目标系统
取出构件

RAD 快速应用开发

  • 强调极短的开发周期
  • 是瀑布模型的一个高速变种
  • 通过使用基于构件的开发方法进行快速开发

基本思想

  • 让用户更主动的参与到系统分析、设计和构造活动中来。
  • 将项目开发组织成一系列重点突出的研讨会,研讨会要让项目投资方、用户、系统分析师、设计人员和开发人员一起参与
  • 通过一种迭代的构造方法,加速需求分析和设计阶段
  • 让用户提前看到一个可工作的系统
规划
设计
实现
运行

RUP 统一过程模型

在这里插入图片描述

  • 将项目管理、业务建模、分析与设计等统一起来,贯穿整个开发过程。
  • 四个顺序阶段:初始阶段、细化阶段、构建阶段、移交阶段
  • 每个阶段安排评审,若满意进入下一阶段
  • 采用迭代和增量的方式,好处如下:
    • 在软件开发的早期就可以对关键的、影响大的风险进行处理
    • 可以提出一个软件体系结构来指导开发
    • 可以更好的处理不可避免的需求变更
    • 可以较早的得到一个可以运行的系统,鼓舞开发团队的士气,增强项目成功的信心。
    • 为开发人员提供一个能更有效工作的开发过程。

净室软件工程

有印象即可

  • 净室软件工程(Cleanroom Sotfware Engineering)是一种形式化开发方法。

  • 使用盒结构规约进行分析与建模

  • 正确性验证排除错误

  • 统计测试

  • 质量控制

软件重用与逆向工程

选择题

软件重用

  • 软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程
  • 软件元素包括
    • 需求分析文档
    • 设计过程
    • 设计文档
    • 程序代码
    • 测试用例
    • 领域知识
  • 可区分为
    • 横向重用:指重用不同应用领域中的软件元素,例如数据结构、分类算法和人机界面构件等。
    • 纵向重用:指在一类具有较多公共性的应用领域之间进行软件重用

逆向工程

选择题较多,案例题可能会出现

相关概念有:重构,设计恢复,再工程,正向工程。

  • 重构(restructuring)。重构是指在同一抽象级别上转换系统的描述形式。
  • 设计恢复(design recovery):设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。
  • 再工程(re-engineering):再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本
  • 正向工程(Forward engineering):不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。

逆向工程可以分为如下四个抽象层次

选择题、案例题常见

实现级别抽象的语法树、符号表、过程的设计表
结构级别反映程序分量之间相互依赖关系的信息,如调用图、结构图、程序和数据结构
功能级别反映程序段功能与程序段之间关系的信息,如数据和控制流模型
领域级别反映程序分量或程序实体与应用领域概念之间对应关系的信息,如E-R模型

逆向工程的完备性可以用在某一个抽象层次上提供信息的详细程度来描述。抽象层次越高完备性越低,通过逆向工程恢复的难度越大。

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

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

相关文章

使用sharding-scaling和sharding-proxy做分库分表数据迁移

背景: 现在有一个有一张表被分成了两张表,t_score1 ,t_score2,但后期数据量激增,两张表不能满足业务需求,扩张为2个库每个库2张表,即数据库 ds_0下有t_score1 ,t_score2 ,数据库ds1下有t_score1…

浏览器插件的使用

善于使用浏览器插件,能起到高效上网的作用。 Microsoft Edge 是全球广受欢迎的浏览器,浏览器本身具有快速、简单和轻量级的特点。一流的性能系统和访问速度极大提升您的浏览体验。 对于浏览器的用户来说,安装一些实用的插件,能让…

Navicat设置Oracle数据库主键自增1的方法步骤

一、 创建如下表 Oracle数据库不同于Mysql、Sql Server数据库,Oracle数据库主键自增不能在建表时直接设置,而是需要通过序列和触发器进行设置! 二、创建序列 1 2 3 4 5 6create sequence SEQ_DEVICEDATAINFO start with 1 …

iOS可视化动态绘制连通图

上篇博客《iOS可视化动态绘制八种排序过程》可视化了一下一些排序的过程,本篇博客就来聊聊图的东西。在之前的博客中详细的讲过图的相关内容,比如《图的物理存储结构与深搜、广搜》。当然之前写的程序是比较抽象的。上篇博客我们以可视化的方式看了一下各…

数据库(Sql server语言)(一)

例题:(不介绍创建和插入) star表 ●查询每个组合的名称及其成员个数 select g.name,count(*) 成员个数 from star s,stargroup g where s.gid g.gid group by g.name 如果不写where s.gidg,gid会出现成员个数重复 ●查询身高最高的团…

UG NX二次开发(C#)-建模-反向片体(SheetBody)的法向矢量

文章目录 1、前言2、在UG NX中构建一个片体3、在UG NX中查看片体的法向矢量4、采用UFun函数来实现法向反向5、代码实现6、测试效果1、前言 在UG NX中,一张曲面获取其所属的片体(SheetBody)对象,其在构建时有默认的法向矢量,有时处于功能的需求,比如加工时工件的材料去除方…

探秘信息检索:原理、实现与应用

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

(一)如何使用Spring Boot和MyBatis框架实现即时通信系统中的用户注册功能

文章目录 一、引言二、Spring Boot和MyBatis框架介绍三、注册1. 前端界面实现2. 后端数据持久化操作3. 代码示例 四、实现效果四、个人经验分享五、结语 一、引言 本文将介绍基于Spring Boot和MyBatis框架开发的注册功能实现,该功能是基于Linux的即时通信系统的一个…

二挡起步——pythonweb开发Django框架,前端原生+Django后端框架002(附带小案例)

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

ERROR: Could not find a valid gem ‘cocoapods‘ (>= 0) in any repository

Flutter启动的时候报错 需要重新安装cocoapods,那就重装,可是结果装不上 这是需要梯子的,我开了梯子也是一样安装不上 所以需要指定一下你的http代理ip和端口 你可以找一下你梯子的端口,找找代理命令,比如我的如下…

人工智能概述、发展历程及主要分支

人工智能概述 人工智能发展必备三要素: 数据 算法 计算力 ,硬件支撑 CPU、GPU、TPU 计算力之CPU、GPU对比: CPU主要适合I\O密集型的任务 GPU主要适合计算密集型任务 什么类型的程序适合在GPU上运行? (1&#…

数据库的逻辑组织

目录 一、数据库构架 二、系统数据库 1.master数据库 2. tempdb数据库 3. model数据库 4. msdb数据库 三、用户数据库 用户数据库在sysdatabases表中的记录 一、数据库构架 数据库存储是按物理方式在磁盘上作为两个或更多的文件实现。用户使用数据库时使…

java学习之异常三

目录 一、throws 一、基本说明 二、使用细节 二、自定义异常 一、 基本概念 ​编辑二、自定义异常的步骤 三、实例 四、练习 三、throw和throws的区别 四、本章作业 第一道 第二题 第三题 第四题 一、throws 一、基本说明 package com.hspedu.throws_;import java.i…

Linux常用命令(2)

文章目录 Linux常用命令(2)拷贝 cp语法拷贝hello.txt生成一个新文件hello1.txt拷贝hello.txt文件到hello目录里面去拷贝hello目录生成一个新目录hello1拷贝hello1目录到主目录里面去并且命名为hello2目录 更名/移动 mv删除 rm管理员命令echo / cat将信息…

JVM 程序计数器(PC 寄存器)

PC Register 介绍 JVM中的程序计数寄存器( Program Counter Register) 中,Register 的命名源于 CPU 的寄存器, 寄存器存储指令相关的现场信息。 CPU 只有把数据装载到寄存器才能够运行JVM 中的 PC 寄存器是对物理 PC 寄存器的一种抽象模拟PC 寄存器用来存储指向下一…

Vue 子组件触发父组件事件,传递多个参数以及异常情况处理

Start 今天这篇文章记录一下子组件调用父组件事件&#xff0c;传参的逻辑。以及一些特殊的情况。 1. 示例 1.1 父组件 <template><div>我是父组件<hr /><child to-say"toSay" /></div> </template><script> import ch…

toFixed()*100保留的小数位数和预想的不一致

目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.因为演示需要&#xff0c;要造一些假数据&#xff0c;一些数据要求保留2位小数。这需求真的不难&#xff0c;不就是parseFloat().toFixed()不就完了。 2.所以很快就写了如下代码&#xff1a; let aMath.random()*(1…

ChatGPT国内镜像网站大盘点(国内可用免费ChatGPT镜像站点)

目录 ChatGPT国内镜像网站 很多网友想要国内可用免费ChatGPT镜像站点&#xff0c;ChatGPT可以说是最近大火的AI工具&#xff0c;但是国内的小伙伴是无法使用ChatGPT的&#xff0c;要想在国内直接使用ChatGPT的话不仅需要通过技术手段让网络满足要求&#xff0c;还需要国外的手…

搭建ESP-12E外围电路

搭建ESP-12E外围电路 原理图&#xff1a; PCB&#xff1a; 参考的原理图: 扩展知识&#xff1a; USB转串口部分电路设计&#xff08;CH340N&#xff09;&#xff1a; CH340N引脚封装 参考文章 CH340C的ESP8266一键下载电路设计_ch340c esp8266_坚持努力&#xff0c;冲~的博客…

Binlog日志详解

binlog基本概念 binlog是一个二进制格式的文件&#xff0c;用于记录用户对数据库更新的SQL语句信息&#xff0c;例如&#xff1a;更改数据库表和更改内容的SQL语句都会记录到binlog里&#xff0c;但是不会记录SELECT和SHOW这类操作 binlog的特点 binlog在MySQL的Server层实现…