一、一、一、一、软件:软件:软件:软件:软件定义:软件=程序+文档+数据软件特点:1)、具有抽象性2)、没有明显的制造过程3)、软件的维护比硬件的维护要复杂得多4)、对计算机系统有着不同程度的依赖性5)、尚未完全摆脱手工艺的开发方式6)、软件本身是复杂的7)、软件成本相当昂贵8)、相当多的软件工作涉及到社会因素软件的发展::::程序设计、程序系统、软件工程软件危机:软件危机指的是软件开发和维护过程中遇到的一系列严重问题。软件危机的问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。软件危机表现:1.开发成本难以控制,进度不可预计;2.软件系统的质量和可靠性很差,难以满意;3.软件文档相当缺乏,软件系统不可维护;4.软件开发生产率很低,软件产品供不应求。5.软件产品成本十分昂贵。软件危机产生原因:1)、软件本身的特点2)、对软件开发与维护存在许多错误认识和做法3)、软件开发与维护的方法不正确解决软件危机途径:1)、将软件开发看成是一种组织严密、管理严格、各类人员协同配合共同完成的工程项目。2)、研究和推广成功的软件开发技术和方法。3)、开发和使用好的软件工具。软件生命周期:软件所经历的定义、开发、使用和维护直到废弃所经历的时期。程序设计环境:源程序编辑,编译或解释,链接,调试和运行工具的集合软件工程环境:软件定义,设计和实现,测试和维护等各个阶段所使用的软件工具的集合二、软件工程:软件工程定义:研究如何应用一些科学理论和工程上的技术来指导软件的开发,用较少的投资获得高质量的软件的一门学科。软件工程性质:涉及计算机科学、工程科学、管理科学、数学等领域,着重于如何建造一个软件系统。用工程科学中的观点来进行费用估算、制定进度、制定计划和方案。用管理科学中的方法和原理进行软件生产的管理。用数学的方法建立软件开发中的各种模型和各种算法,如可靠性模型,说明用户需求的形式化模型等。软件工程三要素:方法、工具和过程。软件方法:是完成软件开发的各项任务的技术方法,回答“如何做”的问题;工具是为方法的运用提供自动的或半自动的软件支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。包括:传统方法学面向对象方法学 需要解决的问题:软件成本、软件可靠性、软件维护、软件生产率和软件复用。基本内容:包括理论、结构、方法、工具、环境与规范等目标:以较少的投资获得易维护、易理解、可靠和高效率的软件产品。原则:即分解、抽象和信息隐蔽、一致性和确定性原理:工程化和系统化。软件过程:软件过程是把输入转化为输出的一组彼此相关的资源和活动从软件开发的观点看,它就是使用适当的资源(包括人员、硬软件工具、时间等),为开发软件进行的一组开发活动,在过程结束时将输入(用户要求)转化为输出(软件产品)。软件工程过程包含四种基本的过程活动:Plan软件规格说明:规定软件的功能及其运行的限制Do软件开发:产生满足规格说明的软件Check软件确认:确认软件能够完成客户提出的要求Action软件演进:为满足客户的变更要求,软件必须在使用的过程中演进软件工程的基本原理:强调使用生存周期方法学、强调使用结构分析与结构设计任务软件工程的目标:生产具有正确性、可用性以及开销合宜的产品1)、付出较低的开发成本2)、达到要求的软件功能3)、取得较好的软件性能4)、开发的软件易于移植5)、需要较低的维护费用6)、能按时完成开发7)、及时交付使用三、三、三、三、软件生命周期:软件生命周期:软件生命周期:软件生命周期:生命周期基本流程:问题定义→可行性研究→需求分析→总体设计(概要设计)→详细设计→编码和单元测试→综合测试→软件维护。瀑布模型:这种方法是从一个阶段呈瀑布流入下一个阶段,所以这个模型就称为“瀑布模型”。各项活动按自上而下,相互衔接的固定次序,如同瀑布逐级下落。每项活动均处于一个质量环(输入-处理-输出-评审)中。增量模型:定义基本需求→将需求赋予增量构件→设计系统体系结构→开发增量构件→集成增量构件→确认系统把软件产品分解成一系列的增量构件,在增量开发迭代中逐步加入。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。增量开发方法的新演进版本叫做“极限程序设计演化模型:先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。快速原型方法是原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求分析上的模糊认识。是用来获取用户需求的,或是用来试探某种设计是否有效。一旦需求或设计确定下来,原型就将被抛弃原型运用方式:抛弃策略和附加策略喷泉模型:体现了迭代和无间隙的特性。系统某个部分常常重复工作多次,相关对象在每次迭代中随之加入演进的软件成分。无间隙是指在各项开发活动,即分析、设计和编码之间不存在明显的边界。喷泉模型是对象驱动的过程。需求分析阶段→设计阶段→编程阶段→集成与确认阶段→维护阶段→演进阶段微软软件开发过程:战略:靠改进特性与固定资源来激发创造力①计划阶段②设计阶段③开发阶段④稳定化阶段⑤发布阶段。微软管理过程:一、将大项目分成若干里程碑式的重要阶段,各阶段之间有缓冲时间,但不进行单独的产品维护。二、运用想象描述和对特性的概要说明指导项目。三、根据用户行为和有关用户的资料确定产品特性及其优先顺序。四、建立模块化的和水平式的设计结构,并使项目结构反应产品结构的特点。五、靠个人负责和固定项目资源实施控制。四、四、四、四、可行性研究:可行性研究:可行性研究:可行性研究:可行性研究实质:可行性研究实质上是要进行一次简化、压缩了的需求分析和设计过程,要在较高层次上以抽象的方式进行需求分析和设计过程。可行性研究目的:可行性研究的目的就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发,是否值得开发,最后给决策者提供做与不做的依据。可行性研究的任务:1)、首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制。2)、然后进行简要的需求分析,抽象出该项目的逻辑结构,建立逻辑模型。3)、最后从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的主要解决办法,对每种解决方法都要从多个方面研究它的可行性。可行性研究内容:(1)技术可行性(2)经济可行性(3)操作可行性(4)社会可行性(法律可行性)(5)抉择可行性研究的步骤:复查系统的规模和目标→研究现正在使用的系统→新系统的高层逻辑模型→重新定义问题→导出和评价供选择的解法→推荐行动方针→草拟开发计划→书写文档提交审查可行性分析结论:(1)立即展开(2)推迟(3)修改后进行(4)不能进行(5)不必要进行五、需求分析五、需求分析五、需求分析五、需求分析::::需求分析的过程:需求分析的过程是开发人员与用户共同协商,准确地定义未来系统的目标,确定为了满足用户的需求系统必须做什么。并且使用软件开发人员和用户都能理解的语言准确地表达出来,即用需求规格说明书规范的形式准确地表达用户的需求。需求分析特点:1)、问题的复杂性2)、交流障碍(讲究技巧和原则)3)、不完备性和不一致性4)、需求易变性(动态性)软件需求的任务:1)、问题识别2)、分析与综合3)、编写文档4)、技术审查和管理复审需求文档:1)、用户需求报告2)、需求规格说明书需求分析原则:需要能够表达和理解问题的信息域和功能域需求分析的步骤:1.需求获取2.需求提炼3.需求描述4.需求验证需求获取的目的:清楚的理解所要解决的问题完整获取用户需求分析和描述系统的逻辑模型:1.建立起目标系统的逻辑模型2.沿数据流图回溯结构化分析方法:面向数据流自顶向下逐步求精进行需求分析的方法。高质量需求叙述的特性:1)、正确2)、可行性3)、必要性4)、优先权5)、明确6)、可证实7)、完整8)、可修改性9)、可追踪六、六、六、六、系统总体设计:系统总体设计:系统总体设计:系统总体设计:软件设计的任务:把需求阶段产生的软件说明转换为用适当手段表示的软件设计文档1)、软件系统设计2)、软件结构设计3)、数据结构及数据库设计4)、编写概要设计文档5)、评审设计任务阶段:总体设计阶段、详细设计阶段软件设计的全过程:总体设计——总体设计复审——详细设计——详细设计复审总体设计阶段,应划分出组成系统的物理元素:程序、文件、数据库、人工过程和文档等,并确定系统中每个程序由哪些模块组成以及这些模块相互间的关系。软件设计的基本原理:1)、抽象2)、信息隐蔽模块独立性:指每个模块只完成系统要求的独立的子功能,并且与其它模块的联系量最少且接口简单。两个度量准则:耦合性内聚性模块间的耦合:1)、非直接耦合2)、数据耦合3)、标记耦合4)、控制耦合5)、公共耦合6)、内容耦合如何降低模块间耦合度:(1)如模块必须存在耦合,选择适当的耦合类型原则:尽量使用数据耦合少用控制耦合限制公共耦合的范围坚决避免使用内容耦合(2)降低模块间接口的复杂性面向数据流的设计方法:1.变换流2.事务流3.设计过程变换分析设计方法:1)、找出主加工、逻辑输入和逻辑输出2)、设计模块结构的顶层和第一层3)、设计中、下层模块改进软件结构设计的指导原则:(1)程序结构尽可能与问题结构相对应(2)模块功能的完整(3)消除重复功能(4)作用范围应在控制范围内(5)减少高扇出争取高扇入(6)模块大小适中(7)降低模块接口的复杂性(8)模块功能可预测两种典型的程序结构:变换型程序、事务型程序两种程序结构的共同特征:上层模块只负责控制、协调下层模块完成具体的操作修改模块结构方法:使判定同受其影响的操作尽可能靠近详细设计的基本任务:1)、算法设计2)、数据结构设计3)、数据库物理设计4)、其他设计:代码设计、输入/输出设计、界面设计5)、编写详细设计说明书6)、评审详细设计内容:详细设计是根据每个模块的功能设计其逻辑描述、实现其法以及实现这些算法的逻辑控制流程,并设计这些模块所需的局部数据结构。结构化程序设计:1)、采用自顶向下,逐步求精的程序设计方法。2)、使用三种基本控制结构构造程序:顺序、选择、循环。单入口,单出口的共同特点。3)、主程序员的组织形式:一个主程序员、一个后备程序员和一个程序管理员三人为核心,再加上一些专家、其他技术人员组成小组。七、七、七、七、软件测试:软件测试:软件测试:软件测试:测试的基本概念:测试目标测试的基本原则测试信息测试的方法和技术测试步骤测试的目标:为了发现错误,不能证明程序正确测试阶段工作步骤:1)、单元测试2)、系统测试3)、集成测试软件测试:软件测试不等于程序测试,应贯穿于软件定义与开发的整个期间;测试的方法与技术:1)、静态测试基本特征是在对软件进行分析、检查和测试,不实际运行被测试的软件。2)、动态测试通过运行软件来检验软件的动态行为和运行结果的正确性基本要素:被测试程序测试数据测试步骤:模块测试集成测试/联合测试系统测试黑盒测试:将被测试程序对象看作黑盒子,不考虑其内部程序结构与处理过程,仅仅对于程序接口进行测试。即检查适当的输入是否能够产生适当的输出。白盒测试:分析程序结构与过程执行路径,按照程序内部的逻辑结构设计测试用例,检验程序的每条通路是否按预期正常进行,力求提高测试覆盖率。黑盒测试与白盒测试比较:黑盒测试是根据程序外部特征进行测试白盒测试是根据程序内部逻辑结构进行测试不论黑盒还是白盒测试都不能进行穷尽测试基于白盒法的测试思想:分析被测程序的逻辑结构,选择逻辑执行路径子集设计测试方案。选择路径子集的覆盖标准:逻辑覆盖法、路径测试法黑盒法:不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。等价分类法边值分析法错误推测法因果图法综合测试策略:黑盒法为主、白盒法为辅,具体如下:1.任何情况下都应该使用边界值分析设计测试用例;2.必要时采用等价分类法补充用例;3.必要时再用错误推测法补充用例;4.对照程序逻辑,检查设计用例的逻辑覆盖标准。根据程序可靠性要求,补充用例使之达到规定的覆盖标准。深度优先与宽度优先:无论是自顶而下增值还是自底而上增值,