我对软件工程的理解

news2024/11/26 12:52:26

1 引言

从事软件行业这么年,写了10年代码,又从事了多年的项目产品方面的工作,一些每天用到的软件工程的方法,虽然天天都在用但一些概念总感觉似是而非,正好借假期的时间,好好整理下,以供自己或他人进行参考使用。

2 相关名词解释

2.1 软件工程

软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程(来源于《计算机科学技术百科全书》的定义),我个人认为这个定义还是准确和好理解一些。另外软件工程也是高校的一个计算机类专业。

1968年在德国举行的NATO软件工程会议上,为应对"软件危机"的挑战,提出了"软件工程"的术语。这个时期有代表性的软件工程定义是"为了经济地获得在真实机器上可靠工作的软件而制定和使用的合理工程原则和方法"。

2.2 瀑布方法(Waterfall Model)

瀑布方法是软件开发中最早出现的模型之一,早期主要用于开发大型软件系统。该模型采用线性进程,任务按照建立系统需求、系统设计、实现、测试和维护五个阶段依次完成。因此,该模型也被称为“线性软件开发模型”。

1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是被广泛采用的软件开发模型。

瀑布方法的核心思想是将软件开发过程划分为多个阶段,包括需求分析、设计、编码、测试等,每个阶段都有明确的输出和验证标准。这种方法强调了开发过程的线性顺序和阶段的独立性,便于管理和控制‌

2.3 敏捷方法

敏捷方法是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力。敏捷开发(agile development)是一种以人为核心、迭代、循序渐进的开发方法。

2001年2月,17名软件开发人员聚在犹他州开会,讨论轻量级开发方法,意识到他们正在集体实践不同于经典瀑布方法的软件开发, 而且它们并非全部都在初创公司中。 他们提出了《 敏捷宣言》 ,记录了他们对现代软件开发过程应该如何运作的共同信念。

2.3.1 SCRUM迭代式增量软件开发过程

Scrum是迭代式增量软件开发过程,是敏捷方法论中的重要框架之一,通常用于敏捷软件开发。Scrum包括了一系列实践和预定义角色的过程骨架。

在1995年OOPSLA大会(为面向对象编程系统,语言以及应用程序举办的年度会议)上Sutherland和Schwaber(相识于1980年代早期)第一次向世人介绍了Scrum(两人在一个IBM项目合作,并做了更详尽的研究,于是Scrum诞生了),可当时,两个人的公司都还在做千年虫和各种重型开发方法咨询方面的业务呢。

2.3.2 XP极限编程

极限编程(ExtremeProgramming,简称XP)是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。

由KentBeck在1996年提出的,如同其他敏捷方法学,极限编程和传统方法学的本质不同在于它更强调可适应性能性以及面临的困难。适用于小团队开发。

2.4 结构化方法

Structured Method,结构化方法是一种软件开发方法,一般利用图形表达用户需求,强调开发方法的结构合理性以及所开发软件的结构合理性。

结构化编程思想由艾慈格·迪杰斯特拉在1976年在《GOTO陈述有害论》中提出,1975年赖瑞·康斯坦丁和爱德华·尤登提出结构化设计,1978年汤姆·迪马克和爱德华·尤登等在1975年提出结构化分析,后来逐渐被完善,形成现在软件开发方法中主要采用的结构化方法。

结构化方法从功能上对系统进行划分,将系统按功能划分成各个模块,将子模块编写成子程序,通过子程序之间的结构和层次之间的耦合来解决复杂的问题。结构化方法按软件周期可划分为结构化分析、结构化设计和结构化实现。

2.5 面象对象方法

面向对象法(Object Oriented,OO),是针对面向过程提出的,是区别于传统的结构化的新方法、新思路。它将客观世界由许多不同种类的对象构成,每一个对象都有自己的内部状态和内在运行规律,不同对象的相互联系和作用构成了完整的客观世界。

OO方法起源于面向对象的编程语言(简称为OOPL),面向对象源于Simula开发语言(70年代诞生),真正的OOP(面向对象程序设计)由Smalltalk(被公认为历史上第二个面向对象的程序设计语言)奠基。Smalltalk现在被认为是最纯的OOPL。

1986年在美国举行了首届"面向对象编程、系统、语言和应用(OOPSLA'86)"国际会议,使面向对象受到世人瞩目,其后每年都举行一次,这进一步标志OO方法的研究已普及到全世界。

2.5.1 RUP统一过程

RUP(Rational Unified Process),统一软件过程是一个面向对象且基于网络的程序开发方法论。可以理解为RUP是软件工程一个方法。

