软件工程 概述

软件 不仅仅是一个程序代码。程序是一个可执行的代码,它提供了一些计算的目的。 软件被认为是集合可执行的程序代码,相关库和文档的软件。当满足一个特定的要求,就被称为软件产品。

工程 是所有有关开发的产品,使用良好定义的,科学的原理和方法。

在这里插入图片描述

软件工程 是一门工程分支使用定义良好的科学原理,方法和程序开发软件产品。软件工程的成果是一个高效,可靠的软件产品

定义

IEEE对于软件工程的定义:

(1) 将系统、规范、可量化的方法应用于软件的开发、运行和维护;也就是说,工程在软件中的应用。
(2) 研究方法如上陈述。

Fritz Bauer(德国计算机科学家)对软件工程的定义:

软件工程是建立和使用合理的工程原理,以便经济地获得可靠且在真是机器上有效工作的软件。

软件演化

运用软件工程的原理和方法开发软件产品的过程被称为软件演化。此处包含的软件的初始开发及维护和更新,直到所需的软件产品的开发,其满足预期需求。

在这里插入图片描述

演化从需求收集过程开始。之后,开发人员创建预期软件的原型,并将其展示给用户,以便在软件产品开发的早期阶段获得他们的反馈意见。用户提出的建议,在这几个连续的更新和维护不断变化太大。这个过程改变了原来的软件,直到所需的软件来完成。

即使用户手中已有所需的软件,先进的技术和不断变化的需求迫使软件产品做出相应的改变。从头开始重新创建软件并与需求一对一是不可行的。唯一可行且经济的解决方案是更新现有的软件,使其符合最新要求。

软件演化规律

Lehman 给了软件演化规律。他把软件分为三个不同的类别:

S型(静态型): 这是一款严格按照定义的规范和解决方案工作的软件。解决方法和实现它的方法,都在编码之前立即被理解。S型软件至少受到的更高最少,因此这是最简单的。例如,用于数学计算的计算器程序。
P-型 (实用型): 这是一个程序集合的软件。这是由程序可以做什么来定义的。在这个软件中,规范可以描述,但解决方案并不明显。例如,游戏软件。
E-型(嵌入型): 该软件紧密配合实际环境的要求。这种软件具有高度的进化,因为在现实世界的情况下,法律,税收等会发生各种变化。例如,网上交易软件。

E型软件演化

Lehman 给了八项法律为E型软件演化:

不断变化 - E型软件系统必须不断适应现实世界的变换,否则它逐渐变得不那么有用。
日益复杂 - 随着 E 类软件系统的发展,其复杂性往往会增加,除非进行维护或减少工作。
维护熟悉度 - 必须不惜任何代价保留对软件的熟悉或关于它是如何开发的、为什么以这种特定方式开发等的知识,以便在系统中实施更改。
持续增长 - 为了使E型系统旨在解决某些业务问题,其实施变化的规模根据业务生活方式的变幻而增长。
降低质量 - 除非严格维护并适应不断变化的操作环境,否则 E 类软件系统的质量会下降。
反馈系统 - E型软件系统构成多环回路,多级反馈系统,必须如此对待才能成功修改或改进。
自我调节 - E型系统的演化过程是自我调节,产品分布和过程措施接近正常。
组织稳定性 - 在不断变化的 E 型系统中,平均有效的全球活动率在产品的整个生命周期内是不变的。

软件范式

软件范例参考方法和步骤,在设计的软件,该软件被执行。有提出许多方法,并在今天的工作,但我们需要看到在软件工程这些范式立场。这些可以组合成各种类别,虽然每个这些被包含在彼此:

在这里插入图片描述

编程模式是软件设计模式的一个子集是进一步的软件开发模式的一个子集。

软件开发范式

这种模式被称为软件工程范例,所有有关软件开发工程的概念被应用。它包括各种研究和需求收集,这有助于软件产品来构建。

需求收集
设计软件
编程

软件设计模式

这一模式是软件开发的一部分,包括:

设计
维护
编程
编程范式

这一模式是密切相关的软件开发编程方面。这包括:

编码测试
整合

软件工程的需求

