您好,欢迎访问三七文档
软件工程与质量保证-软件开发人员岗位培训资料软件开发岗位•软件开发–程序设计/编程调试–软件设计、架构设计–软件分析–算法设计开发–数据库分析设计•软件测试–测试分析设计–测试员•管理与支持–项目经理–配置管理–软件文档–开发支持–销售支持•软件安装运行–软件维护开发相关岗位•产品开发–系统设计师–单机设计师–嵌入式平台设计–算法研究–产品测试•信息系统集成–项目监理–项目管理–工程设计、调试–网络规划设计师–信息安全工程师–系统管理工程师–信息技术支持计算机与软件的知识体系•1专业基础知识–计算机科学(数学)–计算机系统(硬件)–程序语言–数据结构–常用算法–操作系统–计算机网络–数据库技术•2其它知识–计算机安全–多媒体–电子商务–企业信息化–软件工程–标准化–知识产权软件开发与计算机应用技术体系•3软件开发技术–系统分析技术–系统设计技术–程序设计技术–软件测试技术–系统实施维护–数据库系统开发–网络系统设计–软件工具与开发环境•4计算机应用技术–计算机辅助设计–网页设计–多媒体应用–电子商务–企业信息化–系统集成(狭义)5、软件工程与开发管理•软件工程知识•软件项目管理–成本、风险、计划、人员•软件配置管理–基线、软件配置项、–版本控制、变更控制•软件质量管理与保证•软件过程管理目录•软件工程知识•软件质量保证与管理•软件过程管理•软件编程规范一、软件工程知识•软件危机•软件工程简介•软件生命周期•软件生命周期模型•软件开发方法(技术)(一)软件危机与软件工程•软件开发的发展阶段–最初阶段:机器语言–第二阶段:汇编语言–第三阶段:高级语言–CASE阶段:•软件开发工作范围扩大:需求分析、项目管理•自动化程度提高:各种技术和管理工具•CASE阶段的有关概念–4GL、CASE工具,最终用户、可视化、组合、即插即用编程–SOA,SaaS软件开发工具简单、种类少软件危机•软件危机的产生–早期的软件开发采用个体工作方式,开发工作主要依赖程序员的个人技巧。–随着计算机应用需求的增长、软件规模越来越大,而软件开发的生产效率跟不上,软件开发中的问题越来越多。–1960年代,软件开发问题凸现,爆发软件危机–IBM公司开发OS/360系统•解决途径是软件工程软件危机的表现•1.软件开发进度难以预测•2.软件开发成本难以控制•3.用户对产品功能难以满足•4.软件产品质量无法保证•5.软件产品难以维护•6.软件缺少适当的文档资料软件危机的原因•软件生产的知识密集和人力密集的特点是造成软件危机的根源所在。–软件本身的特点–开发人员的弱点•具体原因–用户需求不明确–缺乏正确的理论指导–软件开发规模越来越大–软件开发复杂度越来越高–软件开发技术、方式落后。软件开发基本问题-个人•关键在于两个转换不能顺利通过–从用户的理解到程序员的理解–从程序员的理解到程序的实现用户的理解程序员的理解程序的实现不同行业人员的区别人与机器的区别熟悉应用领域精确的文档专业知识实际经验软件=程序+数据+文档理解顾客要求项目发起人的提议项目申请书中具体说明高级分析师的构思程序员的产品在用户处的配置用户真正想要的!!!?产品功能、工作流程大型软件开发中的问题•大型软件开发的困难–一致性的保持–测试的困难大大增加–工作进度难以控制–文档与代码的协调十分困难–版本更新带来的困难•困难产生的原因–系统的复杂性–人员间的组织协调–应用领域的差别–时间因素和变化因素软件工程概念•定义:应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件开发问题的工程。•用途:提高软件产品的质量和开发效率,降低软件开发成本。•目标是:在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。软件工程原则•1)选取适宜开发范型。•2)采用合适的设计方法。•3)提供高质量的工程支持。–软件工具与环境对软件过程的支持颇为重要•4)重视开发过程的管理。在需求、设计、实现、确认和支持等不同活动中,根据特定的软件工程,采用合适的开发范型、设计方法、支持过程以及过程管理。软件工程研究内容•软件开发模型–瀑布、演化、螺旋、喷泉•软件开发方法–轻量级、重量级•软件过程•软件工具和环境•计算机辅助软件工程(CASE)•软件经济学七大原理•1、用分阶段的生命周期计划严格管理•2、坚持进行阶段评审–大约63%的错误是在编码之前造成的,•3、实行严格的产品控制–需求的改动往往是不可避免的•4、采纳现代程序设计技术•5、结果应能清楚地审查•6、开发小组的人员应少而精–高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少的多•7、改进软件开发过程发展方向•敏捷开发–对未来可能出现的变化和不确定作出全面反应–轻量级方法•面向侧面的程序设计AOP–方面指完成一个功能的对象和函数的集合。–有泛型编程和模板。(二)软件开发模型软件生存周期计划可行性分析与计划开发需求分析概要设计详细设计编码测试维护运行维护每个阶段有明确的任务,使规模大、结构复杂和管理复杂的软件开发变得容易控制和管理软件生存周期•生存周期划分的原则–各阶段的任务彼此间尽可能相对独立,–同一个阶段各项任务的性质尽可能相同,–从而降低每个阶段任务的复杂性,–简化不同阶段之间的联系,–有利于软件开发过程的组织管理。•软件生存周期主要的三种基线–功能基线(functionalbaseline),软件定义阶段结束–指派基线(allocatedbaseline),软件需求分析阶段结束–产品基线(productbaseline),软件组装与系统测试阶段结束可行性分析与计划阶段•工作任务–要解决什么问题?-问题定义–有可行的解决办法吗?-可行性分析–费用?资源?时机?-制定计划•参加人员–用户、项目负责人、系统分析师•文档–可行性分析报告,项目开发计划需求分析阶段•工作任务-“计算机要做什么?”–确定对系统的综合要求-功能性能约束–分析系统的数据需求-数据字典–导出系统的逻辑模型-ER图、状态图•参加人员–用户、项目负责人、系统分析师,架构设计•文档-软件需求说明书最关键的过程最困难的工作用户与开发人员很难进行交流用户的需求是动态变化的系统变更的代价呈非线性增长软件设计阶段概要设计详细设计工作任务软件结构设计模块划分、接口人机界面数据结构设计数据库概要设计模块具体功能模块过程描述程序流程图数据库物理设计参加人员系统分析师软件设计师软件设计师程序员工作文档概要设计说明详细设计说明软件测试阶段需求分析概要设计详细设计系统测试组装测试单元测试编码测试计划测试计划测试计划软件测试人员软件开发人员软件测试计划软件测试报告V型测试模型--生命周期瀑布模型软件维护阶段•工作任务-软件修改–发现了软件中隐含的错误–适应软件运行环境的变化–适应业务变化而需要扩充和增强功能•参加人员–用户、软件开发人员•文档–问题记录、版本说明书–修改后的软件文档最长的阶段软件生命周期模型•描述软件开发过程中各种活动如何执行。是软件工程过程的简化的抽象描述。–软件开发各阶段的次序限制–软件开发过程所遵守的规定和限制–便于活动协调,人员有效通信,–有利于活动重用,活动管理•瀑布模型、增量、演化、螺旋、喷泉模型瀑布模型•按工序将问题化简,将功能的实现与设计分开,便于分工协作,•采用结构化的分析与设计方法将逻辑实现与物理实现分开。•1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量;•2)用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险;•3)早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果。优点:1)软件开发的基本框架2)为项目提供了按阶段划分的检查点。3)可在迭代模型中应用瀑布模型。不适合于需求经常变化的项目演化模型•一种全局的软件(或产品)生存周期模型。•属于迭代开发风范。•特别适用于对软件需求缺乏准确认识的情况•最经典的演化模型为BA模型原型开发(需求-设计-实现-测试-集成)-反馈-原型改进(需求-设计-实现-测试-集成)-反馈-……最终软件产品增量模型•本质上是迭代的•瀑布模型+原型实现•采用随着日程时间的进展而交错的线性序列,每一个线性序列产生软件的一个可发布的“增量”。•人员分配灵活,刚开始不用投入大量人力资源•能够有计划地管理技术风险。螺旋模型•瀑布模型+原型实现•强调风险分析,•特别适合于大型复杂的系统•采用一种周期性的方法来进行系统开发–需求定义、–风险分析、–工程实现–评审螺旋模型•解决的问题•对于新近开发,需求不明确的情况下,适合用螺旋模型进行开发,便于风险控制和需求变更!喷泉模型•以用户需求为动力,以对象为驱动•主要用于采用对象技术的软件开发项目•互相迭代:软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。•无间隙:在各项活动间无明显边界•提高软件项目开发效率•在开发过程中需要大量的开发人员•要求严格管理文档(三)软件开发方法(技术)•结构化开发方法•JACKSON方法•面向对象开发方法•维也纳开发方法VDM•软件开发技术–系统分析技术–系统设计技术–程序设计技术–软件测试技术–系统实施维护–数据库系统开发–网络系统设计–软件工具与环境1、结构化开发方法•面向数据流(过程)的开发方法•指导思想:自顶向下、逐层分解•基本原则:分解与抽象•适合与数据处理领域•不适合于大规模、特别复杂的项目•难于适应需求的变化结构化开发方法•结构化分析方法–工具:数据流图,数据词典,结构化语言、判定表和树–软件工具:BPWIN•结构化设计方法–工具:软件/程序结构图–软件工具:•结构化程序设计–工具:程序框图–软件工具:最早的开发方法最基础的详细设计工具2、JACKSON方法•面向数据结构的开发方法•工具:Jackson图、伪码•JSP方法(结构化编程):–指导思想:问题的数据结构与处理该数据结构的控制结构有着惊人的相似之处–以数据结构为驱动,适合小规模的软件,并且输入和输出数据要有对应关系•JSD方法(系统开发)–以事件为驱动,基于进程的系统开发方法–适用于时序性特点较强的系统,如数据处理和实时控制系统。3、面向对象开发方法•传统开发方法的问题–软件重用性差–软件可维护性差–开发出的软件不能满足用户需求•面向对象方法:尽可能按照人类认识世界的方法和思维来分析和解决问题。•面向对象的基本概念–对象:是数据和操作的结合体–类:具有相似性质的对象的抽象–类的结构关系:一般/具体,整体/部分主流软件开发方法广泛应用其它领域面向对象概念•面向对象的特征–对象唯一性、分类性、–继承性:软件开放性、可扩充、可重用–多态性:软件灵活性、可重用性•面向对象的要素–抽象–封装性(信息隐藏)–共享性–强调对象结构而不是程序结构面向对象开发方法•面向对象分析、设计方法–工具:UML语言–软件工具:ROSE•面向对象实现–工具:C++–软件工具:VC++等•UML统一建模语言–面向对象的标准建模语言–统一的语义、符号表示–定义良好、易于表达、功能强大–支持软件开放的全过程事实上的工业标准4、维也纳开发方法VDM•基于模型的开发方法,以指称语义为基础•主要思想:将软件系统当作模型来描述,把软件的输入输出看作模型对象,把这些对象在计算机内的状态看作该模型在对象上的操作。•目的:从软件系统最高一级抽象到最后生产目标的每一步都给予形式化说明,以提高软件的可靠性。5、软件测试方法•静态测试–人工检测:代码审查、软件评审–计算机辅助静态分析:•动态测试–白盒测试•语句覆盖•判定覆盖•条件覆盖•判定条件覆盖•条件组合覆盖•路径覆盖•基本路径测试法–黑盒测试•等价类划分法•边界值分析法•判定表方法•因果图法•正交试验法•功能图法•错误推测法常见的测试种类•回归测试功能测试•压力测试负载测试•性能测试易用性测试•安装与反安装测试回复测试•安全性测试兼容性测试•内存泄漏测试比较测试•Alpha测试Be
本文标题:软件工程与质量保证
链接地址:https://www.777doc.com/doc-3592764 .html