【随笔闲谈】软件工程导论

news2024/11/28 1:48:57

目录

一、软件工程概述

二、启动阶段

三、计划阶段

四、实施阶段

五、收尾阶段


一、软件工程概述

软件危机:在计算机软件的开发和维护过程中遇到的一系列严重问题。

软件危机的产生与自身的特点有关,还与软件开发、管理的方法不正确有关。

软件危机的典型表现:

  • 对软件开发的进度和成本无法控制;
  • 用户对已开发完成的软件的满意度低;
  • 软件质量无法保证;
  • 软件开发后的维护工作很难进行;
  • 软件通常没有合适的文档资料;
  • 软件成本在系统成本中所占比例越来越高;
  • 软件开发生产力提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

软件工程:计算机科学、工程和管理三个学科的综合。(技术和管理)

软件工程的基本目标:努力发挥开发人员的创造性潜能。

软件工程方法学的目的(实质):使软件生产规范化和标准化,控制开发工作的复杂度。

软件工程方法学得以实施的主要保证是:软件开发工具和软件开发的环境。

软件根据功能划分为:系统软件、支撑软件、应用软件。

软件工程的七大基本原理:

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

传统软件工程的生命周期:

  1. 问题定义与可行性研究;
  2. 需求分析;
  3. 软件设计(概要设计与详细设计);
  4. 编码;
  5. 测试;
  6. 运行与维护。

瀑布模型:

瀑布模型的特征:

  1. 从上一项活动中接受该活动的工作成果,作为输入;
  2. 利用这一输入实施该活动应完成的内容;
  3. 给出该活动的工作成功,作为输出传给下一项;
  4. 对该项活动实施的工作进行评审。若其工作得到确认,则继续下一项活动。

瀑布模型的优点:

  • 强调开发的阶段性;
  • 强调早期计划及需求调查;
  • 强调产品测试。

瀑布模型的缺点:

  • 瀑布模型过于依赖早期进行的唯一一次需求调查,不能适应需求的变化;
  • 单一流程,开发中的经验教训不能反馈应用于本产品的过程。

原型化方法是用户和设计交换最频繁的方法。

软件开发过程中可能出现的问题:

  • 问题定义与可行性研究:未进行问题定义和可行性研究,导致技术问题难以解决;
  • 需求分析:需求分析应与客户充分沟通,并由开发人员完成,而不是由用户给出。需求分析不完整,会导致用户不断增加或修改要求而增大开发难度;
  • 系统设计:模块间未做到高内聚低耦合,导致维护困难;
  • 详细设计:未编写详细文档,导致维护困难;
  • 编码:编码风格不好(注释少、命名不规范),导致维护困难;
  • 测试:由开发人员自己进行测试,而没有交给第三方测试,造成系统的不稳定;
  • 维护:没有进行评审或保存详细的文档资料,导致维护困难。

二、启动阶段

可行性研究:

  • 技术可行性;
  • 经济可行性;
  • 操作可行性;
  • 时间可行性;
  • 组织与管理可行性;
  • 社会与政策可行性。

需求分析:

  • 系统要求:功能要求、性能要求、运行要求、其他要求。
  • 数据要求:结构化程序设计以数据流为核心,结构化分析方法采用数据流图、DFD与数据字典DD描述。

数据流图的基本四种成分:

  • 数据输入的源点和数据输出的汇点;
  • 加工;
  • 数据流;
  • 数据存储文件。

三、计划阶段

系统概要设计的意义:

  • 设计是软件开发中形成质量的地方;
  • 设计为最终对软件评估进行质量评估提供度量依据;
  • 设计是将用户的需求准确的转化为完整的软件产品的唯一方法;
  • 设计是软件开发和维护的基础。

软件设计阶段分为原型设计用例设计

概要设计针对需求,详细设计针对实现。

为高质量的开发软件,在软件结构设计时,必须遵循模块独立性原则。

项目开发计划除去规定项目开发所占的资源,还可以包括用户培训计划。

详细设计内容:

  • 算法过程设计;
  • 数据结构设计;
  • 数据库物理设计;
  • 信息编码设计;
  • 测试用例设计;
  • 其他要求设计。

软件详细设计工具可分三类:图示工具、设计语言、表格工具。

结构化程序设计的基本控制结构:

系统流程图是描绘物理系统的传统工具,它的基本思想是利用图形符号以黑盒子形式描绘系统里的每个部件。