软件工程的需要,因为较高的利率变化的用户需求及环境上的软件工作。

大型软件 - 建造一堵墙比建造房屋或建筑物更容易,同样,随着软件的规模变大,工程必须采取措施为其提供科学的过程。
可扩展性 - 如果软件过程不是基于科学和工程概念,那么重新创建软件比扩展现有软件更容易。
成本 - 由于硬件行业已经展示了它的技能和庞大的制造业,降低了计算机和电子硬件的价格。但是,如果不采用适当的流程,软件成本仍然很高。
动态性 - 软件的不断发展和适应在很大程度上取决于用户工作的环境。如果软件的性质总是在变化,则需要在现有软件中进行新的增强。这就是软件工程发挥良好作用的地方。
质量管理 - 更好的软件开发过程提供更好质量的软件产品。

优秀的软件特性

一个软件产品可以判断通过其功能和多少用户友好。这个软件必须满足以下功能:

操作
过渡
维护

一个精心设计和制作的软件预计将有以下几个特点:

操作
这告诉我们如何以及软件的操作工作。它可以在被测定:

预算
可用性
正确性
功能
可靠性
安全
安全性

过渡

这方面是重要的,当软件从一个平台转移到另一个:

可移植性
互操作性
可重用性
适应性

保养

这讲述一个软件以及如何有能力维护自己的每一个变化的环境中:

模块化
可维护性
灵活性
可扩展性
总之,软件工程是计算机科学的一个分支,它使用定义明确的工程概念来产生高效、持久、可扩展、预算内和准时的软件产品。

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

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

相关文章

Sui 集成 Phantom,生态迎来全新里程碑

作为领先的非托管多链加密👛,Phantom 宣布将支持 Sui 区块链。Sui 将加入 Solana、Bitcoin 和 Ethereum 队伍,成为该 wallet 支持的少数 L1 区块链之一。 此次集成也大幅提升了 Phantom 的互操作性,同时表明 wallet 提供商和应用…

目标跟踪领域经典论文解析

亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在…

如何解决 java.nio.charset.CoderMalfunctionError: 编码器故障错误问题?亲测有效的解决方法!

java.nio.charset.CoderMalfunctionError 是一个在 Java 中相对较少遇到的异常,通常与字符编码转换过程中的错误有关。当 Java 程序在进行字符编码转换时,遇到无法处理的字符或编码故障时,就会抛出该异常。 1. 问题描述 java.nio.charset.C…

低级爬虫实现-记录HCIP云架构考试

因工作需要考HCIP云架构(HCIP-Cloud Service Solution Architect)证书, 特意在淘宝上买了题库, 考过了。 事后得知自己被坑了, 多花了几十大洋。 所以想着在授权期内将题库“爬”下来, 共享给大家。 因为整个过程蛮有…

QGroundControl之5-AppSettings.cc

介绍 应用程序设置 Application Settings ,这里看下语言选择功能,它是怎么和json文件关联起来的,刚刚看的时候,很是奇怪这么多的json文件作用。 1.AppSettings.cc 文件怎么和App.SettingsGroup.json关联 在AppSettings.cc文件没…

jenkins邮件的配置详解

Jenkins邮件的配置涉及多个步骤和细节,以下是详细的配置指南: 一、前期准备 确定邮件服务:明确Jenkins将要使用的邮件服务,如QQ邮箱、163邮箱、公司邮箱(基于Microsoft 365或Exchange Server)等。获取SMTP配置信息:根据邮件服务类型,获取相应的SMTP服务器地址、端口号…

【ArcGIS微课1000例】0134:ArcGIS Earth实现二维建筑物的三维完美显示

文章目录 一、加载数据二、三维显示三、三维符号化一、加载数据 加载配套实验数据(0134.rar中的建筑物,2d或3d都可以),方法如下:点击添加按钮。 点击【Add Files】,在弹出的Open对话框中,选择建筑物,点击确定,完成添加。 默认二维显示: 二、三维显示 右键建筑物图层…

jupyterlab 增加多个kernel,正确做法

