软件工程 复习笔记

目录

概述

软件的定义,特点和分类

软件的定义

软件的特点

软件的分类

软件危机的定义和表现形式

软件危机

表现形式

软件危机的产生原因及解决途径

产生软件危机的原因

软件工程

概念

软件工程的研究内容和基本原理

内容

软件工程的基本原理

软件过程和软件的生存周期

软件过程

软件生存周期

计划时期

开发时期

软件开发模型

瀑布模型

存在的问题

快速原型模型

增量模型

存在的问题

螺旋模型

喷泉模型

可行性研究

成本——效益分析

有形的效益分析

软件需求分析

需求分析的任务

具体任务

需求分析的步骤

需求获取的常用方法

软件总体设计

软件体系结构设计准则

软件模块设计准则

软件设计的概念和原理

模块和模块化

抽象

信息隐蔽和局部化

模块独立性及其量度

耦合

内聚

软件详细设计

结构化程序设计

详细设计工具

人机界面设计

人机界面设计问题

人机界面设计原则

软件编码

程序设计语言的选择

第四代语言有哪些主要特征,为什么受到广大用户欢迎?

面向对象方法学

面向对象方法学的优点和不足

主要优点

不足

典型的面向对象开发方法

Booch方法

Coad/Yourdon方法

1.面向过程分析(OOA)

2.面向对象设计(OOD)

OMT/Rumbaugh方法

OOSE方法/Jacobson方法

Wirfs-Brock方法


概述

软件的定义,特点和分类

软件的定义

什么是软件?软件和程序的区别是什么?

软件不是程序,而是程序,数据以及开发,使用和维护所需要的所有文档的整体集合。

程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。

软件的特点

1.软件是一种逻辑产品,而不是物理实体,具有抽象性

2.软件产品的生产主要是开发研制,没有明显的制造过程

3.软件产品在使用过程中,不存在磨损,消耗,老化等问题。但软件在运行时,为了适应软件硬件,环境以及需求的变化而进行修改完善时,会引入一些新的错误,从而使软件退化,在修改的成本变得让人们难以接受时,软件就被抛弃,生存期停止

4.软件产品的开发主要是脑力劳动,还未完全拜托手工开发的方式

5.软件产品的成本相当昂贵

6.软件对硬件和环境有不同程度的依赖性

7.软件是复杂的

软件的分类

1.服务类软件

2.维护类软件

3.操作管理软件

软件危机的定义和表现形式

软件危机

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

软件危机主要包含了两方面的问题:

一是如何开发软件满足软件日益增长的需求

二是如何维护数量不断增长的已有软件

表现形式

1.对软件开发成本和研制进度的估计常常很不精确

2.“已完成”的软件不嫩那个满足用户的要求

3.软件产品质量差,可靠性得不到保证

4.软件产品的可维护性得不到保证

5.软件成本在计算机系统总成本中所占的比例逐年上升

6.软件开发的速度远远赶不上计算机应用速度普及深入的趋势

软件危机的产生原因及解决途径

产生软件危机的原因

1.软件是计算机系统中的逻辑部件。软件产品往往规模庞大,结构复杂

2.软件开发的管理困难

3.软件开发的费用不断增加,维护费用急剧上升

4.软件开发技术落后

5.生产方式落后

6.开发工具落后

软件工程

概念

软件工程是指导计算机软件开发和维护的一门工程学科。

软件工厂采用工程的概念,原理,技术来开发和维护软件。

软件工程的研究内容和基本原理

内容

软件工程的研究内容是软件开发技术和软件开发过程管理

软件工程的基本原理

1.用分阶段的生存周期计划严格管理

2.坚持进行阶段评审

3.实行严格的产品控制

4.采用现代程序开发技术

5.结果应该清楚地审查

6.开发小组人员应该少而精

7.承认不断改进软件工程实践的必要性

软件过程和软件的生存周期

软件过程

把输入转换为输出的一组彼此相关的资源和活动

软件生存周期

软件生存周期是借用工程中产品生存周期的概念得来的,是指某一软件项目从被提出并着手实现开始,直到该软件报废或停止使用为止经历的实践。

软件的生存周期一般分为软件计划,软件开发和软件运行3个时期

计划时期

1.问题定义

2.可行性研究

开发时期

1.需求分析

