软件工程概论

文章目录

    • 软件的定义
    • 软件的特点
    • 软件的种类
    • 软件工程的起源
    • 软件工程的三个阶段
    • 软件工程概念的提出
    • 软件开发的本质
    • 软件工程框架
      • 软件工程的目标
      • 软件工程的原则
      • 软件工程的活动

软件的定义

计算机系统中的程序及其文档。

  • 程序是计算任务的处理对象和处理规则的描述;

  • 文档是为了便于了解程序所需的阐明性资料

软件的特点

  • 软件是无形的、不可见的逻辑实体
    • 它的正确与否,一直到程序在机器上运行才能知道
    • 这给设计、生产和管理带来许多困难
  • 软件是设计开发的,而不是生产制造的
  • 软件在使用过程中没有磨损、老化的问题
  • 软件是定制开发的
    • 虽然这弓工业想着基于构建的构造模式发展
    • 然而大多数软件仍是根据实际的顾客需求定制的
  • 软件开发是复杂的
    • 软件涉及人类社会的各行各业
    • 软件开发常常涉及其他领域的专业知识,这对软件工程师提出了很高的要求
  • 软件开发的成本高
  • 软件易于复制
  • 软件质量要求较高
  • 软件的开发与运行都离不开相关的计算机系统环境
  • 软件开发工作牵涉到很多社会因素
  • 不同于一 般工程项目的是,在软件项目开发过程中,实际开发(编写代码)的成本只是整个工程成本的一小部分,甚至可以说是“ 冰山一角 ”。而软件测试、系统维护等任务将占据工程的很大一 部分成本 。

软件的种类

按照软件的功能划分,软件一 般可以分 为系统软件、支撑软件和应用软件三类:

  • 系统软件

    • 居于计算机系统中最靠近硬件的一层。
    • 其他软件一般都通过系统软件发挥作用。它与具体的应用领域无关,如编译程序和操作系统等
    • 编译程序把程序人员用高级语言书写的程序翻译成与之等价的、可执行的低级语言程序
    • 操作系统则负责管理系统的各种资源、控制程序的执行
  • 支撑软件

    • 支撑软件的开发、维护与运行的软件。
    • 70年代后期发展起来的软件开发环境以及后来的中间件则可被看成现代支撑软件的代表
    • 软件开发环境主要包括环境数据库、各种接口软件和工具组。三者形成整体,协同支撑软件的开发与维护
    • 中间件是一种软件,它处于系统软件(操作系统和网络软件)与应用软件之间,它能使远距离相隔的应用软件可协同工作( 互操作)
  • 应用软件

    • 特定应用领域专用的软件

在这里插入图片描述

软件工程的起源

早期计算机程序

  • 在1946年计算机刚诞生时,人们采用机器码编制程序,根本没有独立的软件的概念
  • 机器码指令只是为了驱动计算机硬件工作,就象人们调节电视机、录像机、洗衣机等家用电器的按钮一样
  • 1947年,冯·诺依曼首先提出用流程图描述计算机的运行过程,才使人们认识到程序设计是完全不同于硬件研制的另一项工作。从此以后,软件的开发和研究才逐渐开始独立地进行。

现在的信息产业

  • 微电子是基础,计算机和网络是载体,软件是核心。