1、背景 需要增加一个kernel然后相当于隔离一个环境 juypterlab Version 3.0.14 2、用conda 安装 例如,你在conda下有一个python 3.12 的环境 py312 ipython kernel install --user --namepy312 如果保持的话,用pip安装相应的包就好 3、检查是否配置好 …

案例-商品列表(组件封装)

标签组件封装 1.双击显示,自动聚焦 2.失去焦点,隐藏输入框 标签一列,不同行的标签内容不同,但是除此之外其他基本一致,所以选择用 标签组件 将这一部分封装为一个组件,需要时组件标签展示。 首先标签处一进…

Python 基础学习(一)

一.基础语法 注释 Python中单行注释以 # 开头,如下: #!/usr/bin/python3# 第一个注释 print ("Hello, Python!") # 第二个注释多行注释可以用多个 # 号,还有 ‘’’ 和 “”": #!/usr/bin/python3# 第一个注释…

TIM输入捕获---STM

一、简介 IC输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存在CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模…

【Android Studio】学习——网络连接

实验:Android网络连接 文章目录 实验:Android网络连接[toc]实验目标和实验内容:1、掌握Android联网的基本概念;2、能够使用URL connection实现网络连接;3、掌握第三方库的基本概念4、需实现的具体功能 实验结果功能说明…

ROS学习笔记二:ROS环境搭建

安装ubuntu安装ROS 参考赵虚左老师教程:ROS安装ROS 快速上手体验 -使用命令来实现 –创建工作空间: mkdir -p ros_learn_ws/src// ros_learn_ws为自定义空间 cd ros_learn_ws catkin_make –创建ROS功能包并添加依赖 cd src catkin_create_pkg demo_01 r…

5G中什么是ATG网络?

有人问Air to Ground Networks for NR是怎么回事?这个是R18 NR才引入的。 ATG很多部分和NTN类似中的内容类似。比较明显不同的是,NTN的RF内容有TS 38.101-5单独去讲,而ATG则会和地面网络共用某些band,ATG可以工作在N1/N3/N34/N39…

基础算法--双指针

两数之和 点击:题目链接 解法一:暴力解法 时间复杂度:O(N^2) 算法思路:两层for循环即可列出所有两个数字的组合,判断是否等于目标值 算法流程: 两层 for 循环: 外层 for 循环依次枚举第⼀个…

什么是Linux系统架构?

​ Linux系统架构是指Linux操作系统的整体结构和工作层次,它定义了系统组件如何交互、如何管理硬件资源,以及用户如何通过不同的层次与系统进行交互。Linux架构通常有两种划分方法:系统层次架构和功能层次架构,两者都可以很好地描…

spring6:4、原理-手写IoC

目录 4、原理-手写IoC4.1、回顾Java反射4.2、实现Spring的IoC 4、原理-手写IoC 我们都知道,Spring框架的IOC是基于Java反射机制实现的,下面我们先回顾一下java反射。 4.1、回顾Java反射 Java反射机制是在运行状态中,对于任意一个类&#x…

不是“我应该做什么”,而是“我想做什么”

1. 识别内心的渴望 首先,我们需要识别自己真正的愿望和激情所在。这可能需要一些时间和自我反思。问自己:在没有任何外界压力的情况下,我真正想做的是什么?是赚钱、生活、旅行、追星,还是其他什么?识别这些…

30天学会Go--第7天 GO语言 Redis 学习与实践

30天学会Go–第7天 GO语言 Redis 学习与实践 文章目录 30天学会Go--第7天 GO语言 Redis 学习与实践前言一、Redis 基础知识1.1 Redis 的核心特性1.2 Redis 常见使用场景 二、安装 Redis2.1 在 Linux 上安装2.2 在 Windows 上安装2.3 使用 Docker 安装 Redis 三、Redis 常用命令…

Vue项目开发 如何实现父组件与子组件数据间的双向绑定?

在 Vue.js 中,实现父组件与子组件数据之间的双向绑定,可以通过以下几种方式。下面我将介绍几种常见的方法,并解释它们的实现原理和适用场景。 1. 使用 v-model 实现双向绑定 v-model 是 Vue.js 中最常见的双向绑定方式,它可以使…