软件工程与计算(一)软件工程基础

news2024/11/28 17:53:13

国庆快乐,今天开始更新《软件工程与计算(卷二)》的重要知识点内容~

 一.软件

1.软件独立于硬件

早期的软件是为了计算机硬件在研究型项目中而开发制造的,人们使用专门针对于硬件的指令码和汇编语言编写,这也是最早软件的雏形~此时软件是为了最大化计算机硬件的能力而编写的,没有独立存在的需求,本质上被认为是硬件的零件之一

导论20世纪5/60年代中期,计算机硬件开始进入商用,同时带动了软件的发展——直至如今,绝大多数的软件是独立于计算机硬件的

2.软件是一种工具

软件能够完成复杂的科学计算,是一种有用的计算工具~随着商用计算机的普及,软件被广泛利用与商业计算和数据处理之中

3.软件的核心是程序

软件以程序代码为核心,由3个部分组成:

  • 程序:机器指令的集合
  • 文档:描述程序操作和使用的文档
  • 数据:程序运行时需要使用的信息

4.开发比编程远远复杂

软件的发展和变化有两个重要趋势:

  • 软件的规模和复杂度日益增加
  • 用于解决实际业务问题的应用软件越来越多

为了控制因为程序增长带来的复杂度,开发人员需要首先进行需求开发明确问题域目标,然后进行设计将单个的复杂程序分解为多个简单部分以方便编程~

随着规模的增加,编程的工作比例会下降,其他的比例会上升:

 

5.应用软件基于现实又高于现实

总的来说,应用软件和现实的关系是:始于现实、基于现实并改进现实,实现现实的螺旋上升~

  • 首先,软件始于现实,有需要解决的问题时人们才会要求开发软件
  • 其次,基于现实才能解决问题——即以现实为基础,然后才能构建解决问题的软件方案~
  • 最后,软件并不是单纯的模拟显示,它还要解决显示世界的问题,把现实世界变得更好

 

二.软件工程

1.定义

  • 简单理解:生产软件的工程学
  • 标准定义:应用系统的、规范的、可量化的方法来开发、运行和维护软件,即将工程应用到软件

2.一种工程活动

工程学科共性:

  • 具有解决实际问题的动机
  • 应用科学知识指导工程活动
  • 成本效益比为基本条件
  • 构建及其或事物
  • 以服务人类为最终目的

工程师有共同要求:

  • 仔细评估项目的可选活动
  • 需要对某些对象进行度量
  • 强调项目设计过程中的纪律性
  • 可胜任:研发、开发、设计、生产、测试、管理、销售等多种角色
  • 选择和使用合适的工具是工程的关键要素
  • 通过专业写会发展和确认原理、标准和最佳实践方法,并提高个人能力

3.动机

软件工程需要解决的问题领域范围广泛,没有行业和领域限制,需要客户和用户的紧密合作~

与传统的工科相比,一个软件工程师要能够在不同的行业领域里表现出同等的工作能力,而同时,软件工程师不可能了解所有的领域,所以他们要与实际问题的来源——客户和用户进行深入的交流和合作,因为客户和用户最了解领域知识和问题。但在软件工程领域,用户必须积极参与构建过程才能得到心仪的软件产品,实践也一再表明,客户和用户的有效参与是软件成功的必要因素~

软件工程师在构建软件之前要花很大力气去明确项目的目标——这一点非常重要!

4.科学性、实践性、工艺性并重

软件工程的指导知识还是“工艺、实践方法/原则和科学知识并立”,软件工程行为既有科学性,又有实践性,还有工艺性~

5.追求足够好

软件工程不追求最好的方案,只要求足够好的方案——即成本效益比有效的方案~

6.产品基于虚拟计算机

软件工程的核心是创建软件方案,描述所需软件系统的特征和行为,然后把软件方案通通过编程移植到通用的计算机上面,计算机就会神奇的表现出软件方案所描述的特征和行为~

(本质上就是各种个人PC)

7.最终目的

承担社会责任,促进整个社会的进步——软件工程追求生产方式的成功,而不是特定产品的成功~

  • 软件工程要以科学知识为基础,建立成熟的方法与技术,通过可普及和可重复的生产方式开发软件
  • 软件工程的社会责任最基本要求是开发者对软件产品的质量负责,此外还要求软件工程从业者要遵守职业道德(保证质量,不危害他人) 

三.软件工程概览

1.工程知识域

5个技术知识域:

6个管理知识域:

11个知识域并非等同重要~

职业软件工程师的软件知识重要性评价:

软件工程师要两个的掌握各个知识域,尤其是软件技术知识域,还要具备良好的交流沟通能力~ 

2.开发活动

需求开发:
软件工程要解决的实际问题是范围广泛并且模糊不清的,所以在开发软件之初就需要进行需求开发,它从空白开始,主要目的是建立软件解决方案,具体任务包括:

①探索并明确描述现实世界信息;

②探索并定义问题;

③建立软件系统的解决方案,使得将软件系统应用到现实世界之后能够解决问题。