软件统一过程(RUP)是Rational软件公司在1997年创造的软件工程方法 。RUP描述了如何有效地利用商业的可靠的方法开发和部署软件,是一种重量级过程(也被称作厚方法学),因此特别适用于大型软件团队开发大型项目。

2.5.2 UML统一建模语言

统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模语言,独立于任何具体程序设计。

是由Grady Booch、James Rumbaugh和Ivar Jacobson在20世纪90年代中期提出的。‌ 这三位方法是信息系统和面向对象领域的著名专家,他们分别提出了不同的面向对象方法,最终这些方法被统一并发展成了UML‌

2.6 CMMI软件能力成熟度模型集成

CMMI全称Capability Maturity Model Integration For Software,软件能力成熟度模型集成,是在CMM(Capability Maturity Model For Software,软件能力成熟度模型)的基础上发展而来的。可以理解为CMMI是软件工程能力的一个衡量的方法或标准。

CMM模型自20世纪80年代末推出,并于20世纪90年代广泛应用于软件过程的改进以来,极大地促进了软件生产率的提高和软件质量的提高,为软件产业的发展和壮大做出了巨大的贡献。

3 我的理解

从开发技术层面来分,有结构化的方法和面向对象的方法,只不过目前大家普遍采用面象对象的方法进行分析、设计和开发(采用面象对象的语言)。

从组织(过程、项目)管理层面来说,有瀑布、敏捷等方法。同样现在大家大部分采用敏捷的方法组织整个软件开发过程。

CMMI 和 RUP 的区别,如下所示:

一、成熟度 vs. 方法论:CMMI 更关注过程的成熟度和改进,而 RUP 是一个具体的软件开发方法论。

二、灵活性:CMMI 提供了更多的灵活性,允许组织根据自己的需要选择和定制过程实践,而 RUP 提供了一个更固定的过程框架。

三、重点:CMMI 强调过程改进和成熟度,RUP 强调项目的迭代开发和项目管理。

四、规模:RUP 通常适用于大型项目,而 CMMI 可以适用于各种规模的项目

4 最后

本文的部分内容来自《百度百科》、《360百科》、《CSDN》,欢迎大家进行讨论,我们共同进步。

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

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

相关文章

AI配音(声音克隆)

Fish Audio: Free Generative AI Text To Speech & Voice Cloning 【【AI配音】终于找到免费 & 小白友好的声音克隆软件了!真人相似度98%!】https://www.bilibili.com/video/BV1MwbFeCE2X?vd_source3cc3c07b09206097d0d8b0aefdf07958 我终于找到总这3款免…

Java中的封装、继承、多态

目录 封装 概念 包 继承 多态 向上转型 一、直接赋值 二、方法传参 三、返回值 向上转型注意事项 向下转型 格式 重写 重写和重载的区别 动态绑定 静态绑定和动态绑定 封装 概念 简单来说就是套壳屏蔽细节。 举例: 想要访问它们时需要一些“接口”…

Codeforces Rund 977 div2 个人题解(A~E1)

Codeforces Rund 977 div2 个人题解(A,B,C1,C2,E1) Dashboard - Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) - Codeforces 火车头 #define _CRT_SECURE_NO_WARNINGS 1#include <algorithm> #include <array> #include <bitset> …

Java之二叉树的基本操作实现

1. 模拟实现二叉树前&#xff0c;我们要先表示树&#xff0c;首先定义一个内部类&#xff0c;当作二叉树节点 static class TreeNOde{char val;//存放二叉树的值TreeNOde left;//指向左子树的引用TreeNOde right;//指向右子树的引用//构造方法&#xff0c;用于实例化树的节点p…

信息学奥赛复赛复习13-CSP-J2021-02插入排序-排序稳定性、插入排序、sort排序、结构体、计数排序

PDF文档回复:20241006 1P7910 [CSP-J 2021] 插入排序 [题目描述] 插入排序是一种非常常见且简单的排序算法。小 Z 是一名大一的新生&#xff0c;今天 H 老师刚刚在上课的时候讲了插入排序算法。 假设比较两个元素的时间为 O(1)&#xff0c;则插入排序可以以 O(n^2) 的时间复…

第五节——转移表(让你不再害怕指针)

文章目录 制作简易计算器什么是转移表&#xff1f;switch函数实现函数指针数组实现 制作简易计算器 要求&#xff1a;制作一个简易计算器&#xff0c;可以进行* / - 等功能运算。 什么是转移表&#xff1f; 指的就是通过函数指针数组的方式通过数组去调用里面的函数&#x…