软件工程的三个阶段

  1. 个人程序时期:这个时期大致可追溯到计算机的早期历史,特别是在上世纪50年代和60年代。在这个时期,计算机科学家和程序员通常是个人从事软件开发的主要从业者。他们独立编写和维护程序,通常是为了满足个人或特定组织的需求。由于硬件资源和开发工具的有限性,软件开发通常是一项相对较小规模和个人驱动的活动。
    • 个人驱动:软件开发主要由个人程序员完成,通常是计算机科学家或爱好者。
    • 缺乏规范:开发过程相对非正式,缺乏严格的方法和流程。
    • 小规模项目:项目通常较小,目标是解决特定问题或需求。
    • 有限的硬件资源:开发受到计算机硬件性能的限制。
    • 缺乏大规模协作:通常缺乏多人协作和团队合作。
  2. 软件作坊时期:软件作坊时期大致涵盖了上世纪70年代和80年代。在这个时期,软件开发开始逐渐从个人领域扩展到小型团队和组织。软件开发变得更加专业化,团队协作变得更为普遍。然而,开发过程仍然相对不够规范化,通常缺乏严格的项目管理和质量控制方法。
    • 小型团队:软件开发逐渐转向小型团队和组织,而不仅仅是个人。
    • 专业化:出现了更多专业的软件开发人员和团队,开发逐渐成为职业。
    • 有限的流程控制:项目管理和质量控制仍然不够严格。
    • 多样性的项目:软件应用范围扩大,包括商业应用、科学计算等。
    • 有限的工程化:虽然有更多的团队参与,但开发过程仍然不够规范化。
  3. 软件工程时期:软件工程时期可以追溯到上世纪80年代末至今。在这个时期,对软件开发过程进行了深入的研究和发展,出现了更多的开发方法和最佳实践。软件工程强调了系统化的方法,包括需求分析、系统设计、编码、测试、维护等方面的严格流程。这一时期还引入了面向对象编程、设计模式和软件开发生命周期等概念,旨在提高软件质量、可维护性和可重用性。软件工程方法也导致了更多的工程化和团队合作。
    • 工程化方法:引入了系统化的软件开发方法,强调需求分析、系统设计、编码、测试和维护等阶段的重要性。
    • 严格的项目管理:引入了项目管理技术,如进度追踪和资源分配。
    • 质量和可维护性:注重软件质量、可维护性和可重用性,采用更严格的测试和验证方法。
    • 面向对象编程:引入了面向对象编程思想和设计模式,提高了代码的组织和可扩展性。
    • 团队合作:强调多人协作,开发团队中有各种不同的专业角色,如开发人员、测试人员和项目经理。

软件工程概念的提出

随着计算机应用领域的进一步扩大,软件的规模和复杂性也在不断增加

在软件开发的领域出现了一些现象(所谓的软件危机):

  • 软件质量差,可靠性难以保证
  • 成本难以控制,很少有在预算内完成的
  • 开发进度难以把握,周期拖得很长
  • 可维护性较差,维护人员和费用不断增加

1968年,NATO(North Atlantic Treaty Organization,北大西洋公约组织)在联邦德国Garmisch-Partenkirchen举行的关于软件开发的会议上,首次提出了软件工程的术语,标志着软件工程作为一门学科的正式出现,至今已有40年的历史了。软件工程概念软件工程概念的提出其目的是倡导以工程的原理、 原则和方法进行软件开发,以解决软件危机。

软件开发的本质

  • 问题域到不同抽象之间概念和计算逻辑的映射

  • 实现问题域中的概念和处理逻辑到运行平台的概念和处理逻辑的映射

当我们得到一个问题域并且想要用软件开发来解决这个问题,我们必须一层一层向下抽象,抽象成软件层面可以理解的东西。所以建模是解决问题的一般途径:运用所掌握的知识, 通过抽象,给出该问题的一个结构

  • 模型是在特定意图下所确定的角度和抽象层次上对物理系统的描述,通常包含对该系统边界的描述, 给出系统内各模型元素 以及它们之间的语义关系

之所以要一层一层的向下抽象,是为了控制开发的的复杂性。一个抽象层是一组确定的术语定义的。

软件工程框架

软件工程可以被定义为一个包含三个主要元素的三元组,这些元素是目标、原则和活动。下面是对这三个元素的简要说明:

软件工程的目标

目标是指在软件工程过程中所期望实现的结果或成果。这些目标通常与开发和维护高质量、可靠、安全、可维护和可扩展的软件系统有关。软件工程的目标可以根据项目的特定需求和约束而变化,但通常包括以下方面:

  • 交付高质量的软件产品。
  • 提高开发效率和生产力。
  • 减少软件开发和维护的成本。
  • 确保软件的安全性和可靠性。
  • 使软件易于维护和扩展。

软件工程的原则

