我对软件工程的理解

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》,欢迎大家进行讨论,我们共同进步。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【你也能从零基础学会网站开发】浅谈一下SQL Server 2000中的NULL值到底有什么用处

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 NULL 是什么 …

2d实时数字人聊天语音对话使用案例,对接大模型

参看: https://github.com/wan-h/awesome-digital-human-live2d 电脑环境: ubuntu 1060ti 下载: git clone https://github.com/wan-h/awesome-digital-human-live2d.gitdocker部署; cd awesome-digital-human-live2d docker-compose -f docker-compose-quickStart.ya…

Spring AI Java程序员的AI之Spring AI(一)

SpringAI 基础使用 前言Spring AIChatClientImageClientOpenAiAudioTranscriptionClientEmbeddingClient 总结 前言 Spring AI,听着名字就感觉很好使用,快速上手,虽然功能没有太完善,但是社区活跃度很高,可以看看源码…

大数据治理:构建数据驱动的智能决策体系

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Edge论文的创新点

创新点及其来源 1. 从灰度边缘重建RGB图像的方法(EdgRec) 基于的方法:传统的重建方法,如使用自动编码器或生成模型来重建正常样本的图像,并通过对原始图像和重建图像的比较来检测异常。 重建过程: 训练阶…

Spring Boot: 构建高效中小型医院网站

1 绪论 1.1研究背景 随着计算机技术的成熟、普及,现代信息技术革命的迅猛发展,正冲击并进而改变着经济和社会结构。信息化的程度已经成为一个国家,一个企业,一个组织仍至一个人发展的基础和竞争成败的关键。 在实际的生活中,用户都…

Oracle Expdp按条件导出-指定表数据

1.场景描述 业务需求:导出A机构、2024的数据,以dmp格式,保留导出日志。首先,需要分析库中需要导出的表清单、表的机构字段约束、表的时间约束;然后再导出。 2.方案分析 本次采用Oracle的expdp数据泵方式导出&#xf…

集合框架12:Set集合概述、Set接口使用

视频链接:13.24 Set接口使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p24 1、Set集合概述 特点:无序、无下标,元素不可…

现今 CSS3 最强二维布局系统 Grid 网格布局

深入学习 CSS3 目前最强大的布局系统 Grid 网格布局 Grid 网格布局的基本认识 Grid 网格布局: Grid 布局是一个基于网格的二位布局系统,是目前 CSS 最强的布局系统,它可以同时对列和行进行处理(它将网页划分成一个个网格,可以任…

限流是什么?如何限流?怎么限流?

概述 什么是限流 对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机 为什么要限流 因为互联网系统通常都要面对大并发大流量的请求,在突发情况下(最常见的场景就是秒杀、抢购),瞬时大流量会直接将系统打垮,无法…

DS堆的实际应用(10)

文章目录 前言一、堆排序建堆排序 二、TopK问题原理实战创建一个有一万个数的文件读取文件并将前k个数据创建小堆用剩余的N-K个元素依次与堆顶元素来比较将前k个数据打印出来并关闭文件 测试 三、堆的相关习题总结 前言 学完了堆这个数据结构的概念和特性后,我们来看…

DVWA | Files Upload(文件上传)通关笔记

概念 **文件上传漏洞**是网络安全中常见的漏洞之一,攻击者可以利用该漏洞上传恶意文件,进而在服务器上执行恶意代码、绕过权限验证或获取敏感数据。文件上传漏洞主要发生在允许用户上传文件的Web应用程序中,比如图像、文档上传功能等。 ###…

dayjs日期格式化,开发uniapp或unicloud前后端进行时间格式转换

一、 为什么要用日期格式化 因为在开发项目过程中,会遇到各种各样的日期格式,有的显示完整的年-月-日 时:分:秒,而有的场景就只显示月-日等格式,还有就是显示当前时间和注册时间的间隔时长等,场景非常多,如…

学习 Flutter 的最佳路线图

学习 Flutter 的最佳路线图 视频 https://youtu.be/IpKXVq9lP_4 https://www.bilibili.com/video/BV1J92uYDEit/ 前言 原文 Flutter 开发者必看:全面的学习路线图 本文借鉴了 roadmap 的思路,为大家介绍如何有效学习 Flutter。 该路线图提供了从零开…

MySQL-DQL练习题

文章目录 简介初始化表练习题 简介 本节简介: 主要是一些给出一些习题, 关于DQL查询相关的, DQL查询语句是最重要的SQL语句, 功能性最复杂, 功能也最强, 所以本节建议适合以及有了DQL查询基础的食用, 另外注意我们使用的是Navicat, SQL编辑的格式规范也是Navicat指定的默认格式…

uni-app uni.setTabBarBadge 不生效

‘text’属性,类型必须是字符串,而接口返回的是数值,没有注意到,所以怎么都不生效,也不会有报错!

基于一个python库tencent的API接口开发有趣应用

这篇博客给大家介绍一个python库 tencent (https://pypi.org/project/tencent/) 以及对应三方API的开发流程,以公众号后台通过服务器接入自动系统回复为例。基于微信公众号后台开发自动回复,或者利用多模态信息回复用户输入,需要自己有独立服…

python爬虫实战案例——从移动端接口抓取微博评论,采用cookie登陆,数据存入excel表格,超详细(15)

文章目录 1、任务目标2、网页分析3、代码编写3.1 代码分析3.2 完整代码1、任务目标 1、目标网站:微博文章(https://m.weibo.cn/detail/4813628149072458),这是微博某一篇博文,用于本文测试 2、要求:爬取该博文下,所有一级评论和二级评论,以及每条评论的作者,最后保存至E…

【Kafka】Kafka源码解析之producer过程解读

从本篇开始 打算用三篇文章 分别介绍下Producer生产消费,Consumer消费消息 以及Spring是如何集成Kafka 三部分,致于对于Broker的源码解析,因为是scala语言写的,暂时不打算进行学习分享。 总体介绍 clients : 保存的是Kafka客户端…

Docker新手必看:快速安装和配置BookStack在线文档系统

文章目录 前言1. 安装Docker2. Docker镜像源添加方法3. 创建并启动BookStack容器4. 登录与简单使用5. 公网远程访问本地BookStack5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 前言 本文主要介绍如何在Linux系统使用Docker本地部署在线文档管理…