结构化系统设计是面向数据流的系统设计方法,其要解决的任务是在需求分析的基础上,将DFD(结构图)“映射”为软件系统的结构。

N_S图(盒图)

 

PAD图

PDL是伪码式语言。

四、实施阶段

软件测试原则:

  • 所有测试的标准都是建立在用户的需求之上;
  • 基于“质量第一”思想,时间服从质量;
  • 实现定义好标准,根据标准进行测试;
  • 软件测试随着项目的启动就开始,而不是项目结束才测试;
  • 由第三方进行更客观的测试;
  • 测试用例通过设计,采用少量的高效测试用例尽可能多的发现软件问题;
  • 重视稳定,保存一切测试过程文档。

白盒测试在测试过程的前期进行,黑盒测试在测试过程的的后期。 

使用白盒测试方法时,确定测试数据应根据程序的内部逻辑和指定的覆盖标准。

等价分类法:

1. 划分等价类

输入有效等价类无效等价类
数据A条件①;条件②;......条件③;条件④;......

2. 有效等价类测试用例

输入数据测试范围期望结果
数据A等价类①、②输入正确

3. 无效等价类测试用例

输入数据测试范围期望结果
数据B1等价类③条件③输入错误
数据B2等价类④条件④输入错误

条件①;条件②;......单元测试、集成测试、确认测试、系统测试。

五、收尾阶段

为保证软件质量所采取措施:审查、复查、管理、复审、测试。

软件的维护阶段耗费成本最高,软甲工程目的是提高软件的可维护性,减少软件维护的工作量,降低软件系统的成本。

软件维护的目的:满足用户对已开发产品的性能与软件环境不断提高的需求,进而达到延长软件的寿命。

软件维护的分类(数字为所占成本百分比):

  • 完善性维护(50%);
  • 适应性维护(25%);
  • 纠错性维护(21%);
  • 其他维护(4%);

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

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

相关文章

chatgpt赋能python:Python打开目录:快速浏览目录中的所有文件

Python打开目录:快速浏览目录中的所有文件 Python是一种流行的编程语言,其可扩展性和易学性使其成为一种受欢迎的语言。Python的强大功能之一就是能够操作文件和目录。在本文中,我们将讨论如何使用Python在Windows、Mac和Linux上打开目录并列…

Opencv-C++笔记 (11) : opencv-图像二值化与LUB查找表

文章目录 一、概述二、THRESH_BINARY和THRESH_BINARY_INV三、THRESH_TRUNC四、THRESH_TOZERO和THRESH_TOZERO_INV五、THRESH_OTSU和THRESH_TRIANGLE六、LUT查找表 一、概述 我们在上一节程序中生成了一张只有黑色和白色的图像,这种“非黑即白”的图像像素的灰度值无…

MFC 非线程创建模态化窗口 实现工具栏拓展

1 实现基本工具栏 1.1 在Dlg.h文件中声明变量和定义资源ID #define ID_BUTTONS 501CToolBar m_toolbar; //工具栏 CImageList m_imageList; //工具栏图片 CImageList m_hotImageList; //工具栏热点图片 CReBar m_Rebar; //可以在位图上显示子窗口口 用来显示背景 CString…

【DeepLearning】Ubuntu中深度学习环境配置完整流程

Ubuntu中深度学习环境配置完整流程 1 显卡驱动2 cuda3 cuDNN4 torch5 torchvision 1 显卡驱动 支持 cuda 的所有显卡型号: Link 查询显卡型号 lspci -nn | grep VGA即 Vendor ID:Device ID 为 10de:21c4,在浏览器或者 Link 中搜索。 填写显卡信息: Link 选择要下载…

Jenkins-pipeline自动化构建Java应用

本实验操作需要:Jenkins,git代码仓库(如gitlab,gitee等都可以),maven,docker,docker镜像仓库(habor,nexus或者阿里云ACR等)以及k8s环境。 前期准…

nginx特点以及安装

目录 1.特点 2.nginx和apache的区别 3.nginx应用场景 4.安装nginx 5. 更新nginx版本 6.总结 1.特点 高性能 轻量级web服务软件 稳定性高 系统自选消耗低 对http并发链接处理能力高 #处理并发连接能力 1.cup个数 2.本地服务器最大文件打开数 2.nginx和apache的区别 ng…

chatgpt赋能python:打包Python应用程序成deb包

