软件与软件工程

news2024/11/29 15:50:06

软件

软件的概念以及特点:
软件是计算机系统中不可或缺的一部分,与硬件共同构成特定的系统功能。
人们通常把各种不同功能的程序,包括系统程序、应用程序、用户自己编写的程序等称为软件
软件的概念:
软件不仅包括程序,还包括程序的处理对象——数据,以及与程序开发、维护和使用有关的图文资料,即文档 .
软件=程序+数据+文档

程序是为实现软件的功能和性能要求而编写的指令序列。
数据是指使程序能够正常操纵信息的数据结构。
文档是与程序开发、维护和使用有关的图文资料。

软件的特点

软件是一种逻辑实体,具有抽象性
软件的生产与硬件的制造不同,是人类智力劳动的产物
软件在运行使用过程中,不会磨损
软件的开发至今尚未完全摆脱手工艺的开发方式
软件的开发和运行必须依附于特定的计算机系统环境

在这里插入图片描述

软件的分类

在这里插入图片描述

软件危机

软件危机的表现与原因

软件危机是指人们在开发软件和维护软件过程中所遇到的一系列的问题

主要表现为:

开发出来的软件产品不能满足用户的需求
相比越来越廉价的硬件,软件代价过高
软件质量难以得到保证,且难以发挥硬件潜能
难以准确估计软件开发、维护的费用以及开发周期
难于控制开发风险,开发速度赶不上市场变化
软件产品修改维护困难,集成遗留系统更困难
软件文档不完备,并且存在着文档内容与软件产品不符的情况

软件危机出现的原因

忽视软件开发前期的需求分析
开发过程缺乏统一的、规范化的方法论的指导
文档资料不齐全或不准确
忽视与用户之间、开发组成员之间的交流
忽视测试的重要性
不重视维护或由于上述原因造成维护工作的困难
从事软件开发的专业人员对这个产业认识不充分,缺乏经验
没有完善的质量保证体系

软件危机的启示
软件产品是复杂的人造系统,具有复杂性、不可见性和易变性,难以处理
个人或小组在开发小型软件时使用到的非常有效的编程技术和过程,在开发大型、复杂系统时难以发挥同样的作用
软件开发的创造性成分很大、发挥的余地也很大,很接近于艺术
计算机和软件技术的快速发展,提高了用户对软件的期望,促进了软件产品的演化,为软件产品提出了新的、更多的需求,难以在可接受的开发进度内保证软件的质量
几乎所有的软件项目都是新的,而且是不断变化的
“人月神化”现象——生产力与人数并不成正比

软件工程

软件工程的概念
IEEE对软件工程的定义为:
(1)将系统化、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件
(2)对(1)中所述方法的研究
具体说来,软件工程是以借鉴传统工程的原则、方法,以提高质量,降低成本为目的指导计算机软件开发和维护的工程学科。它是一种层次化的技术

软件工程层次图
软件工程的根基在于对质量的关注;
软件工程的基础是过程层,它定义了一组关键过程区域的框架,使得软件能够被合理和及时地开发;
软件工程的方法提供了建造软件在技术上需要“做什么”,它覆盖了一系列的任务,包括需求分析、设计、编程、测试和支持等;
软件工程的工具对过程和方法提供了自动的或半自动的支持。

1.3.2 软件工程的发展

1968和1969年:真正意义上的“软件工程”诞生
70年代:瀑布模型,结构化编程
80年代:COCOMO模型,CMM模型,关系数据库,测试工具和配置管理工具,计算机辅助软件工程(CASE),其他一些潜在的提高软件生产率的方法
90年代:面向对象方法,敏捷方法
21世纪:快速应用开发,“大规模计算”,“自治和生化计算机”,“模型驱动体系结构”,“构件化软件开发”

1.3.3 软件工程研究的内容
方法与技术:主要讨论软件开发各种方法及其工作模型
工具与环境:软件工具为软件工程方法提供支持,研究计算机辅助软件工程,建立软件工程环境
管理技术:对软件工程全过程的控制和管理
标准与规范:使得各项工作有章可循,以保证软件生产效率和软件质量的提高

1.3.4 软件工程目标和原则

软件工程要达到的基本目标包括:
达到要求的软件功能
取得较好的软件性能
开发出高质量的软件
付出较低的开发成本
需要较低的维护费用
能按时完成开发工作,及时交付使用

软件工程的七条基本原则

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

1.3.5 软件工程知识体系

