当前位置: 首页 > news >正文

软件工程期末考试复习

复习内容:

1、软件工程与软件过程

2、可行性研究与项目开发计划

3、结构化分析与结构化设计

4、面向对象分析与设计

5、软件体系结构

6、软件测试相关

7、软件维护相关

 

 

 

1、软件工程与软件过程

(1)软件工程

软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。
它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。
在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。
同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展,也提高了工作效率和生活效率

 

(2)软件危机

软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

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

 

(3)软件过程

  • 什么是软件过程:软件的诞生和生命周期
  • 软件定义阶段:可行性研究、初步项目计划、需求分析
  • 软件开发阶段:概要设计、详细设计、实现、测试

 

(4)软件模型

瀑布模型:

 

快速原型模型:

  • 特点:快速建立一个能反映客户主要需求的原型系统,让用户试用然后提出修改意见进行修改
  • 定义:是在开发真实系统之前构造一个原型,在该原型的基础上,逐渐完成整个系统的开发工作

 

增量模型:

 

螺旋模型:

 

喷泉模型:

 

基于组件的开发模型:

 

统一软件开发过程模型:

 

敏捷过程:

 

极限编程:

 

 

2、可行性研究与项目开发计划

(1)经济可行性

成本估算:

  • 代码行技术
  • 任务分解技术

成本 - 效益分析:

  • 开发成本
  • 运行费用
  • 系统的经济效益

收入 - 效益分析:

  • 货币的时间价值
  • 投资回收期
  • 纯收入

 

(2)可行性研究步骤

  • 明确系统目标
  • 分析研究先行系统
  • 设计新系统的高层逻辑模型
  • 获得并比较可行的方案
  • 写可行性研究报告

 

 

3、结构化分析与结构化设计

(1)需求分析

需求分类:功能性需求、非功能性需求

需求分析的任务:

  • 需求分析建模阶段,建立系统的分析模型
  • 需求分析描述阶段,把需求文档化,用软件需求规格说明书的方式把需求表达出来

需求分析的原则:

  • 需求分析是一个过程,贯穿于系统的整个生命周期
  • 需求分析是一个迭代的过程
  • 为了方便评审和后续的设计,需求的表述应该具体、清晰,并且是可测量可实现的

需求分析的步骤:

  • 需求获取
  • 分析建模
  • 需求描述
  • 需求验证

需求分析常用方法:

  • 功能分解法
  • 结构化分析方法
  • 信息建模方法
  • 面向对象的分析方法

 

(2)数据字典

数据字典:数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述

数据字典的目的: 数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合

 

(3)软件设计的意义、目标和原则

意义:

  • 软件设计在软件开发中处于核心地位,是保证质量的关键步骤
  • 软件设计为我们提供了可以用于评估质量的软件表示
  • 软件设计是我们能够将用户需求准确的转化为软件产品或系统的唯一方式
  • 软件设计是所有软件工程活动和随后的软件支持活动的基础

 

目标:

  • 包含明确需求且必须满足用户期望的所有隐含需求
  • 对于程序员、测试人员和维护人员,设计必须可读、可理解
  • 设计必须提供软件的全貌,从实现的角度说明数据域、功能域和行为域

 

原则:

  • 模块化
  • 抽象
  • 逐步求精
  • 信息隐藏
  • 复用性设计
  • 灵活性设计

 

(4)内聚的等级划分

  • 高内聚:顺序内聚、功能内聚
  • 中内聚:过程内聚、通信内聚
  • 低内聚:偶然内聚、逻辑内聚、时间内聚

 

(5)软件设计的分类

软件设计可以从活动任务分类,也可以从工程管理分类 

 

 

4、面向对象分析与设计

面向对象开发方法:OOA OOD OOP

(1)面向对象分析过程

以用例模型为基础,在收集到的原始需求的基础上,通过构建用例模型得到系统的需求,进而再通过完善用例模型,使需求得到改善

 

(2)面向对象分析原则

  • 定义有实际意义的对象
  • 模型的描述要规范、准确
  • 共享性
  • 封装性

 

(3)面向对象建模

复杂问题的对象模型:主题层、类与对象层、结构层、属性层和服务层

建立对象模型:

  • 划分主题
  • 确定类与对象
  • 确定属性
  • 确定服务

建立动态模型:

  • 编写脚本
  • 设计用户界面
  • 画UML顺序图或活动图
  • 画状态图

建立功能模型:

  • 确定输入和输出值
  • 画数据流图
  • 定义服务

对象模型和动态模型和功能模型之间的关系:

  • 对象模型为动态模型和功能模型提供基础
  • 动态模型描述类实例的生命周期
  • 功能模型中的用例可能产生动态模型中的事件

 

(4)面向对象设计

面向对象设计过程:

  • 建立软件体系结构环境图
  • 软件体系结构设计
  • 设计各个子系统
  • 对象设计及优化

