软考高级架构师——4、软件开发方法

news2024/11/24 12:38:25

软件开发方法是软件开发的方法学。自从“软件危机”爆发以来,软件研究人员就在对
开发方法进行不断地研究,以期能够提高软件的质量、降低软件的成本。经过 40 多年的研
究,人们提出了很多开发方法,如最初的结构化开发到现在非常流行的面向对象的开发方法
等。本章将介绍软件生命周期、软件开发模型、软件重用技术、逆向工程及形式化开发方法
 

1 软件生命周期

可行性研究与计划

确定开发此软件的必要性,确定软件的目标、范围、风险、开发成本等内容

将产生《可行性研究报告》和《软件开发计划》

需求分析确定软件要做成什么样的
概要设计

将需求分析的结果转化为技术层面的设计方案

确定系统架构、各子系统间的关系、 接口规约、数据库模型、编码规范等内容

概要设计的结果将作为程序员的工作指南,供程序员了解系统的内部原理,并在其基础上进行详细设计和编码工作

详细设计
 

在概要设计的基础上,进行细化,如类设计
 

详细设计不是开发过程中必需的阶段

实现包括编码和单元测试
集成测试
 
指定集成测试计划,确定如何将这些程序单元集
成到一起,按照什么样的顺序进行测试,使用哪些测试数据等问题
确认测试验证软件是否同需求一致,是否达到了预期目标
使用和维护

软件维护的过程会贯穿整个软件的使用过程。

当使用和维护阶段结束后,软件系统也就自然消亡,软件系统的生命周期结束。

2 软件开发模型

瀑布模型
 

一个阶段到下一个阶段有明显的界线。

在每个阶段结束后,都会有固定的文档或源程序流入下一阶段     

       

当软件需求明确、稳定时,可以采用瀑布模型按部就班地开发软件

瀑布 V 模型
 

总体设计对应了集成测试,详细设计对应了单元测试

保持了瀑布模型的阶段式文档驱动的特点,而且更强调了软件产品的验证工作

瀑布模型后期的维护工作相当繁重,而这些维护工作大多都是修正在需求分析阶段引入的缺陷
 

螺旋模型
 

螺旋模型的每一周期都包括需求定义、风险分析、

工程实现和评审 4 个阶段,由这 4 个阶段进行迭代,软件开发过程每迭代一次,软件开发就前进一
个层次。

螺旋模型强调风险分析

需要具有相当丰富的风险评估经验和专业知识

在风险较大的项目开发中,如果未能及时标识风险,势必会造成重大损失。

增量模型
 
将系统划分为若干不同的版本,每一个版本都是一个完整的系统,后一版本以前
一版本为基础进行开发,扩充前一版本的功能
原型法开发
 

原型法的每一次迭代都经过一个完整的生命周期

户需求很不明确或技术架构中存在很多不可知因素的时候,可以采用原型法

构件组装模型
 

构件的自包容性让系统的扩展变得更加容易

在考虑软件的重用度时,往往会对其他方面做出让步,如性能

使用构件组装应用程序时,要求程序员熟练地掌握构件,增加了研发人员的学习成本

统一过程
 

统一过程(Unified Process, UP)UP 是一个迭代的二维开发模型,在生命周期的每一阶段

都可以进行需求、设计等活动

UP 的迭代特点使得更容易控制软件开发的风险。

任何一个阶段的工作都不是绝对的,都是相互交叠配合的。但每一个阶段都有其侧重点

敏捷方法

1、极限编程XP

由价值观、原则、实践和行为四个部分组成,它们彼此相互依赖、关联,并通过行
为贯穿于整个生命周期。


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

在 XP 的四大价值观之下,隐藏着一种更深刻的东西,那就是尊重。因为这一切都建立在团队成员之间相互关心、相互理解的基础之上。
 

在 XP 中,集成了 12 个最佳实践,(1)计划游戏(2)小型发布(3)隐喻(4)简单设计(5)测试先行(6)重构(7)结对编程(8)集体代码所有制(9)持续集成(10)每周工作 40 小时(11)现场客户(12)编码标准
 

敏捷方法

2、特征驱动开发(FDD)

有效的软件开发不可缺少的三个要素是:人、过程和技术

FDD 定义了 6 种关键的项目角色:(1)项目经理(2)首席架构设计师(3)开发经理(4)主程序员(5)程序员(6)领域专家:一般由客户、系统分析员等担当

