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

文章目录

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

软件

软件的概念

  • 软件(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.hqwc.cn/news/417556.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core列表增删改查

前置要求&#xff1a; 1、 vueelement-plus实现前端静态页面 HelloWorld.vue(src->view) <template><h2>hello界面</h2><div class"tableList"><!-- 搜索框 --><el-row :gutter"20"><el-col :span"8"…

【Linux】磁盘结构 | 文件系统 | 软硬链接

文件的状态有被打开和没有被打开&#xff0c;之前谈到一个文件被进行读写&#xff0c;就要打开加载到内存中&#xff0c;通过对应的系统调用&#xff0c;fd文件描述符的管理&#xff0c;write和read等函数的增删查改。并且借助缓冲区对文件属性和内容的修改。 大部分文件是没有…

SpringAOP以及事务管理和优化处理

Spring的AOP 本篇章中所有的代码都将会放置到git仓库中去&#xff0c;并且会做一个简要的说明。 一、个人理解描述 Spring中所谓的AOP就是在不修改源码的情况下&#xff0c;来进行增强。所谓的增强其实就是在方法执行前后添加一些额外操作。 所谓的增强&#xff0c;就是我们…

Ubuntu使用docker-compose安装chatGPT

ubuntu环境搭建专栏&#x1f517;点击跳转 Ubuntu系统环境搭建&#xff08;十五&#xff09;——使用docker-compose安装chatGPT Welcome to the AI era! 使用docker compose安装 在/usr/local文件夹下创建chatgpt mkdir chatgpt创建docker-compose.yaml vim docker-compos…

什么是OSPF?为什么需要OSPF?OSPF基础概念

什么是OSPF&#xff1f; 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;是IETF组织开发的一个基于链路状态的内部网关协议&#xff08;Interior Gateway Protocol&#xff09;。 目前针对IPv4协议使用的是OSPF Version 2&#xff08;RFC2328&#x…

数据库(MySQL库表操作)

目录 1.1 SQL语句基础&#xff08;SQL命令&#xff09; 1.1.1 SQL的简介 1.1.2 SQL语句的分类 1.1.3 SQL语句的书写规范 1.2 数据库操作 1.2.1 查看 1.2.2 自建库 1.2.3 切换数据库 1.2.4 删库 1.3 MySQL字符集 1.3.1 MySQL字符集包括&#xff1a; 1.3.2 utf8 和 u…

性能压力测试:企业成功的关键要素

性能压力测试在现代企业软件开发中扮演着至关重要的角色&#xff0c;它不仅仅是一项技术手段&#xff0c;更是保障企业成功的关键要素。本文将探讨性能压力测试在企业中的重要性&#xff0c;并阐述其对业务稳定性、用户体验和品牌声誉的影响。 一、保障业务稳定性 1、应对高负载…

Java 全栈知识点问题汇总(上)

Java 全栈知识点问题汇总&#xff08;上&#xff09; 1 Java 基础 1.1 语法基础 面向对象特性&#xff1f;a a b 与 a b 的区别3*0.1 0.3 将会返回什么? true 还是 false?能在 Switch 中使用 String 吗?对equals()和hashCode()的理解?final、finalize 和 finally 的不同…

SpringCloud Aliba-Sentinel【中篇】-从入门到学废【5】

&#x1f3b5;歌词分享&#x1f3b5; 岁月在墙上剥落看见小时候。 ——《东风破》 目录 &#x1f953;1.流控规则 &#x1f32d;2. 熔断规则 &#x1f9c8;3.热点规则 &#x1f9c2;4.系统规则 1.流控规则 1.资源名&#xff1a;唯一名称&#xff0c;默认请求路径 2.针对来…

GPT应用_AutoGPT

项目地址&#xff1a;https://github.com/Significant-Gravitas/AutoGPT 1 功能 1.1 整体功能&#xff0c;想解决什么问题 单独使用 ChatGPT 时&#xff0c;只提供基本的聊天&#xff0c;无法实现复杂多步的功能&#xff0c;以及与其它应用交互&#xff0c;如果想提供某种功…

OpenCV实战:控制手势实现无触摸拖拽功能

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用OpenCV来控制手势&#xff0c;瞬间提升操作体验&#xff01;跨越界限&#xff0c;OpenCV手势控制拖拽功能现身。 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验&#xff0c;主要步骤如下…

Redis缓存问题解决方案

Redis缓存问题解决方案 为什么使用Redis缓存&#xff1a; 1.在高并发的情况下&#xff0c;大量查询进入数据库&#xff0c;会大量占用数据库的连接&#xff08;默认数据库连接数151&#xff09;,数据库压力过大就会出现connection refuse(数据库连接拒绝)问题&#xff0c; 2.…