原则是指软件工程的基本准则和指导原则,用于指导软件开发和维护过程,以实现上述目标。这些原则通常代表着最佳实践和经验教训,可以帮助开发团队在整个软件生命周期中做出明智的决策。一些常见的软件工程原则包括:

  • 模块化原则:将软件分解为小的可管理的模块。
  • 高内聚低耦合原则:模块应该具有高内聚性(相关功能放在一起)和低耦合性(模块之间的依赖关系最小化)。
  • 单一责任原则:每个模块或类应该只有一个单一的责任。
  • 开放封闭原则:软件应该对扩展开放,但对修改封闭。
  • 面向对象原则:使用面向对象的方法进行软件设计和开发。

软件工程的活动

活动是指在软件工程过程中执行的具体任务和活动,以实现上述目标和遵循原则。软件工程的活动包括项目计划、需求分析、系统设计、编码、测试、部署、维护等一系列步骤和阶段。这些活动通常根据软件开发生命周期模型(如瀑布模型、敏捷开发等)进行组织和管理。

综合起来,软件工程的三元组概念强调了实现高质量软件的目标、遵循基本原则以及执行一系列活动来实现这些目标的重要性。这个三元组为软件开发提供了一个结构化的方法,有助于项目团队在整个软件生命周期中取得成功。

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

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

相关文章

腾讯云优惠券种类、领取方法及使用教程分享

腾讯云是国内领先的云计算服务提供商,为用户提供丰富的云计算产品和服务。为了吸引更多用户使用腾讯云的产品和服务,腾讯云会定期推出各种优惠券活动。本文将为大家介绍腾讯云优惠券的种类、领取方法及使用教程。 一、腾讯云优惠券种类介绍 腾讯云优惠券…

“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“

目录 第一单元:二十一世纪程序执行 背景: 总结: 第二单元:对象导向与类别设计 背景: 总结: 第三单元:使用类别与基底类别库 背景: 总结: 第四单元:Windows开发程序 背景: 总结: 第五单元:防护式程序设计 背景: 总结…

SXSSFWorkbook-MinIo-大数据-流式导出

文章目录 前言业务现状架构思路技术细节生成摘要IDSXSSFWorkbookMinIomybatis 流查询PipedInputStream 保存到minio 总结 前言 由于业务涉及到数据比较大,用户对导出功能使用频繁,每次导出数据两10万以上。 为了减少数据库压力,及应用服务器…

代理IP端口是什么意思呢?

今天,咱们来聊聊一个小众但很有料的话题——代理IP端口,它可是你纵横互联网世界的好搭子哦! 首先,我们得先弄明白,代理IP端口是个啥? 代理IP端口就像是通往网络世界的门票,是你和代理服务器之间的桥梁。…

API接口安全运营研究(内附官方开发平台api接口接入方式)

摘 要 根据当前API技术发展的趋势,从实际应用中发生的安全事件出发,分析并讨论相关API安全运营问题。从风险角度阐述了API接口安全存在的问题,探讨了API检测技术在安全运营中起到的作用,同时针对API安全运营实践,提出…

关于系统/网络运维面试经验总结

一. 熟悉Linux命令 1. 最最最常问到的是 如何查看系统内存占用情况? ① free命令:free [-h][-m] 显示系统的内存使用情况,包括总内存、已使用内存、空闲内存等信息。其中,-m选项是以MB为单位来展示内存使用信息;-h选…

办公室人人在用的iTab桌面真的好用吗?

本人坐标北京,在一家中型互联网公司当社畜多年。最近发现一个奇怪的现象,我工位前后左右的同事都跟我在用一样的浏览器桌面——iTab新标签页。我表示莫非真的英雄所见略同? 我是去年1月份在刷B站时偶然刷到一条评论,有人分享自己…

日语学习网站web项目

支持日语五十音,平片假名、罗马音、词义转换、百度翻译功能,方便日语初学者学习日语发音 介绍 采用vitevue3ts技术栈开发, pinia管理全局化。主要是为了日语入门学习五十音, 以及日语句子罗马 发音对照练习。 参考以下两个项目完成 https://github.com/hexenq/kuroshiro ht…

卫星/RedCap/高算力/解决方案/创新金奖……移远通信为IOTE 2023再添新活力

