软件工程.docx
- 文档编号:8784737
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:11
- 大小:22.74KB
软件工程.docx
《软件工程.docx》由会员分享,可在线阅读,更多相关《软件工程.docx(11页珍藏版)》请在冰点文库上搜索。
软件工程
第一章软件工程概述
1.软件:
是计算机程序、规程以及运行计算机系统可能需要的相关文档和数据。
由程序、数据、文档组成。
程序:
算法+数据结构。
2.软件工程主要研究软件生产的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导并支持软件系统的生产活动。
过程、方法和工具是软件工程的三个要素。
软件工程的基础层是过程层。
方法层为软件开发的各个阶段提供所需的各种方法。
工具层为软件工程提供了一种自动或半自动的软件支撑环境。
软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。
3.(大题结合实际)软件工程的目标是组织实施软件工程项目,最终希望得到项目的成功。
主要体现在以下几个目标:
付出较低的开发成本;达到所需的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发工作,及时交付费用。
软件工程原则:
抽象;信息隐蔽;模块化;局部化;确定性;一致性;完备性;可验证性。
软件工程基本原理:
用分阶段的生命周期计划严格管理;坚持进行阶段评审;实施严格的产品控制;采纳现代程序设计技术;结果应能清楚地审查;开发小组地人员应少而精;承认不断改进软件工程实施的必要性。
3.需求开发方法:
①结构化方法:
面向功能的需求开发方法。
主要以数据流分析作为需求分析地根本出发点,将任何信息处理的过程视为将输入数据换变为最终所需输出信息的黑盒。
②面向数据结构的开发方法③面向对象的开发方法
①结构化分析方法
(1)核心思想:
问题分解与抽象(模块化)。
(2)采用“数据流图”帮助人们对问题的描述和理解。
(3)采用自顶向下、初步分解的方法,直到找到满足功能需求的软件元素为止。
(4)实质是:
一种强烈依赖数据流的自顶向下的建模方法,采用一组分层的数据流图以及相应的数据字典作为系统的逻辑模型。
4.数据流图:
作为分析的工具,是设计的基础。
(事件型,交换型)
5.软件危机:
在计算机软件的开发和维护过程中所遇到的一系列严重问题。
产生原因:
用户对软件需求的描述常常是不正确的,可能存在遗漏、二义性或错误;软件开发人员对用户需求的理解与用户的本来愿望之间有差异;大型软件项目需要组织一定人力共同完成,但在实际环境下,多数管理人员缺乏开发大型软件系统的经验,就会导致信息交流不及时等;缺乏有力的方法和工具支撑。
解决途径:
①需要先进的软件开发方法和工具提高软件开发及维护的效率。
②必须严密组织、管理和协调各类人员。
③按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。
第2章软件生命周期和过程模型
1.软件生命周期:
①软件定义②软件开发③运行维护
①软件定义:
问题定义:
要确定解决什么问题。
可行性研究(可行性研究报告):
确定“上一阶段所确定的问题是否有行得通的解决办法”。
需求分析(需求规格说明书):
确定“目标系统必须做什么”这个问题。
②软件开发:
概要设计(概要设计说明书):
确定“怎样实现目标系统”。
详细设计(详细设计说明书):
将概要设计中给出的解决办法具体化,确定“应该怎样具体实现目标系统”。
编码和单元测试:
在前面阶段的基础上,写出正确的、易理解、易维护的程序。
综合测试(集成测试,验收测试)
③运行维护:
根据软件运行中的问题,对其进行各种修改,使系统能持久地满足用户需要。
(改正性维护,适应性维护,完善性维护,防御性维护)
2.过程模型(开发模型):
瀑布模型:
提出最早、应用最广泛;瀑布流水逐级下落;顺序性依赖性,需求不稳定性缺乏灵活性增大了工作量;生命周期的各项活动自下而上,有固定次序,相互衔接。
原型模型:
准确地确定用户需求,用户参与尽早揭示软件中可能存在的风险及不确定因素,开发过程与用户培训过程同步。
构造原型比较困难,难获取用户的评价,文档容易被忽略。
增量模型:
短时间内提交部分产品,降低开发风险。
构建集成问题,增量粒度选择很难把握。
螺旋模型:
大型软件的开发,最为实际,增加了风险分析过程的快速原型模型。
强调版本和版本升级。
及时调整管理决策。
需求不明确的大型软件系统的开发。
喷泉模型:
迭代性,无间隙性。
各个开发阶段没有特定的次序要求可以并行进行,提高效率节省时间,没有严格的阶段区分,不便于管理。
快速模型:
让用户更多更早参与需求分析过程
第3章可行性研究
1.可行性研究的任务是以最小的代价在尽可能短的时间内确定问题是否能够解决。
简单来说,可行性研究的最终结果是决定项目做还是不做。
可行性研究:
技术可行性,经济可行性,操作可行性和社会可行性。
可行性研究的步骤:
①确定系统规模和目标②研究目前正在使用的系统③导出新系统的高层逻辑结构④重新定义问题⑤导出和评价供选择的解法⑥推荐行动方针⑦草拟开发计划⑧书写文档提交审查
2.成本效益分析技术:
成本估算技术,效益估算方法
成本估计是软件工程费用管理的核心内容。
自顶向下的估算方法:
估算人员根据以前完成的同类项目所耗费的总成本推算当前将要开发项目的总成本,再将其按比例分配到各开发任务中再检验它是否满足要求。
特点:
估算工作量小,简捷且速度快;误差大,对项目中的特殊困难。
自底而上;差别估算方法。
估计不足,有时可能遗漏被开发软件的某些部分。
3.软件计划任务书:
软件的工作范围;软件开发的资源计划;进度安排
第4章需求工程
1.需求问题的根本原因:
软件没有固定的形态,软件所解决问题的复杂性。
开发一个软件系统最困难的部分就是清楚开发什么,即编写出详细的需求说明书。
2.需求分析阶段要完成的任务就是最终形成一份经开发方和用户认可或达成共识的软件需求规格说明书,这个需求规格说明书能清晰准确地说明系统必须做什么。
在统一过程中,将软件需求根据FURPS+模型来分类。
功能性Functional;可用性Usability;可靠性Reliability;性能Performance;可支持性Supportability。
+:
实现,接口,操作,包装,授权。
3.软件需求:
业务需求,用户需求,功能需求,非功能需求。
功能需求:
在各不同的软件需求中,功能需求描述了用户使用产品必须要完成的任务,可以在用例模型或方案脚本中予以说明。
(WHAT)
非功能需求:
从各个角度对系统的约束和限制,反映了应用对软件系统质量和特性的额外要求。
(HOW)
业务需求:
业务,客户,特性,优先级,价值。
4.需求分析活动关系到软件地成功与否,贯穿于系统开发地整个生命周期。
需求工程是指应用已经证实有效地技术和方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统地所有外部特征地一门学科。
需求工程:
需求开发,需求管理。
需求工程的方法:
面向过程的分析方法(结构化分析),面向数据的分析方法,面向控制的分析方法,面向对象的分析方法。
需求管理:
需求变更控制,需求版本控制,需求跟踪,需求状态跟踪。
面向控制的分析方法强调同步,死锁,互斥,并发以及进程激活和挂起,数据流图是一个典型的面向控制的方法。
5.需求开发:
获取用户需求,对用户需求进行分析和建模,编写软件需求规格说明书,评审需求。
获取用户需求的方法:
访谈、问卷调查、专题研讨会。
需求建模是需求过程中的重要环节,所确立的软件模型既是生产需求规格说明的基础,又是软件设计和实现的基础。
(结构化需求建模,面向对象建模)
第5章结构化分析方法
1.结构化系统软件开发方法:
结构化分析,结构化设计,结构化编程。
结构化分析方法的基本思想:
主要以数据流分析作为需求分析的根本出发点,将任何信息处理的过程视为将输入数据转变为最终所需输出信息的黑盒。
2.数据流图可以用少数几种符号综合地反映出信息在系统中的流动、处理和存储情况。
描述输入数据流到输出数据流的变换。
第6章面向对象基础
1.面向对象三大重要特性:
封装性,继承性,多态性。
基本概念:
①对象:
面向对象技术最重要的概念是对象,每个对象都有它的静态特征(属性描述)和动态特征(操作描述),属性在面向对象程序设计语言中称为数据成员。
②类:
具有相同特征和行为的属性。
(类代表一个抽象的概念或事物,对象是在客观世界中实际存在的类的实例)③消息:
实现对象类之间的通信和任务传递。
消息传递和过程调用有本质上的区别。
④封装:
封装是把对象属性和操作结合在一起构成独立的单元,它的内部消息对外界来说是隐蔽的,不允许外界直接存取对象的属性,类是数据封装的工具,对象是封装的实现。
⑤继承:
子类可以自动拥有弗雷的全部属性和操作。
⑥多态性:
子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象;将程序在编译时把过程调用和目标代码连接起来称为静态联编;在运行时当实际发送消息时才进行实际连接称为动态联编。
2.面向对象的软件工程方法是面向对象方法在软件工程领域的全面运用,涉及从面向对象分析OOA,面向对象设计OOD,面向对象编程OOP,面向对象测试OOT到面向对象软件维护OOSM的全过程。
3.统一建模语言UML:
视图(逻辑视图,进程视图,构建视图,配置视图,用例视图),模型元素,图。
是一种面向对象的软件系统的通用可视化建模语言。
提供一组有明确定义的图形符号。
四类关系:
依赖关系,关联关系,泛化关系,实现关系
UML类包含:
类的名称属性方法
第7章面向对象分析
1.面向对象分析:
运用面向对象方法进行系统分析,它是面向对象方法从编程领域向分析领域发展于延伸的产物。
在需求获取阶段,开发人员更关注理解用户,在需求分析阶段,开发人员关注于理解系统需求构件的内容。
2.在分析对象模型中,分析类是概念层次上的内容,用于描述系统中较高层次的对象。
“高内聚,低耦合”的特征。
(边界类,实体类,控制类)
3.实体类:
用于描述必须存储的信息,同时描述相关的行为。
通常都是永久性的,它们具有的属性和关系是系统长期需要的。
实体类的构造性<
边界类和实体类一般最终都是系统的类。
控制类一般最终转化成类的操作,有些也成为系统负责调度控制的类
第8章软件设计基础
1.软件设计的概念与原则:
①模块:
接口,功能,逻辑,状态②模块化:
降低软件的复杂性,自顶向下逐层把软件划分成若干模块③模块独立性:
模块的内聚性(内聚性最高的是功能内聚,最低的是偶然内聚),模块间的耦合性
2.如何模块化?
分层数据流图转化为系统结构图。
第9章结构化设计方法
1.结构化设计方法是与结构化分析相衔接,根据需求阶段对数据流的分析设计软件结构。
把数据流图映射为软件结构图:
变换型,事务型。
2.系统结构图SC:
在SC图中不能再分解的底层模块称为原子模块。
(传入模块,传出模块,变换模块,协调模块)
3.MVC(模型-视图-控制)结构式将一个交互性应用程序划分成三个相对独立部分。
模型包含系统的核心功能和数据,视图向用户显示数据,控制处理用户的输入,控制页面之间的跳转。
4.三层C/S体系结构:
表示层,功能层,数据层
5.概要设计:
将数据流图映射成软件系统结构图;详细设计:
对概要设计的每一个模块进行数据设计和过程设计。
第10章面向对象的设计
1.面向对象的设计是在OOA模型基础上运用面向对象方法进行系统设计,目标是产生一个符合具体实现条件的面向对象设计模型。
2.面向对象设计原则:
单一职责原则,开放-封闭原则,Liskov替换原则,接口隔离原则,依赖倒置原则
3.设计模式:
对特定问题的描述或解决方案,往往直接对应一段程序代码。
作用:
优化的设计经验,极高的复用性,丰富的表达能力,极低的耦合度。
经典设计模式:
抽象工厂模式,适配器模式,策略模式
设计模式的使用策略:
理解问题需求,研究和掌握设计模式是如何解决问题的。
4.系统架构是最高层次的系统分解,包括软件体系结构设计和硬件体系结构设计两部分。
第11章用户界面设计
1.用户界面设计原则:
置用户于控制下;减少用户的记忆负担,保持界面一致
第十三章软件测试
1.不论规模大小,所有软件问题都是缺陷
产生缺陷的原因:
产品说明书(最大),设计,编码错误
2.软件测试:
黑盒测试(功能性测试或行为测试),白盒测试(透明盒测试)
白盒测试:
软件测试员可以看到盒子的内部。
黑盒测试:
完全不考虑程序的内部结构和处理过程,主要需要研究需求规格与概要设计说明
静态测试:
测试不运行的部分,只是静态检查和审核
动态测试:
使用和运行软件
测试产品说明书属于静态黑盒测试。
3.软件测试战略:
单元测试,集成测试,确认测试,系统测试
第14章软件维护
1.软件维护(面对整个软件配置)P265:
软件系统交付使用以后,为了改正错误或满足新的需要而修改软件的过程。
软件维护产生的原因:
软件的不断修改和完善是不可避免的,所以必须建立一种管理标准去评价这些错误。
目的:
保证软件系统能持续地与用户环境、数据处理操作向协调,最终使系统稳定运行。
软件维护分类:
纠错性维护,适应性维护,完善性维护(占比最大),预防性维护
适应性维护:
因计算机硬件和软件环境的变化而做出的修改软件的过程。
完善性维护:
对软件的修改只限制在原需求说明书的范围之内。
2.软件维护的副作用:
修改代码的副作用,修改数据的副作用,修改文档的副作用。
3.确认测试:
检查软件是否满足软件需求规划书的确认标准。
补充简答题分析
1.比较面向对象开发方法与结构化开发方法的异同。
结构化方法的最大特点就是面向功能分解问题。
但由于处理与数据是分离的,并且在设计阶段与分析阶段采用不同的模型。
优点是:
简单,实用,适合于瀑布模型,易于为开发者掌握,特别适合数据处理领域中的应用。
缺点是:
对于规模大,复杂的项目不太适应,难以解决维护问题。
面向对象方法以最稳定的对象与类作为考虑问题的出发点,通过不断反复累增,逐步改进系统,从而更易获得符合用户需求、简单可靠、适应性强的系统。
面向对象方法强调对象结构,而不是程序结构,从而解决了抽象问题,成为当今的主流模式。
2.软件总体设计的目标是什么?
产生一个模块化的程序结构并明确各模块之间的控制关系,此外还要通过定义界面,说明程序的输入输出数据流,进一步协调程序结构和数据结构。
3.面向对象程序设计语言最基本的机制包括那些?
类,子类,对象和实例的定义,单继承和多继承,对象的部分-整体关系,消息传递和动态链接。
4.软件概要设计过程中应遵循的基本原理?
模块化,抽象,逐步求精,信息隐蔽和局部化,模块独立。
5.软件详细设计的主要任务是确定每个模块的算法和使用的数据结构。
类的行为应该基于状态图进行测试。
大多数系统面向对象设计模型,在逻辑上都由四大部分组成。
它们组成了目标系统的四个子系统,分别是:
问题域,人机交互管理子系统,任务管理子系统,数据管理。
6.论述面向对象方法中三类模型(对象模型,动态模型,功能模型)之间的关系。
三种模型都包含了同样的概念、数据、序列和操作,但他们描述了系统的不同方面,同时也互相引用。
对象模型:
描述了动态模型和功能模型所操作的数据结构,对象模型中的操作对应于动态模型中事件和功能模型中的函数;动态模型描述了对象模型的控制结构,告诉我们那些决策是依赖于对象值,那些引起对象的变化,并激活功能;功能模块描述了由对象模型中操作和动态模型中动作所激活的功能,而功能模型作用在对象模型说明的数据上,同时还表示对对象值的约束。
7.简述需求分析的重要性和文档在软件工程中的作用
提高软件开发的能见度,提高开发效率,作为开发人员阶段工作成果和结束标志,记录开发过程的有关信息,便于使用和维护。
便于用户了解软件功能性能。
8.当模块中包含复杂的条件组合,只有判定树和判定表能够清晰的表达出各种动作之间的对应关系。
结构化程序设计主要强调程序易读性。
面向对象要素包含抽象。
类的行为应该基于状态图进行测试。
在面向对象设计时,子系统之间存在着两种交互方式,分别是平等伙伴关系,客户供应商关系。
软件调试技术包括回溯法调试。
项目开发计划是管理型文档,第一步是建立项目的目标和范围。
盒图(NS图)这种表达方式取消了流程线,它强迫程序员以结构化方式思考和解决问题。
9.为什么说软件需求是决定软件开发是否成功的一个关键因素?
需求分析:
可以帮助开发人员真正理解业务问题,是估算成本和进度的基础,可以避免建造错误的系统,从而减少不必要的浪费。
软件规格说明有助于开发人员与客户在“系统应该做什么”问题上达成正式契约。
需求开发形成了软件开发的基线,有助于管理软件的演化和变更,软件需求是软件质量的基础,为系统验收测试提供了标准。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程
![提示](https://static.bingdoc.com/images/bang_tan.gif)