软件工程笔记一

news2024/11/25 21:25:46

目录

软件的概念、特性和分类

软件与程序

软件的特性

软件的分类

软件危机与软件工程

软件危机

如何摆脱软件危机?

软件工程概念的提出

什么是软件工程?

软件工程的若干定义

系统工程的目标

 软件工程的基本原理

软件工程的目标

软件的质量特性

软件生存期

软件定义时期

问题定义

可行性研究

需求分析和定义

软件开发时期

概要设计

详细设计

程序编码和单元测试

集成测试和系统测试

软件运行维护时期

软件工程方法概述

概念

结构化方法学  

面向对象方法学

面向服务方法

面向数据方法

形式化方法

软件工具概述

软件工具的概念

软件工具的发展

软件工具的分类

常用软件工具

软件工程知识体系及知识域

软件工程教育(3个历史时期)  

软件工程知识体系

软件工程知识体系指南的目标

软件工程知识体系指南的内容


软件的概念、特性和分类

软件与程序

软件( Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program) ,数据(Data)及其相关文档( Document)的完整集合。

程序是按事先设计的功能和性能要求执行的指令序列。

数据是使程序能正常操纵信息的数据结构。

文档是与程序开发,维护和使用有关的图文材料。

软件的特性

  • 形态特性: 无形的、不可见的逻辑实体
  • 智能特性:软件是复杂的智力产品,开发凝聚了人们大量的脑力劳动。
  • 开发特性:尽管已经有了一些工具辅助软件开发,目前仍尚未实现自动化。
  • 质量特性:目前无法得到完全没有缺陷的软件产品。
  • 生产特性:软件一旦开发出来,复制十分简单,成本也极为有限。
  • 管理特性:由于上述特点,软件的开发管理显得更为重要,也更加独特。
  • 环境特性:软件的开发和运行都离不开相关的计算机系统环境,包括支持它的开发和运行的相关硬件和软件。
  • 维护特性:软件投入使用以后需要进行维护,但这种维护与传统产业产品的维护概念有着很大差别。

软件的分类

系统软件

  •   操作系统
  •   数据库管理系统
  •   设备驱动程序
  •   通信和网络处理程序等

支撑软件(工具软件)

  •   纵向支撑软件:分析、设计、编码、测试工具等
  •   横向支撑软件:项目管理工具,配置管理工具等

应用软件

  •   工程与科学计算软件
  •   商业数据处理软件
  •   ERP软件
  •   计算机辅助设计/制造软件 
  •   系统仿真软件 
  •   智能产品嵌入软件 
  •   事务管理、办公自动化软件

可复用软件

  •    标准函数库、类库、构件库等

软件危机与软件工程

软件危机

软件危机爆发于上个世纪六十年代末。

主要表现为:

软件的发展速度远远滞后于硬件的发展速度,不能满足社会日益增长的软件需求。

软件开发周期长、成本高、质量差、维护困难。

软件危机有以下一些经典表现:

  • 对软件开发成本和进度的估计常常很不准确。
  • 用户对“已完成的”软件系统不满意的现象经常发生。
  • 软件产品的质量往往靠不住。
  • 软件常常是不可维护的。
  • 软件通常没有适当的文档资料。
  • 软件成本在计算机系统总成本中所占的比例逐年上升。
  • 软件开发生产率提高的速度,既跟不上硬件的发展速度,也远远跟不上计算机应用迅速普及深入的趋势。

除了软件本身的特点,软件危机发生的主要原因有:

  • 缺乏软件开发的经验和有关软件开发数据的积累,开发工作的计划很难制定。
  • 软件人员与用户的交流存在障碍,获取的需求不充分或存在错误。
  • 软件开发过程不规范,如:没有真正了解用户的需求就开始编程序。
  • 随着软件规模的增大,其复杂性往往会呈指数级升高。需要很多人分工协作,不仅涉及技术问题,更重要的是有科学严格的管理。
  • 缺少有效的软件评测手段,提交用户的软件质量不能完全保证。

如何摆脱软件危机?

  1. 消除“软件就是程序”的错误观念。
  2. 充分认识到软件开发应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
  3. 推广和使用在实践中总结出来的开发软件的成功技术、方法和工具。
  4. 按工程化的原则和方法组织软件开发工作。

软件工程概念的提出

