计算机导论10-软件与软件工程

news2024/11/15 11:02:54

文章目录

  • 软件
    • 软件的概念
      • 软件的定义
      • 软件的特征
    • 软件的保护与授权
      • 软件的法律保护
      • 软件许可
  • 软件工程
    • 软件危机
      • 软件危机的概念
      • 产生软件危机的原因
    • 软件工程的概念
      • 软件工程的定义
      • 软件工程基本原理
      • 软件工程框架
      • 软件工程三要素
    • 软件工程方法学
      • 软件工程方法
      • 软件工程工具
      • 软件工程过程
  • 软件生命周期
    • 软件生命周期概念
    • 软件生命周期模型
      • 瀑布模型
      • 演化模型
      • 增量模型
      • 螺旋模型
      • 喷泉模型
    • 微软公司软件开发周期
  • 补充题

软件

软件的概念

  • 软件(software)是信息的载体,并且提供了对信息的处理能力,软件来反映用户特定的信息处理逻辑,从而由对信息增值来取得用户自身效益增值。
  • 软件运行在硬件之上,是硬件实施计算、控制等功能的工作步骤、流程及相关说明;硬件是软件运行的物质基础,硬件系统的协同工作完成用户通过软件定义的特定数据处理任务

软件的定义

  • 计算机软件是指与计算机系统操作有关的程序、规程、规则及任何与之有关的数据和文档资料。
    • 指令、程序和数据(硬件系统可以执行);
    • 文档、资料(软件开发、运行、维护、使用、培训等活动相关,硬件系统无法执行)

软件的特征

特征表现
软件是无形产品表现为程序及文档,电子化的脑力劳动的结果,非有形可见的物质产品
软件生产无明显制造过程设计-开发过程的结果,没有物质产品的制造过程,可以大量复制
软件不会“磨损”仪器、设备等物质产品在使用过程中会产生磨损、损耗-折旧,软件不会损耗,但可能需要“维护”以保持稳定性,“修改”以满足硬件系统的变化、或者实现新的功能
大多数软件是定制的专用软件:面向特定的专业领域、完成指定范围、类型的数据处理任务-如图像处理软件,
通用软件:通用性不是绝对的,如操作系统、office
对计算机硬件依赖性软件根植于硬件系统之上,并需操作系统支持才能运行
软件的复杂性与软件设计、开发相关的人的因素、物的因素变化多端

软件的保护与授权

软件的法律保护

  • 根据《计算机软件保护条例》的规定,计算机软件著作权归属软件开发者。
  • 计算机软件作为一种知识产品,要获得法律保护,必须具备原创性、可感知性、可再现性。

软件许可

  • 专属软件
  • 自由软件
  • 共享软件
  • 免费软件
  • 公共软件

软件工程

软件危机

软件危机的概念

  • 软件危机(software crisis) 是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题。
  • 软件危机主要表现在
    • 对软件开发成本和进度的估计不准确;
    • 软件产品不能完全满足用户的需求;
    • 没有确保软件质量的体系和措施,开发的软件可靠性差;
    • 软件可维护性差;
    • 开发过程无完整、规范的文档资料;
    • 软件开发速度,落后于计算机应用的普及和发展速度;
    • 软件成本在计算机系统总成本中所占比例逐年上升。

产生软件危机的原因

  • 需求难以明确且频繁变更。
  • 软件开发的管理困难。
  • 软件开发独有特点造成开发困难。
  • 软件开发技术落后。
  • 文档的重要性往往被忽视。
  • 软件需求快速发展。

软件工程的概念

软件工程的定义

  • 软件工程是应用工程学、计算机科学、数学及管理科学等原理开发软件的工程。软件工程以提高质量,降低成本为目的,借鉴传统工程学的原则、方法完成软件设计、开发、制造的全过程。其中,计算机科学、数学用于构造模型和设计算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及权衡时间,管理科学用于计划、资源、质量、成本等管理。

软件工程基本原理

