软件工程笔记一

目录

软件的概念、特性和分类

软件与程序

软件的特性

软件的分类

软件危机与软件工程

软件危机

如何摆脱软件危机?

软件工程概念的提出

什么是软件工程?

软件工程的若干定义

系统工程的目标

 软件工程的基本原理

软件工程的目标

软件的质量特性

软件生存期

软件定义时期

问题定义

可行性研究

需求分析和定义

软件开发时期

概要设计

详细设计

程序编码和单元测试

集成测试和系统测试

软件运行维护时期

软件工程方法概述

概念

结构化方法学  

面向对象方法学

面向服务方法

面向数据方法

形式化方法

软件工具概述

软件工具的概念

软件工具的发展

软件工具的分类

常用软件工具

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

软件工程教育(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.xdnf.cn/news/11176.html

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

相关文章

CEO代码 (CEO Code)

https://caseinterview.com/wp-content/uploads/2015/10/The-CEO-Code-Rules-by-Victor-Cheng.pdf 源自 Victor Cheng CEO们使用一种特殊的语言。这种语言不是英语、西班牙语、普通话或印地语,而是一种置于我们日常语言之上的元语言。 CEO们很快就能识别出谁能说这…

LVGL实现冒泡事件

在LVGL(LittlevGL)中,事件冒泡是一个重要的概念,它允许事件从一个对象传递到其父对象,直到找到一个能够处理该事件的对象或者达到顶层对象。以下是如何在LVGL中实现和使用事件冒泡的概述: 事件冒泡的理解 …

深入理解计算机系统-信息的表示和处理

2.1 信息存储 大多数计算机使用8位的块,或者字节,作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级程序将内存视为一个非常大的字节数组,称为虚拟内存。 内存的每个字节都由一个唯一的数字来表示,称为它的…

JAVA-顺序表ArrayList(实现ArrayList)

1.线性表 线性表 ( linear list ) 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列... 线性表在逻辑上是线性结构,也就说是连续的一条直线。…

DCN DCWS-6028神州数码 AC 设备配置笔记

DCN DCWS-6028神州数码 AC 设备配置笔记 一、前期准备 PC 电脑网络配置 目的:使 PC 能够访问 AC 的 web 管理控制台。配置详情:web 管理控制台地址为 192.168.1.10,将 PC 电脑 IP 地址配置在 192.168.1.1 - 192.168.1.254 网段内,如 192.168.1.110,子网掩码 255.255.255.…

树概念及结构

树概念及结构 6.1 树概念及结构6.1.1 树的概念6.1.2 树的术语解读6.1.3 树的表示 6.1 树概念及结构 6.1.1 树的概念 类似八股文一样的东西,需要记一下。 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系…

MySQL主从复制原理

MySQL主从复制是一种异步、基于日志的、单向的数据库复制技术,它通过在主服务器上启用二进制日志(binlog)并将其发送给一个或多个从服务器,实现了从服务器与主服务器之间的数据同步。以下是MySQL主从复制原理的详细解释&#xff1…

AMD-OLMo:在 AMD Instinct MI250 GPU 上训练的新一代大型语言模型。

AMD-OLMo是一系列10亿参数语言模型,由AMD公司在AMD Instinct MI250 GPU上进行训练,AMD Instinct MI250 GPU是一个功能强大的图形处理器集群,它利用了OLMo这一公司开发的尖端语言模型。AMD 创建 OLMo 是为了突出其 Instinct GPU 在运行 “具有…

Spring Boot框架:构建符合工程认证的计算机课程

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

实现链式结构二叉树

目录 需要实现的操作 链式结构二叉树实现 结点的创建 前序遍历 中序遍历 后序遍历 计算结点个数 计算二叉树的叶子结点个数 计算二叉树第k层结点个数 计算二叉树的深度 查找值为x的结点 销毁 层序遍历 判断是否为完全二叉树 总结 需要实现的操作 //前序遍历 void …

DU模拟器(S5040A Open RAN Studio Player and Capture Appliance)

下行测试过程,由是德科技(https://www.keysight.com/cn/zh/home.html)的DU模拟器(S5040A Open RAN Studio Player and Capture Appliance)产生标准5G NR下行测试信号,经前传接口发送到小站进行基带处理、中射频、变频后从相控阵天…

工程认证标准下的Spring Boot计算机课程管理策略

5系统详细实现 5.1 管理员模块的实现 5.1.1 教师信息管理 基于工程教育认证的计算机课程管理平台的系统管理员可以管理教师,可以对教师信息修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 教师信息管理界面 5.1.2 通知公告管理 系统管理员可以对通知公…

GeoHash处理经纬度,降维,空间填充曲线

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 参考 https://segmentfault.com/a/1190000042971576 GeoHash原理以及代码实现_geohash编码-CSDN博客…

游戏引擎学习第三天

视频参考:https://www.bilibili.com/video/BV1XTmqYSEtm/ 之前的程序不能退出,下面写关闭窗体的操作 PostQuitMessage 是 Windows API 中的一个函数,用于向当前线程的消息队列发送一个退出消息。其作用是请求应用程序退出消息循环,通常用于处…

CSS中常见文本居中技巧详解

在网页设计中,文本居中是非常常见且重要的布局需求之一。无论是为了美观还是为了更好地传达信息,掌握文本居中的方法对于前端开发者来说都是必不可少的技能。本文将详细介绍几种常用的CSS文本居中方法,帮助读者解决实际开发中的问题。 默认情…

Java基础教程(001):Java基础概念:注释、关键字、字面量

文章目录 1、Java基础概念1.1 注释1.2 关键字1.3 字面量1.4 制表符 1、Java基础概念 1.1 注释 【1】注释概念 注释是在程序指定位置添加的说明性信息。 简单理解,就是对代码的一种解释。 【2】注释分类 单行注释:// 注释信息多行注释:/…

SIwave:释放 SIwizard 求解器的强大功能

SIwave 是一种电源完整性和信号完整性工具。SIwizard 是 SIwave 中 SI 分析的主要工具,也是本博客的主题。 SIwizard 用于研究 RF、clock 和 control traces 的信号完整性。该工具允许用户进行瞬态分析、眼图分析和 BER 计算。用户可以将 IBIS 和 IBIS-AMI 模型添加…

Windows10 下通过 Visual Studio2022 编译 openssl 3.4

Windows10 下通过 Visual Studio2022 编译 openssl 3.4 1 准备环境1.2 perl1.2.1 ActiveState Perl 和 Strawberry Perl 的区别1.2.2 perl 下载1.2.3 验证安装1.2 NASM1.2.1 Windows 安装 NASM1.2.2 解压1.2.3 配置 NASM 的环境变量1.3 VS 配置1.3.1 配置 VS nmake 的环境变量1…

了解Hadoop:大数据处理的核心框架

在当今数据爆炸的时代,海量数据的存储和处理已成为一个巨大的挑战。传统数据库和计算模型难以应对如此庞大的数据规模。为了解决这一问题,Apache Hadoop应运而生,它是一种分布式存储和处理框架,能够高效地处理海量数据。本文将详细…

本溪与深圳市新零售产业互联协会共商世界酒中国菜湾区农业发展

本溪满族自治县与深圳市新零售产业互联协会汇聚鹏城共商世界酒中国菜大湾区农业发展大计 2024年11月9日下午2点,深圳市新零售产业互联协会内气氛热烈,一场关乎农业产业发展未来的重要讨论正在这里举行。此次会议汇聚了来自本溪满族自治县和大湾区的众多精…