软件解决方案又称为软件产品设计方案,需求开发产生的主要制品是软件需求规格说明文档和需求分析模型:

  • 软件需求规格说明文档详细描述了软件解决方案的内容
  • 需求分析模型重点描述了软件解决方案中的复杂技术方案

软件设计:

软件设计在需求开发之后进行,它以软件需求规格说明为基础,主要目的是建立软件系统的构建方案,具体任务括:

①软件体系结构设计,确定系统的高层结构;

②详细设计,将高层结构的部件设计为更详细的模块与类,定义模块与类的功能以及它们的接口;

③人机交互设计,设计软件系统与外界的有效交互方案,包括设计用户界面。


软件构建方案又称为软件工程设计方案,是由抽象软件实体组成的复杂概念结构。工程设计方案是从生产者的角度和产品内部结构的方式描述产品


软件设计产生的主要制品是软件设计描述文档和软件设计模型:

  • 软件设计描述文档:软件构建方案的内容
  • 软件设计模型:软件构建方案中的细节

软件构造:

软件构造在软件设计之后进行,它以软件构建方案为基础,主要目的是使用编程语言实现软件构建方案,具体任务包括:

①程序设计,以“数据结构+算法”的方式继续细化和深化软件构建方案基本单位(模块或者类)的设计

②编程,将程序设计方案映射为代码;

③调试,修改程序代码,解决程序中发现的问题。

软件构造产生的主要制品是程序源代码和编译后的可执行程序

软件测试:

软件测试的主要目的是验证和确认软件产品的质量,它包含两重含义:

①从技术上保证产品的质量是合格的,主要判定产品生产中的技术运用过程是否正确;

②保证产品质量是符合需求规格的,主要判定产品生产中的技术运用出发点是否正确。


软件测试产生的主要制品是测试报告,它描述了测试中发现的错误和故障。

软件交付:

软件交付在软件产品通过所有测试之后进行,主要目的是将软件产品交付给用户使用

软件交付的主要任务包括:

①安装与部署软件系统;

②培训用户使用软件并提供文档支持。

软件交付产生的主要制品是用户使用手册,它描述了软件使用方法和常见故障的解决。

软件维护: 

软件维护又称为软件演化,在软件产品交付给用户之后进行,直到软件产品消亡才结束,主要目的是保持交付给用户的软件产品能够正常运行。

软件维护的主要任务是修改软件使之移除缺陷、适应环境变化、提高软件质量或满足新的需求。

3.常见的角色分工

  • 需求工程师:需求开发
  • 软件体系结构师:体系结构设计
  • 软件设计师:详细设计
  • 程序员:软件构造
  • 人机交互设计师:人机交互设计
  • 软件测试人员:软件测试
  • 项目管理人员:计划、组织、领导、协调
  • 软件配置管理人员:管理各种产品
  • 质量保障人员:监督、保障质量
  • 培训和支持人员:负责软件交付与维护
  • 文档编写人员:专门写作文档

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

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

相关文章

中文符号雨python

参考地址 字体地址也可以自己找一下资源 import pygame import randomdef main():# 初始化pygamepygame.init()# 默认不全屏fullscreen False# 窗口未全屏宽和高WIDTH, HEIGHT 1000, 600init_width, init_height WIDTH, HEIGHT# 字块大小,宽,高sufac…

【计算机网络】网络层-控制平面(学习笔记)

一、路由原理 1、网络层功能 1)数据平面 转发:将分组从路由器的一个输入端口移到合适的输出端口 2)控制平面 路由:确定分组从源到目标的路径 2、路由算法 路径长度可靠性延迟带宽负载通信代价 3、路由的原则 1&#xff0…

2021-06-11 51蛋骗鸡用小数点作秒指示,分钟计时.(怎么用二个数码管做分的倒计时,DP亮灭来计秒)

缘由怎么用二个数码管做分的倒计时,DP亮灭来计秒,求思路 - 24小时必答区 #include "REG52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; sbit BUZ1P1^0; bit k0; unsigned char code SmZiFu[]{63,6,91,79,102,109,125,7,127,111,128};//0-9. unsign…

4. 条件查询

首先区分下match,match_phrase,term, 参考:https://zhuanlan.zhihu.com/p/592767668?utm_id0 1、全量查询分页指定source 示例:请求地址为http://127.0.0.1:9200/students/_search,请求体为: {"query":…

git使用,一点点

查看自己有没有安装git git --version 如果没有安装请执行sudo yum install -y git来安装 git 指令 git log 查看日志 git pull 同步远端和本地仓库 这就是冲突的报错: 所以这个时候你要同步一下git pull

MATLAB中d2d函数用法

目录 语法 说明 示例 重新采样离散时间模型 重新采样已识别的离散时间模型 d2d函数的功能是重新采样离散时间模型。 语法 sys1 d2d(sys, Ts) sys1 d2d(sys, Ts, method) sys1 d2d(sys, Ts, opts) 说明 sys1 d2d(sys, Ts)将离散时间动态系统模型 sys 重新采样&#…

