软件工程总结
第一章:
1. 软件的定义:(1)在运行中提供所希望的功能和性能的指令集(即程序)
(2)使程序能够正确运行的数据结构
(3)描述程序研制过程和方法所使用的文档
2. 软件的特点:(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
(2)软件是通过人们的智力活动,把知识与技术转换成信息的一种产品,是
在研制开发中被创造出来的。
(3)在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。
(4)软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同
程度的依赖。
(5)软件生产正走向基于构件的组装发展(如图形用户界面),但目前多数
软件仍是定做的,而且软件开发尚未完全摆脱手工的开发方式
(6)软件的研制需要投入大量的、复杂的脑力劳动,开发费用越来越高
3. 软件危机:(1)定义:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列
的问题。
(2)典型表现:a.对软件开发成本和进度的估计常常很不准确
b.用户对“已完成的”软件系统不满意的现象经常发生 c.软件产品的质量往往靠不住
d.软件常常是不可维护的
e.软件通常没有适当的文档和资料
f 软件成本在计算机系统总成本中所占的比例中逐年上升 g.软件开发生产率提高的速度,远远跟不上计算机应用迅速
普及深入的趋势
(3) 产生原因:a.软件的规模加大、复杂性提高、性能增强
b. 软件是逻辑产品,尚未完全认识其本质和特点
c. 缺乏有效的、系统的开发、维护大型软件项目的技术
手段和管理方法
d.用户和软件开发人员的理解鸿沟
e. 错误的认识和作法:忽视软件需求分析的重要性,认
为软件开发就是写程序并设法使之运行,轻视软件维
护等
4. 软件工程:(1)定义:软件工程是指导计算机软件开发和维护的一门工程学科。采用工
程的概念、原理、技术和方法来开发与维护软件,把经过时间考验
而证明正确的管理技术和当前能够得到的最好的技术方法结合起
来,以经济地开发出高质量的软件并有效地维护它。”
(2) 基本原理:a.用分阶段的生命周期计划严格管理
b.坚持进行阶段评审
c .实行严格的产品控制
d.采用现代程序设计技术
e.结果应能清楚地审查
f. 开发小组的人员应该少而精
g. 承认不断改进软件工程实践的必要性
5. 软件工程方法学的三要素:方法、工具和过程。
(1) 软件方法:完成软件开发的各项任务的技术方法,回答“怎么做”的问
题;
(2) 软件工具:为运用方法而提供的自动的或半自动的软件支撑环境;
(3)软件工程过程定义了:
a.方法使用的顺序
b.要求交付的文档资料
c.为保证质量和适应变化所需要的管理
d.软件开发各个阶段完成的里程碑
6.软件的生存周期:(1)定义:软件产品或系统一系列相关活动的全周期
(2)三大阶段:软件定义、软件开发、运行维护
(3)a.软件定义时期的任务:确定软件开发工程师必须完成的总目标;
确定工程的可行性;导出实现工程目标应该采用的策略及系统
必须完成的功能;估计完成该项工程需要的资源和成本,并且
制定工程进度表。
b.软件开发时期的任务:具体设计和实现在前一个定义时期的软件。 c.软件维护时期的任务:使软件持久地满足用户的需要。
7.瀑布模型的特点:(1)阶段间具有顺序性和依赖性。
(2)推迟实现的观点。
(3)质量保证的观点。
第二章
1.可行性研究的目的和任务:(1)目的:a.目的不是要解决问题,而是确定问题是否值得解
决
b.用最小的代价在尽可能短的时间内确定问题是
否能够解决
(2) 任务:a.最根本的任务是对以后的行动方针提出建议
b.如果问题没有可行的解,应该建议停止这项开发
工程,以避免时间、资源、人力和金钱的浪费
c.如果问题值得解,应该推荐一个较好的解决方案,
并且为工程制定一个初步的计划
2.数据流图的四要素:数据的原点或终点;数据的处理;数据存储;数据流;
3.数据字典:(1)定义:数据字典是关于数据的信息的集合,也就是对数据流图中包含的所
有元素的定义的集合。
第三章:
1. 需求分析的任务:(1)基本任务是准确地回答“系统必须做什么”这个问题。
(2)确定系统必须完成哪些工作,也就是对目标系统提出完整、准确、
清晰、具体的要求。
(3)分析软件需求和书写软件需求规格说明书
2.获取需求的方法:(1)访谈
(2)面向数据流自顶向下求精。
(3)简易的应用规格说明技术。
(4)快速建立软件模型。
3.需求分析过程建立的三种模型:
(1)功能模型
(2)数据模型
(3)行为模型
4. 验证软件需求的四个方面:
(1)一致性
(2)需求性
(3)现实性
(4)有效性
第五章:
1. 总体设计的任务:(1)回答“概括地说,系统应该如何实现?”这个问题。
(2)设计软件的结构,也就是要确定系统中每个程序由哪些模块组成
的,以及这些模块相互间的关系
2.结构化设计的步骤:(1)设想供选择的方案
(2)选取合理的方案
(3)推荐最佳方案
(4)功能分解
(5)设计软件结构
(6)设计数据库
(7)制定测试计划
(8)书写文档
(9)审查和复审
3. 耦合:(1)定义:耦合是对一个软件结构内不同模块之间互连程度的度量。
(2)类型:a.数据耦合
b.控制耦合
c.特征耦合
d.公共耦合
e.内容耦合
4.内聚:(1)定义:内聚标志着一个模块各个元素彼此结合的紧密程度
(2)类型:a.偶然内聚
b.逻辑内聚
c.时间内聚
d.过程内聚
e.通信内聚
f.顺序内聚 g.功能内聚
5.耦合、内聚与模块独立性的关系
(1)耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度
(2)但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量
(3)设计要求:低耦合,高内聚
第六章:
1.人机界面设计应考虑的问题 :
(1)系统响应时间(两个属性:长度性和易变性)
(2)用户帮助设施
(3)出错信息处理
(4)命令交互
第七章:
1.( 1)软件测试的目标:
a.测试是为了发现程序中的错误而执行程序的过程
b.好的测试方案是极可能发现至今为止尚未发现的错误的测试方案
c.成功的测试是发现了至今为止尚未发现的错误的测试
(2)软件测试的原则
a.所有测试都应该能追溯到用户需求
b.应该远在测试开始之前就制定出测试计划
c.把Pareto原理应用到软件测试中
d.应该从“小规模”测试开始,并逐步进行“大规模”测试
e.穷举测试是不可能的
f.为了达到最佳测试效果,应该由独立的第三方从事测试工作
(3)软件测试的步骤:
测试步骤 :模块测试、子系统测试、系统测试和验收测试(确认测试)、
平行运行
2. 单元测试的方法、测试重点
(1)方法:人工测试、计算机测试
(2)重点:a.模块接口
b.局部数据结构
c.重要的执行通路
d.出错处理通路
e.边界条件
3. 渐增式测试与非渐增式测试的比较
(1)定义:a.渐增式测试: 把下一个要测试的模块同已经测试好的那些模块结合起来进行
测试,测试完以后再把下一个应该测试的模块结合起来进行测试,
即每一次增加一个模块。
b.非渐增式测试:先分别测试每个模块,再把所以模块按设计要求放在一起结
合成所要的程序。
(2)a.非渐增式测试方法需要编写的测试用例较多,工作量较大;渐增式
测试方法开销小。
b.渐增式测试方法发现模块间接口错误早;而非渐增式测试方法晚。
c.非渐增式测试方法发现错误,较难诊断;而使用渐增式测试方法,如果发生错误则往往和最近加进来的那个模块有关。
d.渐增式测试方法测试更彻底
e.渐增式测试方法需要较多的机器时间
f.使用非渐增式测试方法,可以并行测试。
4. 确认测试的目标、依据、测试方法
( 1) 目标:验证软件的有效性
(2)依据:软件需求规格说明书
(3)测试方法:黑盒测试法、Alpha测试、Beta测试
软件工程
软件: 计算机程序,方法,规则和相关文档资料及在计算机上运行所需的必要的数据。 软件=程序+数据+文档资料
软件的特点:
1 软件是一种逻辑产品
2 软件没有明显的制造过程
3 软件对硬件和环境的依耐性
4 软件不存在机械的磨损和老化
5 软件的复杂度越来越高
6 软件成本昂贵
7 软件开发工作涉许多及社会因素
8 软件开发工作任重道远
软件的类型:
1微型:1人在几天内完成500行程序
2小型:1人在半年内完成20xx行以内
3中型:1—5在2年内,5000——50000行
4大型:5——20人,2——3年,50000——100000
5甚大:100——1000人,4——5年,100万行
6极大:20xx——5000人,xx年内,1000万行程序
软件危机:是指软件开发和维护过程中遇到的一系列严重的问题。包括1 如何开发软件,
怎样满足对软件日益增长的需求。2如何维护数量不断膨胀的已有软件。
软件危机主要的表现:
1产品不符合用户的实际需要
2软件开发效率远远不能满足客观的需要。
3软件产品质量差
4对软件开发的成本和进度估计常常不准确
5 软件的可维护性差
6软件文档资料通常极不完整有不合格
7软件的价格昂贵
软件工程:系统化,规范化,可量度的途径应用于软件开发,运行,维护的过程,把工程化
应用于软件中。
软件工程的目标:
1付出较低的开发成本,在规定的时间内获得功能,性能方面满足用户
需求的软件
2开发的软件移植性好
3易于维护和维护费用较低
4软件系统的可靠性高
结构化方法(SDM):
是软件开发方法中最成熟,应用最广泛的方法,主要特点是快速,自然,方便。
总的指导思想是自顶向下,逐步求精。基本原则是功能的分解和抽象。
由结构化分析法(SA),结构化设计法(SD),结构化程序设计法(SP)构成。
SA: 面向数据流的需求分析法。SA也是一种建模活动,根据软件内部的数据传递,变换关
系,自顶向下逐步分层,描述出满足功能要求的软件模型。基本思想是分解和抽象。 1分解:对一个复杂的系统,为了将复杂性降到可以掌握的程度,把大问题分解为小问
题,然后分别解决。
2抽象:分层进行分解,现考虑问题本质的属性,暂把细节略去,以后再逐层添加细节,
直至涉及最详细的内容。
软件的生存周期:
软件产品从形成概念开始,进过开发,使用维护,直到最后被淘汰的全过程。
软件生存周期分为:软件定义,软件开发,软件运行与维护3个阶段。
软件定义阶段:可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目
的。具体分为问题定义,可行性研究,需求分析。
问题定义:定义系统的目标“是什么”,系统定位及范围。
可行性分析:研究技术,经济,操作,社会可行性的问题。是否有解。
需求分析:确定软件系统系统的功能需求,性能需求,运行环境,写出软件
的规格说明书,软件测试大纲和用户手册。
软件开发:概要设计,详细设计,编码,测试。
概要设计:软件需求说明书的基础上,建立系统的总体结构,定义功能模块和模
块间的关系。
详细设计:对概要设计的功能模块逐步细化,把模块内部的细化转化为可编程的
程序过程性描述。
编码:又称编程,把详细设计转化为能在计算机上运行的程序。
测试:单元测试,集成测试,确认测试,系统测试。
运行与维护:把软件产品移交用户使用。对软件进行修改或对软件需求变化作出响应,竟可
能的延长软件的寿命。
软件生存周期即可分为7个阶段:可行性研究,需求分析,概要设计,详细设计,编码,测
试,运行,维护。
软件生存周期模型:瀑布模型,原型模型,增量模型,螺旋模型,喷泉模型,智能模型。
数据流图(DFD图):描述信息流和当数据从输入移动到输出时被应用的变换图形技术。 模块:是程序对象有名字的集合,如过程,子程序,宏。
功能独立性: 是模块化和和抽象及信息隐藏概念的直接产物。通过内聚和耦合两项
质量标准来衡量。
内聚:是模块相对功能密度的量度,用于描述模块内部联系的紧密程度。 耦合:是模块间相对独立的量度,描述模块间联系的紧密程度。
独立性较强的模块应该具有:高内聚,低耦合度。
面向对象的结构方法(OOSD):按照人们认识世界的方法和思维方式分析和解决问题,以对
象为主线,把数据和操作融为一体。这种方法能够提供更加
清晰的需求分析和设计,是指导开发活动的系统方法。
面向对象=对象+类+继承+通信
对象是类的一个实例,对象是一个实体如房子,类是对对象属性特征的描述,如房子的设计图纸。面向对象的程序设计重点是类的设计,而不是对象。
类可以将数据和函数封装在一起,其中函数表示了类的行为。
面向对象开发模型:
建模可看成一套在目标系统完成之前表达目标系统的技术。
建模的作用:
1支持其复杂度超出人们大脑能力的软件系统。
2解决了待开发系统的复杂性。
3再投入许多时间对一个不良概念化系统进行编程之前,可用这些精确的表示来
进行评估,验证,校正。
创建优质模块:
1 模块具有内聚性,它的功能必须是良好定义和集中的。
2 模块具有松散耦合性,模块之间的联系尽可能的少。
3 封装过的模块,不应被其他属性直接访问。
4 软件模块可重用。
5 具有继承性。
统一建模语言(UML):是一种通用的建模语言,它本身具有可扩展性使其不仅可用于软件
系统开发的各个阶段的建模,也可用于商业建模和其他几乎类型的建模。
由视图,图,模型元素,通用机制组成。
用例图:显示多个外部参与者及其他们与系统提供的用例之间的关系。
类图:类图以类为中心组织,类图中的其他元素或属于某个类,或与类相关联。
对象图:对象图是类图的变异,它使用类图相似的符号,不同之处在于对象图显示的是类的
多个对象实例而非实际的类。
状态图:对类描述的补充,用于显示类的对象可能具备的所有显示,及引起状态变化的事件。 时序图:显示多个对象之间的动态协作,重点显示对象之间发送的消息的时间顺序。 协作图:对在一次交互中有意义的对象的对象间的链建模。
活动图:活动图是状态图的变异,用来描述执行算法工作流程中涉及的活动。
由活动,转移,泳道,对象流,控制图符组成。
组件图:用代码组显示代码的物理结构。
配置图:显示系统中的硬件和软件的物理结构。
白盒测试:又称明盒测试,开放盒测试,结构化测试,它是一种测试用例设计方法,也就是测试者完全了解程序的结构和处理过程,按照程序内部的逻辑测试,检验程序中的每条通路是否都能按要求正确工作:
1 保证每一个模块中的所有独立路径至少被只用一次。
2对所有逻辑值均需测试真和假。
3在上下边界及可操作的范围内运行所有循环
4检查内部数据结构以确保其有效性。
黑盒测试:称功测试和行为测试,他注重测试软件的功能性需求,而不是内部结构。黑盒测试不是白盒测试的替代品,而是辅助白盒测试发现其他错误。
黑盒测试试图发现下列错误:功能错误或漏洞,接口错误,数据结构,外部数据库访问错误,性能错误,初始化或终止错误。
软件维护:就是软件已经交付使用以后,为了满足错误或满足新的需要而修改软件的过程。
软件的可维护性:指纠正软件系统出现的错误和缺陷,以及为了满足新的要求而
进行的修改,扩充或压缩的容易程度。
软件复用:指复用使用已有的软件产品用于开发新的软件系统,已达到软件系统的开发质量
和效率,降低开发成本的目的。包括:
1代码复用
2设计结果复用
3分析结果复用
4测试信息复用
可复用构件:指可以在多个软件系统的开发过程中被重复使用的软件产品。
1可复用构建应该是具有功能上的独立与完整性
2具有高度的通用性
3具有高度的灵活性
4具有严格的质量保证
5具有较高的标准化程度
1.软件危机的定义:计算机软件的开发和维护过程中所遇到的一系列严重问题。出现的问题:a.如何开发软件,已满足对软件日益增长的需求b…
1何谓科学,何谓工程?(第一章)科学是反映自然、社会、思维的发展与变化规律的知识体系。科学(研究)是以发现为核心的人类活动,探索事…
一个软件从开始计划起,到废弃不用止,称为软件生命周期。一般来说,软年生命周期包括计划、开发、运行三个时期,每一个时期又可分为若干个…
软件工程过程:是为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动。针对不同类型的软件产品,同一软件开发机构也…
Personally,Ithinkthesoftwaredevelopmentprocesstoachievespecificto…
Personally,Ithinkthesoftwaredevelopmentprocesstoachievespecificto…
软件工程过程:是为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动。针对不同类型的软件产品,同一软件开发机构也…
姓名:xIkUg[BCG][DFCG][OCN][DCM][CZG]部门:行业开发部–超市项目组出生日期:1980-11-25个人…
十、项目开发总结报告1.引言...................................................…
摘要:计算机是20世纪最重大的科学技巧成就之一,使当代社会的经济、军事、科研、教育、服务等方面在概念和技巧上发生了性的变化,对人类…
——0708210101管科4班XXX在上学期的信息管理课程中我们已经大略学习过了软件的开发过程、方法、生命周期等软件工程的内容,…