【学习笔记】软件工程概述

简介

程序是人们为了完成特定的功能编制的一组指令集,它由计算机的语言描述,并且能在计算机系统上执行。而软件不仅包括程序,还包括程序的处理对象——数据,以及与程序开发、维护和使用相关的图文资料。

软件有以下几个特点:
(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
(2)软件的生成与硬件不同,他没有明显的制造过程。要提高软件的智联个,必须在软件开发方面下功夫。
(3)在软件的运行和试用期间,不会出现硬件中出现的机械磨损、老化问题,然而它存在退化问题,必须对其进行多次的修改和维护,直至退役。
(4)计算机软件的开发与运行常常收到计算机系统的制约,它对计算机系统有着不同程度的依赖性。为了解决这种依赖性,在软件开发中提出了软件移植问题。
(5)软件开发至今尚未完全摆脱人工的开发方式。
(6)软件本身是复杂的。软件的复杂性可能来自它反映实际问题的复杂性,也可能来自程序逻辑结构的复杂性。
(7)软件的成本相当昂贵。
(8)相当多的软件工程设计社会因素。许多软件的开大和运行涉及机构、体制及管理方式等问题,它们直接决定项目的成败。

分类

按照功能的不同,软件可以分为系统软件、支撑软件和应用软件。基于规模的不同,软件可以划分为微型、小型、中型、大型和超大型软件。根据工作方式的不同,划分为实时软件、分时软件、交互式软件和批处理软件。

软件危机

软件危机是指人们在开发软件和维护软件过程中遇到的一系列问题。在20世纪60年代中期,随着软件规模的扩大,复杂性的增加,功能的增强,高质量的软件开发变得越来越困难。在软件开发的过程中,会经常出现不能按时完成任务、产品质量得不到保证、工作效率地下和开发经费严重超支等问题。
普遍出现的严重问题有:
(1)开发的软件产品不能满足用户的 需求,即产品的功能或特性与需求不符合。
(2)相比越来越廉价的硬件,软件代价过高。
(3)软件质量难以得到保证,且难易发挥硬件潜能。
(4)难易准确估计软件开发、维护的费用以及开发周期。
(5)软件产品修改维护困难,集成遗留系统更困难。

软件危机出现的原因

(1)忽视软件开发前期的需求分析。
(2)开发过程缺乏统一的、规范化的方法论指导。软件开发是一项复杂的工程,人们需要用科学的、工程化的思想来组织和指导软件开发的各个阶段。
(3)文档资料不齐全或不准确。
(4)忽视与用户之间、开发组成员之间的交流。
(5)忽视测试的重要性。
(6)不重视维护或由于上述原因造成维护工作困难。
(7)从事软件开发的专业人员对这个产业认识不充分,缺乏经验。
(8)没有完善的质量保证体系。

软件工程的知识体系

  1. 软件需求(Software Requirement)
  2. 软件设计(Software Design)
  3. 软件构建(Software Construction)
  4. 软件测试(Software Testing)
  5. 软件维护(Software Maintenance)
  6. 软件配置管理(Software Configuration Management)
  7. 软件工程管理(Software Engineering Management)
  8. 软件工程过程(Software Engineering Process)
  9. 软件工程模型和方法(Software Engineering Models and Methods)
  10. 软件质量(Software Quality)
  11. 软件工程职业实践(Software Engineering Professional Practice)
  12. 软件工程经济学(Software Engineering Economics)
  13. 计算基础(Computing Foundations)涉及解决问题的技巧、抽象、编程基础、编程语言的基础知识、调试工具和技术、数据结构和表示、算法和复杂度、系统的基本概念、计算机的组织结构、变异基础知识,操作系统基础知识、数据库基础知识和数据管理、网络通信基础知识、并行和分布式计算、基本的用户认为因素、基本的开发人员认为因素和安全的软件开发和维护等方面内容
  14. 数学基础(Mathematical Foundations)涉及集合、关系和函数,基本的逻辑、证明技巧、计算的基础知识、图和树、离散概率、有限状态机、语法,数值精度、准确性和错误,数论和代数结构等方面的内容。
  15. 工程基础(Engineering Foundations)涉及实现方法和实验技术、统计分析、度量、工程设计,建模、模拟和建立原型,标准和影响因素分析等方面内容。

软件开发方法

  1. 结构化方法
  2. 面向数据结构方法
  3. 面向对象方法
  4. 形式化方法

软件工程工具

(1)按照功能划分:功能是对软件进行分类最常用的标准,软件工程工具可以分为可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具等。
(2)按照支持的过程划分:可分为设计工具、编程工具、维护工具等。
(3)按照支持的范围划分:窄支持、较宽支持和一般支持工具。窄支持工具支持软件过程中的特定任务,一般将其称之为工具;较宽支持工具支持特定的过程阶段,一般由多个工具集合而成,称之为工作台;一般支持工具支持覆盖软件过程的全部或大部分阶段,包含多个不同的工作台,称之为环境。

软件开发模型

瀑布模型
凯苏原型模型
增量模型
螺旋模型
喷泉模型
基于组件的开发模型
统一软件开发过程模型
敏捷过程与极限编程

软件结构化设计

  1. 数据库结构设计

  2. 用户界面设计
    (1)设计驱动开发
    (2)目标用户群体
    (3)间接与清晰
    (4)实现模型与心智模型
    (5)设计的规范性
    (6)设计的可用性和易用性
    (7)设计的一致性
    (8)设计的容错性

  3. 结构化设计和结构化分析

  4. 体系结构设计
    (1)表示软件结构的图形工具
    (2)面向数据流的设计方法
    (3)面向数据结构的设计方法

  5. 接口设计

  6. 数据设计

  7. 过程设计
    (1)程序流程图
    (2)N-S图
    (3)PAD图
    (4)过程设计语言

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

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

相关文章

vscode正则匹配技巧

写正则表达式 下面是匹配加粗的单词或空格 \*\*[a-zA-Z\s]*\*\*vscode提取加粗的内容 altenter,再ctrlC复制选中的内容出来

DDD面试题:DDD聚合和表的对应关系是什么 ?(来自蚂蚁面试)

尼恩说在前面: 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: DDD 的外部接口调用,应该放在…

flask 前后台文件多张图片传递api;AIGC streamlit、gradio多图片页面展示

1、flask 前后台文件多张图片api send_file 传递zip: send_file(zip_data, mimetype=‘application/zip’, as_attachment=True, download_name=‘images.zip’) from flask import Flask, Response, request,send_file from PIL import Image import torch import io from …

React的JSX使用入门案例

01 入门案例 1、引入react的依赖&#xff1a;<script src"./static/react18.3.1/react.development.js"></script> 2、引入react-dom的依赖&#xff1a;<script src"./static/react18.3.1/react-dom.development.js"></script> …

【项目申报】2024年西安市科技企业孵化器认定和申报条件、扶持政策须知

第一章 总 则 第一条 为营造激励自主创新的环境&#xff0c;加快科技成果转化&#xff0c;培育科技型中小企业&#xff0c;发展高新技术产业&#xff0c;促进西安市科技企业孵化器&#xff08;以下简称“孵化器”&#xff09;健康发展&#xff0c;努力建设创新型郴州&#xf…

AI绘画工具介绍

在科技日新月异的今天&#xff0c;AI绘画工具以其独特的魅力和无限的可能性&#xff0c;正在逐渐改变着我们对绘画的认知和创作方式。本文将详细介绍AI绘画工具的概念、原理、应用场景、优势与局限性&#xff0c;以及未来发展趋势&#xff0c;带您领略科技与艺术完美融合的奇妙…

深入了解二叉搜索树:原理、操作与应用

文章目录 二叉搜索树二叉搜索树的操作1.查找操作2.插入操作3.查找最大值或者最小值4.删除操作5.前序中序后序遍历 总结 二叉搜索树 形如上图的二叉树就是二叉搜索树&#xff0c;接下来我们来具体阐述一下什么是二叉搜索树。 二叉搜索树的概念&#xff1a;满足左子树的值小于根…

经济学SSCI期刊,中科院3区,IF=2+,难度不大,收稿范围广泛!

一、期刊名称 Information Economics and Policy 二、期刊简介概况 期刊类型&#xff1a;SSCI 学科领域&#xff1a;经济学 影响因子&#xff1a;2.8 中科院分区&#xff1a;3区 出版方式&#xff1a;订阅模式/开放出版 版面费&#xff1a;选择开放出版需支付$3190 三、…

C++ | Leetcode C++题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> t;vector<vector<int>> ans;void dfs(int cur, vector<int>& nums) {if (cur nums.size()) {ans.push_back(t);return;}t.push_back(nums[cur]);dfs(cur 1, nums);t.po…

yum仓库和NFS网络共享服务

一、yum 1.1yum的定义 yum是一个基于RPM包&#xff0c;构建的软件更新机制&#xff0c;能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间 为什么会有依赖关系的发生 因为linux本身就是以系统简洁为自身优势&#xff0c;所以在安装操作系统的时…

Docker与Harbor:构建企业级私有Docker镜像仓库

目录 引言 一、本地私有仓库 &#xff08;一&#xff09;基本概述 &#xff08;二&#xff09;搭建本地私有仓库 1.下载registry镜像 2.启动容器 3.上传本地镜像 4.客户端下载镜像 二、Harbor简介 &#xff08;一&#xff09;什么是 Harbor &#xff08;二&#xff…

苹果15能用哪些充电宝?充电宝什么牌子好?好用充电宝排名

随着移动设备的普及和功能的不断强大&#xff0c;我们对于充电宝的需求也越来越高。尤其是对于苹果15用户来说&#xff0c;选择一款兼容性好、性能稳定的充电宝显得尤为重要。在市面上众多充电宝品牌中&#xff0c;如何选择适合苹果15的充电宝&#xff1f;究竟哪个牌子的充电宝…

在线扭蛋机小程序:商家稳占市场的新突破口

近几年&#xff0c;扭蛋机进入了爆发期&#xff0c;动漫、游戏的发展更是推动了市场的发展&#xff0c;我国扭蛋机正在蓬勃发展中。 不过&#xff0c;在市场规模扩大下&#xff0c;扭蛋机行业的竞争力也在同时加大&#xff0c;企业商家需要在市场竞争中寻求发展新思路&#xf…

C#进阶-OleDb操作Excel和数据库

在C#编程中&#xff0c;使用OleDb可以方便地实现对Excel文件和数据库的操作。本文探讨了在C#中使用OleDb技术操作Excel和数据库的策略。文章详述了OleDb的定义、配置环境的步骤&#xff0c;并通过实际代码示例演示了如何高效读写Excel文件和交互数据库。文中还评估了OleDb技术的…

KaiwuDB 参编的《分析型数据库技术要求》标准正式发布

近期&#xff0c;中国电子工业标准化技术协会正式发布团体标准《分析型数据库技术要求》&#xff08;项目号&#xff1a;T-CESA 2023-006&#xff09;。该标准由中国电子技术标准化研究院、KaiwuDB&#xff08;上海沄熹科技有限公司&#xff09; 等国内 16 家企业联合起草&…

AI图书推荐:给自媒体创作者的ChatGPT使用指南

你是否厌倦了花费数小时盯着空白屏幕&#xff0c;努力为你的内容想出新鲜点子&#xff1f;想要将你的写作提升到下一个水平&#xff1f;有了ChatGPT&#xff0c;你可以告别写作障碍、无休止的修订和浪费的时间。 在这本全面的指南中&#xff0c;你将学到关于ChatGPT你需要知道…

Hive两代命令行客户端(Hive、Beeline)

Hive命令行客户端 Hive有两个主要的客户端工具&#xff0c;分别是旧版的Hive CLI&#xff08;Command Line Interface&#xff09;和新版的Beeline。 1. Hive CLI&#xff1a; Hive CLI 是 Hive 最早期的命令行客户端工具&#xff0c;它使用 JDBC 连接到 Hive 服务器&#xff…

轻松管理文件夹批量重命名:学会用关键词批量替换文件夹名称技巧

随着计算机中存储的文件和文件夹数量不断增加&#xff0c;如何有效地管理和组织它们变得尤为重要。批量重命名文件夹是提升文件管理效率的关键步骤之一。而利用云炫文件管理器中关键词批量替换文件夹名称的技巧&#xff0c;则可以帮助我们更快速地完成这一任务。 关键词批量替…

关于JavaScript的loadsh中_get()方法

在Vue或React中使用lodash&#xff0c;首先需要通过npm或yarn等包管理工具安装lodash&#xff0c;然后在需要的地方通过import语句引入lodash库。在Vue中&#xff0c;你可以使用lodash提供的各种函数来简化你的代码&#xff0c;提高开发效率。在React中&#xff0c;lodash同样可…

国内首发 | CSA大中华区启动《AI安全产业图谱(2024)》调研

在人工智能&#xff08;AI&#xff09;技术的快速发展浪潮中&#xff0c;AI安全已成为全球关注的焦点。为应对AI安全带来的挑战&#xff0c;确保AI技术的健康发展&#xff0c;全球范围内的研究机构、企业和技术社区都在积极探索解决方案。 在这一背景下&#xff0c;CSA大中华区…