zoukankan      html  css  js  c++  java
  • 软件工程

    • 什么是软件危机?典型表现?产生原因?

    软件危机是计算机软件开发和维护过程中遇到的一系列问题。有以下表现。

    软件的产品质量达不到要求。用户对软件系统不满意。软件维护困难。软件没有合适的文档资料。

    对软件开发成本和进度估计不准确。软件成本在计算机总成本占比越来越大。

    软件开发生产率的提高不能满足社会对软件产品增长的需求。

    产生软件危机主要有以下原因。

    软件规模庞大,程序复杂性随着程序规模增大以指数级增长。

    软件是计算机的逻辑部件,而不是物理部件,缺乏可见性。软件开发缺乏科学的管理和控制。

    只重视软件本身,而忽视其配置部分。轻视软件维护。

    软件可靠性缺乏严格的标准,质量无法保证。对用户要求没有完整的认识,就开始写程序。

    • 软件产品的特性?

    软件产品是逻辑实体,不是物理实体,具有抽象性。软件开发和硬件不同,没有明确的生产过程。

    软件开发受计算机系统的限制,对计算机系统有依赖性。

    软件开发至今是手工作坊的形式。软件使用期间,没有硬件的磨损,老化问题。

    软件成本非常昂贵,包括人工费,宣传费,运营费和税收。

    软件本身就很复杂,不可预见实际问题的复杂性(需求改变),不可预见外界环境的变化(断电,硬盘已满,网络故障,病毒),程序逻辑结构的复杂性(看别人程序困难)等。

    • 什么是软件工程?软件工程有那些基本原理?

    软件工程是指导计算机软件开发和维护的一门工程学科。生产出按期交付,预算范围内,满足用户需求,质量合格的软件产品。主要有以下基本原理。

    分阶段的生命周期严格管理。严格的产品控制。坚持阶段评审。结果能够审查。现代化程序设计技术。开发人员少而精。不断改进软件。

    • 什么是软件工程方法学?包含哪些要素?常用的方法学有哪些?

    通常在软件生命周期全过程使用的一整套技术方法集合称为方法学,也称为范型。

    软件工程方法学包含三个要素。方法,工具和过程。

    方法,完成软件开发各项任务的技术方法。

    工具,运用方法提供的自动或半自动软件工程支撑环境。

    过程,获得高质量软件需要的一系列任务框架,规定了各项任务的步骤。

    使用最广泛的软件工程方法学,传统方法学和面向对象方法学。

    传统方法学(结构化范型)。采用结构化技术(结构化分析,结构化设计,结构化实现)完成软件开发。

    把软件生命周期分为若干个阶段,然后顺序完成各阶段任务。

    面向对象方法学(面向对象范型)。面向对象方法=对象+类+继承+消息通信

    使用面向对象范型时,开发出的软件是由相对小的,独立的单元组成。面向对象降低了软件产品的复杂度,简化软件开发与维护工作。

    • 软件生命周期?

    软件生命周期分为软件定义,开发,维护三个阶段。

    软件定义。通常分为三个阶段,问题定义,可行性分析,需求分析。

    问题定义,回答了要解决什么问题?可行性分析,回答对上一阶段问题有行得通的方案?需求分析,为了解决这个问题,目标系统必须做什么,就是确定目标系统具备哪些功能?

    软件开发。通常分为四个阶段,总体设计,详细设计,编码和单元测试,综合测试。

    总体设计,回答应该怎样实现目标系统?详细设计,回答了应该怎样具体实现这个系统?编码和单元测试,写出正确,易理解,易维护的程序模块。综合测试,通过各种类型的测试使软件达到目标要求。

    软件维护。通过各种必要的维护使系统持久满足用户需求。软件使用过程中发现错误加以维护,环境改变时修改软件适应新环境。有新要求时及时改进。每一次维护本质上是压缩和简化的定义和开发过程。

    • 需求分析准则,需求分析的任务?

    理解并描述问题的信息域,建立数据模型。定义软件的功能,建立功能模型。

    描述外部事件结果的软件行为,建立行为模型。对数据,功能,行为模型进行分解,用层次的方式展示细节。

    需求分析主要任务

    确定对系统的综合要求,包括功能需求,性能需求,可靠性和可用性需求,接口需求等。

    分析系统的数据要求。导出系统的逻辑模型。修正系统开发计划。

    • 总体设计和详细设计的任务?

    总体设计主要有方案设计和软件体系结构设计。

    方案设计,首先设想实现目标系统的各种可能方案,根据系统规模和目标,综合技术,经济和操作选出若干个可行方案。再综合分析,对比各方案的利弊,选出一个最佳方案。

    软件体系结构设计,确定软件系统中每个程序由哪些模块组成,以及这些模块之间的关系。

    详细设计主要有三项任务。过程设计,数据设计,接口设计。

    过程设计,软件体系结构中每个模块的实现算法。数据设计,软件中所需的数据结构。接口设计,软件内部各模块之间,软件和协作系统之间,软件和用户之间的通信方式。

    • 软件过程,使用那些模型描述软件过程?

    软件过程,为了获得高质量软件需要完成的一系列任务框架,规定了完成各项任务的工作步骤。

    软件过程定义了运用技术方法的顺序,交付的文档资料,保证软件质量的管理措施。通常使用生命周期模型来描述软件过程。

    瀑布模型,传统软件工程方法学中的软件过程都可以用瀑布模型描述。

    优点,规定开发人员使用规范的技术方法,严格规定各个阶段提交的文档,每阶段结束前有严格的技术审查和管理复审。

    缺点,软件交付给用户之前,用户只能通过文档了解产品,开发人员和用户缺乏沟通,导致开发出的软件不能真正满足用户需求。

    快速原型模型,是快速建立起来,可在计算机上运行的程序,它所完成的功能往往是最终软件产品所有功能的子集。

    优点,使用这种软件过程开发出的软件产品能满足用户的真实需求。开发过程基本上是线性顺序过程。

    增量模型,把软件产品作为一系列增量构件来设计,编码,集成和测试。每个构件由若干个相互协作的模块构成,并能完成相对独立的功能。

    优点,短时间内向用户提交完成部分工作的产品。逐步增加产品功能,减少全新软件带给用户的冲击。

    螺旋模型,实质是一种在快速原型模型的每个阶段之前增加了风险分析过程。

    优点,有利于软件的重用。有利于把软件质量作为软件开发的主要目标。减少过多测试和测试不足带来的风险。软件维护和软件开发没有本质区别。

    喷泉模型,软件开发过程各阶段之间的迭代或同一阶段内各个工作步骤之间的迭代,在面向对象范型中很常见。

    喷泉模型充分体现了面向对象软件开发过程迭代和平滑过渡的特性。

    • 软件设计过程中遵守哪些原理?

    模块化和模块独立。模块化就是把程序分成独立命名且可独立访问的模块。每个模块完成一个子功能,全部模块集合成一个整体,可以完成指定的功能,满足用户的需求。

    模块独立是指导模块划分和组织最重要的原理。开发具有独立功能且和其它模块没有过多相互作用的模块就能做到模块独立。

    抽象。现实中,一些事物,状态或过程总有相似之处,把这些共性集中概括,忽略差异,这就是抽象。一个复杂的软件系统由一些高级抽象概念理解和构造。这些高级概念又可以由低级的概念理解和构造。如此下去,直至最底层元素。每级抽象层次的一个概念将以某种方式对应于程序中。

    逐步求精,看做是一项把一个时期内必须解决的种种问题按优先级排序的技术。

    信息隐藏,设计软件模块时,使一个模块内包含的信息(过程和数据)对不需要这些信息的模块来说不可访问。

    局部化,把一些关系密切的软件元素物理地址彼此靠近,局部化有助于信息隐藏。

    • 什么来度量模块的独立性?

    内聚,一个模块内部各个元素彼此结合的紧密程度,是信息隐藏和局部化概念的自然扩展。设计软件时,应该做到高内聚。

    耦合,一个软件结构内不同模块之间的互联程度,耦合程度取决于模块间接口的复杂程度。在软件设计中应该尽可能的使用松耦合。

    • 一个好程序遵循的规则?

    程序内部有好的文档。数据说明易于理解。语句构造尽可能简单直观。输入输出遵循人机交互准则。效率满足用户需求。尽可能少的运行时间。尽可能少的占用存储器。

    • 什么是测试?

    软件测试的目标发现程序中的错误。

    软件测试的准则。所有的测试追溯到用户需求。在测试之前制定测试计划。从小测试到大测试。由独立的第三方从事测试工作。

    软件测试的方法。白盒测试,黑盒测试。

    软件测试的步骤。模块测试,子系统测试,系统测试,验收测试。平行测试。

    • Alpha测试和Beta测试?

    Alpha测试。用户在开发者场所测试,开发者对用户指导之下的测试。开发者负责记录错误和使用中的问题。

    Beta测试。在客户场所进行,Beta测试是开发者不能控制的真实场景中,用户记录测试中遇到的一系列问题,并把这些问题报告给开发者,开发者再做出修改,发布最终软件产品。

    • 什么是白盒测试?白盒测试方法?

    白盒测试是测试者完全知道程序的结构和处理算法。按照程序内部的逻辑,测试程序。检测程序中通路是否都按照特定要求正常工作。

    逻辑覆盖。有选择的执行程序中最具代表性的通路是替代穷尽测试唯一方法。

    语句覆盖。被测试的每个语句至少执行一次,只关心表达式的值,不关心取不同值的情况。逻辑覆盖标准弱。

    判定覆盖。每个语句执行一次,每个判定的每个分支都执行一次。逻辑覆盖程度稍强,但仍不是很强。

    条件覆盖。不仅每个语句执行一次,判定表达式中每个条件都取各种可能的结果。逻辑覆盖程度比判定覆盖强一点。

    判定/条件覆盖。使判定表达式中的每个条件都取到各种可能的值,每个判定表达式取到可能的结果。

    条件组合覆盖。每个判定表达式中条件的各种可能组合至少出现一次。

    点覆盖。点覆盖标准和语句覆盖标准相同。

    边覆盖。边覆盖标准和判定覆盖一致。

    路径覆盖。选取足够多的测试。每条执行路径可能执行一次。

    控制结构测试。

    基本路径测试。从该基本集合导出的测试用例保证程序中每条语句执行一次。

    条件测试。着重测试程序中的每个条件,不仅是检测程序条件中的错误,而是检测程序中的其它错误。

    循环测试。简单循环,串接循环,嵌套循环。

    • 黑盒测试?

    黑盒测试完全不考虑程序内部结构和处理过程。是对程序接口的测试。

    等价划分,把程序的输入类划分成若干个数据域,导出测试用例。

    边界值分析,处理边界情况时,程序最容易出现错误。

    错误推测,不同类型不同特点的程序有一些特殊的容易出错的情况。

    • 面向对象思想?

    对象。具有相同状态的一组操作集合,对象是属性值和操作的封装。

    类。对有相同属性和行为的一个或多个对象的描述。

    实例。以某个特定的类为样板建立的具体对象。

    方法。对象所执行的操作,也就是类中定义的服务。

    属性。类中定义的数据,对客观世界实体具有性质的抽象。

    封装。就是信息隐藏,通过封装对外界隐藏了对象的实现细节。

    继承。子类自动共享父类中定义的数据和方法。

    多态。根据该对象所属类动态选用类中定义的实现算法。

    重载。参数特征不同或被操作数类型不同时,实现函数的算法或运算符的语义不同。

    • 软件开发中一般产生哪些文档?

    可行性与计划研究阶段。可行性研究报告,说明软件项目在技术,经济和社会条件的可行性。项目开发计划,开发人员数,开发进度,预算,所需软硬件问题。

    需求分析阶段。软件需求说明书,用户和开发者对该软件初步认识。数据要求说明书,开发过程中处理数据和数据采集的描述。初步用户手册,用户初步了解软件各个功能。

    设计阶段。

    概要设计说明书,程序系统的基本流处理,组织结构,模块划分,功能分配,接口设计,运行设计,数据结构设计,处理错误设计。

    详细设计说明书,软件系统中各层次每一个模块设计的考虑。

    数据库设计说明书,对数据库中的标识,逻辑结构,物理结构做出具体的设计规定。

    测试计划,本计划编制是为了提供一个对软件的测试计划。

    实现阶段。用户手册,用户了解软件的各个功能;操作手册,向操作人员提供每一个模块的具体过程;模块开发卷宗,每完成一个模块就编写一份,把所有的模块开发卷宗汇集起来;测试计划。

    测试阶段。模块开发卷宗(终稿);测试分析报告;开发进度月报;项目开发总结报告;

    运行和维护阶段。

  • 相关阅读:
    每日一题
    每日一题
    每日一题
    每日一题
    每日一题
    Tensorflow学习(四)——递归神经网络RNN
    Tensorflow学习(三)——卷积神经网络应用于MNIST数据集分类
    Tenserflow学习(二)——MNIST数据集分类三层网络搭建+Dropout+tensorboard可视化
    Tenserflow学习(一)——MNIST数据集分类简单版本
    蓝桥杯第十届(2019)B组省赛1-9题练手源码
  • 原文地址:https://www.cnblogs.com/feng1014/p/12746293.html
Copyright © 2011-2022 走看看