FDD 共有 5 个核心过程
 

 组成 FDD 的最佳实践包括:领域对象建模、根据特征进行开发、类的个体所有、组成
特征小组、审查、定期构造、配置管理、结果的可见性。

敏捷方法

3、Scrum

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

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

敏捷方法

4、水晶方法( Crystal)

透明水晶方法有七大体系特征:
(1)经常交付(2)反思改进(3)渗透式交流(4)个人安全(5)焦点(6)与专家用户建立方便的联系(7)配有自动测试、配置管理和经常集成功能的技术环境

敏捷方法

5、开放式源码

开放源码的一个突出特点就是查错
排障(debug)的高度并行性,任何人发现了错误都可将改正源码的“补丁”文件发给维护
者。然后由维护者将这些“补丁”或是新增的代码并入源码库

ASD 方法: ASD (Adaptive
Software Development)方法由 Jim Highsmith 提出,其核心是三个非线性的、重叠的开发阶段:猜测、合作与学习

 3 软件重用

 常见的软件重用形式包括:

(1)源代码重用

(2)架构重用

(3)应用框架的重用

(4)业务建模的重用

(5)文档及过程的重用

(6)软构件的重用

( 7)软件服务的重用
 

构件技术

构件又称为组件,是一个自包容、可复用的程序集。

构件是一个程序集,或者说是一组程序的集合。这个集合可能会以各种方式体现出来,如源程序或二进制的代码。这个集合整体向外提供统一的访问接口,构件外部只能通过接口来访问构件,而不能直接操作构件的内部

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

而可重用既是构件的特点,也是构件出现的目的。

目前应用比较广泛的构件标准有 CORBA、Java Bean/EJB、COM/DCOM。


4 基于架构的软件设计

基于架构的软件设计(Architecture-Based Software Design, ABSD)是一种架构驱动方法。
这种方法有 3 个基础:
(1)功能的分解。在功能分解中, ABSD 方法使用已有的基于模块的内聚和耦合技术。
(2)通过选择架构风格来实现质量和业务需求。
(3)软件模板的使用。软件模板利用了一些软件系统的结构

 

ABSD 方法的输入由下列部分组成:
(1)抽象功能需求,包括变化的需求和通用的需求;
(2)用例(实际功能需求);
(3)抽象的质量和业务需求;
(4)质量因素(实际质量和业务需求);
(5)架构选项;
(6)约束。
 

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

5 形式化方法

 形式化方法是指采用严格的数学方法,使用形式化规约语言来精确定义软件系统

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

形式化方法包括形式化描述和基于形式化描述的形式化验证两部分内容。

形式化描述就是用形式化语言进行描绘,建立软件需求和特性,即解决软件“做什么”的问题

形式化验证指的是验证已有的程序是否满足形式化描述的定义
 

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

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

相关文章

网络安全(黑客)常用工具(附配套资料+工具安装包)

几十年来,攻击方、白帽和安全从业者的工具不断演进,成为网络安全长河中最具技术特色的灯塔,并在一定程度上左右着网络安全产业发展和演进的方向,成为不可或缺的关键要素之一。 话不多说,2022年全球白帽常用工具排行榜…

[Leetcode] [Tutorial] 回溯

文章目录 46. 全排列Solution 78. 子集Solution 17. 电话号码的字母组合Solution 39. 组合总和Solution 22. 括号生成Solution 46. 全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例: 输入&…

AI 降临!!!

人的记忆是脆弱的。因此,个人笔记成为了我们构建第二大脑和进行知识管理的重要手段。然而,人工智能的崛起,无疑改变了我们处理信息和知识的方式。作为一名长期关注笔记方法论和 AI 软件的「效率成瘾者」和「软件发烧友」,我深感此…

linux测试网络速度

大家都知道,Linux界面基本都是命令行模式,但是命令行模式也可以测试网速,我们就要用这个工具:speedtest,linux上的版本是基于python开发的。 1、是从githup上下载的这个工具,所以我们需要在linux上要安装gi…

macbook有哪些好用的软件

最近有朋友留言说让小编推荐一些macbook必备应用软件,这不,macdown小编就精心整理了20多款有着不同用途的软件,自己用着还不错,现在分享给大家,整理不易,希望大家点赞收藏! 最近有朋友留言说让小…

【git】解决遇到的问题

