软件与软件工程.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
### 软件与软件工程知识点详解 #### 第1章 软件与软件工程 ##### 1.1 软件与软件工程定义 **软件**是指一系列按照特定顺序组织的计算机数据和指令,通常分为系统软件和应用软件两大类。 **软件工程**是一种系统化、规范化的软件开发与维护方法,它借鉴了传统工程的原则,旨在提高软件质量、降低开发成本、缩短开发周期。 ##### 1.2 软件危机的原因 1. **需求不明确**:需求经常变化,且难以准确捕获。 2. **缺乏有效的管理方法**:项目管理不善导致资源浪费。 3. **技术限制**:技术的发展速度跟不上需求的增长速度。 4. **代码维护困难**:软件规模庞大,修改一处可能导致其他地方出现问题。 ##### 1.3 瀑布模型及其特点 **瀑布模型**是一种经典的软件开发过程模型,它将软件生命周期划分为若干个阶段,如需求分析、设计、编码、测试和维护等,每个阶段只有在前一个阶段完成后才能开始。 **特点**: - **线性顺序**:各个阶段按顺序执行。 - **不可回溯**:一旦进入下一阶段,则无法返回上一阶段进行修改。 - **文档驱动**:每个阶段都需要详细的文档记录。 - **适用于需求明确的项目**:适用于需求较为稳定、明确的项目开发。 ##### 1.4 螺旋模型及其特点 **螺旋模型**是一种迭代式的过程模型,它结合了瀑布模型的线性序列特性以及原型模型的迭代特性。 **特点**: - **风险分析**:每个迭代周期都要进行风险评估。 - **灵活适应需求变化**:允许在项目的任何阶段改变需求。 - **四个基本活动**:制定计划、风险分析、实施工程和客户评估。 - **适用于大型复杂项目**:特别适合于大型复杂项目的开发。 ##### 1.5 原型模型及其特点 **原型模型**是一种以快速构建可运行的原型为主要特点的开发方法,通过不断迭代改进原型直至满足用户需求。 **特点**: - **快速构建**:快速构建初始版本供用户测试。 - **用户反馈**:用户参与整个开发过程,提供反馈。 - **逐步完善**:根据用户反馈逐步完善产品。 - **适用于需求不确定的项目**:适合于需求变化较大或不明确的项目。 #### 第2章 软件项目管理 ##### 2.1 自底向上的成本估算法的特点 **自底向上成本估算法**是一种通过详细分析项目组成部分的成本,然后汇总起来得出总成本的方法。 **特点**: - **详细分析**:需要对项目中每个工作包进行详细分析。 - **精确度高**:由于考虑了项目的所有细节,因此精确度较高。 - **耗时较长**:需要花费大量时间进行详细分析。 - **依赖于历史数据**:对以往类似项目的成本数据依赖性较强。 ##### 2.2 成本估算示例 假设某项目总的功能点(FP)估算值为310,基于过去项目的人均月生产率为5.5 FP,项目总成本的估算值为560,000元。 **月均人力成本计算公式**:\[ \text{月均人力成本} = \frac{\text{项目总成本}}{\text{项目总功能点} / (\text{人均月生产率} * \text{月份数})} \] 代入数字:\[ \text{月均人力成本} = \frac{560,000}{310 / (5.5 * \text{月份数})} \] 假设项目预计持续X个月,则:\[ \text{月均人力成本} = \frac{560,000}{\frac{310}{5.5X}} = \frac{560,000 * 5.5X}{310} \] 根据具体情况调整X值进行计算。 ##### 2.3 CMM介绍 **CMM(Capability Maturity Model)**能力成熟度模型,是一种用于评估软件开发团队能力和成熟度的模型,共分为五个级别: - **初始级(Level 1)**:项目管理不稳定,缺乏明确的管理策略。 - **可重复级(Level 2)**:项目管理有了一定的基础,能够重复过去的成功经验。 - **已定义级(Level 3)**:项目管理过程标准化,形成了一套明确的规定。 - **已管理级(Level 4)**:项目管理过程不仅标准化,而且量化管理。 - **优化级(Level 5)**:项目管理过程达到最优状态,能够持续改进。 ##### 2.4 McCabe复杂性度量 **McCabe复杂性度量**,也称为环路复杂度,是衡量程序逻辑复杂性的指标之一,主要用于评估程序中的控制结构复杂度。 **计算公式**:\[ V(G) = E - N + 2P \] 其中,E为边的数量,N为节点数量,P为连通图的数量。一般情况下,P=1。 #### 第3章 需求分析基础 ##### 3.1 自顶向下,逐步求精 **自顶向下**是从宏观的角度出发,先确定系统的整体结构,再逐步细化至具体细节。 **逐步求精**是在每个层次上不断细化问题,直到可以实现为止。 **特点**: - **易于理解**:从宏观到微观的分析方法使得需求更易于理解和把握。 - **灵活性强**:可以根据实际情况调整细化程度。 - **有助于问题分解**:将复杂问题分解为多个较小的子问题。 ##### 3.2 数据流图与数据字典 **数据流图(DFD)**是一种图形化工具,用于描述系统中数据的流动和处理过程。 **数据字典**是对DFD中的每个数据元素进行详细描述的集合。 以银行计算机储蓄系统为例,可以通过绘制DFD来展示数据流以及数据处理过程,并建立相应的数据字典来详细描述每个数据元素。 ##### 3.3 成绩管理系统案例分析 根据题目描述,可以采用结构化方法对这个系统进行分析与设计。 **步骤**: 1. **需求分析**:明确系统的主要功能,包括记录和管理学生的平时成绩和考试成绩等。 2. **顶层数据流图**:从宏观角度描述系统与外部实体之间的数据流关系。 3. **分层数据流图**:进一步细化数据流图,详细描述系统内部的数据处理过程。 4. **数据字典**:对DFD中的数据元素进行详细定义。 **案例说明**: - **顶层数据流图**:展示系统与外部实体(如学生、教师、教务处等)之间的交互关系。 - **分层数据流图**:细化描述系统内部如何处理成绩数据,例如平时成绩的录入、有效性验证、存储等。 - **数据字典**:定义数据元素,如学生信息、成绩信息、课程信息等。 #### 第4章 软件设计基础 ##### 4.1 软件体系结构 **软件体系结构**是指软件的基本结构、组件及组件之间的相互作用方式。 **常见的软件体系结构类型**: - **客户端/服务器(Client/Server)** - **浏览器/服务器(Browser/Server)** - **分布式(Distributed)** - **微服务(Microservices)** - **面向服务架构(Service-Oriented Architecture, SOA)** ##### 4.2 “高内聚低耦合”的含义 **高内聚**:模块内部高度相关,紧密协作,执行单一功能。 **低耦合**:模块之间相对独立,相互间依赖性较低。 **实现方法**: - **模块化设计**:将软件划分成独立的模块,每个模块具有单一的功能。 - **接口设计**:通过清晰的接口定义,减少模块间的直接依赖。 - **抽象化**:通过抽象隐藏不必要的细节,减少模块间的直接耦合。 ##### 4.3 结构化程序设计 结构化程序设计强调程序结构的清晰性和模块化。 **流程图**、**N-S图**和**PAD图**都是用来表示程序结构的不同形式。 **流程图**:通过图形符号表示程序的控制流。 **N-S图**:采用矩形框表示程序块,更直观地显示程序结构。 **PAD图(Programmable Array Diagram)**:类似于树状结构,用来表示程序的层次结构。 **McCabe复杂性度量**:通过计算环路复杂度来衡量程序的复杂度。 以上内容覆盖了软件工程的基本概念、常用模型、项目管理技巧以及需求分析和设计的基础知识,为软件开发提供了全面的指导和支持。
- 粉丝: 65
- 资源: 30万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python爬虫入门实例教程.docx
- 基于Qt的文献管理系统.zip学习资料程序
- Arduino IDE 2 入门指南.pdf
- YOLO目标检测入门实例教程.docx
- 使用外部的抽奖游戏网站的开奖接口进行开奖,网站使用php搭建,游戏使用java运行.zip
- 使用Java Swing创建飞机大战小游戏.zip
- 升官图游戏 java.zip学习资料程序
- webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发 webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习爬虫开发的材料
- NFC测试不灵敏,NFC工具
- javaweb-高校学生选课系统项目源码.zip