2.概要设计

3.详细设计

4.编码

5.测试

软件开发模型

瀑布模型

软件开发的瀑布模型也称为生存周期模型或线性顺序模型

存在的问题

只有当分析员能够做出准确的需求分析时,才能得到预期的正确结果。

缺乏灵活性,无法解决软件需求不明确或不准确的问题。

快速原型模型

首先快速建立一个能反映用户主要需求的原型系统,让用户能在计算机上试用它,通过实践让用户了解目标系统的概貌,以便判断哪些功能是符合需要的,哪些方面需要改进。用户会提出许多改进建议,开发人员按照用户的意见快速地修改原型系统。这样反复这样反复改进,最终建立完全符合用户需求的新系统。

增量模型

也称为渐增模型,是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物。

存在的问题

这种方法表明不同的构建将并行构建,有可能加快工程,但是这这种方法会冒所有组件集成不到一起的风险,因此需要密切地监控整个开发工程,否则将事与愿违。

螺旋模型

是一种风险驱动模型

是一种迭代模型,把开发分成几个螺旋周期,每迭代一次,螺旋线就前进一周

喷泉模型

是一种比较典型的面向对象软件开发模型,以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法。

可行性研究

可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否值得去解决。

不是解决用户提出的问题,而是确定这个问题是否值得去解决。

可行性研究实际上就是一次大大简化了的系统分析和系统设计过程。

从经济,技术,操作和法律4个方面来研究每种解法的可行性。

成本——效益分析

系统成本包括开发成本和运行维护成本

系统效益包括有形的经济效益和无形的社会效益

有形的效益分析

货币的时间价值

投资回收期

纯收入

软件需求分析

需求分析的任务

需求分析的任务还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些任务,也就是对目标系统提出完整,准确,清晰而且具体的需求。

首先,把用户提出来的问题和要求归纳整理,分析和综合,弄清用户想要做什么,应该做什么,把这些作为要求和条件予以明确,这一步称为“用户意图分析”。

在完全弄清用户对系统的确切需求的基础上,用“软件需求规格说明书“在此基础上建立分析模型,从逻辑上完整,严密地描述出要开发的系统,并保证能满足上述要求和条件。这一步称为”规范化“。

具体任务

1.确定对系统的综合需求(功能,性能,环境,接口)

2.分析系统的数据需求

3.建立软件的逻辑模型

4.编写软件需求规格说明书

5.需求分析评审

需求分析的步骤

1.需求获取:调查研究

2.需求提炼:分析建模

3.需求描述,编写SRS

4.需求验证

需求获取的常用方法

1.客户访谈

2.建立联合分析小组

3.问题分析和确认

软件总体设计

又称为概要设计或初步设计

软件总体设计的任务是软件体系结构设计和软件模块设计

软件体系结构设计准则

良好的体系结构应是普通适用的

体系结构在一定时间内保持稳定

良好的体系结构意味着普通,高效和稳定

软件模块设计准则

1.降低模块之间的耦合性,提高模块的内聚性

2.模块结构的深度,宽度,扇入,扇出应适当

3.模块的作用范围范围应该在控制范围内

4.模块的接口设计要简单,以降低复杂程度和冗余度

5.设计功能可预测并能得到验证的模块

6.适当划分模块规模,以保证其独立性

软件设计的概念和原理

模块和模块化

抽象

信息隐蔽和局部化

模块独立性及其量度

耦合

无直接耦合

数据耦合

符号耦合

控制耦合

公共环境耦合

内容耦合

内聚

偶然内聚

逻辑内聚

时间内聚

通信内聚

顺序内聚

功能内聚

软件详细设计

详细设计的根本目的就是确定应该怎样具体实现所要求的系统

具体的就是为软件结构图中每一个模块确定采用的算法和块内数据结构

结构化程序设计

结构有顺序,条件和重复三种

结构化程序设计采用自顶向下,逐步求精的设计方法和单入口单出口的控制结构

详细设计工具

程序流程图

盒图

问题分析图

过程设计语言(PDL)

人机界面设计

人机界面设计问题

在进行人机界面设计时,几乎都遇到4个问题:

系统响应时间,用户帮助设施,出错信息交互,命令交互

人机界面设计原则

1.让用户驾驭软件,而不是软件驾驭用户