【精品】Springboot 接收发送日期类型的数据

问题 无法请求到后台,后台报错:[Failed to convert property value of type java.lang.String to required type java.time.LocalDateTime for property : 2023-10-02T09:26:16.06908:00 WARN 14296 --- [p-nio-80-exec-1] .w.s.m.s.Defaul…

【中秋国庆不断更】OpenHarmony组件内状态变量使用:@State装饰器

State装饰的变量,或称为状态变量,一旦变量拥有了状态属性,就和自定义组件的渲染绑定起来。当状态改变时,UI会发生对应的渲染改变。 在状态变量相关装饰器中,State是最基础的,使变量拥有状态属性的装饰器&am…

2021-06-09 51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次

缘由51单片机:两个独立按键控制一个led,k1按下松开led闪烁三次,k2按下LED闪烁五次_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^0; sbit K2 P1^1; sbit LEDP0^0; void main() {unsigned char Xd0,ss0;unsigned int wei0;while(1){if(K10&&Xd0){ss3*2;…

程序调试技巧

多线程调试 有个开关的,在Eclipse里默认开启,在IntelliJ IDEA里默认是没有开启的。也就是说如果你在IDEA里代码里加断点,虽然一个线程的断了下来,但其他线程的已经执行过了。此处把线程的suspend设置成和Eclipse模式一样之后&…

华为云云耀云服务器L实例评测|Elasticsearch的Docker版本的安装和参数设置 端口开放和浏览器访问

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 本篇博客介绍Elasticsearch的Docker版本的安装和参数设置,端口开放和浏览器访问。 其他相关的华为云云…

固定式工业RFID读写器有哪些特点?如何选型?

工业读写器可分为便携式读写器和固定式读写器,固定式读写器主要是将读写器固定在某一位置钟,常常应用在工位、生产、进入库等场景中。但是很多人并不了解固定式读写器都有哪些特点,具体应该怎么选型,下面我们就一起来了解一下。 固…

.Net Core后端架构实战【介入IOC控制反转】

引言 Inversion of Control,简称IOC,即控制反转。记得当初刚实习的时候公司的带我的人和我提到过IOC这个概念,当初完全不知道是 啥东西。后来有幸写了半年Java,SpringBoot里面业务开发随处可见IOC。再后来我写.Net Core用到的第一个框架Blog.Core项目,它里 面IRepository与R…

利用DMA的触发循环实现eTMR的PWM周期计数

利用DMA的触发循环实现对eTMR的PWM周期计数 文章目录 利用DMA的触发循环实现对eTMR的PWM周期计数引言分析问题eTMR的调试模式ModulizationFTM的多次重载事件终极大招-使用触发链 解决问题确认DMAMUX中的eTMR相关触发源eTMR产生触发信号 软件总结参考文献 引言 最近在同客户一起…

朝气蓬勃 后生可畏

介绍: 线段树是一棵二叉搜索树,思想与分治很想,把一段区间平分平分再平分,平分到不能平分为止,可以进行方便的区间修改和区间查询,当然,树状数组能做的单点修改、单点查询,线段树也可以更好地实现,总之,线段树是树状数组的升级版,此外,线段树能做的平衡树也能做,但…

Acwing 839. 模拟堆

Acwing 839. 模拟堆 题目描述思路讲解代码展示 题目描述 思路讲解 代码展示 #include <iostream> #include <algorithm> #include <string.h>using namespace std;const int N 100010;int h[N], ph[N], hp[N], cnt;void heap_swap(int a, int b) {swap(ph[…

2021-06-17 51蛋骗鸡0-99自动加减

缘由怎么实现两位秒表自动加减_嵌入式-CSDN问答 #include "REG52.h" sbit K1 P1^5; sbit K2 P1^6; sbit K3 P1^7; sbit K4 P1^4; //sbit LED1P1^0; //sbit LED2P1^1; //sbit LED3P1^2; //sbit LED4P1^3; bit k0; unsigned char code SmZiFu[]{63,6,91,79,102,10…

CentOS安装OpenNebula(一)

OpenNebula是一个非常成熟的云平台&#xff0c;&#xff0c;十分简单&#xff0c;但是功能十分丰富。它提供了十分灵活的解决方案&#xff0c;让用户能建立并管理企业云和虚拟的数据中心。 OpenNebula是专门为云计算打造的开源系统&#xff0c;用户可以使用Xen、KVM、VMware等…

JAVA 异常分类及处理

1 概念 如果某个方法不能按照正常的途径完成任务&#xff0c;就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时&#xff0c;这个方法会立刻退出同时不返回任何值。另外&#xff0c;调用 这个方法的其他代码也无法继续执行&#xff0c;异常处理…

controller-manager学习三部曲之一:通过脚本文件寻找程序入口

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于《controller-manager学习三部曲》 《controller-manager学习三部曲》是欣宸原创的kubernetes深入学习系列之一&#xff0c;在前面的《client-go实战》系…