(1)用分阶段的生命周期计划严格管理开发过程
(2)坚持进行阶段评审
(3)实行严格的产品控制
(4)采用现代程序设计技术
(5)应能清楚地审查结果
(6)合理安排软件开发小组的人员
(7)必须灵活不断地改进软件工程实践

软件工程框架

  • 软件工程的框架可概括为目标、过程和原则。
条目说明
软件工程目标生产具有正确性、可用性和成本合宜的产品。
软件工程过程指生产一个最终满足需求且达到工程目标的软件产品所需要的步骤。
软件工程原则包括围绕工程设计、工程支持和工程管理所提出的基本规范。

1)采用合适的设计方法
2)选取适宜的开发模型
3)提供高质量的工程支撑
4)重视软件工程的管理

软件工程三要素

  • 软件工程的三要素包括 过程,方法,工具

软件工程方法学

软件工程方法

结构化方法

  • 其基本思想是:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。
方面表现
问题的规模上由大到小
问题的复杂程度上由繁到简
解决问题的策略方面分而治之
数学模型大问题划分为若干性质相同的小问题,由若干相同或类似的小问题的解决方案形成原始大问题的解决方案,小问题的解决方案由若干功能独立的模块构成
  • 结构化方法将软件生命周期的全过程依次划分为若干个阶段,采用结构化技术来完成每个阶段的任务。其特点是强调自顶向下顺序地完成软件开发的各阶段任务。

面向对象方法

  • 面向对象方法在概念和表示方法上的一致性,保证了各项开发活动之间的平滑过渡。
  • 面向对象开发方法主要有Booch方法、Coad方法、OMT方法以及UML等。

形式化方法

  • 形式化方法以数学为基础,其目标是建立精确的、无二义性的语义,对系统开发的各个阶段进行有效的描述,使系统的结构具有先天的合理性、正确性和良好的维护性,能较好地满足用户需求。

软件工程工具

  • 软件工程工具为软件工程方法提供了自动的或半自动的软件支撑环境。软件设计与开发的不同阶段对应不同的工具,包括需求分析工具、设计工具、实现工具、测试工具、维护工具、配置工具等。软件工具的功能是在软件开发各个阶段帮助开发者控制开发中的复杂性,提高工作质量和效率。

软件工程过程

  • 软件工程过程是指开发软件产品的一组活动及其结果,即人们用于开发和维护软件及其相关过程的一系列活动,包括软件工程活动和软件管理活动。

软件生命周期

软件生命周期概念

  • 软件生命周期指的是从软件思想萌芽到软件产品消亡的整个时间阶段;软件产品从形成概念开始,经过开发、运行和维护,直到最终被废弃的全过程,称为软件生命周期(Software-Life-Cycle,SLC)。

软件定义阶段

  • 软件定义阶段的任务是**确定软件开发工程必须完成的总目标,确定工程的可行性,导出实现工程目标应该采用的策略方案及系统必须完成的功能,估计完成该项工程需要的资源和成本,并且制定工程进度表。**这个阶段的工作通常由系统分析员和用户共同完成。
  • 软件定义阶段集中于解决“做什么”,通常包括三个步骤,即问题定义、可行性研究和需求分析。

(用户提出软件需求,系统分析人员根据用户需求归纳出若干问题-建模,模型求解方案)