面向对象设计原则:

  • 模块化、抽象化
  • 信息隐藏
  • 高内聚低耦合
  • 复用性

 

(5)结构化设计与面向对象设计有何区别

结构化设计方法可以更加清晰地进行需求分析和功能分解,数据流图能够细致地说明数据在各个功能模块之间的流动和变化,

更适于系统设计的前期阶段。设计人员清楚地了解数据和系统要求的操作后,

面向对象设计方法能够把数据和功能以对象为单位封装成一个整体,更直观地表达对象的状态变化和对象间的交互,

更加准确地分析功能的实现过程,更适于在软件后期细化系统的具体行为。

 

 

5、软件体系结构

(1)软件体系结构的目的 

  • 规范软件开发的基本架构
  • 便于开发人员与用户沟通
  • 模块化设计、层次化设计、有利于减少返工,提高效率
  • 便于系统开发前、后期的筹备与服务

 

(2)典型的软件体系结构风格

  • 数据流风格
  • 调用/返回风格
  • 独立构件风格
  • 虚拟机风格
  • 仓库风格

 

(3)设计模式

  • 创建型模式:工厂模式、抽象工厂、构造器、单例模式、原型模式
  • 结构型模式:适配器、桥接模式、组合模式、装饰器、外观模式、享元模式、代理模式
  • 行为型模式:责任链、命令模式、解释器、迭代器、中介者、备忘录、观察者、状态模式、策略模式、模板方法、访问者

 

 

6、软件测试相关

(1)基本概念

软件测试:发现软件中的错误和缺陷

软件测试的原则:

  • 完全测试是不可能的
  • 软件测试只能表明缺陷存在而不能证明软件产品没有缺陷
  • 软件产品中潜在的错误数和已发现的错误数成正比
  • 让不同的测试人员参与到测试工作中
  • 尽早不断进行测试,使测试贯穿整个软件开发的过程
  • 要集中测试容易出错或错误较多的模块

 

(2)软件测试分类

  • 单元测试:对软件中的最小可测试单元进行检查和验证,比如说函数、类等
  • 集成测试:把多个单元组合在一起形成更大的单元,在各个单元通过单元测试的前提下检查各个单元之间的接口是否正确
  • 系统测试:对整个源程序、需求分析阶段到详细设计阶段中的技术文档、管理文档、接口、某些数据等进行测试
  • 验收测试:在系统测试之后进行的测试,验证系统是否能满足用户的需要

 

(3)单元测试的用例设计

 

 

(4)面向对象的软件测试

面向对象的程序具有封装、继承和多态的特性

多态性:允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式

 

 

7、软件维护相关

(1)软件维护的基本概念

软件维护:软件生命周期中延续时间最长、工作量最大的阶段

 

(2)软件维护的过程和分类

过程:

  • 建立维护机构
  • 用户提出维护申请并提交维护申请报告
  • 维护人员确认维护类型并实施相应的维护工作
  • 整理维护记录并对维护工作进行评审

 

分类:

  • 纠错性维护
  • 适应性维护
  • 完善性维护
  • 预防性维护

 

转载于:https://www.cnblogs.com/wyb666/p/10156830.html

相关文章:

  • Spark任务调度
  • 阿里架构师教你如何设计一个 RPC 系统!
  • JS实现的四叉树算法详解
  • LeetCode算法题-Sum of Two Integers(Java实现)
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗?
  • 对于Ping的过程,你真的了解吗?
  • 05.java多线程问题
  • java8 -函数式编程之四个基本接口
  • 简单介绍接口自动化测试----数据驱动测试ddt
  • 云计算的拐点隐现 华为云开源两款容器技术
  • 记一份电网信息化建设企业信息分析平台规划
  • 如何快速批量建网站?
  • python3元类深入解读
  • 使用podspec创建iOS插件
  • Spring boot 添加日志 和 生成接口文档
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • crontab执行失败的多种原因
  • HTTP 简介
  • IDEA 插件开发入门教程
  • Joomla 2.x, 3.x useful code cheatsheet
  • MYSQL 的 IF 函数
  • passportjs 源码分析
  • webgl (原生)基础入门指南【一】
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 聊聊sentinel的DegradeSlot
  • 漂亮刷新控件-iOS
  • 试着探索高并发下的系统架构面貌
  • 微信小程序开发问题汇总
  • 问题之ssh中Host key verification failed的解决
  • 我从编程教室毕业
  • 学习使用ExpressJS 4.0中的新Router
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​虚拟化系列介绍(十)
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #控制台大学课堂点名问题_课堂随机点名
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)(1.13) SiK无线电高级配置(六)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (JS基础)String 类型
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)SpringBoot3---尚硅谷总结
  • (转) ns2/nam与nam实现相关的文件
  • (转)http-server应用
  • (转载)Google Chrome调试JS
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .mysql secret在哪_MySQL如何使用索引
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Framework .NET Core与 .NET 的区别
  • .Net MVC + EF搭建学生管理系统