【系统架构设计】开发方法(二)

news2024/11/14 15:29:16

【系统架构设计】开发方法(二)

  • 软件生命周期
  • 软件开发模型
  • 统一过程
  • 敏捷方法
    • 极限编程
    • 特征驱动开发
    • Scrum
    • 水晶方法
    • 开放式源码
    • ASD
  • 软件重用
  • 基于架构的软件设计
  • 形式化方法

软件生命周期

软件开发模型

统一过程

敏捷方法

所谓敏捷开发,个人认为,最大特点就是,过程中多输出,多反馈,让客户看到实现效果,虽然这还不是最终成品。

极限编程

极限编程(XP)方法是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学且充满乐趣的软件开发方式。XP由** 价值观、原则、实践、行为**四个部分组成,它们彼此相互依赖、关联,并通过行为贯穿整个生命周期。

XP的核心是其总结的 沟通、简单、反馈、勇气 四大价值观,它们是XP的基础,也是XP的灵魂

  • 沟通 :在传统的开发方法中,主要借助于完善的流程和面面俱到的文档、报表、计划来替代,但效率低,而XP ** 鼓励大家进行口头交流、通过交流解决问题 **,以提高效率。
  • 简单:传统的开发方法中,都要求开发人员对未来做一些预先规划,以便对今后可能发生的变化预留一些扩展空间,XP秉承“够用即好”的思路,也就是尽量地简单化,只要今天够用就行,不考虑明天会出现的新问题

在XP中集成了12个最佳实践,它们本身每个都没有创新的概念,但最大的创新点在于提供一种良好的思路将这些最佳实践结合在一起,并且确保尽可能彻底地执行,使得它们能够在最大程度上互相支持

ps:对12个实践中的测试先行、重构、结对编程、集体代码所有制、每周工作40小时、现场客户、编码标准很有感触,

  • 写完功能一定要测试;
  • 而且发现架构不利于后续维护、需求增加,一定要有重构的勇气;
  • 以团体的形式进行开发,代码共享;
  • 在完成每日任务的情况,不加班,避免影响第二天开发;
  • 到现场都跟客户交流,一起交流过程中完成开发过程;
  • 在开发时一定要有一个明确的编码规则,是驼峰、下划线命名法要定好,避免后续其他人接手维护不方便。

特征驱动开发

FDD 也是一个迭代的开发模型,它的每一步都强调质量,不断交付可运行软件,并以很小的开发提供精确的项目进度报告和状态信息

FDD 定义了6种关键的项目角色:

  1. 项目经理
  2. 首席架构设计师
  3. 开发经理:负责团队日常开发,解决开发中出现的技术问题和资源冲突
  4. 主程序员:将带领一个小组完成特征的详细设计和构建工作
  5. 程序员
  6. 领域专家:是对业务领域精通的人,一般由客户、系统分析员等担当,领域专家作为关键的项目角色正是敏捷宣言中“业务人员同开发人员紧密合作”的体现。

在这里插入图片描述

FDD一共5个核心过程,由领域专家和首席架构设计师相互配合,完成整体对象模型的开发;然后构建一个完整的特征列表,所谓特征即一个小的、对客户有价值的功能;然后由项目经理根据构造出的特征列表、特征间的依赖关系进行计划,安排开发任务;接着主程序员带领特征小组对特征进行详细设计和构建,这2个过程反复迭代,直到完成全部开发。

Scrum

Scrum 是一个用于开发和维持复杂产品的框架,是一个增量的、迭代的开发过程;整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint ; 使用产品Backlog 来管理产品的需求,它是一个按照商业价值排序的需求列表;挑选最高优先级的需求在Sprint 计划会议上经过讨论、分析和估算得到相应的任务列表,即Sprint backlog

Scrum 主要包括5个活动产品待办事项列表梳理、Sprint 计划会议、每日Scrum 会议、Sprint 评审会议、Sprint 回顾会议

在这里插入图片描述
Scrum 的** 5个价值观**:

  • 承诺–愿意对目标做出承诺
  • 专注–把你的心思和能力都用到你承诺的工作上去
  • 开放–Scrum 把项目中的一切开放给每个人看
  • 尊重–每个人都有他独特的背景和经验
  • 勇气–有勇气做出承诺,履行承诺,接受别人的尊重。

水晶方法

水晶方法(Crystal)使用频度较高的是Crystal Clear — 透明水晶方法,适合于一个小团队来进行敏捷开发,人数在6人以下为宜。透明水晶方法有7大体系特征:

  • 经常交付
  • 反思改进
  • 渗透式交流 — 通常就是通过团队成员在同一间工作室内工作而实现,若其中一个成员提出问题,工作室内其他成员可以选择关注或不关注的态度,可以加入到这个问题的讨论当中来,也可以继续忙自己的工作。
  • 个人安全–当你指出困扰你的问题时,你不用担心受到报复
  • 焦点–明确首先要做什么,然后安排时间,以平和的心态开展工作
  • 与专家用户建立方便的联系
  • 配有自动测试、配置管理和经常集成功能的技术环境