2.尽可能减少用户的记忆负担

3.保持界面的一致性

软件编码

程序设计语言的选择

1.待开发软件的应用领域

2.用户的需求

3.软件的运行环境

4.软件开发人员的知识

5.软件的可移植性要求

第四代语言有哪些主要特征,为什么受到广大用户欢迎?

4GL的概念最早提出是在20世纪70年代末。

主要特征是:友好的用户界面,非过程性,程序员只需要告诉计算机”做什么“,而不必描述”怎么做“

由于易学易用受到广大用户欢迎。

面向对象方法学

面向对象是一种新的思维方法,它不是把程序看作是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。

面向对象方法学的优点和不足

主要优点

1.与人类习惯的思维方式一致

2.软件稳定性好

3.可重用性好

4.较易开发大型软件产品

5.可维护性好,易于测试

不足

1.相对面向过程而言比较麻烦,需要更多的代码

2.占用时间比较多,程序效率比较低,比如多态等特性会降低性能

3.创建对象实例的过程往往是非常耗时的工作

4.面向对象的4大特征在一定程度上避免了不合理的操作,但也增大了测试的难度

典型的面向对象开发方法

Booch方法

Booch最先描述了面向对象软件开发方法的基础问题,指出面向对象开发是一种根本不同于传统的功能分解方法。

Booch方法把系统的开发工作分为了”微观过程“和”宏观过程“两个部分。

Booch方法的设计部分可分为逻辑设计和物理设计。

Coad/Yourdon方法

是一种逐步进阶的面向对象建模方法

又两个过程

1.面向过程分析(OOA)
2.面向对象设计(OOD)

OMT/Rumbaugh方法

覆盖了分析,设计,实现3个阶段

代表系统静态结构的对象模型,反映系统时间顺序操作的动态模型和对象内部状态关系的功能模型。

OOSE方法/Jacobson方法

一种用例驱动的面向对象开发方法

Wirfs-Brock方法

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

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

相关文章

Redis使用Lua脚本

Lua脚本 redis可以支持lua脚本,可以使用lua脚本来将几个命令整合为一个整体来执行,这样可以使得多个命令原子操作,且可以减少网络开销 Lua的数据类型 Lua是一个动态类型的语言,一个变量可以存储任何类型的值,类型有&am…

27、卷积 - 卷积特征的可视化和一个神奇的网站

既然上一节说了卷积的本质是一个特征提取器,那么既然卷积神经网络在图像分类、图像检测、图像分割以及其他领域有这么好的表现,卷积算法到底提取了什么特征呢? 虽然有时候我们说神经网络是个黑盒,但是研究人员也一直在探索,如何将卷积学习到的特征给分析出来。 就是想要…

我们是如何让微服务在实践中“活色生香”的?

文章目录 🔊博主介绍🥤本文内容1. 前言2. 请求的路径分析3. 服务周期分析4. 请求格式转换5. 服务层设计6. 业务服务层设计7. 安全防护及策略8. 结论 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟&#xf…

带你学C语言:带你学函数

目录 🌍函数的概念 ★★☆☆☆库函数 ★★★★☆自定义函数 ★★★☆☆形参与实参 ★★★☆☆return语句 ★★★☆☆数组做函数参数 ★★★☆☆嵌套调用和链式访问 ★★★☆☆函数的声明和定义 ✍结束语 🌍函数的概念 数学中我们其实就见过函数…

系统运维安全之病毒自检及防护

一、前言 Linux勒索病毒(Linux ransomware)是一种最令人恶心的计算机恶意病毒,它以侵入Linux系统,捆绑文件并要求支付赎金才能释放文件为主要目的,破坏用户的数据,造成数据讹诈。Linux勒索病毒它们的存在已…

【华为OD题库-072】相对开音节-java