软件开发阶段

  • 软件开发阶段集中于“如何做”,通常包括四个步骤:
    1. 概要设计
    2. 详细设计
    3. 软件实现
    4. 软件测试(软件开发是按照需求分析的要求,由抽象到具体,逐步生成软件的过程。

软件支持阶段

  • 软件支持阶段关注于“变化”(用户需求变化,软件随之变化),其主要任务是使软件持久地满足用户的需要。具体地说,当软件在运行过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件以满足用户的新需要。软件支持阶段通常包括软件运行、软件维护。

软件生命周期模型

瀑布模型

  • 瀑布模型(waterfall model)是一种线性顺序模型,也称为“传统生命周期”

在这里插入图片描述

特点说明
阶段间具有顺序性和依赖性每阶段都有明确的前驱及后继,顺序不可颠倒,前驱阶段的输出直接影响后继阶段的输入,而后继阶段的工作依赖于前驱阶段的成果
推迟实现的观点高度重视编码之前各阶段的工作质量,在时间允许的情况下尽可能推迟软件实现阶段的工作,否则可能会因前期工作遗留问题导致大量的返工性重复劳动
质量保证的观点各阶段相对独立,阶段性成果责任明确,质量可控

演化模型

  • 演化模型(evolutionary model)又称原型模型,主要针对事先不能完整定义需求的软件项目开发。(具有明显的周期性迭代特征)

在这里插入图片描述

增量模型

  • 增量模型(incremental model)融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征,该模型采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。

螺旋模型

  • 螺旋模型(spiral model)是瀑布模型与演化模型相结合,并增加两者所忽略的风险分析而产生的一种模型。螺旋模型将开发划分为制定计划、风险计划、实施开发和客户评估四类活动。

在这里插入图片描述

喷泉模型

  • 喷泉模型(fountain model)是一种以用户需求为动力、以对象为驱动的模型,主要用于描述面向对象的软件开发过程。

微软公司软件开发周期

阶段工作
规划阶段在产品的规划阶段要做三件事:拟定基于客户数据的目标描述、基于目标描述的规格/特性说明和基于规格说明和特性优先级制定的进度表
设计阶段在设计阶段,程序经理根据产品远景目标,完成产品的功能特性的规格说明书的设计,并确定产品开发的主要进度表。
开发阶段在产品开发阶段,开发人员负责根据产品功能特性规格说明书的要求,完成产品的开发工作。
开发阶段的主要工作是完成产品中所有组件的开发工作(包括代码和文档),此外还包括审核设计文档、安装并配置开发环境、代码检入工作、每日产品生成以及管理Bug(漏洞))数据库等。
稳定阶段稳定阶段也称为测试阶段,或QA阶段。
发布阶段项目组发布产品或解决方案,稳定发布过程,并将项目移交到运营和支持人员手中,以获得最终用户对项目的认可。

