软件工程重点(吐血整理——林新发)红色的是重点中的重点前面数字是课本页码第一章概论1 什么是计算机软件计算机软件指计算机系统中的程序及其文档3软件的特点(1)软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算(2)软件是被开发的或被设计的,它没有明显的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大(3)软件的使用没有硬件那样的机械磨损和老化问题4软件的分类(1)系统软件(如操作系统、编译程序等)、(2)支持软件(如数据库管理系统、网络软件、软件开发环境等)、(3)应用软件(如实时软件、嵌入式软件、科学和工程计算软件、事务处理软件、人工智能软件等)6软件工程定义软件工程是应用计算机科学、数学及管理科学等原理,以工程化的原则和方法制作软件的工程7生存周期软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。
这个过程即为计算机软件的生存周期软件生存周期大体可分为如下几个活动:计算机系统工程、需求分析、设计、编码、测试、运行和维护12能力成熟度模型CMM(了解一下)初始级、可重复级、已定义级、已管理级、优化级18瀑布模型(重)系统工程、需求分析与规约、设计与规约、编码与单元测试、集成测试系统测试、运行与维护第二章系统工程41系统工程的任务(1)识别用户的要求,确定待开发软件的总体要求和范围,(2)系统建模和模拟(3)进行成本估算,做出进度安排(4)进行可行性分析,即从经济、技术、法律等方面分析待开发的软件是否有可行的解决方案,并在若干个可行的解决方案中作出选择。
(5)生成系统规格说明书42可行性分析(1)经济可行性(成本、效益、货币的时间价值、投资回收期、纯收入)(2)技术可行性(风险分析、资源分析、技术分析)(3)法律可行性第三章需求工程48软件需求指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。
包括:功能需求、性能需求、用户或人的需求、环境需求、界面需求、文档需求、数据需求、资源使用需求、安全保密要求、可靠性需求、软件成本消耗与开发进度需求、其他非功能需求50需求获取方法与策略(重)建立顺畅的通信途径、访谈与调查、观察用户操作流程、组成联合小组、用况51 图3.253 创建用况模型的主要步骤(1)确定谁会直接使用该系统,即参与者(Actor)(2)选取其中一个参与者(3)定义该参与者希望系统做什么,参与者希望系统作的每件事将成为一个用况(4)对每件事来说,何时参与者会使用系统,通常会发生什么,这就是用况的基本过程(5)描述该用况的基本过程54需求分析原则(重)1.必须能够表示和理解问题的信息域2.必须能够定义软件将完成的功能3.必须能够表示软件的行为(作为外部事件的结果)4.必须划分描述数据、功能和行为的模型,从而可以分层次地揭示细节5.分析过程应该从要素信息移向细节信息第四章结构化分析与设计62第三段第一句概念(重)软件设计是把软件需求变换成软件表示的过程,主要包含两个阶段:软件体系结构设计阶段和部件级设计阶段64软件设计的过程(重)制定规范、体系结构和接口设计、数据/类设计、部件级(过程)设计、编写设计文档、设计评审65设计的原则抽象与逐步求精、模块化、信息隐藏、模块独立(高内聚低耦合)68内聚耦合内聚是一个模块内部各个元素彼此结合的紧密程度的度量耦合是模块之间的相对独立性(互相连接的紧密程度)的度量76图形表示法(重)程序流程图、N-S图、PAD81 PDL的例子(重重重重重,有编程大题,可用中文写)PROCEDURE spellcheck IS 查找错拼的单词BEGINsplit document into single words把整个文档分离成单词lood up words in dictionary在字典中查这些单词display words which are not in dictionary显示字典中查不到的单词create a new dictionary 造一新字典END spellcheck外语法(关键字)、内语法(自然语言)第五章结构化分析与设计(重点章)86抽象和分解抽象:从作为整体的软件系统开始(第一层),每一抽象层次上只关注于系统的输入输出分解:将系统不断分解为子系统、模块……随着分解层次的增加,抽象的级别越来越低,也越接近问题的解(算法和数据结构)自顶向下逐层分解充分体现了分解与抽象的原则87 图5.288数据流图(DFD )(重重)91数据流图画法1画出系统的输入和输出(顶层图)2画出系统内部(0层图)3画出加工内部(1~n 层图)4重复第3步,直至每个尚未分解的加工都足够简单(即不必再分解)97分层DFD 的一致性和完整性一致性:父图与子图平衡、数据守恒、局部文件完整性:1每一个加工至少有一个输入数据流和一个输出数据流2在整套分层数据流中,每个文件应至少有一个加工读该文件,有另一个加工写该文件3分层DFD 中的每个数据流和文件都必须命名(除了流入或流出文件的数据),并保持与数据字典一致4分层DFD 中的每个基本加工都应该有一个加工规约115结构图名词解释:SA 结构化分析 SD 结构化设计 SP 结构化程序设计结构图的基本成分有:模块、调用和数据模块是指具有一定功能的可以用模块名调用的一组程序语句,如函数、子程序等它们是组成程序的基本单元一个模块具有其外部特征和内部特征 实体-关系图 数据流图状态转换图 数据字典在SD中,我们只关注模块的外部特征,而忽略其内部特征调用(call):用从一个模块指向另一个模块的箭头来表示,其含义是前者调用了后者为了方便,有时常用直线替代箭头,此时,表示位于上方的模块调用位于下方的模块数据(data):模块调用时需传递的参数可通过在调用箭头旁附加一个小箭头和数据名来表示深度:程序结构图中控制的层数,例如图中所示的结构图的深度是5宽度:程序结构图中同一层次上模块总数的最大值,例如图中所示的结构图的宽度为7扇出(fan out):该模块直接调用的模块数目。
例如,例如图中模块M的扇出是3,模块A 的是2,模块B的扇出是1扇入(fan in):能直接调用该模块的模块数目。
例如图中模块G的扇入是1,模块I的扇入是2,模块R的扇入是4要会画初始结构图方法:将整个软件看作一个大的功能模块,通过功能分解不断将其分解成若干个较小的功能模块,直至得到一组不必再分解的模块(结构图中的底层模块)第七章面向对象的分析与设计(重点章)149面向对象的基本概念面向对象= 对象(object)+ 分类(classification)+ 继承(inheritance)+ 通过消息的通信(communication with messages)可以说,采用这四个概念开发的软件系统是面向对象的对象是指一组属性以及这组属性上的专用操作的封装体。
类是一组具有相同属性和相同操作的对象的集合。
一个类中的每个对象都是这个类的一个实例(instance)。
继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。
消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务。
151多态性和动态绑定多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。
动态绑定是指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来。
159 UML 记10种图(重,要记)类图、内部结构图、协作图、构件图、用况图、状态机图、活动图、顺序图、通信图、部署图、包图182关联关联描述了系统中对象或其他实例的连接。
关联主要有二元关联、多元关联、受限关联、聚集和组合第九章人机界面设计243黄金原则(重)1.让用户拥有控制权2.减少用户的记忆负担3.保持界面一致第十一章软件测试263 软件测试的目的(重)软件测试是为了证明程序是正确的(×)测试是发现软件中的错误,而不能证明软件中没有错误。
测试的目的:1测试是一个为了发现错误而执行程序的过程2一个好的测试用例是指很可能找到迄今为至尚未发现的错误的测试用例3一个成功的测试是指揭示了迄今为至尚未发现的错误的测试265黑盒和白盒测试用例的设计方法大体可分为两类:白盒测试和黑盒测试,也称白箱测试和黑箱测试白盒测试(又称为结构测试)把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。
白盒测试主要用于对模块的测试黑盒测试(又称行为测试)把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能需求。
黑盒测试可用于各种测试266白盒测试常用的白盒测试方法有:逻辑覆盖测试、基本路径覆盖测试、数据流测试、循环测试逻辑覆盖测试是一种基本的白盒测试方法覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖277黑盒测试黑盒测试是依据软件的需求规约,检查程序的功能是否符合需求规约的要求。
主要的黑盒测试方法有:等价类划分、边界值分析、比较测试、错误猜测、因果图288单元测试单元测试又称模块测试,它着重对软件设计的最小单元(软件构件或模块)进行验证单元测试通常采用白盒测试,并且多个构件或模块可以并行进行测试模块本身不是一个独立的程序,在测试模块时,必须为每个被测模块开发一个驱动(driver)程序和若干个桩(stub)模块。
289集成测试经单元测试后,每个模块都能独立工作,但把它们放在一起往往不能正常工作。
集成测试又称组装测试,经单元测试后的模块需要集成为软件系统,集成测试是对集成后的软件系统进行测试,主要用来揭露设计阶段产生的错误。
集成的方式有两种:非增量集成测试、增量集成测试290自顶向下自底向上增量集成测试分为自顶向下集成测试盒自底向上集成测试293 a测试和β测试(重重)α测试是由一个用户在开发者的场所进行的,软件在开发者对用户的“指导下”进行测试。
经α测试后的软件称为β版软件。
β测试是由软件的最终用户在一个或多个用户场所进行的,与α测试不同,开发者通常不在测试现场,因此,β测试是软件在一个开发者不能控制的环境中的“活的”应用,用户记录所有在β测试中遇到的(真正的或想象的)问题,并定期把这些问题报告给开发者,在接到β测试的问题报告后,开发者对软件进行最后的修改,然后着手准备向所有的用户发布最终的软件产品。
第十三章软件维护与再工程323软件可维护性可维护性:指理解、改正、调整和改进软件的难易程度。
对软件可维护性影响的主要因素有:可理解性、可测试性、可修改性和可移植性提高软件可理解性的措施:采用模块化的程序结构;书写详细正确的文档;采用结构化程序设计;书写源程序的内部文档;使用良好的编程语言;具有良好的程序设计风格等第十四章软件项目管理338软件度量(重)软件度量是指计算机软件范围内的测量,主要是为产品开发的软件过程和产品本身定义相关的测量方法和标度对软件开发过程度量的目的是为了对过程进行改进对产品进行度量的目的是为了提高产品的质量,度量的作用是为了有效地采用定量的方式来进行管理管理人员利用度量来了解软件工程过程的执行情况和产品质量需要考虑:合适的度量是什么所收集的数据如何使用用于比较个人、过程或产品的度量是否合理340 软件度量度量对象:软件产品、软件过程、资源软件产品、软件过程、资源都具有外部属性和内部属性。