软件设计师18-系统开发和运行01

软件工程

软件设计师18-系统开发和运行01_第1张图片

1 软件工程方法学三要素:方法、工具、过程

2 软件生命周期:问题定义、可行性分析、需求分析(时间最长)、设计(概要设计、详细设计)、编码、测试、运行维护

3 软件开发模型

1)瀑布模型

文档驱动

软件设计师18-系统开发和运行01_第2张图片

优点:按模板进行,根据各阶段检查评审,正确则向下进行(射线)

缺点:文档过多、线性模型、缺乏灵活性、前期未发现错误,将一直存在直到交付

适用:需求明确、很少变更的项目

2) 快速原型模型

原型辅助开发

抛弃式原型方法

    1)探索型原型  用于需求分析阶段;目标模糊,搞清需求

    2)实验型原型  用于设计阶段;判断项目可行性

渐进式原型方法

    3)演化模型/变换模型/演化型原型  做出原型,不断完善,演化为最终系统

         适用对软件需求缺乏准确认识

         优点:多次反馈不断完善验证产品需求,多次产生项目进程数据、心理鼓舞

         缺点:不明确需求,总体设计困难;缺乏严格过程管理;用户多次试错产生负面情绪

3)增量模型

 1)概念:瀑布模型和原型模型的融合;功能细化、分别开发:不断制作积木块(从核心开始),做一块搭一块,让用户操作一次,反馈结果供下次开发使用;引入增量包概念,设计增量包的需求

 2)优点:人员分配灵活、用户参与、有利风险把控、

 3)适用:需求经常变化的软件开发过程

4)螺旋模型

瀑布模型和演化模型的结合,增加风险分析

软件设计师18-系统开发和运行01_第3张图片

优点:设计灵活,各阶段可变更;用户参与各个阶段;小分段构建大型系统,成本计算容易

缺点:迭代次数过多增加开发成本,延迟时间;需要有丰富项目评估经验和专业知识,否则会造成巨大损失

5)喷泉模型

用户需求为动力,对象为驱动的模型。各阶段相互迭代,无间隙(各阶段间没有明显边界)

软件设计师18-系统开发和运行01_第4张图片

6)基于构建的开发模型

  1)特点:系统模块化,创建构件库,开发时组合使用构件库内构建

  2)阶段:软件的需求分析和定义、体系结构设计、构件库建立(完善丰富构件库)、应用软件构件、测试和发布

  3)优点:构件复用,提高开发效率

        缺点:缺乏通用的组装结构标准,有风险

7)快速应用模型(RAD)

瀑布模型的“高速”变种,不以高级语言为单位而是以构件为单位,增量型,使用大量可复用构建堆积。若时间紧,则多级堆积(分块堆,堆完再堆)

适用:正确理解需求,约束项目范围

软件设计师18-系统开发和运行01_第5张图片

4 软件开发方法

1)结构化分析(SA)和设计(SD)

    1)SA:面向数据流的需求分析方法,常用工具:数据流图、数据字典,产生文档:数据流图、数据字典、软件需求说明书

        1)数据流图(DFD)

             描述数据流从输入到输出的变换流程

软件设计师18-系统开发和运行01_第6张图片

            不同于程序流程图,可以表现范围广(系统-模块),分层数据流图

软件设计师18-系统开发和运行01_第7张图片

2)数据字典(DD)

        定义每个数据,就像汉语词典(保证数据在系统中的一致性)

        组成:1)数据项:只含一个数据,又称数据元素

                   2)数据流:由多个相关数据项组成

                   3)数据文件:如数据库

    2)结构化设计(SD):面向数据流的设计方法,分为概要设计和详细设计

      1)概要设计/结构设计/总体设计

         基本任务:设计软件系统结构,进行模块划分,确定每个模块的功能、接口、模块间的调用关系

         设计工具:结构图、数据字典、判定树、判定表

       2)详细设计

         基本任务:为每个模块设计其实现的细节

         设计工具:程序流程图、盒图(NS图)、问题分析图(PAD)、程序设计语言(PDL)

2 面向数据结构的设计

根据输入/输出数据结构导出程序结构,如Jackson和Warnier