补充题

  • 软件工程的出现主要是由于( 软件危机的出现
  • 软件工程的提出起源于软件危机,而其目的应该是最终解决软件的( 生产工程化 ) 问题
  • 在软件研制过程中,CASE是指( 计算机辅助软件工程
  • 在结构化方法中,软件功能分解属于软件开发中的( 总体设计
  • 结构化分析方法就是面向( 数据流 ) 的自顶向下逐步求精进行需求分析的方法,其基本思想是软件功能的分解和抽象
  • 软件开发的结构化分析方法,常用的描述软件功能需求的工具是(数据流图、数据字典
  • 在软件生命周期中,耗费时间最长的是(维护阶段
  • 软件工程经验证明软件开发中要掌握40-20-40规则,它强调了软件开发中( 分析、设计和测试 )的比重
  • 概要设计的结果是提供一份( ** 模块说明书**)
  • 螺旋模型是在瀑布模型和演化模型的基础上增加了风险分析活动
  • 软件的生产经历了程序设计、程序系统和 (软件工程) 3个阶段
  • 软件文档是软件工程实施中的重要成分,它不仅是软件开发的各阶段的重要依据,而且也影响软件的 (可维护性) 。
  • 若网络中很多用户都需要安装使用同一软件时,则应购买该软件的(许可证
  • 软件工程的目的是成功地建造大型的软件系统,主要内容是软件开发技术和 (软件工程管理) 两方面
  • 软件开发方法学的主要目的是克服软件手工生产,使软件开发能进入工程化和(规范化) 的环境
  • (问题定义)阶段的任务是确定软件系统所要解决的问题
  • 软件概要设计的成果是(软件设计说明书
  • 详细设计)阶段主要完成的任务是确定每个模块的具体执行过程
  • 基本的软件测试包括单元测试、(集成测试) 和验收测试。
  • 软件设计包括 (概要设计) 和详细设计两个阶段
  • 在演化模型中,通常把第一次试验性开发出的软件称为(原型
  • 增量模型与原型实现不一样的是其 (可操作性) ,强调每一个增量均发布一个产品
  • 常见的软件开发模型中, (喷泉) 模型主要用来描述面向对象的软件开发过程
  • UML是 (统一建模语言
  • CMM模型是指(软件能力成熟度模型
  • CMM模型提供了5个级别,分别是 (初始级,可重复级,确定级,管理级,优化级
  • 为了保护软件开发者的权益,我国已制定了一些与计算机软件相关的法律,目前计算机软件的法律保护手段主要有3种,其中包括(专利法 著作权法 商业秘密法

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

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

相关文章

详细讲解Python中的aioschedule定时任务操作

目录 前言1. 基本概念2. 基本API3. Demo 前言 如果下面的函数库无法执行,出现类似:(前提是python3.7以上) AttributeError: module ‘asyncio‘ has no attribute ‘run‘请检查run是否可跳转,如果无法跳转&#xff…

【RPC】网络通信:哪种网络IO模型最适合RPC框架?

一、背景 RPC是解决进程间通信的一种方式。一次RPC调用,本质就是服务消费者与服务提供者间的一次网络信息交换的过程。服务调用者通过网络IO发送一条请求消息,服务提供者接收并解析,处理完相关的业务逻辑之后,再发送一条响应消息…

Qt命令行安装:linux(ubuntu)

起因是我上一篇文章说的,官网下的安装包卡死在第一步安装界面了。 于是我就问GPT有没有纯命令行的安装方式,果然是有的。 在Ubuntu上安装Qt可以使用以下命令: 1. 首先,添加Qt的官方存储库到系统中: sudo add-apt-rep…

Pandas.DataFrame.groupby() 数据分组(数据透视、分类汇总) 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本: 本文基于 pandas2.1.2 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 Pandas稳定版更新及变动内容整合专题: Pandas稳定版更新及变动迭持续更新。 Pandas API参…

使用PyTorch实现混合专家(MoE)模型

Mixtral 8x7B 的推出在开放 AI 领域引发了广泛关注,特别是混合专家(Mixture-of-Experts:MoEs)这一概念被大家所认知。混合专家(MoE)概念是协作智能的象征,体现了“整体大于部分之和”的说法。MoE模型汇集了各种专家模型…

Transformer详解(附代码实现及翻译任务实现)

一:了解背景和动机 阅读Transformer论文: 阅读原始的Transformer论文:“Attention is All You Need”,由Vaswani等人于2017年提出,是Transformer模型的开创性工作。 二:理解基本构建块 注意力机制&#…

软件研发过程中,项目管理工具应该如何选择?

本文作者:极狐GitLab 资深解决方案架构师 尹学峰 许多企业依旧在用老旧的方式,如Excel离线表格进行项目管理。表格无法简介的呈现出项目的任务分解、完成进度、任务类别等多种项目管理过程中必备的要求,更无法实现与企业员工的日常即时通信系…

MATLAB - 加载预定义的机器人模型

系列文章目录 前言 一、 要快速访问常见的机器人模型,可使用 loadrobot 功能,该功能可加载市售的机器人模型,如 Universal Robots™ UR10 cobot、Boston Dynamics™ Atlas 人形机器人和 KINOVA™ Gen 3 机械手。探索如何生成关节配置并与机器…

day02_计算机常识丶第一个程序丶注释丶关键字丶标识符

计算机常识 计算机如何存储数据 计算机世界中只有二进制。那么在计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。 进制 进制也就是进位计数制,是人为定义的带进位的计数方法 实例: // 在java 中 可以使用不同…

蓝桥杯备赛day02 -- 算法训练题 拿金币Java

目录 题目: 问题描述 输入格式 输出格式 解题过程 第一步 定义dp数组 第二步 确定 dp 数组递推公式 第三步 dp数组的初始化 第四步 dp数组的遍历顺序 第五步 举例说明 报错:内存超限 用dp数组去存储位置上的金币 dp数组从二维降为一维 收获&a…

如何在CentOS 7 中搭建Python 3.0 环境

1、下载 通过https://www.python.org/ftp/python/下载Python安装包,这里下载Python-3.10.9.tgz; 2、上传 借助MobaXterm等工具将Python安装包上传至/opt目录; 3、解压 将JDK压缩文件解压至/opt目录:tar -xvf /opt/Python-3.1…

idea设置编辑器背景颜色

文章目录 一、Ided常用工具栏显示二、更改idea主题设置三、设置代码编辑器背景颜色为豆沙绿四、设置新项目 默认Jdk配置、maven配置1、settings for new projects2、structre for new projects 五、修改代码中注释的字体颜色六、设置编辑器字体大小七、文件编码的设置(可以设置…

【网络安全】【密码学】【北京航空航天大学】实验一、数论基础(上)【C语言和Java实现】

实验一、数论基础(上) 一、实验目的 1、通过本次实验,熟悉相关的编程环境,为后续的实验做好铺垫; 2、回顾数论学科中的重要基本算法,并加深对其的理解,为本学期密码学理论及实验课程打下良好…

Python - 深夜数据结构与算法之 DP 串讲

目录 一.引言 二.DP 知识点回顾 1.递归 2.分治 3.动态规划 三.DP 经典题目回顾 1.Climb-Stairs [70] 2.Unique-Paths [62] 3.House-Robber [198] 4.Min-Path-Sum [64] 5.Best-Time-Sell-Stock [121] 6.Min-Cost-Climb [746] 7.Edit-Distance [72] 8.Longest-Sub-…

Android PendingIntent 闪退

先来给大家推荐一个我日常会使用到的图片高清处理在线工具,主要是免费,直接白嫖 。 有时候我看到一张图片感觉很不错,但是图片清晰度不合我意,就想有没有什么工具可以处理让其更清晰, 网上随便搜下就能找到&#xff…

C++设计模式(李建忠)笔记1

C设计模式(李建忠) 本文是学习笔记,如有侵权,请联系删除。 参考链接 Youtube: C设计模式 Gtihub源码与PPT:https://github.com/ZachL1/Bilibili-plus 豆瓣: 设计模式–可复用面向对象软件的基础 文章目录 C设计模…

编译原理1.1习题 语言处理器

图源:文心一言 编译原理习题整理~🥝🥝 作为初学者的我,这些习题主要用于自我巩固。由于是自学,答案难免有误,非常欢迎各位小伙伴指正与讨论!👏💡 第1版:自…

目标检测-One Stage-YOLOv7

文章目录 前言一、YOLOv7的不同版本二、YOLOv7的网络结构二、YOLOv7的创新点三、创新点的详细解读ELAN和E-ELANBoF训练技巧计划型重参化卷积辅助训练模块标签分配Lead head guided label assignerCoarse-to-fine lead head guided label assigner 基于级联模型的复合缩放方法 总…

开发知识点-JAVA-springboot

springboot springbootConfiguration注解的底层核心原理Bean注解的底层核心原理 springboot Configuration注解的底层核心原理 https://www.bilibili.com/video/BV1rq4y1E7gK/?spm_id_from333.999.0.0&vd_sourcef21773b7086456ae21a58a6cc59023be spring.io 全家桶 24…

【Emgu CV教程】5.4、几何变换之图像翻转

今天讲解的两个函数,可以实现以下样式的翻转。 水平翻转:将图像沿Y轴(图像最左侧垂直边缘)翻转的操作。原始图像中位于左侧的内容将移动到目标图像的右侧,原始图像中位于右侧的内容将移动到目标图像的左侧。垂直翻转:将图像沿X轴…