软件需求
软件设计
软件构建
软件测试
软件维护
软件配置管理
软件工程管理
软件工程过程
软件工程工具和方法
软件质量

软件开发方法

使用定义好的技术集及符号表示组织软件生产的过程
目标是在规定的时间和成本内,开发出符合用户需求的高质量的软件
常见的软件开发方法

结构化方法
面向数据结构方法
面向对象方法
形式化方法
问题分析法
可视化开发方法

软件工程工具

软件工程工具通常有三种分类标准
按照功能划分:可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具
按照支持的过程划分:设计工具、编程工具、维护工具
按照支持的范围划分:窄支持(工具)、较宽支持(工作台)和一般支持工具(环境)
经常会使用到的软件工程工具
分析设计工具
面向通用软件设计:Microsoft Visio
面向对象软件设计:Rational Rose,
数据库设计:PowerDesigner
**程序开发工具:**集成开发环境(IDE)通过提供代码高亮、补全,内置调试工具等功能,大大提高了效率。
IDE 主流的实例如表所示。
在这里插入图片描述测试工具:

在测试阶段,通常会使用自动化测试工具进行测试。除单元测试工具外,较为流行的自动化测试工具包括 C/S 功能测试工具 WinRunner,性能测试工具 LoadRunner、Jmeter,测试管理工具 TestDirector、Jira,Web服务测试工具 QTester(简称QT)、SoapUI 等。单元测试工具通常与语言及开发框架关联密切,部分实例如表所示。

在这里插入图片描述配置管理工具:Microsoft Visual Sourcesafe,ClearCase
项目管理工具:Microsoft Project,CA-SuperProject,Time Line

参考:
《实用软件工程》(第二版)郑人杰 殷人昆 陶永累 清华大学出版社

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

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

相关文章

Linux环境下的内存管理(2/7)

要想深入理解内存中的堆栈管理机制,孤立地分析并不是一个好方法,因为堆栈内存不是仅靠程序本身来维护的,而是由操作系统、编译器、CPU、物理内存相互配合实现的。 在 Linux 环境下运行的程序,在编译时链接的起始地址都是相同的&a…

vue左侧漏斗切换 echart图表动态更新

这个需求是根据点击左侧的箭头部分&#xff0c;右侧图表切换&#xff0c;左侧选中数据高亮&#xff08;图片用的svg&#xff09; 一、效果图 二、vue组件 <template><div class"funnel_wrap"><div class"flex_between"><div class&q…

家政服务小程序制作教程:从设计到开发的详细步骤

在当今的数字化时代&#xff0c;小程序已经成为了一种趋势&#xff0c;不仅提供了方便快捷的应用体验&#xff0c;也成为了各种行业进行营销和客户管理的有力工具。特别是对于家政行业&#xff0c;通过小程序的应用&#xff0c;可以更好地进行业务管理&#xff0c;提升服务质量…

自动化PLC工程师能否转到c#上位机开发?

成功从自动化PLC工程师转向C#上位机开发的经历可能因人而异&#xff0c;以下是一些分享的思路和建议&#xff1a;扩展编程技能&#xff1a;学习C#语言和相关的开发工具和框架&#xff0c;掌握语言的基础知识和常用的编程技巧。可以通过在线教程、培训课程、书籍等途径进行学习&…

深度学习-4-二维目标检测-YOLOv3理论模型

单阶段目标检测模型YOLOv3 R-CNN系列算法需要先产生候选区域&#xff0c;再对候选区域做分类和位置坐标的预测&#xff0c;这类算法被称为两阶段目标检测算法。近几年&#xff0c;很多研究人员相继提出一系列单阶段的检测算法&#xff0c;只需要一个网络即可同时产生候选区域并…

基于数据湖的多流拼接方案-HUDI实操篇

目录 一、前情提要 二、代码Demo &#xff08;一&#xff09;多写问题 &#xff08;二&#xff09;如果要两个流写一个表&#xff0c;这种情况怎么处理&#xff1f; &#xff08;三&#xff09;测试结果 三、后序 一、前情提要 基于数据湖对两条实时流进行拼接&#xff0…

AI代码生成辅助工具

有许多AI代码生成辅助工具和平台可用&#xff0c;它们可以帮助开发人员生成、优化和理解代码。以下是一些常见的AI代码生成辅助工具&#xff0c;以及它们的特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交…

大规模网络爬虫系统架构设计 - 云计算和Docker部署