3 面向对象的分析与设计

   面向对象的方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等来构建系统的软件开发方法

   面向对象=对象+类+继承+通信,运用此方法的软件系统是面向对象的

    1)对象 :系统中用来描述客观事物的一个实体,构成系统的一个基本单位。对象图:对象名、属性值、具体操作(类的实例化(new))

       属性/状态/数据:描述对象的静态特征(实例化的类的属性(对象实例化时会赋值))

       操作:规定了对象的行为/所能提供的服务(实例化的类的方法)

       封装:信息隐蔽技术

    2)类:一组具有相同属性和相同操作的对象的集合(class),创建对象的模板。类图:类名、属性、操作

    3)继承:特殊类的对象拥有一般类的全部属性与操作。有单/多重继承

    4)多态性:同一操作,作用于不同对象有不同解释,产生不同结果

    5)消息:消息传递是对象间通信的手段。一个对象通过向另一个对象发送消息来请求其服务。

         组成:接受对象名、调用的操作名、适当的参数

         作用:告诉对象要完成什么操作,而不是如何完成操作

5 软件测试与维护

1)软件测试:发现软件错误和缺陷的主要手段

2)测试用例:由测试数据和预期结果构成。

     1)为了发现程序中的错误,应竭力设计能暴露错误的测试用例

     2)好的测试用例是发现至今为止尚未发现的错误

     3)一次成功的测试是发现了至今尚未发现的错误的测试

3)软件测试准则

1)应该尽早地、不断地进行测试,软件测试贯穿于软件开发过程的始终

2)所有的测试都应追溯到用户需求

3)应该从小规模测试开始,并逐步进行大规模测试

4)应该远在测试之前就制定出测试计划

5)80%的错误可能出现在20%的模块中

6)应该由独立的第三方从事测试工作

7)对非法和非预期的输入数据也要像合法数据一样编写测试用例

8)检查软件是否做了应该做的事仅是成功了一半,另一半是看软件是否做了不该做的事

9)在规划测试时不要设想程序中不会查出错误

10)测试只能证明软件中有错误,不能证明软件中没有错误

4)软件测试分类

    1)从测试阶段分:单元测试、集成测试、确认测试、系统测试

     2)从测试方法分:白盒测试、黑盒测试

     3)回归测试指修改了旧代码后,重新进行全部或部分以前的测试用例,确认有无引入新错误

5)测试阶段

    1)单元测试/模块测试

        1)概念:针对软件设计的最小单位(模块)进行正确性检验的测试工作。

        2)检查:每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求,以及发现各模块内部可能存在的各种错误

        3)测试人员:开发人员

        4)辅助模块:借助驱动模块(用于测试模拟的主程序)和桩模块(子模块)完成

           1)驱动模块:相当于被测模块的主程序(调用测试模块),接受测试数据,把这些数据传递给被测模块,输出实测结果

           2)桩模块:代替被测模块的子模块(返回值给被测模块);做少量数据操作(并非子模块所有功能),但不能啥也不做

软件设计师18-系统开发和运行01_第8张图片

        5)计划阶段:软件详细设计阶段

        6)方法:白盒测试

    2) 集成测试/组装测试/联合测试

        1)把通过单元测试的模块集成在一起,测试模块之间的协作性

        2)从组装策略分

         一次性组装(把所有模块一次性组装在一起)、增量式组装(自顶向下、自底向上及混合式)

           1)自顶向下组装:不需要驱动模块

           2)自底向上组装:不需要桩模块

           3)每个版本提交时,进行性冒烟测试/版本验证测试/提交测试,验证主要功能是否实现

        3)计划阶段:概要设计阶段完成

        4)方法:黑盒测试

    3)确认测试/有效性测试

      1)验证软件功能、性能及其他特性是否和用户需求相一致

      2)计划阶段:需求分析阶段

      3)根据用户参与程度分类:

        1)内部确认测试:软件开发组织内部按软件需求说明书进行测试

        2)Alpha测试:由用户在开发环境下测试

        3)Beta测试:由用户在实际使用环境下进行测试

    4)系统测试

       1)将已确认的软件、计算机硬、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试。针对整个产品系统进行测试,验证系统是否满足需求

       2)计划阶段:系统(需求)分析阶段完成

       3)内容:功能测试、性能测试(非功能性要求)、健壮性测试、用户界面测试、安全性测试、安装与反安装测试

补充:

1 数据流的加工

1)对于每个基本加工,必须有加工规格说明,表达“做什么”而不是“怎么做”,描述把输入数据流变换为输出数据流的加工规则

2)决策树可以表示加工规格说明

 2)DFD守恒加工原则:

               1)对于每个加工,输入、输出名必须不同但其组分必须相同

                2)每个加工,必须有输入流和输出流

你可能感兴趣的:(软件设计师18-系统开发和运行01)