为了克服软件危机,1968年10月在北大西洋公约组织(NATO)召开的计算机科学会议上,Fritz Bauer首次提出“软件工程”的概念,试图将工程化方法应用于软件开发。

Fritz Bauer对软件工程的定义是:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”

什么是软件工程?

概括地说,软件工程是指导计算机软件开发和维护的工程学科。

采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。

软件工程的若干定义

Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。

IEEE: 软件工程是开发、运行、维护和修复软件的系统方法。

Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。

系统工程的目标

 软件工程的基本原理

  • 用分阶段的生命周期计划严格管理  
  • 坚持进行阶段评审  
  • 实行严格的产品控制  
  • 采用现代程序设计技术  
  • 结果应能清楚地审查  
  • 开发小组的人员应该少而精  
  • 承认不断改进软件工程实践的必要性

软件工程的目标

运用先进的软件开发技术和管理方法来提高软件的质量和生产率,也就是要以较短的周期、较低的成本生产出高质量的软件产品,并最终实现软件的工业化生产。

基本目标:

  • 付出较低的开发成本  
  • 达到要求的软件功能  
  • 取得较好的软件性能  
  • 开发的软件易于移植  
  • 需要较低的维护费用  
  • 能按时完成开发工作,及时交付使用

软件的质量特性

功能性、可靠性、易用性、效率、可维护性和可移植性。

功能性:软件所实现的功能达到它的设计规范和满足用户需求的程度,其质量子特征包括适合性、正确性、安全保密性。

可靠性:在规定的时间和条件下,软件能够正常维持其工作的能力,其质量子特征包括成熟性、恢复性、容错性。

易用性:为了使用该软件所需要的能力,其质量子特征包括易理解性、易学习性、易操作性。

效率:在规定的条件下用软件实现某种功能所需要的计算机资源的有效性,其质量子特征包括时间特性、资源特性。

可维护性:当环境改变或软件运行发生故障时,为使其恢复正常运行所做努力的程度,其质量子特征包括易分析性、易修改性、易测试性。

可移植性:软件从某一环境转移到另一环境时所做努力的程度,其质量子特征包括适应性、易替换性。

软件生存期

软件也有一个孕育、诞生、成长、成熟和衰亡的生存过程,我们称这个过程为软件生命周期或软件生存期。

软件生存期分为三个时期:软件定义、软件开发、运行维护

软件定义时期

确定总目标和可行性; 导出策略和系统功能; 估计资源和成本; 制定工程进度表。

分为三个阶段:问题定义、可行性研究、需求分析。

问题定义

关键问题是:“要解决的问题是什么”。

提交的内容为关于问题性质、工程目标和工程规模的书面报告。

可行性研究

关键问题是:“上一个阶段所确定的问题是否有行得通的解决办法”。

提交的内容为可行性研究报告,即从技术、经济和社会因素等方面研究各方案的可行性。

需求分析和定义

对用户提出的要求进行分析并给出详细的定义 准确地回答“目标系统必须做什么”这个问题。也就是对目标系统提出完整、准确、清晰、具体的要求。

编写软件需求说明书或系统功能说明书及初步的系统用户手册 提交管理机构评审。

软件开发时期

任务:具体设计和实现前一个时期即软件定义时期定义的软件。

执行人:系统设计员,高级程序员,程序员,测试工程师和辅助人员等

阶段划分:分为概要设计、详细设计、编码和单元测试、集成测试和系统测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。

概要设计

概括地回答“怎样实现目标系统?”。

设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。

提交的文档是概要设计说明书。

详细设计

回答“应该怎样具体地实现这个系统”。

详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。

提交的文档是软件的详细设计说明书。

程序编码和单元测试

写出正确的容易理解、容易维护的程序模块。

提交的文档为源程序、详尽的程序说明和单元测试报告。

集成测试和系统测试

通过各种类型的测试(及相应的调试)使软件达到预定的要求。

提交的文档为测试计划、详细测试方案以及实际测试结果等。

软件运行维护时期

主要任务是使软件持久地满足用户的需要,通常有4类维护活动:

  1. 改正性维护,也就是诊断和改正在使用过程中发现的软件错误;
  2. 适应性维护,即修改软件以适应环境的变化;
  3. 完善性维护,即根据用户的要求改进或扩充软件,使它更完善;
  4. 预防性维护,即修改软件为将来的维护活动预先做准备。