9月20日,IOTE 2023第二十届国际物联网展深圳场震撼来袭。 作为IOTE多年的“老朋友”,移远通信在参展当天,不仅有5G RedCap、卫星通信、高算力、车载等高性能产品及终端展出,还携智慧出行、智慧生活、智慧能源、工业互联网等多领域…

SettingsView/设置页 的实现

1. 创建设置视图 SettingsView.swift import SwiftUI/// 设置页面 struct SettingsView: View {/// 环境变量,呈现方式:显示或者关闭Environment(\.presentationMode) var presentationMode/// 默认网址let defaultURL URL(string: "https://www.…

淘宝天猫商品历史价格API接口

获取淘宝商品历史价格接口的步骤如下: 注册淘宝开放平台:首先在淘宝开放平台上注册一个账号,并进行登录。创建应用:在淘宝开放平台上创建一个应用,并获取该应用的App Key和App Secret,用于后续的接口调用。…

外卖App点菜页-两个tableView联动【1】

这里新开一个项目 配置两个tableView的section和row以及ce 处理常见的tableView约束错误rowHeight 去掉滚动条 tableView的sectionHeaderxib初探 默认自带效果 不用这个 配置sectionHeader的内容 点击左侧tableViewCell使右边tableView 设置cell被选中后的样式及初始被选中ce…

Python爬虫提高排名

在如今竞争激烈的互联网时代,网站的SEO优化变得尤为重要。而Python爬虫作为一种强大的工具,可以帮助网站主们提升搜索排名,吸引更多的流量和用户。本文将为您揭秘如何利用Python爬虫来改善您的SEO优化,并帮助您提升搜索排名。无论…

淘宝天猫店铺所有商品数据接口,淘宝API接口

获取淘宝店铺所有商品数据接口的步骤如下: 获取授权:使用 OAuth 2.0 协议对应用进行授权,以便能够访问店铺的商品信息。获取店铺信息:使用淘宝 API 的 taobao.shop.get 接口,传入店铺的 user_id 参数,获取…

yolov8 strongSORT多目标跟踪工具箱BOXMOT

1 引言 多目标跟踪MOT项目在Github中比较完整有:BOXMOT , 由mikel brostrom提供。在以前的版本中,有yolov5deepsort(版本v3-v5), yolov8strongsort(版本v6-v9),直至演变…

使用asp.net core web api创建web后台,并连接和使用Sql Server数据库

前言:因为要写一个安卓端app,实现从服务器中获取电影数据,所以需要搭建服务端代码,之前学过C#,所以想用C#实现服务器段代码用于测试,本文使用C#语言,使用asp.net core web api组件搭建服务器端&…

BN体系理解——类封装复现

from pathlib import Path from typing import Optionalimport torch import torch.nn as nn from torch import Tensorclass BN(nn.Module):def __init__(self,num_features,momentum0.1,eps1e-8):##num_features是通道数"""初始化方法:param num_features:特征…

产品升级!全球尺度下原核基因组关键基因共进化无标题

微生物是群落型的生存方式,高通量测序时代到来后,掀起了针对微生物群落整体研究的高潮,比如基于功能基因/16S/ITS/扩增子、宏基因组等进行群落多样性分析。但是,我们基于分离培养等方法获得单菌落,针对单菌开展基因组、…

十一、WSGI与Web框架

目录 一、什么是WSGI1.1 WSGI接口的组成部分1.2 关于environ 二、简易的web框架实现2.1 文件结构2.2 在web/my_web.py定义动态响应内容2.3 在html/index.html中定义静态页面内容2.4 在web_server.py中实现web服务器框架2.5 测试 三、让简易的web框架动态请求支持多页面3.1 修改…

Python in Visual Studio Code 2023年10月发布

排版:Alan Wang 我们很高兴地宣布 Visual Studio Code 的 Python 和 Jupyter 扩展于 2023 年 10 月发布! 此版本包括以下公告: Python 调试器扩展更新弃用 Python 3.7 支持Pylint 扩展更换时的 Lint 选项Mypy 扩展报告的范围和守护程序模式G…