在大规模网络爬虫系统中&#xff0c;合理的架构设计和高效的部署方式是确保系统稳定性和可扩展性的关键。本文将介绍如何利用云计算和Docker技术进行大规模网络爬虫系统的架构设计和部署&#xff0c;帮助你构建高效、可靠的爬虫系统。 1、架构设计原则 在设计大规模网络爬虫系…

字符设备驱动(内核态用户态内存交互)

前言 内核驱动&#xff1a;运行在内核态的动态模块&#xff0c;遵循内核模块框架接口&#xff0c;更倾向于插件。 应用程序&#xff1a;运行在用户态的进程。 应用程序与内核驱动交互通过既定接口&#xff0c;内核态和用户态访问依然遵循内核既定接口。 环境搭建 系统&#…

安防监控视频平台EasyCVR视频汇聚平台调用接口出现跨域现象的问题解决方案

视频监控汇聚EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视…

科技云报道:软件供应链安全如此重要,但为什么难以解决?

科技云报道原创。 软件供应链安全如今已经成了一个世界性难题。从2021年底Apache Log4j“核弹级”风险爆发&#xff0c;时至今日影响仍然存在&#xff0c;保障软件供应链安全已成为业界关注焦点。 但近2年时间过去了&#xff0c;软件供应链安全问题似乎并没有得以缓解&#x…

微服务事务管理(Dubbo)

Seata 是什么 Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 一、示例架构说明 可在此查看本示例完整代码地址&#x…

FreeSWITCH 1.10.10 简单图形化界面6 - 配置讯时网关落地

FreeSWITCH 1.10.10 简单图形化界面6 - 配置讯时网关落地 0、 界面预览1、 创建一个话务台2、 创建PBX SIP中继并设置呼入权限3、 设置呼叫权限4、 设置分机呼出权限5、 设置FXO 网关相关信息6、 设置FXO网关呼叫路由&#xff08;呼入及呼出&#xff09;7、 查看SIP中继状态 0、…

研磨设计模式day15策略模式

场景 问题描述 经常会有这样的需要&#xff0c;在不同的时候&#xff0c;要使用不同的计算方式。 解决方案 策略模式 定义&#xff1a; 解决思路&#xff1a;

HEGERLS智能四向穿梭车是如何解决机械制造领域内SKU种类复杂且量多的问题?

伴随着电子商务和智能制造技术的快速发展&#xff0c;对于自动化立体仓库系统、密集存储系统、自动输送系统、自动识别系统、无线通讯系统、条码扫描、手持终端及其系统集成的需求急剧增加&#xff0c;物流装备系统密集化、自动化、智能化、绿色环保等技术特征日益明显。密集存…

简单的springboot应用部署后内存占用量过大问题排查

1.问题背景 需要部署一个演示环境。所有组件都要部署到一台服务器&#xff0c;采用Docker容器部署&#xff0c;发现多个简单的springboot应用占用内存高达2G&#xff0c;后续的应用因为内存不足就部署不了了。排查下内存占用大的原因&#xff1a; docker stats命令&#xff1a…

ucharts修改ToolTip边框阴影文字居中

ucharts修改ToolTip边框阴影文字居中 效果 Demo 链接&#xff1a; https://pan.baidu.com/s/1k0FxmBPKAHlHksFR3YQSlQ 提取码&#xff1a;ytv7

在vue.config.js中配置文件路径代理名

今天在公司项目中看到一个非常有趣的导入路径 crud 先是一蒙 这是个啥 突然想起一个被自己遗漏的知识点 在vue.config.js中配置路径指向 这里 我们随便找一个vue项目 在src下找到 components 目录 如果没有就创建一个 下面找到HelloWorld.vue 如果没有也是自己创建一个就好 然…

LabVIEW开发异步电动机定子故障在线诊断系统

LabVIEW开发异步电动机定子故障在线诊断系统 三相感应电机&#xff08;IM&#xff09;因其简单性、坚固性和可靠性而广泛用于许多工业应用。然而&#xff0c;对于需要高可靠性的特定领域&#xff0c;如汽车、航空航天、军事和核能&#xff0c;使用经典的三相IM似乎不再适用&am…

JavaScript函数复习

这节课我们来通过我们之前学过的函数来逐渐完善&#xff01; const yearsUntilRetiremen (birthyear, firstName) > {const age 2037 - birthyear;const retirement 65 - age;return ${firstName}还有${retirement}年就退休了&#xff01;;}这个是我们之前写的代码&…