打包Python应用程序成deb包 随着Python编程语言的不断发展,越来越多的开发者使用Python编写应用程序。然而,将Python程序打包并制作成deb包以进行安装可能仍然是一个难点。本文将介绍如何使用Debian打包工具,将Python应用程序制作成deb包。 …

chatgpt赋能python:Python扩展库介绍

Python扩展库介绍 Python是一种广泛使用的编程语言,它的易用性和可扩展性是许多开发者选择它的原因之一。这个语言有着丰富的扩展库,让开发者能够更加高效地编写代码。在这篇SEO文章中,我们将介绍几个与Python相关的扩展库。 NumPy NumPy是…

RPC远程调用

简介 PRC是一种调用方式而不是一种协议 在本地调用方式时由于方法在同一个内存空间,所以程序中可以直接调用该方法,但是浏览器端和服务端程序是不在一个内存空间的,需要使用网络来访问,就需要使用TCP或者UDP协议,由于…

使用frp工具实现内网穿透以及配置多个ssh和web服务

frp简介 FRP 项目地址 https://github.com/fatedier/frp/blob/master/README_zh.md frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。 环境准备 ssh连接 1. 需要一台可以直接访问…

简要介绍 | 交叉熵损失:原理和研究现状

注1:本文系“简要介绍”系列之一,仅从概念上对交叉熵损失进行非常简要的介绍,不适合用于深入和详细的了解。 注2:"简要介绍"系列的所有创作均使用了AIGC工具辅助 交叉熵损失:原理、研究现状与未来展望 Under…

Web3 是什么?为何应该关注?

当我开始我的职业生涯时,“Web2.0”还是一个热门的新事物。 当我开始我的职业生涯时,正值互联网快速发展的时期,人们谈论的是“Web2.0”,这一概念引发了许多关于用户参与、社交媒体和在线合作的讨论。然而,随着时间的推…

SQL优化--如何分析优化呢?

目录 一个SQL语句执行很慢, 如何分析? ​编辑 重要属性 possible_key key key_len Extra type 面试回答 框架 范例 例: 上面三种查询我们都可以通过执行计划找到查询慢的原因,并且提供解决方案 比如聚合查询可以新增临时表&…

【Leetcode -563.二叉树的坡度 - Nowcoder -KY11.二叉树遍历】

Leetcode Leetcode -563.二叉树的坡度c Leetcode -563.二叉树的坡度 题目:给你一个二叉树的根节点 root ,计算并返回 整个树 的坡度 。 一个树的 节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的 差的绝对值 。如果没有左子树…

leetcode数据库题第五弹

leetcode数据库题第五弹 1141. 查询近30天活跃用户数1148. 文章浏览 I1158. 市场分析 I1164. 指定日期的产品价格1174. 即时食物配送 II1179. 重新格式化部门表1193. 每月交易 I1204. 最后一个能进入电梯的人1211. 查询结果的质量和占比1251. 平均售价小结 1141. 查询近30天活跃…

chatgpt赋能python:Python打开文件目录:入门指南

Python打开文件目录:入门指南 打开文件目录是编程中常见的操作之一。Python 作为一种优秀的脚本语言,提供了众多的实用方法来操作文件系统。在本文中,我们将介绍如何使用 Python 打开文件目录,同时提供一些对 SEO 优化有帮助的技…

NodeJS 生成APIDOC⑩①

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言API 文档生成工具 APIDOC特点 APIDOC使用步骤0、 运行命令1、 安装插件3、 配置演示4、 ApidocJson配置文件5、效果图 总结 ✨文章有误请指正&#x…

Storm forming 风雨欲来 | 经济学人20230325版社论高质量双语精翻

本期精翻为2023年3月25日《经济学人》周报封面文章:《风雨欲来》(Storm forming)。 Storm forming 风雨欲来 As video games grow, they are eating the media 随着电子游戏的发展,它们正在蚕食媒体 The games business has lesso…

计算机网络概论

计算机网络概论 组成 客户端:就像蟹堡王的顾客一样。服务端:类似于蟹堡王的分店。路由器:扮演着转发分店的角色。网络协议:像转发表格一样帮助数据在网络中传输。 计算机网络基础 网络组成部分 主机:客户端和服务端…

AVL树原理以及插入代码讲解(插入操作画图~细节)

原理 AVL 树是一种平衡搜索二叉树,得名于其发明者的名字( Adelson-Velskii 以及 Landis)。(可见名字长的好处,命名都能多占一个字母出来)。在搜索树的前提下平衡搜索二叉树还定义如下: 左右子…