我对软件工程的理解

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.rhkb.cn/news/440176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Golang】Go语言中时间time相关处理方法

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

认识动态规划算法和实践(java)

前言 动态规划算法里面最有意思的一个东西之一。动态规划初学肯定会有一定晦涩难懂。如果我们去网上搜索,动态规划的资料,它一开始都是将很多的理论,导致会认为很难,但是这个东西实际上是有套路的。 动态规划的英语是Dynamic Pr…

MySQL之分库分表后带来的“副作用”你是怎么解决的?

目录标题 一、垂直分表后带来的隐患二、水平分表后带来的问题1.多表联查问题2.增删改数据问题3.聚合操作问题 三、垂直分库后产生的问题1.跨库join问题2.分布式事务问题3.部分业务库依然存在的性能问题 四、水平分库后需要解决的问题1.聚合操作和连表问题2.数据分页问题3.ID主键…

10款好用的开源 HarmonyOS 工具库

大家好,我是 V 哥,今天给大家分享10款好用的 HarmonyOS的工具库,在开发鸿蒙应用时可以用下,好用的工具可以简化代码,让你写出优雅的应用来。废话不多说,马上开整。 1. efTool efTool是一个功能丰富且易用…

全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口

IP地址城市版查询接口 API是指能够根据IP地址查询其所在城市等地理位置信息的API接口。这类接口在网络安全、数据分析、广告投放等多个领域有广泛应用。以下是一些可用的IP地址城市版查询接口API及其简要介绍 1. 快证 IP归属地查询API 特点:支持IPv4 提供高精版、…

k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载

目录 1 MetailLB 搭建 1.1 MetalLB 的作用和原理 1.2 MetalLB功能 1.3 部署 MetalLB 1.3.1 创建deployment控制器和创建一个服务 1.3.2 下载MealLB清单文件 1.3.3 使用 docker 对镜像进行拉取 1.3.4 将镜像上传至私人仓库 1.3.5 将官方仓库地址修改为本地私人地址 1.3.6 运行清…

【前端】-音乐播放器(源代码和结构讲解,大家可以将自己喜欢的歌曲添加到数据当中,js实现页面动态显示音乐)

前言:音乐播放器是前端开发中的一个经典项目,通过它可以掌握很多核心技术,如音频处理、DOM操作、事件监听、动画效果等。这个项目不仅能提升前端开发的技能,还能让开发者深入理解JavaScript与HTML的协同作用。 页面展示&#xff1…

Web安全 - 文件上传漏洞(File Upload Vulnerability)

文章目录 OWASP 2023 TOP 10导图定义攻击场景1. 上传恶意脚本2. 目录遍历3. 覆盖现有文件4. 文件上传结合社会工程攻击 防御措施1. 文件类型验证2. 文件名限制3. 文件存储位置4. 文件权限设置5. 文件内容检测6. 访问控制7. 服务器配置 文件类型验证实现Hutool的FileTypeUtil使用…

Python中的机器学习:从入门到实战

机器学习是人工智能领域的一个重要分支,它通过构建模型来使计算机从数据中学习并做出预测或决策。Python凭借其丰富的库和强大的生态系统,成为了机器学习的首选语言。本文将从基础到实战,详细介绍如何使用Python进行机器学习,涵盖…

【汇编语言】寄存器(CPU工作原理)(二)—— 汇编指令的基础操作

文章目录 前言正文——(一气呵成解决本文内容)结语 前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底…

Android Framework AMS(02)AMS启动及相关初始化5-8

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容过多,因此拆成2个章节,本章节是第二章节&…

LabVIEW提高开发效率技巧----使用动态事件

在LabVIEW开发过程中,用户交互行为可能是多样且不可预知的。为应对这些变化,使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧,并结合实际案例,说明如何通过动态事件提高程序…

Vector不清晰点学习易错点

什么是迭代器 是一个广义指针它可以是指针,也可以是一个可对其执行类似指针得操作-如解除引用(如operator*())和递增(operator())STL中每个容器类都定义了一个合适的迭代器,该迭代器的类型是一个名为itera…

【Python游戏开发】贪吃蛇游戏demo拓展

拓展上一项目【Python游戏开发】贪吃蛇 实现穿墙效果 # 检测游戏是否结束 def check_gameover():global finished# 移除蛇头位置超过窗口判断for n in range(len(body) - 1):if(body[n].x snake_head.x and body[n].y snake_head.y):finished True # 状态检测 def ch…

html5 + css3(下)

目录 CSS基础基础认识体验cssCSS引入方式 基础选择器选择器-标签选择器-类选择器-id选择器-通配符 字体和文本样式1.1 字体大小1.2 字体粗细1.3 字体样式(是否倾斜)1.4 常见字体系列(了解)1.5 字体系列拓展-层叠性font复合属性文本…

oh-crop: OpenHarmony/HarmonyOS上的简单的图片剪裁库,可用于头像剪裁等常见场景。

📚 简介 oh-crop: OpenHarmony/HarmonyOS上的简单的图片剪裁库,可用于头像剪裁等常见场景。 代码仓库:oh-crop 📚 下载安装 ohpm i xinyansoft/oh-cropOpenHarmony ohpm 环境配置等更多内容,请参考: 下载安装三方库…

一个值得关注的3D生成新算法:速度和图像生成平齐,能生成合理的展开贴图和高质量mesh

今天跟大家介绍的GIMDiffusion是一种新的Text-to-3D模型,利用几何图像(Geometry Images)来高效地表示3D形状,避免了复杂的3D架构。通过结合现有的Text-to-Image模型如Stable Diffusion的2D先验知识,GIMDiffusion能够在…

【数据结构】【链表代码】相交链表

/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//先求出两个链表的长度ListNode…

Unity 编辑器多开

开发多人联机的功能时大多数会遇到测试机不方便的问题。想多开同一个项目Uinty又禁止。。。因为在使用Unity Editor打开一个项目时,Unity Editor会在项目目录建立一个Temp目录,同时对里面的一个UnityLockfile文件进行加锁。SO...可以使用以下方法进行多开…

【easypoi 一对多导入解决方案】

easypoi 一对多导入解决方案 1.需求2.复现问题2.1校验时获取不到一对多中多的完整数据2.2控制台报错 Cannot add merged region B5:B7 to sheet because it overlaps with an existing merged region (B3:B5). 3.如何解决第二个问题处理: Cannot add merged region …