题目 题目描述: 相对开音节构成的结构为辅音元音(aeiou)辅音(r除外)e 常见的单词有bike cake 给定一个字符串,以空格为分隔符反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数(连续子串中部分字符可以重…

算法通关村第十七关-青铜挑战贪心算法思想

大家好我是苏麟 , 今天说说贪心算法 . 贪心思想很难用理论解释,本文我们先通过案例来感受一下贪心是如何解决问题的 大纲 难以理解的贪心算法贪心问题举例分发饼干柠檬水找零分发糖果 难以理解的贪心算法 贪心的思想非常不好解释,而且越使用权威的语言解…

如何解读手机APP入侵与逆向破解

如果您有耐心看完这篇文章,您将懂得如何着手进行app的分析、追踪、注入等实用的破解技术,另外,通过“入侵”,将帮助您理解如何规避常见的安全漏洞,文章大纲: 简单介绍ios二进制文件结构与入侵的原理介绍入…

报错:Parsed mapper file: ‘file mapper.xml

报错 : Logging initialized using class org.apache.ibatis.logging.stdout.StdOutImpl adapter. Registered plugin: com.github.yulichang.interceptor.MPJInterceptor3b2c8bda Parsed mapper file: file [/Mapper.xml] application无法启动 我这边产生原因是项…

P1004 [NOIP2000 提高组] 方格取数

洛谷的题 网址:P1004 [NOIP2000 提高组] 方格取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 动态规划,太tm爽了 一般来说是走一次的,这个是走两次,就变难了 怎么办呢? 一个方法是:同时开始走 先…

自定义TypeHandler 将mysql返回的逗号分隔的String转换到List

sql执行如下&#xff1a; 这里我定义的接受类&#xff1a; 但是这里报了错JSON parse error: Cannot deserialize value of type java.util.ArrayList<java.lang.String>from Object value (token JsonToken.START_OBJECT); nested exception is com.fasterxml.jackson…

C读取CSV文件,通过某种条件,按照特定行和同一列进行读取

读取CSV文件&#xff0c;按照特定行和列进行读取 1、source #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <wchar.h> #include <locale.h>#define MAX_LINE_LENGTH 1000 #define MAX_COLUMNS 50// 函数声明 int findTargetColumn(wchar_t*…

Java抽象类(abstract class)和接口(interface)的区别——面试

1.抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;的区别&#xff1a; 抽象类可以有构造方法&#xff0c;接口中不能有构造方法。 抽象类中可以有普通成员变量&#xff0c;接口中没有普通成员变量。抽象类中可以包含非抽象的普通方法&am…

ultralytics yolo图像分类训练案例;pytorch自有数据集图像分类案例

1、ultralytics yolo图像分类训练案例 优点:使用方便,训练过程评估指标可以方便查看 缺点:自带模型少,可选择自定义小 参考:https://docs.ultralytics.com/tasks/classify/#val https://blog.csdn.net/weixin_42357472/article/details/131412851 1)数据集格式 https://…

dockerdesktop 制作asp.net core webapi镜像-连接sqlserver数据库容器

1.使用visual studio 创建 asp.net core webapi项目 选择启用docker 会生成Dockerfile文件 2.使用efcore连接数据库&#xff0c;安装efcore的包 <ItemGroup><PackageReference Include"Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version&qu…

Linux系统调试课:PCIe调试手段

文章目录 一、lspci 命令二、pciutils 工具沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文我们要介绍pcie调试手段。 一、lspci 命令 通过lspci可以查看当前系统挂载了哪些pci设备。 lspci - 列出 PCI 设备 lspci 命令可以列出计算机中所有 PCI 设备的详细信息,…

[传智杯 #3 决赛] 子串

题目背景 disangan233 喜欢字符串&#xff0c;于是 disangan333 想让你找一些 disangan233 喜欢的串。 题目描述 在传智的开发课堂上&#xff0c;希望您开发一款文档处理软件。 给定 T 组询问&#xff0c;每次给定 22 个长度为 n,m 的只含英文字母的字符串 a,b&#xff0c;…

Hadoop学习笔记(HDP)-Part.03 资源规划

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

【Transformer论文精读系列】(一)如何理解Transformer里的注意力机制?

论文&#xff1a;Attention Is All You Need 参考李沐老师的讲解视频&#xff1a; Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili 其他参考&#xff1a; 超强动画&#xff0c;一步一步深入浅出解释Transformer原理&#xff01;_哔哩哔哩_bilibili Transformer论文逐段…

JVM虚拟机:JVM参数之X参数

本文重点 本文将学习x参数 x参数 -Xint:解释执行 -Xcomp&#xff1a;第一次使用就编译成本地代码 -Xmixed&#xff1a;混合模式&#xff08;Javac、java&#xff0c;先编译后执行&#xff09;