开发过程中的典型文档

  • 软件需求规格说明书:描述将要开发的软件做什么。
  • 项目计划:描述将要完成的任务及其顺序,并估计所需要的时间及工作量。
  • 软件测试计划:描述如何测试软件,使之确保软件应实现规定的功能,并达到预期的性能。
  • 软件设计说明书:描述软件的结构,包括概要设计及详细设计。
  • 用户手册:描述如何使用软件。

各阶段的花费比例

软件工程方法概述

概念

软件工程包含技术和管理两方面的内容,是技术和管理紧密结合所形成的工程学科。

通常将软件开发全过程中使用的一整套技术方法的集合称为方法学(methedology),也称为范型(paradigm)。

目前使用最广泛的软件工程方法学:传统方法学(结构化方法学),面向对象方法学。

三要素:方法、工具和过程

软件工程方法为软件开发提供了 “如何做” 的技术;

软件工具为软件工程方法提供了自动的或半自动的软件支撑环境;

过程是为了获得高质量的软件所需要完成的一系列任务框架,它规定了完成各项任务的工作步骤。

结构化方法学  

也称为生命周期方法学或结构化范型。

将软件生命周期的全过程依次划分为若干个阶段,采用结构化技术来完成每个阶段的任务。

特点:

(1) 强调自顶向下顺序地完成软件开发的各阶段任务;    

(2) 结构化方法要么面向行为,要么面向数据,缺乏使两者有机结合的机制。

面向对象方法学

是将数据和对数据的操作紧密地结合起来的方法。

软件开发过程是多次反复迭代的演化过程。

面向对象方法在概念和表示方法上的一致性,保证了各项开发活动之间的平滑过渡。

对于大型、复杂及交互性比较强的系统,使用面向对象方法学更有优势。 

面向服务方法

服务是指与业务相关且独立于技术的业务接口。

面向服务方法通过组合各种服务来构建软件系统。

SOA的概念模型:

面向数据方法

面向数据的方法是基于数据思维,从业务逻辑的角度,强调一切业务“数据化”;从体系结构的角度,突出 “面向数据和以数据为核心”的思想。

形式化方法

形式化方法是一种基于形式化数学变换的软件开发方法,它可将系统的规格说明转换为可执行的程序。

主要特点:

软件需求规格说明被细化为用数学记号表达的详细的形式化规格说明;

设计、实现和单元测试等开发过程由一个变换开发过程代替。通过一系列变换将形式化规格说明细化成为程序。

软件工具概述

软件工具的概念

软件工具是指能支持软件生存周期中某一阶段(如系统定义、需求分析、设计、编码、测试或维护等)的需要而使用的软件工具。

早期的软件工具主要用来辅助程序员编程,如编辑程序、编译程序、排错程序等。

软件工具的发展

50年代末期出现了编辑程序、汇编程序和各种程序语言的编译程序或解释程序、连接程序、装配程序、排错程序等辅助软件编程活动的工具。

60年代末提出软件工程的概念后,支持软件开发、维护、管理等过程的各种活动的工具也应运而生。

80年代中期提出了软件过程的新概念,人们开始研制过程建模的工具、过程评价工具。    

如今,软件工具已由单个工具向多个工具集成的方向发展,且注重工具间的平滑过渡和互操作性。

软件工具的分类

支持软件开发过程的工具:主要有需求分析工具、设计工具(通常还可以分为概要设计工具和详细设计工具)、编码工具、排错工具、测试工具等。

支持软件维护过程的工具:主要有版本控制工具、文档分析工具、信息库开发工具、逆向工程工具、再工程工具等。

支持软件管理过程和支持过程的工具:主要有项目管理工具、配置管理工具、软件评价工具等。

常用软件工具

需求分析与设计工具:目前使用的大多数工具既支持需求分析工作,也支持软件设计工作。  

IBM Rational Requirement Composer  

Enterprise Architect(EA)

 IBM Rational Software Architect  

Microsoft Office Visio  

PowerDesigner  

Axure RP

编码工具与排错工具:现代软件开发使用集成开发环境IDE,一般包括代码编辑器、编译器、调试器和图形用户界面工具。

Visual Basic

Visual C++

Microsoft Visual Studio(简称VS)系列

Jbuilder

Eclipse、MyEclipse

测试工具:分为程序单元测试工具、组装测试工具和系统测试工具。

单元测试工具:目前最流行的单元测试工具是xUnit系列框架。