目录 一、error: RPC failed; curl 6 OpenSSL SSL_read: Connection was reset, errno 10054 二、error: RPC failed; curl 6 OpenSSL SSL_read: Connection was reset, errno 10054 一、error: RPC failed; curl 6 OpenSSL SSL_read: Connection was reset, errno 10054 报…

【c语言】指针进阶(超详细)

文章目录 ✈ 指向函数指针数组的指针📌指向函数指针数组的指针的定义📌指向函数指针数组的数组指针的使用 ✈回调函数📌 回调函数的定义📌 回调函数的使用 ✈qsort函数📌 qsort函数的作用📌qsort函数的定义…

OceanBase X Flink 基于原生分布式数据库构建实时计算解决方案

摘要:本文整理自 OceanBase 架构师周跃跃,在 Flink Forward Asia 2022 实时湖仓专场的分享。本篇内容主要分为四个部分: 分布式数据库 OceanBase 关键技术解读 生态对接以及典型应用场景 OceanBase X Flink 在游戏行业实践 未来展望 点击…

超导热催生meme,换汤不换药的投机轮回

文/章鱼哥 出品/陀螺财经 币圈对炒作meme概念的热情从未消亡过。 随着一种名为LK-99的物质被发现,围绕超导的兴奋不仅激发了科学界,加密货币相关概念也与之沸腾。不出所料,与此前围绕元宇宙、AI大肆炒作一样,许多meme代币已经出现…

多货币多汇率跨境电子商城建设(仓储管理、网络安全)

多货币多汇率跨境电子商城建设需要考虑到多个方面,包括仓储管理、网络安全、货币兑换、物流配送等。以下是具体的介绍: 一、仓储管理 仓储管理是跨境电子商城的重要组成部分,需要考虑到商品的存储、管理和分拣等环节。以下是需要注意的几个…

Pytest三种运行方式

Pytest 运行方式共有三种: 1、主函数模式 运行所有 pytest.main() 指定模块 pytest.main([-vs],,./testcase/test_day1.py) 只运行testcase 下的test_day1.py 文件 指定目录 pytest.main([-vs]),./testcase) 只运行testcase 目录下的文件 通过nodeid指定用例…

轻量级托管平台gogs

https://github.com/gogs/gogs/blob/main/README_ZH.md

iOS问题记录 - Xcode 15安装低版本iOS模拟器(持续更新)

文章目录 前言开发环境问题描述问题分析1. 定位问题2. 逆向分析2.1. IDA Free2.2. Hopper Disassembler Demo 3. 模拟器日志4. supportedArchs 解决方案最后 前言 最近新需求很多,项目改动很大,开发完成后想测一遍在低版本iOS系统上的兼容性&#xff0c…

windows使用/服务(13)戴尔电脑怎么设置通电自动开机

戴尔pc机器通电自启动 1、将主机显示器键盘鼠标连接好后,按主机电源键开机 2、在开机过程中按键盘"F12",进入如下界面,选择“BIOS SETUP” 3、选择“Power Management” 4、选择“AC Recovery”,点选“Power On”,点击“…

Codeforces Round 828 (Div. 3)E题题解

文章目录 [Divisible Numbers (easy version)](https://codeforces.com/contest/1744/problem/E1)问题建模问题分析代码 [ Divisible Numbers (hard version)](https://codeforces.com/contest/1744/problem/E2)问题建模问题分析1.根据简单版本分析所求2.方法1通过因数分解得到…

竞赛项目 深度学习图像风格迁移 - opencv python

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…

MongoDB安装和配置

一、MongoDB安装和配置 1、进入官网下载你所需要的安装版本,点击直通官网 Step1:进入官网后,将看到如下界面,点击上方导航栏Products,找到Community Server Step2:选择自己需要的版本、系统和压缩方式 2、下…

Java算法_ 岛屿数量(LeetCode_Hot100)

题目描述:给你一个由 (陆地)和 (水)组成的的二维网格,请你计算网格中岛屿的数量。‘1’ , ‘0’ 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#…

Java:Stream API

文章目录 1 说明2 为什么要使用Stream API3 什么是StreamStream的操作三个步骤创建Stream实例一系列中间操作终止操作 1 说明 Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API。Stream API ( java.util.stream) 把真正的函数式编程风…

Linux6.37 Kubernetes 集群调度

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes 集群调度一、调度约束1.调度过程2.指定调度节点3.亲和性1)节点亲和性2)Pod 亲和性3)键值运算关系 4.污点(Taint) 和 容忍(Tolerations)1)污点(Taint)2)容忍(Toler…