开放式源码

一个特别之处,就是程序开发人员在地域上分布很广。一个突出特点就是 查错排障(debug)的高度并行性,任何人发现了错误都可以将改正源码的补丁文件发给维护者,然后由维护者将这些补丁或是新增代码并入源码库。

ASD

核心是三个非线性的、重叠的开发阶段 :** 猜测、合作 、学习 **。

软件重用

主要要注意一下构件技术的两个最重要的特性:自包容 和可重用

  • 自包容 : 构件本身是一个功能完整的独立体,构件内部与外部的功能界限清晰明确,可以独立配置与使用

基于架构的软件设计

基于架构的软件设计(Architechture-Based Software Design ,ABSD)是一种架构驱动方法,这种方法有3个基础:

  • 功能的分解。在功能分解中,ABSD使用已有的基于模块的内聚和耦合技术
  • 通过选择架构风格来实现质量和业务需求
  • 软件模板的使用。软件模板利用了一些软件系统的结构,就像实现tcp 通信可以用servlet 模板。

ps :内聚是指一个模块内部各个元素之间的联系紧密度;而耦合是指模块与模块之间的联系紧密度

在这里插入图片描述

基于架构的软件开发模型(Architecture-Based Software Design Model ,ABSDM)把整个基于架构的软件过程划分为架构需求、设计、文档化、复审、实现、演化等6个子过程。

在这里插入图片描述

  • 架构需求 : 包含 ** 需求获取 - 标识构件 - 需求评审** 三部分,且有序。
  • 架构文档化 : 主要输出 架构需求规格说明 ** 和 ** 测试架构需求的的质量设计说明书 两个文档。

形式化方法

形式化方法是采用严格的数学方法,使用形式化规约语言来精确定义软件系统。包括形式化描述基于形式化描述的形式化验证两部分内容。形式化描述用于解决软件做什么的问题,形式化验证用于验证已有的程序是否满足形式化描述的定义

非形式化的开发方法是通过自然语言、图形或表格描述软件系统的行为和特性,然后基于这些描述进行设计和开发。

ps: 非形式化方法就是是一种开发方法,如用自然语言等这些进行开发,而形式化方法就是用数学方法如公式等去完成开发。

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

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

相关文章

day01- Web开发介绍-HTML-CS

Web开发介绍 1 什么是web开发 Web:全球广域网,也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 所以Web开发说白了,就是开发网站的,例如下图所示的网站:淘宝,京东等等 那么我们…

ROS_package 、CMakeLists.txt、package.xml、ROS_node之间的关系

一、整体框架结构 二、关系描述 1、ROS.cpp 里面初始化了一个ROS节点,注意我的源文件里面只初始化了一个节点 // ROS.cpp #include "ros/ros.h"int main(int argc, char **argv) {ros::init(argc, argv, "node_name"); // 指定节点名称为 &…

C++图笔记(三)有向无环图(及最小生成树(略))以及剩下的排序

目录 一,定义: 1,有向无环图 2,拓朴排序 1,每个顶点出现且仅仅出现一次。 2,若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。 二,DAG的性质 性质1…

Clash-Docker在Ubuntu下的使用

说明 最近折腾nas,docker镜像被墙之后很多镜像拉取不了,需要添加代理,这里使用Clash docker版。 安装&运行 docker pull dreamacro/clash:v1.18.0 docker run -d --name clash --network host dreamacro/clash:v1.18.0修改配置文件 d…

java使用itext 直接生成pdf

itext 使用 需求背景itext 的使用依赖简单示例基础设置(页面大小、边距、字体等)段落内部,特殊设置关键字 字体或颜色生成动态表格页脚展示页数其他设置密码添加水印(背景图)目录Header, Footer分割 PDF合并 PDF 需求背…

动态路由//

静态路由的缺点 1.配置量大 2.不能基于拓扑的变化进行实时更新 总结:只能在简单的小型网络中进行配置 动态路由的优点 实时基于拓扑的变化而进行路由表的收敛 动态路由的缺点 1.额外的占用链路资源:动态路由协议需要路由器之间不断交换路由信息,这会占用网络…

在PasteSpider中使用gitee的webhook实现类似Jenkins的CI/CD持续部署

准备事宜 1.已经在PasteSpider中配置好了相关的项目和服务 2.在gitee中有创建对应的代码仓库 实现原理 1.webhook是时下非常流行的一个推送模式,webhook其实就是往某一个特定的地址推送消息,这样可以避免频繁的轮询,在事件发生后的第一时间告…

Microsoft Edge 使用方法与秘诀概览