组装测试工具:也称为集成测试或联合测试。

……

软件工程知识体系及知识域

软件工程教育(3个历史时期)  

(1) 1978年以前:软件工程教育以计算机专业的一门孤立的课程形式存在。  

(2) 1978—1988年期间:早期的研究生学位教育,开始建立软件工程专业的研究生学位教育项目。

(3) 1988年以后:快速发展的研究生学科教育,使软件工程的理论快速发展,其中,卡内基·梅隆大学软件工程研究所(SEI)的影响不可忽视。

软件工程知识体系

软件工程知识体系指南的目标

(1) 促使软件工程本体知识成为世界范围的共识。

(2) 澄清软件工程与其他相关学科,如与计算机科学、项目管理、计算机工程以及计算机数学之间的关系,并且确定软件工程学科的范围。

(3) 反映软件工程学科内容的特征。

(4) 确定软件工程本体知识的各个专题。

(5) 为相应的课程和职业资格认证材料的编写奠定基础。

软件工程知识体系指南的内容

SWEBOK指南将软件工程知识体系划分为15个知识域(knowledge areas,KA),这些知识域又划分为三类:

软件工程基础类:数学基础、计算基础、工程基础、软件工程经济学。 

软件生存期过程类:软件工程模型和方法、软件需求、软件设计、软件构造、软件测试、软件维护。

软件工程管理类:软件工程过程、软件工程管理、软件配置管理、软件质量、软件工程专业实践。

计算机科学和软件工程的不同侧重点

 

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

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

相关文章

【数据结构】线性表——顺序表

文章目录 一、线性表二、顺序表2.1概念及结构2.2、顺序表接口实现2.2.1、顺序表的动态存储2.2.2、顺序表初始化2.2.3、检查空间判断进行增容2.2.4、顺序表尾插、尾删2.2.5、顺序表头插、头删2.2.6、顺序表查找2.2.7、顺序表在pos位置插入x2.2.8、顺序表删除pos位置的值2.2.9、顺…

stable diffusion 大模型

本节内容,给大家带来的是stable diffusion的基础模型课程。基础模型,我们有时候也称之为大模型。在之前的课程中,我们已经多次探讨过大模型,并且也见识过一些大模型绘制图片的独特风格,相信大家对stable diffusion大模…

ChatPaper.ai:研究生文献阅读的AI助手利器

