软件工程 复习笔记
目录
概述
软件的定义,特点和分类
软件的定义
软件的特点
软件的分类
软件危机的定义和表现形式
软件危机
表现形式
软件危机的产生原因及解决途径
产生软件危机的原因
软件工程
概念
软件工程的研究内容和基本原理
内容
软件工程的基本原理
软件过程和软件的生存周期
软件过程
软件生存周期
计划时期
开发时期
软件开发模型
瀑布模型
存在的问题
快速原型模型
增量模型
存在的问题
螺旋模型
喷泉模型
可行性研究
成本——效益分析
有形的效益分析
软件需求分析
需求分析的任务
具体任务
需求分析的步骤
需求获取的常用方法
软件总体设计
软件体系结构设计准则
软件模块设计准则
软件设计的概念和原理
模块和模块化
抽象
信息隐蔽和局部化
模块独立性及其量度
耦合
内聚
软件详细设计
结构化程序设计
详细设计工具
人机界面设计
人机界面设计问题
人机界面设计原则
软件编码
程序设计语言的选择
第四代语言有哪些主要特征,为什么受到广大用户欢迎?
面向对象方法学
面向对象方法学的优点和不足
主要优点
不足
典型的面向对象开发方法
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.测试
什么是软件工程,如何用软件工程消除软件危机?
1.软件工程是指导计算机如那件开发和维护的一门学科
2.首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序”的错误观念,要使用好的开发技术和方法,并不断探索更好的技术和方法,要有良好的组织,各类人员要相互配合,共同完成任务,充分认识软件开发不是某种个体劳动的神秘技巧,应该开发和使用好的软件工具,从而提高软件生产率。
软件开发模型
瀑布模型
软件开发的瀑布模型也称为生存周期模型或线性顺序模型
优点
能清晰直观地表达软件开发全过程,明确规定要完成的主要活动和任务,用来作为软件项目工作的基础。
存在的问题
只有当分析员能够做出准确的需求分析时,才能得到预期的正确结果。
缺乏灵活性,无法解决软件需求不明确或不准确的问题。
快速原型模型
首先快速建立一个能反映用户主要需求的原型系统,让用户能在计算机上试用它,通过实践让用户了解目标系统的概貌,以便判断哪些功能是符合需要的,哪些方面需要改进。用户会提出许多改进建议,开发人员按照用户的意见快速地修改原型系统。这样反复这样反复改进,最终建立完全符合用户需求的新系统。
优点
通过实践让用户了解了未来目标系统的概貌,以便判断哪些功能是最符合需要的,哪些方面需要改进,最终建立完全符合用户需求的新系统。
存在的问题
在实际中开发原型系统的语言效率有时会很低,所选用的开发技术和工具不一定符合主流的发展,快速建立起来的系统结构加上连续的修改可能会导致产品质量低下。
增量模型
也称为渐增模型,是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物。
优点
有较大的灵活性。能够在较短时间内向用户提交一些有用的工作产品。开发出一部分,向用户展示一部分,可让用户及早看到部分软件,及早发现问题。
整个系统是由一个个构建集成在一起的,当需求变更时只变更部分部件,而不必影响整个系统。
存在的问题
这种方法表明不同的构建将并行构建,有可能加快工程,但是这这种方法会冒所有组件集成不到一起的风险,因此需要密切地监控整个开发工程,否则将事与愿违。
螺旋模型
是一种风险驱动模型
是一种迭代模型,把开发分成几个螺旋周期,每迭代一次,螺旋线就前进一周
存在的问题
该模型需要有相当丰富的风险评估经验和这方面的专门技术,这使得该模型的应用受到了一定限制。
喷泉模型
是一种比较典型的面向对象软件开发模型,以用户需求为动力,以对象作为驱动的模型,适合面向对象的开发方法。
可行性研究
可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否值得去解决。
不是解决用户提出的问题,而是确定这个问题是否值得去解决。
可行性研究实际上就是一次大大简化了的系统分析和系统设计过程。
从经济,技术,操作和法律4个方面来研究每种解法的可行性。
在软件开发早期阶段为什么要进行可行性研究?可行性研究的任务是什么?
1.避免或者减轻项目开发后期可能出现的困境
2.主要任务是,首先进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,分析几种可能解法的利弊,从而判定原型系统的目标和规模是否现实,系统完成后带来的效益是否大到值得投资开发这个系统的程度。
成本——效益分析
系统成本包括开发成本和运行维护成本
系统效益包括有形的经济效益和无形的社会效益
有形的效益分析
货币的时间价值
投资回收期
纯收入
软件需求分析
需求分析的任务
需求分析的任务还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪些任务,也就是对目标系统提出完整,准确,清晰而且具体的需求。
首先,把用户提出来的问题和要求归纳整理,分析和综合,弄清用户想要做什么,应该做什么,把这些作为要求和条件予以明确,这一步称为“用户意图分析”。
在完全弄清用户对系统的确切需求的基础上,用“软件需求规格说明书“在此基础上建立分析模型,从逻辑上完整,严密地描述出要开发的系统,并保证能满足上述要求和条件。这一步称为”规范化“。
具体任务
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方法
面向对象的分析
四种形式模型
用类和对象表示的对象模型,由用例和场景表示的用例模型,由状态图机和交互图表示的动态行为模型,由构件图和部署图表示的物理实现模型。
用例模型
用例模型往往是从用户需求的角度来描述系统,指明系统应该“做什么”,直接反映用户对目标系统的需求,描述数据在系统中的变换过程及系统的功能。
对象模型
面向对象方法强调围绕对象而不是围绕功能来构造系统。对象模型是面向对象方法最基础,最核心,也是最重要的模型。
动态模型
一旦建立起对象模型之后,就需要考察对象的动态行为。
物理模型
物理实现模型关注的是系统实现过程的建模。
4个模型之间的关系
在面向对象方法学中,面向对象建模技术所建立的4中模型,分别从4个不同侧面描述所要开发的系统,这4种模型相互补充,相互配合,使人们对系统的认识更加全面:由对象模型中用类,对象,接口等定义做事情的实体,这些实体是软件的基本组成单元。用例模型指明系统应该“做什么”,用例模型从用户的角度描述系统功能,动态模型规定在什么时候做什么事情,当问题涉及交互作用和时序时,动态模型尤为重要。物理实现模型通过构件图和部署图描述系统实现和分析涉及中的对应关系。
关系:
1.针对每个类建立的动态模型,描述类实例的生存周期或运行周期
2.用例图中的参与者可能是对象模型中的对象
3.物理实现模型中的构建通常对应对象模型中的类