资源描述
一、软件:
软件定义:
软件=程序+文档+数据
软件特点:
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.对照程序逻辑,检查设计用例的逻辑覆盖标准。根据程序可靠性规定,补充用例使之 达成规定的覆盖标准。 深度优先与宽度优先: 无论是自顶而下增值还是自底而上增值,还可选择深度优先或者宽度优先增值
拟定集成过程的原则: 自顶而下增值 自底而上增值
展开阅读全文