考点分析:
- 本章只考上午题,考试一般2-3分;
- 最常考点:关键路径法、软件工程基础。
1、软件工程与开发模型
1.1软件工程基础
软件危机:人随着软件复杂度提升,开发成本、软件质量、生产效率等问题。
软件工程:为了消除软件危机,以工程学思路进行软件开发,即软件工程。
软件工程三个要素
- 方法:完成软件工程项目的技术手段。
- 工具:支持软件的开发、管理、文档生成。
- 过程:支持软件开发的各个环节控制、管理。
1.2 软件生命周期
软件生命周期:软件产品从考虑其概念到产品交付使用,直至最终退役为止的整个过程:
- 计划阶段:确定待开发系统的总体目标和范围,可行性研究和预算、进度估算
- 分析阶段:分析、整理和提炼用户需求,编写需求规格说明书和初步用户手册
- 设计阶段:根据需求规格说明书,确定软件体系结构,确定每个模块的实现算法数据结构和接口,编写设计说明书,并组织评审。
- 实现阶段:将设计的各个模块编写成计算机可接受的程序代码和相关文档。
- 测试阶段:测试各个功能模块,然后将各个模块集成起来,进行功能需求测试
- 运行维护阶段:后期运维,增删改
1.3 软件开发模型(重点)
1、瀑布模型(重点)
- 将软件生命周期分为:制定计划、需求分析、软件设计、程序编写、软件测试和运行维护6个阶段,并规定他们是自上而下、相互衔接的固定次序
- 优点:可以规范过程,有利于评审
- 缺点:过于理想,缺乏灵活性,容易产生需求偏差。
- 适用性:用户需求明确、软件开发单位有充足经验和案例的项目。
2、快原型模型抛弃原型法)
-
第一步是建造一个快速原型,让用户评价,之后抛弃原型,确定需求转入正式开发。
-
可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险
3、演化模型(演化原型法)
- 与快速原型模型不同的是,该模型快速开发一个原型,逐步演化成最终软件
4、增量模型
-
软件被作为一系列的增量构件来设计、实现、集成和测试
-
整个产品被分解成若干构件,开发人员可以逐个开发交付,客户可以不断看到开发的软件,从而降低开发风险,有利于快速开发软件。
5、螺旋模型
综合了瀑布模型和演化模型的优点,还增加了风险分析,特别适合大型复杂系统。
2、软件工程与开发模型
2.1软件开发方法
1、结构化软件开发方法SASD:也称为面向功能的软件开发方法或面向数据流的软件开发方法,与瀑布模型结合度很高。
数据流图(Data Flow Diagram,DFD)用来描述数据流从输入到输出的变换流程
2、面向数据结构的软件开发方法:从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其他细节。
3、面向对象的软件开发方法:一种自底向上和自顶向下结合的方法,并且以对象建模为基础。
4、基于构件化的开发方法: 用预先建立的构件和模版,像搭积木一样
2.2软件设计的基本原理
模块化:将软件分解成若干个小的简单的部分-模块,每个模块可独立开发、测试最后组装成完整的程序。
抽象化:抽象出事物本质,共同特性而不考虑它的细节
信息隐藏:每个模块尽可能少显露内部的处理
模块独立:每个模块完成一个独立的特定子功能,并且与其模块的联系简单
衡量标准有两个:模块间的耦合和模块的内聚度,模块独立性强:高内聚低耦合
2.3面向对象分析和设计
1、对象:一组属性以及这组属性上的专用操作封装体,通常由对象名、属性和操作三个部分组成。
2、类:一组具有相同属性和相同操作的对象集合。 人类
3、继承:子类可以继承父类的属性,也可以定义和被继承相同方法名称的方法构成方法的重载或覆盖。
4、消息:对象间的通信手段。
5、多态:同一个操作作用于不同对象有不同的解释,产生不同的执行效果。
2.4程序设计语言
标记语言:一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。常用于格式化和链接,如HTML、XML。
脚本语言:又称为动态语言,是一种编程语言,用来控制软件应用程序,只在调用时进行解释,可以定义函数和变量,与编程语言的区别时候编程语言的语法和规则更严格和复杂,典型的脚步语言: JavaScript、VBScript、PHP。
编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成机器语言,比如exe文件。运行时不需要重新翻译,直接使用编译结果就行。程序执行效率高,依赖编译器,如: C、C++、Java。
2.5 软件测试
根据测试目的和阶段不同,分为:单元测试、集成测试、系统测试、验收测试。
软件测试方法:
- α测试:在用户组织模拟软件系统的运行环境下测试, 由用户或第三方测试公司进行测试,模拟各类用户行为,试图发现并修改错误。 (内测)
- β测试:用户公司组织各方面的典型终端用户在日常工作中实际使用beta版本,并要求用户报告异常情况,提出修改意见。 (公测,内部试运行)
- 黑盒测试:也称功能测试,通过检测每个功能是否正常。主要针对软件界面和软件功能性测试
- 白盒测试:检查代码或逻辑结构是否合理
3、项目管理与关键路径
3.1 项目管理基础
项目管理的核心是在成本、质量和进度的平衡。
项目管理有两种方法:甘特图(Gantt)和计划评审图片(PERT)
1、甘特图
- 甘特图优点:清晰描述每个任务何时开始,到何时结束,及各个任务的并行性。
- 甘特图缺点:不能清晰反应各个任务之间的依赖关系,难以确定整个项目的关键所在。
2、计划评审技术图(PERT)
不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,但PERT不能反应任务间的并行关系。
3.2 关键路径
关键路径法(Critical Path Method,CPM)
一个项目中,只有项目网络最长的或耗时最多的活动完成之后,项目才能结束,这条最长的活动路径叫做关键路径。
关键路径上的活动不能松弛。
某条活动松弛时间=关键路径所用的时间-经过该活动的路径的最长时间
4、章节总结
软件工程:
- 模型、模块化、开发方法
- 测试方法:α测试、β测试、黑盒测试、白盒测试。
项目管理:甘特图、PERT优缺点、关键路径法
做题:
- 数据流图(DFD)对系统的功能和功能之间的数据流进行建模,其中顶层数据流图描述了系统的输入和输出。
- 软件设计阶段划分模块的原则是,一个模块的作用范围应在控制范围之内。
- 在结构化分析中,用数据流图描述数据在系统如何被传送或变换,以及如何对数据流进行变换的功能或子功能,用于对功能建模。当采用数据流对一个图书馆管理系统进行分析时,读者是一个外部实体。
- 确定软件模块划分及模块之间的调用关系是概要建设阶段的任务。
- 软件设计时需要遵循抽象、模块化、信息隐蔽和模块独立原则。在划分软件系统模块时,应尽量做到高内聚低耦合。