目录 ​编辑引言 Microsoft Edge 功能与技巧概览 掌握这些设置技巧,让 Edge 浏览器的体验更干净 1. 使用阅读视图 2. 开启广告过滤 3. 管理扩展 4. 个性化新标签页 5. 使用网页截图 6. 清理浏览器缓存 7. 管理启动设置 8. 自定义地址栏建议 9. 使用内置笔…

OLAP引擎之Druid

Apache Druid 简介 Apache Druid 是一个开源的、分布式的实时分析数据库,专为大规模数据的快速查询和实时分析而设计。Druid 将数据存储、索引和查询处理功能结合在一起,支持对流数据和批量数据进行快速的、低延迟的分析查询。它特别适用于需要高并发、…

C语言内存操作函数

目录 一. C语言内存操作函数 1. memcpy的使用和模拟实现 2. memmove函数 3. memset函数 4. memcmp函数 一. C语言内存操作函数 随着知识的不断积累,我们所想要实现的目标程序就会更加复杂,今天我们来学习一个新的知识叫做C语言内存操作函数&#x…

eNSP 华为交换机生成树协议

华为交换机生成树协议 生成树协议原理与作用 选举一个交换机作为根网桥(生成树的根),计算出到其他所有交换机的最佳路径,把备用路径的端口设为堵塞状态(逻辑上关闭备用路径),当最佳路径故障再…

制造企业为什么要数字化转型?面临哪些困难?

如何界定制造企业 制造业(Manufacturing Industry)是指机械工业时代利用某种资源(物料、能源、设备、工具、资金、技术、信息和人力等),按照市场要求,通过制造过程,转化为可供人们使用和利用的…

01:电容的什么,各类电容的优缺点

1.电容是什么? 电容是由两块不连通的导体,已经中间的不导电材料组成 电容结构: 1.2电容的容量计算公式 C ε s d \displaystyle\frac{εs}{d} dεs​ 1.3常见电容的种类 1.4各类电容的特点

【大模型从入门到精通31】开源库框架LangChain RAG 系统中的问答技术1

这里写目录标题 引言问答与语言模型一般流程整合方法 通过高级问答技术增强 RAG 系统利用 VectorDB 进行文档检索实现问答链初始化语言模型配置 RetrievalQA 链 问答实战 引言 检索增强生成 (RAG) 系统已经革新了我们与大型数据集互动的方式,使得开发高度复杂的聊天…

深入探索MyBatis的动态代理模式

文章目录 深入探索MyBatis的动态代理模式引言一、 MyBatis动态代理概述动态代理的优势 二、准备工作文件存放结构视图1、Mybatis的主配置文件 mybatis-config.xml2、db.properties文件:3、mybatis-config.xml引用properties文件: 三、MyBatis动态代理的实现原理1. Mapper接口定…

基于STM32F103的FreeRTOS系列(十)·消息队列的使用详细介绍以及代码编写

目录 1. 消息队列简介 1.1 概念 1.2 数据存储 1.3 阻塞机制 1.3.1 出队阻塞 1.3.2 入队阻塞 1.4 操作示意图 1.4.1 创建队列 1.4.2 向队列发送第一个消息 1.4.3 向队列发送第二个消息 1.4.4 从队列读取消息 1.5 消息队列的控制块 2. 常用API函数介绍…

android13顶部状态栏里面调节背光,不隐藏状态栏面板

总纲 android13 rom 开发总纲说明 目录 1.前言 2.代码分析 3.修改方法 4.编译运行 5.彩蛋 1.前言 android13顶部状态栏里面调节背光,这个时候状态栏面板会被隐藏掉,有些需求就需要不隐藏这个面板。 2.代码分析 查找亮度条属性 id/brightness_slider ./frameworks/b…

Vue 3 + 天地图 + D3.js 绘制行政区划

​🌈个人主页:前端青山 🔥系列专栏:组件封装篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来组件封装篇专栏内容:组件封装-天地图 目录 引入天地图 API 初始化地图 引入 D3.js 加载行政区划数据 添…

k8s高版本(1,28)部署NodePort模式下的ingress-nginx的详细过程及应用案例

文章目录 前言环境ingress安装应用案例(ingress-http案例: 基于名称的负载均衡) 前言 这个是nodeport模式下的,如果需要loadbalancer模式下的,看看博主下面以前的博客 链接: k8s学习–负载均衡器matelLB的详细解释与安装 链接: k8s学习–ing…

机器学习 之 使用逻辑回归 进行银行贷款预测(请帮忙点点赞谢谢,这对我很重要)

目录 一、逻辑回归简介 逻辑回归的基本原理 线性组合: Sigmoid函数: 二、实战案例 1.导入数据 2.准备环境 混淆矩阵的基本概念 混淆矩阵的作用 3.加载数据 4.数据预处理 什么是标准化? 标准化的计算公式 划分数据集 5.逻辑回归模…