为什么选择 ChatPaper.ai? 作为研究生,我们每天都面临着大量文献阅读的挑战。一篇关键论文往往需要反复阅读数小时,还要做笔记、提取要点、理解创新点,这个过程既耗时又费力。ChatPaper.ai(ChatPaper.ai - Chat with …

python-docx -- 读取word图片

文章目录 概念介绍形状对象读取图片自定义图形 概念介绍 从概念上来讲,word文档分为两层,一个文本层,一个绘画层; 文本层,从上到下,从左到右,流式排版,本页填满则开启新页面&#…

Python邮差:如何用代码精确投递商品快递费用的密信

目录 一、准备工作 二、编写API请求脚本 三、解析与处理快递费用数据 四、案例应用:模拟电商平台的快递费用计算 五、自动化邮件通知 六、总结 在电子商务的广阔天地里,精确计算并快速传递商品快递费用是一项至关重要的任务。作为Python邮差&#…

swoole扩展安装--入门篇

对于php来说,swoole是个强大的补充扩展。这是我第3次写swoole扩展安装,这次基于opencloudos8系统,php使用8.2。 安装swoole扩展首先想到的是用宝塔来安装,毕竟安装方便,还能统一管理。虽然获得swoole版本不是最新的&am…

Linux信号_信号的保存

我们知道向进程发送信号,进程并不是立即处理,而是等合适的时机进行处理。那么就需要保存信号。在信号的产生中说过信号保存在进程PCB里面的信号位图里,那信号位图到底是什么? 一.信号保存 我们先补充一些概念 1.阻塞 忽略概念 实…

如何使用示波器测量信号强度

示波器是一种用于观察和分析电信号的电子测试仪器。它可以显示信号的波形、幅度、频率和其他特性,是工程师和技术人员进行电路设计、调试和故障排除的重要工具。本文将详细介绍如何使用示波器测量信号强度。 一、认识示波器的基本组成部分 显示屏:用于显…

Axure设计之三级联动选择器教程(中继器)

使用Axure设计三级联动选择器(如省市区选择器)时,可以利用中继器的数据存储和动态交互功能来实现。下面介绍中继器三级联动选择器设计的教程: 一、效果展示: 1、在三级联动选择器中,首先选择省份&#xff…

K8S篇(基本介绍)

目录 一、什么是Kubernetes? 二、Kubernetes管理员认证(CKA) 1. 简介 2. 考试难易程度 3. 考试时长 4. 多少分及格 5. 考试费用 三、Kubernetes整体架构 Master Nodes 四、Kubernetes架构及和核心组件 五、Kubernetes各个组件及功…

卖模版还能赚到钱吗?

说到赚钱,我想大部分人都会感兴趣。但如果告诉大家现阶段卖模板也能赚钱,可能还是有人不信。我要说说我的观察了。 本文可在公众号「德育处主任」免费阅读 我是一只临期程序猿,我最早接触到“模板能卖钱”这个概念是在模板王里。模板王平台上…

超萌!HTMLCSS:打造趣味动画卡通 dog

这段HTML与CSS代码实现了一个超萌的动画卡通dog。 HTML <div class"dog"><div class"dog-body"><div class"dog-tail"><div class"dog-tail"><div class"dog-tail"><div class"do…

Elasticsearch Interval 查询:为什么它们是真正的位置查询,以及如何从 Span 转换

作者&#xff1a;来自 Elastic Mayya Sharipova 解释 span 查询如何成为真正的位置查询以及如何从 span 查询过渡到它们。 长期以来&#xff0c;Span 查询一直是有序和邻近搜索的工具。这些查询对于特定领域&#xff08;例如法律或专利搜索&#xff09;尤其有用。但相对较新的 …

【YOLOv11[基础]】实例分割Seg | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | python

本文将导出YOLO-Seg.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!! 目录 一 导出ONNX模型 二 推理及检测结果可视化 1 代码 2 效果图

手搓AI大模型应用获25万用户,果断辞职创业,结果收入不如摆摊

我开发的 AI 应用有 25 万用户&#xff0c;我感觉要起飞了&#xff0c;于是辞掉工作&#xff0c;准备大干一番。 结果没想到开局即巅峰&#xff0c;突然就完蛋了。 这几天&#xff0c;一个悲催的程序员创业故事在社交网络上流传&#xff0c;引发了人们的深思。 故事的主人公&…

品质生活新选择:看三星AI神黑钻衣物护理机,如何为用户打造精致日常

屠格涅夫曾说&#xff0c;一个人应当好好地安排生活&#xff0c;要使每一刻的时光都有意义。这不仅是对个人生活的深刻洞察&#xff0c;也是对生活品质的不懈追求。实际上&#xff0c;在追求品质生活的道路上&#xff0c;无关乎年龄和阶层&#xff0c;其核心精髓往往潜藏于那些…

ios打包文件上传App Store windows工具

在苹果开发者中心上架IOS APP的时候&#xff0c;在苹果开发者中心不能直接上传打包文件&#xff0c;需要下载mac的xcode这些工具进行上传&#xff0c;但这些工具无法安装在windows或linux电脑上。 这里&#xff0c;我们可以不用xcode这些工具来上传&#xff0c;可以用国内的香…

Nginx(编译)+Lua脚本+Redis 实现自动封禁访问频率过高IP

1.安装lua 1.1安装LuaJIT yum install readline-devel mkdir -p lua-file cd lua-file/ wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz tar -zxvf LuaJIT-2.0.5.tar.gz cd LuaJIT-2.0.5 make && make install PREFIX/usr/local/luajit 1.2配置LuaJIT环境变量…

OA项目 python + vue3

准备工作 创建django项目 在setting.py进行数据库的配置&#xff1a; DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: , #数据库名字USER: , #连接的数据库的用户名PASSWORD: ,HOST: 127.0.0.1,PORT: 3306,} }安装app&#xff1a; rest_framwork: 关闭csrf…

内网渗透-信息收集篇

通过webshell或其他方式拿下一台机器&#xff0c;并且存在内网环境&#xff0c;这个时候就在准备进行内网渗透&#xff0c;而在内网渗透之前需要对本地机器进行信息收集&#xff0c;才能够更好的进行内网渗透。 目录 Windows本地基础信息收集 权限查看 判断域存在 查看防火…