LeetCode讲解篇之239. 滑动窗口最大值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们维护一个长度为k的窗口&#xff0c;然后窗口从数组最左边一直移动到最右边&#xff0c;记录过程中窗口中的最大值&#xff0c;就是答案 我们每次查询长度为k的窗口最大值是什么时间复杂度是O(k)的&#xff0…

软件验证与确认实验二-单元测试

目录 1. 实验目的及要求.................................................................................................... 3 2. 实验软硬件环境.................................................................................................... 3 …

idea插件市场安装没反应

https://plugins.jetbrains.com/idea重启后还是不行那就

163页PPT罗兰贝格品牌战略升级:华为案例启示与电器集团转型之路

罗兰贝格作为一家全球顶级的战略管理咨询公司&#xff0c;其品牌战略升级理念在多个行业中得到了广泛应用。以下将以华为案例为启示&#xff0c;探讨电器集团的转型之路&#xff0c;并融入罗兰贝格品牌战略升级的思想。 一、华为案例的启示 华为与罗兰贝格联合撰写的《数据存…

基于java+springboot的酒店预定网站、酒店客房管理系统

该系统是基于Java的酒店客房预订系统设计与实现。是给师弟开发的毕业设计。现将源代码开放出来&#xff0c;感兴趣的同学可以下载。 演示地址 前台地址&#xff1a; http://hotel.gitapp.cn 后台地址&#xff1a; http://hotel.gitapp.cn/admin 后台管理帐号&#xff1a; 用…

基于阻塞队列及环形队列的生产消费模型

目录 条件变量函数 等待条件满足 阻塞队列 升级版 信号量 POSIX信号量 环形队列 条件变量函数 等待条件满足 int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex); 参数&#xff1a; cond&#xff1a;要在这个条件变量上等待 mutex…

文字转语音免费的有哪些?这6款文字转语音软件让你配音效果炸满!

文字转语音免费的有哪些&#xff1f;文字转语音不管在有声朗读、配乐配音、影视旁白等实际生活场景中的应用都是非常广泛的&#xff0c;而目前语音识别文字的技术日渐成熟&#xff0c;已经渗透到生活办公的日常&#xff0c;包括我们的输入法自带语音转文字&#xff0c;都可以非…

105页PPT麦肯锡:煤炭贸易企业业务战略规划方案

麦肯锡作为全球领先的管理咨询公司&#xff0c;在协助客户进行企业业务战略规划方面形成了独特且系统的方法论。以下是对麦肯锡企业业务战略规划方法论的详细阐述&#xff1a; 一、战略规划的核心要素 战略方向的明确&#xff1a;战略规划的首要任务是帮助组织明确其愿景、使…

使用ValueConverters扩展实现枚举控制页面的显示

1、ValueConverters 本库包含了IValueConverter接口的的最常用的实现&#xff0c;ValueConverters用于从视图到视图模型的值得转换&#xff0c;某些情况下&#xff0c;可用进行反向转换。里面有一些抽象类、模板类的定义&#xff0c;可以继承这些类实现一些自己想要实现的功能…

k8s中pod的管理

一、资源管理 1.概述 说到k8s中的pod&#xff0c;即荚的意思&#xff0c;就不得不先提到k8s中的资源管理&#xff0c;k8s中可以用以下命令查看我们的资源&#xff1a; kubectl api-resources 比如我们现在需要使用k8s开启一个东西&#xff0c;那么k8s通过apiserver去对比etc…

C++模版SFIANE应用踩的一个小坑

一天一个C大佬同事&#xff0c;突然截图过来一段代码&#xff1a;这写的啥呀&#xff0c;啰里吧嗦的&#xff0c;这个构造函数模板参数T1感觉是多余的呀 template<class T> class TestClass { public:TestClass(){}//函数1template<class T1 T, std::enable_if_t<…

【springboot】简易模块化开发项目整合Redis

接上一项目&#xff0c;继续拓展项目 1.整合Redis 添加Redis依赖至fast-demo-config模块的pom.xml文件中 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependenc…

Jax(Random、Numpy)常用函数

目录 Jax vmap Array reshape Random PRNGKey uniform normal split choice Numpy expand_dims linspace jax.numpy.linalg[pkg] dot matmul arange interp tile reshape Jax jit jax.jit(fun, in_shardingsUnspecifiedValue, out_shardingsUnspecifiedVa…

国际象棋和大模型的内部世界 (2)

国际象棋和大模型的内部世界 &#xff08;2&#xff09; 最近一直在做大模型的一些实践和应用工作。最近看了一些agent的一些在大模型上的探索&#xff0c;包括基于大模型驱动的类似MUD类的游戏。 最近2篇论文都是基于国际象棋的&#xff0c;作者的思路基本上差不多&#xff0c…