软件工程笔记一

目录

软件的概念、特性和分类

软件与程序

软件的特性

软件的分类

软件危机与软件工程

软件危机

如何摆脱软件危机?

软件工程概念的提出

什么是软件工程?

软件工程的若干定义

系统工程的目标

 软件工程的基本原理

软件工程的目标

软件的质量特性

软件生存期

软件定义时期

问题定义

可行性研究

需求分析和定义

软件开发时期

概要设计

详细设计

程序编码和单元测试

集成测试和系统测试

软件运行维护时期

软件工程方法概述

概念

结构化方法学  

面向对象方法学

面向服务方法

面向数据方法

形式化方法

软件工具概述

软件工具的概念

软件工具的发展

软件工具的分类

常用软件工具

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

软件工程教育(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),这些知识域又划分为三类:

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

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

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

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

 

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

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

相关文章

使用VS Code 安装VUE.js开发环境的搭建并创建第一个项目

初步掌握VUE.js开发环境的搭建并创建第一个项目的操作方法和实验步骤 题目 安装Visual Studio Code。安装VS Code汉化插件。安装Vue官方支持插件。使用VS Code运行第一个HTML页面。安装Node.js并验证其版本。验证npm版本。配置npm的下载镜像源。配置Yarn的下载镜像源。使用Vi…

Java | Leetcode Java题解之第541题反转字符串II

题目&#xff1a; 题解&#xff1a; class Solution {public String reverseStr(String s, int k) {int n s.length();char[] arr s.toCharArray();for (int i 0; i < n; i 2 * k) {reverse(arr, i, Math.min(i k, n) - 1);}return new String(arr);}public void reve…

【物联网技术】ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式介绍与AT指令介绍

前言:本文对ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式进行介绍;以及AT指令介绍,包括基础AT指令,WIFI功能AT指令、TCP/IP相关AT指令、常用AT指令实例进行介绍。 ESP8266 WIFI模块的接线及固件烧写可参考我的这篇博客:正点原子ATK-ESP8266 WIFI模块接线及固件…

【大数据学习 | kafka】kafka的数据存储结构

以上是kafka的数据的存储方式。 这些数据可以在服务器集群上对应的文件夹中查看到。 [hexuanhadoop106 __consumer_offsets-0]$ ll 总用量 8 -rw-rw-r--. 1 hexuan hexuan 10485760 10月 28 22:21 00000000000000000000.index -rw-rw-r--. 1 hexuan hexuan 0 10月 28 …

软件测试面试题——移动端

一、常用的adb命令有哪些&#xff1f; 命令含义adb devices展示当前电脑连接的设备&#xff0c;如果电脑上有多个手机&#xff0c;需要adb -s指定对应设备adb install xxx.apk直接安装xxx.apk到手机中&#xff0c;注意&#xff1a;必须打开手机设置里的USB安装adb install -r …

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…

Perforce《2024游戏技术现状报告》Part2:游戏引擎、版本控制、IDE及项目管理等多种开发工具的应用分析

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

网站架构知识之密钥认证(day020)

1.密钥认证 两个节点&#xff0c;通过密钥形式进行访问&#xff0c;不要输入密码&#xff0c;单向。 应用场景&#xff1a;部分服务使用前要求我们做密钥认证。 1.使用rsa算法创建公钥私钥 ssh-keygen -t rsa /root/.ssh/id_rsa&#xff0c; 私钥地址 /root/.ssh/…

《重学Java设计模式》之 工厂方法模式

《重学Java设计模式》之 建造者模式 《重学Java设计模式》之 原型模式 《重学Java设计模式》之 单例模式 模拟发奖多种商品 工程结构 奖品发放接口 package com.yys.mes.design.factory.store;public interface ICommodity {/*** Author Sherry* Date 14:20 2024/11/6**/voi…

微信小程序的汽车维修预约管理系统

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 系统功能简述 前台用于实现用户在页面上的各种操作&#xff0c;同时在个人中心显示各种操作所产生的记录&#xff1a;后…

Oh My Posh安装

nullSet up your terminalhttps://ohmyposh.dev/docs/installation/windows Git ee oh-my-posh: Windows上的oh-my-zsh&#xff0c;源地址 https://github.com/JanDeDobbeleer/oh-my-posh.git (gitee.com)https://gitee.com/efluent/oh-my-posh

unity 镜面 反射

URP 镜面 资源绑定 下载 namespace UnityEngine.Rendering.Universal { [ExecuteInEditMode]public class PlanarURP : MonoBehaviour{public bool VR false;public int ReflectionTexResolution 512;public float Offset 0.0f;[Range(0, 1)]public float Reflecti…

深度学习(十):伦理与社会影响的深度剖析(10/10)

深度学习&#xff1a;伦理与社会影响的深度剖析 一、深度学习的伦理挑战 &#xff08;一&#xff09;数据隐私之忧 深度学习模型的训练往往需要大量数据&#xff0c;而数据的收集过程可能会侵犯个人隐私。例如&#xff0c;据统计&#xff0c;面部识别技术在全球范围内每天会收…

网络安全从入门到精通(特别篇I):应急响应之APT事件处置流程

应急响应 应急响应之APT处置流程1.现场询问1.1 了解威胁事件表现1.2 了解威胁事件发现时间1.3 了解系统架构,如服务器类型、业务架构、网络拓扑等2 判断安全事件状态3 确认事件对象4 确定事件时间5 问题排查应急响应之APT处置流程 1.现场询问 1.1 了解威胁事件表现 1.C&…

美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年

自2019年5G牌照发放开始&#xff0c;经过五年发展&#xff0c;我国5G在基础设施建设、用户规模、创新应用等方面均取得了显著成绩&#xff0c;5G网络建设也即将从基础的大范围覆盖向各产业融合的全场景应用转变。工业和信息化部数据显示&#xff0c;5G行业应用已融入76个国民经…

鸿蒙next打包流程

鸿蒙打包 下载团结引擎添加开源鸿蒙打包支持 团结引擎版本要和sdk版本相对应,图中最新版1.3.1团结引擎,需要sdk12,直接在模块里自动下载即可。 打包报错 在unity社区搜索到,是burst的问题,在package manager里将burst升级到1.8.18就打包成功了,不知道为啥。 团结引擎打包…

python实现RSA算法

目录 一、算法简介二、算法描述2.1 密钥产生2.2 加密过程2.3 解密过程2.4 证明解密正确性 三、相关算法3.1 欧几里得算法3.2 扩展欧几里得算法3.3 模重复平方算法3.4 Miller-Rabin 素性检测算法 四、算法实现五、演示效果 一、算法简介 RSA算法是一种非对称加密算法&#xff0c…

Android笔记(三十一):Deeplink失效问题

背景 通过deeplink启动应用之后&#xff0c;没关闭应用的情况下&#xff0c;再次使用deeplink会失效的问题&#xff0c;是系统bug导致的。此bug仅在某些设备&#xff08;Nexus 5X&#xff09;上重现&#xff0c;launchMode并且仅当应用程序最初通过深层链接启动并再次通过深层…

基于Multisim拔河比赛游戏+计分电路(含仿真和报告)

【全套资料.zip】拔河比赛游戏计分电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.拔河游戏机用9个发光二极管排成一行。 2.开机后只有中间一个点亮&#xff0c;以此作为拔河的中心…

A20红色革命文物征集管理系统

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…