Tutorialspoint 软件工程教程

来源：易百教程

软件工程教程™

软件工程是一种工程师部门使用定义良好的科学原理，方法和程序开发软件产品。软件工程的结果是一个高效，可靠的软件产品.

软件项目管理具有比软件工程过程更大的范围，因为它涉及到沟通，事先和事后的交付支持等.

本教程应该提供您基本了解软件产品，软件设计和开发过程中，软件项目管理和设计复杂度等。学完这种教程您应配备良好的理解软件工程概念.

读者

本教程旨在为读者追求教育在软件开发领域，软件测试追求者和所有热心读者.

先决条件

关于软件系统，软件开发过程和计算机基本原理的警觉性是有益的.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件工程教程

软件工程概述 - 软件工程教程™

让我们先了解一下软件工程的代表。该术语是由两个词语，软件与工程.

软件i不仅仅是一个程序代码. 程序是一个可执行的代码，它提供了一些计算的目的. 软件被认为是集合可执行的程序代码，相关库和文档的. 软件，当一个特定的要求，取得了被称为 软件产品.

工程 另一方面，工程是所有有关开发的产品，使用良好定义的，科学的原理和方法.

软件工程 软件工程是一门工程分支使用定义良好的科学原理，方法和程序开发软件产品.软件工程的结果是一个高效，可靠的软件产品.

定义

IEEE定义了软件工程:

(1) 一个系统的纪律，量化的开发，运行和维护软件的应用;这是工程软件的应用.

(2) 对方法的研究是在上述声明.

Fritz Bauer,德国计算机科学家，定义了软件工程的:

软件工程是合理的工程原理建立和使用，以获得经济上的软件，是可靠的和真实的机器有效地工作.

软件演化

运用软件工程的原理和方法开发软件产品的过程被称为 软件演化. 此处包含的软件的初始开发及维护和更新，直到所需的软件产品的开发，其满足预期需求.

进化开始从需求收集过程。经过开发人员创建的目的软件的原型，并显示给用户，以获得他们的反馈意见，在软件产品开发的早期阶段。用户提出的变化，在这几个连续的更新和维护不断变化太大。这个过程改变了原来的软件，直到所需的软件来完成.

甚至在用户已所需的软件在手，推进技术和不断变化的需求迫使软件产品相应地改变。重新从头开始创建软件和走一对单用的要求是不可行的。唯一可行的和经济的解决方案是，以更新现有的软件，以便它匹配的最新要求.

软件演化规律

Lehman 给了软件演化规律。他把软件分为三个不同的类别:

S型(静态型) - 这个软件根据定义的 规范和解决方案原理工作. 我们可以理解编码前两溶液和方法。 S型软件至少受到改变，因此这是最简单的了。例如，用于数学计算的计算器程序.

P-型 (实用型) - 这个软件有多个 程序. 它的定义是什么程序可以做.在这个软件中，规范可以被描述，但该溶液是不明显瞬间。例如，游戏软件.

E-型(嵌入型) - 该软件的工作原理密切按照真实世界 环境的要求. 这种软件具有演化程度高，在现实世界中的情况很多变化都是存在的，例如法律，税收等。例如，网上交易软件

E型软件演化

Lehman 给了八项法律为E型软件演化 -

不断变化 - E型软件系统必须继续适应现实世界的改变，否则它逐渐变得不太有用

日益复杂 - 作为E型软件系统的演化，它的复杂性增大的倾向，除非工作完成后，以维持或降低

熟悉的养护 - 必须了解有关该软件，它是如何开发的，所以它被以这种方式等。在任何成本开发，它必须被保留，以实现系统的变化

持续增长 - 为了使E型系统，旨在解决一些业务问题，实现改变其大小根据业务的生活方式的改变增长

降低质量 - 在质量上E型软件系统拒绝，除非严格管理和适应不断变化的经营环境

反馈系统 - E型软件系统构成的多环，多级反馈系统，并且必须被视为这样可以成功地修改或改进

自我调节 - E型系统的演化过程是自我调节与产品和工艺方法的分布是正常的

组织稳定性 - 在不断变化的E型系统的平均有效的全球活动率是不变的在产品的生命周期

软件范式

软件范例参考方法和步骤，在设计的软件，该软件被执行。有提出许多方法，并在今天的工作，但我们需要看到在软件工程这些范式立场。这些可以组合成各种类别，虽然每个这些被包含在彼此:

编程模式是软件设计模式的一个子集是进一步的软件开发模式的一个子集。

软件开发范式

这种模式被称为软件工程范例，所有有关软件开发工程的概念被应用。它包括各种研究和需求收集，这有助于软件产品来构建。 –

需求收集

设计软件

编程

软件设计模式

这一模式是软件开发的一部分，包括 –

设计

保养

编程

编程范式

这一模式是密切相关的软件开发编程方面。这包括 –

编码

测试

整合

软件工程的需求

软件工程的需要，因为较高的利率变化的用户需求及环境上的软件工作.

大型软件 - 这是比较容易建立一堵墙，而不是一所房子或建筑，同样，作为软件的规模变大的工程有步骤，给它一个科学的过程.

可扩展性 - 如果软件过程中没有建立在科学和工程的概念，它会更容易重新创建新的软件，而不是扩大现有的.

成本 - 硬件行业已经显示出其能力和庞大的制造具有低了下去，他的价格的计算机和电子硬件。但是，软件的成本仍然很高，如果合适的工艺不适合.

动态性 - 高成长和适应软件性质取决于在用户工作环境。如果软件的性质总是在变化，新的改进需要在现有的进行。这是软件工程起到了很好的作用.

质量管理 - 更好的软件开发过程提供更好质量的软件产品.

优秀的软件特性

一个软件产品可以判断通过其功能和多少用户友好。  这个软件必须满足以下功能:

操作

过渡

保养

一个精心设计和制作的软件预计将有以下几个特点:

操作

这告诉我们如何以及软件的操作工作。它可以在被测定：

财政预算案

可用性

效率

正确性

功能

可靠性

安全

安全性

过渡

这方面是重要的，当软件从一个平台转移到另一个:

可移植性

互操作性

可重用性

适应性

保养

这讲述一个软件以及如何有能力维护自己的每一个变化的环境中:

模块化

可维护性

灵活性

可扩展性

总之，软件工程是计算机科学的一个分支，它使用须出示有效的，持久的，可扩展的，定义良好的工程概念在预算和时间的软件产品.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件工程概述

软件开发生命周期 - 软件工程教程™

软件开发生命周期，SDLC 是的缩写形式。这是一个定义良好的结构化的软件工程预定的产品软件开发中的阶段序列.

SDLC活动

软件开发生命周期提供了一系列的步骤，为设计和开发一个软件产品有效地要遵循。SDLC 框架包括以下步骤:

通信

这是的第一步在哪里用户启动的请求所需的软件产品。他联系服务提供商，并试图通过谈判条款。他提交请求给服务提供商.

要求收集

这一步将进行软件开发团队。团队从问题域持有与各利益攸关者进行讨论，并试图带出尽可能多的信息可能对他们的要求。要求都是设想和隔离到用户需求、 系统需求和功能需求。下列是使用的一些做法 -

研究现有的或已过时的系统和软件,

对用户和开发人员，进行面谈,

指的数据库或

收集的问卷中回答了

可行性研究

需求收集后，球队又发表了软件过程的一个粗略的计划。在此步骤中该球队的分析，如果软件可以制成以满足用户的所有要求，并且如果存在的软件是没有更多的有用的任何可能性。据发现，如果该项目在财务上，实际上和技术上可行的组织以。有很多算法可用，这有助于开发人员得出结论：一个软件项目的可行性.

系统分析

在这一步的开发者决定他们计划的路线图，并尝试提出适合该项目的最好的软件模型。系统的分析包括了解软件产品的限制，学习系统相关的问题或变化将在现有的系统中之前进行，识别并解决项目对组织人事等团队项目的影响分析项目的范围，并计划进度和相应的资源。.

软件设计

下一步是关闭的要求，整个知识和分析的桌子上，设计出的软件产品。从用户和信息聚集在需求收集阶段的输入是该步骤的输入。该步骤的输出可以有两种设计形式;逻辑设计和物理设计。工程师产生的元数据和数据字典，逻辑图，数据流图并在某些情况下伪码.

编码

这个步骤也被称为编程阶段。软件设计的执行开始在写程序代码中的适当的编程语言和有效显影无差错的可执行程序的条款.

测试

估计说，整个软件开发过程中的50％应被测试。错误可能会毁了从关键级软件自身删除。软件测试是同时由开发商编码和全面的测试由测试专家在不同级别的代码，如模块测试，程序测试，产品测试，内部测试和测试产品在用户端进行完成的。早期发现的错误和他们的补救措施是关键可靠的软件.

整合

软件可能需要使用的库，数据库和其它程序(次)进行集成。 SDLC的这个阶段是参与的软件与外部世界的实体的结合.

实施

这意味着安装在用户机器上的软件。有时，软件需要在用户端安装后的配置。软件的可移植性和适应性和整合有关问题的测试在实施过程中得到解决.

操作和维护

此阶段确认了软件的操作中的更高的效率和更低的错误条件。如果需要，用户进行培训，或者资助对如何操作软件，以及如何保持软件业务的文档。该软件被维持及时通过根据发生在用户端的环境或技术的变化更新的代码。这个阶段可能会面临来自隐藏的bug和现实世界的挑战.

处置

随着时间的经过，该软件可以拒绝对性能前方。它可能会完全过时或可能需要强烈了层次。因此，迫切需要消除系统的主要部分就产生了。这个阶段包括数据归档和必要的软件组件，逼抢系统，规划配置的活动，并在终端系统的适当时间终止系统.

软件开发范式

软件开发模式可以帮助开发人员选择的策略来开发软件。软件开发范型有自己的一套工具，方法和程序，这是明确表示，并定义软件开发生命周期。软件开发模式或流程模型的一些定义如下:

瀑布模型

瀑布模型是最简单的软件开发范式的模型。它说，SDLC的各个阶段都会起作用了一个又一个线性的方式。即，当第一阶段完成后，然后仅在第二阶段将开始等.

该模型假设所有被执行并且发生完全按计划在前一阶段，没有必要考虑可能出现在下一阶段，过去的问题。如果有留在上一步骤中的一些问题，这种模式并不顺利。模型的有序性不允许我们回去撤消或重做我们的行动.

这种模式是最适合当开发人员已经设计并在过去开发的同类软件，并意识到它的所有域.

迭代模型

这种模式导致在迭代的软件开发过程。它突出的发展中循环的方式重复SDLC过程的每一个循环后的每一步的处理.

软件首次开发上非常小的规模，并且随后所有的步骤，这是考虑到。然后，对每一个后续迭代中，更多的功能和模块设计，编码，测试，并加入到该软件。每个周期产生的软件，它是完整的，并具有比前一个的多个特征和功能.

每次迭代后，管理团队可以做的工作的风险管理和为下一次迭代做准备。因为一个循环包括整个软件过程的小部分，这是更容易管理的发展过程，但是它消耗更多的资源.

螺旋模型

螺旋模型是两个，迭代模型和软件开发生命周期模型的一个组合。可以看出，如果你选择一个SDLC模型，并与循环过程(迭代模型)组合起来作为.

该模型考虑了风险，这往往就未注意到了大多数其他车型。模型开始确定目标和软件的限制，在一个迭代的起始位置。下一阶段是原型设计的软件。这包括风险分析。然后一个标准的SDLC模型来构建软件。在下一迭代的计划的第四阶段是制备.

V - 型号

瀑布模型的主要缺点是我们移动到只有前一个结束，也没有机会回去，如果事情被发现错误的后期阶段的下一个阶段。 V模型提供的软件在相反的方式各阶段的测试手段.

在每一个阶段，测试计划和测试用例被创建，以验证和根据该阶段的要求验证的产品。例如，在需求收集阶段，测试团队在准备对应于要求所有的测试用例。后来，当产品开发，并准备进行测试，这一阶段的测试用例验证针对其有效性的软件实现在此阶段的要求.

这使得双方核查和验证进去并行。该模型也被称为验证和确认的模式.

大爆炸模型

这个模型是最简单的模型中其形式。它需要很少的规划，大量的编程和大量的资金。该模型概念化围绕宇宙的大爆炸。科学家说，经过大爆炸很多星系，行星和恒星的演变，就像一个事件。同样，如果我们放在一起大量的编程和资金，你可以达到最佳的软件产品.

对于这个模型需要非常少量的规划。它不遵循任何程序，或者有时客户是不确定的需求和未来的需求。这样的输入要求是任意的.

这种模式不适合大型软件项目，但好的学习和试验.

对于深度阅读的SDLC和它的各种模型, 这里点击.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件开发生命周期

软件项目管理 - 软件工程教程™

软件项目管理中可以看出分成两部分:

软件创新

软件项目管理

项目是定义良好的任务，这是为了实现一个目标(例如，软件开发和交付)进行的一些操作的集合。一个项目可以被描如何述为:

每个项目都可以有一个独特而鲜明的目标。.

项目不是日常活动或日常的日常运作.

项目自带的开始时间和结束时间.

当它的目的也就达到了，因此它是一个组织的生命周期的临时阶段项目结束.

项目需要的时间，人力，财力，物力和知识银行方面充足的资源。.

软件项目

一个软件项目是从需求收集到的测试和维护软件开发的整个过程。在特定的时间段把它执行根据执行的方法以达到预期的软件产品.

软件项目管理的必要性

软件被认为是一种无形的产品。软件开发是一种在世界上所有的商业新流，有一个在建的软件产品非常少的经验。大多数软件产品是量身定制的，以满足客户的需求。最重要的是，底层的技术改变和前进如此频繁和快速地一种产品的经验可能不被施加到另一个。所有这样的业务和环境的制约带来的风险中的软件开发，因此有必要有效地管理软件项目.

上图显示了软件项目的三重约束。它是软件组织的重要组成部分，以提供高品质的产品，保持内客户的预算约束的成本和按照预定的交付项目。有几个因素，包括内部和外部，这可能会影响到这三重约束三角形。所有三个因素会严重影响其他两个.

因此，软件项目管理是必不可少把用户的需求以及预算和时间的限制.

软件项目经理

软件项目经理是谁的人承担执行软件项目的责任。软件项目经理是彻悟SDLC的各个阶段，该软件会通过的。项目经理可能不会直接参与生产的最终产品，但他控制和管理参与生产活动。.

项目经理密切监察发展过程中，准备和执行各种计划，安排必要的和足够的资源，保持所有团队成员之间，以解决成本，预算，资源，时间，质量和客户满意度问题上的沟通。.

让我们来看看一些责任，一个项目经理做 -

管理人员

担任项目负责人

病变与利益相关者

人力资源管理

建立报告层次结构等

项目管理

定义和设置项目范围

管理项目管理活动

监控进度和性能

风险分析，在每一个阶段

采取必要的步骤，以避免或来的问题了

作为项目的代言人

软件管理活动

软件项目管理包括了一系列活动，其中包括项目的规划，确定软件产品，在各个方面的估计成本，任务和事件的调度和资源管理的范围。项目管理活动包括:

项目规划

范围管理

估计项目

项目规划

软件项目计划的任务，这是生产软件的真正开始之前进行。这是那里的软件生产，但涉及与软件生产任何方向的连接没有具体的活动;相反，它是一组多个进程，这有利于软件的生产。项目规划可能包括以下内容:

范围管理

它定义项目的范围;这包括所有的活动过程中需要为了使可交付的软件产品实现。范围管理是必不可少的，因为它通过明确界定什么项目可以做，什么不可以做创建项目的界限。这使得项目以包含有限的，可量化的任务，它可以很容易地进行记录，进而避免了成本和时间溢出.

在项目范围管理，有必要 -

定义范围

确定其核查和控制

除以该项目转化为易于管理的各个小的部分

验证范围

通过将变更范围控制范围

项目估算

对于各项措施的有效管理准确的估计是必须的。有了正确的估计经理可以管理和更有效地控制项目。

项目估算可能涉及以下内容:

软件规模估算

软件大小可能无论是在KLOC(典千线)的条款或通过计算软件的功能点数量进行估算。代码行数取决于编码实践和功能点，根据用户或软件的要求而有所不同.

工作量估算

管理人员估计在人员的要求，须出示该软件工时方面的努力。对于工作量估算软件规模应该知道。这可以通过管理者的经验中得到，组织的历史数据或软件大小可以通过使用一些标准的公式转换成工作

估计时间

一旦尺寸和努力估计，需要对所生产的软件的时间可被估计。需要努力分隔成子类别按要求的规格和软件各组成部分的相互依存关系。软件任务被划分为更小的任务，活动或工作突破结构(WBS)的事件。在任务安排在一天到一天的基础上，或在日历月.

时间的总和，完成在几小时或几天内的所有任务所需的投资，以完成该项目的总时间.

成本估算

这是因为它依赖于比任何以往的多个元件可能被认为是最困难的。估算项目成本时，需要考虑 -

软件大小

软件质量

硬件

额外的软件或工具，许可证等

技术人员与特定任务的能力

旅游

通信

培训和支持

项目估算技术

我们讨论了涉及工程估算各种参数，例如大小，精力，时间和成本.

项目经理可以评估使用两种广泛认可的技术所列出的因素 –

分解技术

这种技术假设软件的各种组合物的产物.

主要有两种模式 -

代码估计行做代表 在软件产品的代码行数.

功能点 估计是做代表的软件产品功能点数量.

经验估计法

这种技术使用经验导出的公式来作出估计。这些公式是基于LOC或帧.

普特南模型

这种模式是由劳伦斯·普特南，它是基于诺顿的频率分布(瑞利曲线)进行。普特南模型映射的时间和规模的软件需要努力.

COCOMO

COCOMO代表建设性的成本模型，由巴里·W·贝姆发展。它把软件产品分为三类软件：有机，半独立式和嵌入式。.

项目调度

在项目工程调度指的是所有活动的路线图，将与指定的顺序，并在时隙分配给每项活动完成。项目经理往往倾向于定义各种任务和项目里程碑，并安排他们保持各方面的因素考虑。他们寻找的任务在于附表关键路径，这是和(因为任务相互依赖性)严格分配的时间内要完成的具体方式。任务安排，在于出关键路径都不太可能影响整个项目的所有计划.

调度项目，有必要 -

分解成更小的，易于管理的形式将项目任务

找出各种任务和它们相关联

需要为每个任务估计时间框架

除以时间投入到工作单位

分配的工作单位足够数量的每项任务

计算从开始项目所需的总时间来完成

资源管理

用于开发软件产品的所有元素都可以被假定为资源为该项目。这可能包括人力资源，生产工具和软件库.

该资源在组织作为资产池数量有限，并住宿提供。资源短缺阻碍项目的发展，它可以滞后的调度之后。分配额外资源增加，最终开发成本。因此，有必要估算，分配足够的资源用于该项目.

资源管理包括 -

创建一个项目组，并分配责任落实到每一个团队成员定义适当的组织工程

确定在一个特定的阶段，其可用性所需要的资源

管理资源通过生成的时候都需要和去分配他们的资源请求时，他们没有更多的需要

项目风险管理

风险管理涉及的所有活动有关的识别，分析和决策提供项目中的可预见和不可预见的风险。风险可能包括以下内容:

经验丰富的工作人员离开该项目，并在新员工的到来.

改变组织管理.

要求改变或曲解的要求.

低估所需的时间和资源.

技术的变化，环境的变化，企业的竞争.

风险管理过程

有参与的风险管理流程如下活动:

识别 - 使所有可能的风险，这可能会发生在项目注释.

群归类 - 每对项目可能产生的影响进行分类的已知风险分为高，中，低风险的强度.

管理 - 在不同阶段分析发生风险的概率。令计划，以避免或面临风险。尽量减少其副作用。.

监测 - 密切监测潜在的风险和他们的早期症状。同时监测，以减轻或避免它们采取措施的效果。.

项目执行与监控

在这个阶段中，在项目计划中描述的任务根据它们的时间表执行.

执行需要以监视检查按计划一切是否会。监测观察，检查风险的可能性和采取措施，以解决风险或报告的各项任务的状态.

这些措施包括 -

活动监控 - 定中的一些任务的所有活动，可以在一天到一天的基础上进行监控。当在一个任务中的所有活动完成后，它被认为是完整的.

状态报告- T该报告包含了一个星期给定的时间内完成，一般的活动和任务的状态。状态可以标记为已完成，或正在申请中的工作进展情况等.

里程碑清单 - 每个项目都被划分成主要任务是执行(里程碑)基于SDLC的阶段多个阶段。这一具有里程碑意义的清单准备每隔数周，并报告里程碑的地位.

项目沟通管理

有效的沟通起着一个项目的成功至关重要的作用。它填补了空白客户端和组织之间，团队成员以及其他利益相关者在项目中，如硬件供应商之一.

通信可以是口头或书面的。通信管理过程可具有以下步骤:

规划 - 这一步包括所有的利益相关者在项目的鉴定和它们之间的沟通模式。它还认为，如果任何额外的通讯设施是必需的 .

共享 - 在确定规划的各个方面，管理的重点是用正确的人在正确的时间分享的正确信息。这样可以使每一位参与该项目使用最新项目进展与现状.

反馈 - 项目经理使用各种措施和反馈机制，建立状态和性能报告。这种机制保证了各利益相关者的输入来的项目经理为他们的反馈.

关闭 - -在每一个重大活动结束，SDLC或项目本身的结束一个阶段的结束，封闭管理正式宣布，通过发送电子邮件，通过分发的文件或通过有效沟通等均值的硬拷贝来更新每个利益相关者 .

关闭后，球队移动到下一个阶段或项目.

配置管理

配置管理是跟踪和控制的要求，设计，功能和产品的开发方面的变化，软件的处理.

IEEE将其定义为“识别和定义在系统中的项目，控制这些项目的整个生命周期的变化，记录和报告的项目和变更请求的状态，并验证项目的完整性和正确性的过程”.

通常，一旦将SRS定稿有来自用户的变化的需求的机会较少。如果它们发生，变化只涉及较高的管理的事先批准，因为有成本和时间的可能性溢出.

基线

SDLC的阶段是在假设，如果它的基准，即基线测量，定义了一个阶段的完整性。 相位为基准，当有关它的一切活动都是成品，有据可查。如果它不是最后阶段，它的输出将在下一阶段立即使用。 配置管理是组织管理，其中一个相位基准后，负责发生任何变化(过程中，要求的技术，战略性等)的一门学科。 CM不断检查软件进行任何.

配置管理是组织管理，其中一个相位基准后，负责发生任何变化(过程中，要求的技术，战略性等)的一门学科。CM不断检查对软件做任何改变.

变更控制

变更控制的配置管理，从而确保软件系统进行的所有更改都一致并按照组织的规章制度的作用。.

在产品配置的变化经过以下步骤 -

识别 - 无论从内部或外部源的改变请求到达。当更改请求正式确定，这是适当的记录.

验证 - 有效的变更请求的检查及处理程序确认.

分析 - 变更请求的影响，进度，成本和所需的工作条件进行了分析。对系统的潜在变化的整体影响进行了分析.

控制 - 如果未来的变化既影响了太多的实体系统，或者是不可避免的，它是强制性的要高主管部门批准变更纳入系统之前。如果变化是值得纳入与否判定。如果不是的话，改变请求正式拒绝.

执行 - 如果前一阶段确定执行的变更请求，这个阶段采取适当的行动来执行的变化，做了彻底的修改，如果有必要的.

关闭要求 - 换作是正确实施验证，并与系统的其余部分合并。这在软件新成立的改变记录正常，请求正式关闭.

项目管理工具

风险和不确定性增加了多方面的相对于该项目的大小，即使当项目是根据设置的方法开发的。.

有可用的工具，进行有效的项目管理，帮助。一些描述 -

甘特图

甘特图设计是由亨利·甘特(1917)。它表示相对于时间周期的项目进度。它是一种水平条形图与代表定于项目活动的活动时间吧.

PERT图

PERT(计划评估和评审技术)图是描述项目的网络图的工具。它能够以图形方式表示项目的并行和连续的方式主要事件。事件，接二连三发生，显示后面的事件的相关性较之一。

事件显示为编号的节点。它们被标记的箭头描绘了在项目任务的顺序连接.

资源直方图

这是一个包含需要一段时间的项目活动(或相位)的资源栏或图表表示数字(通常是技术熟练的员工)的图形工具。资源直方图是一种有效的工具，为员工规划和协调。.

关键路径分析

这个工具是在承认相互依存的任务，在项目有用。这也有助于找出最短路径或关键路径成功完成该项目。如PERT图，每个事件被分配一个特定的时间框架。此工具显示事件承担事件的相关性可以进入下一只有前一个完成。.

事件按照其最早可能开始时间安排。开始和结束点之间的路径是不能被进一步减小关键路径和所有事件都需要在相同的顺序来执行.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件项目管理

软件要求 - 软件工程教程™

该软件要求的特征和目标系统的功能性描述。要求传送用户从软件产品的期望。这些要求可以明显或隐藏的，已知或未知的，预期的或意外但从客户的角度.

需求工程

这个过程收集的软件需求，从客户端，分析和记录他们被称为需求工程.

需求工程的目标是开发和维护复杂的和描述性的“系统需求规范”的文件.

需求工程过程

这是一个四步骤的过程，其中包括 –

可行性研究

理解客户需求

S软件需求规格说明

软件需求验证

让我们来看看这个过程 -

可行性研究

当客户接近组织获取开发所要的产物，它涉及了什么所有功能的软件必须执行与其中所有的功能由软件预期粗略的概念.

参照该信息，则分析做详尽的研究有关系统要求的和它的功能是有可能开发.

本可行性研究报告的重点是对本组织的目标。本研究分析是否该软件产品可实际上物化在实施项目的组织，成本约束的贡献方面，并按照价值观和组织目标。它探讨的项目和产品技术方面，如可用性，可维护性和生产效率和整合能力.

这一阶段的输出应该是一个可行性研究报告应包含充分的意见和建议，供管理有关项目是否应该进行.

需求收集

如果可行性报告是对正在进行的项目正，下一阶段的开始，从用户收集需求。分析师和工程师设有自己想要的软件，包括与客户和最终用户沟通，了解他们的想法是什么软件应该提供和.

软件需求规格

收集来自各利益相关方的要求后，系统分析员创建SRS文档.

SRS定义如何预定软件将与硬件，外部接口，操作的速度，系统的响应时间，在不同平台上，可维护性，恢复的速度软件之后崩溃，安全，质量，限制等的便携性相互作用.

系统分析员准备根据客户要求的技术文件。为了软件开发团队该文件很理解和有用的.

SRS应该拿出以下特点:

用户需求均以自然语言.

技术要求中表达的结构化语言，它用于在组织内部.

设计说明应写在伪代码.

格式 表格和 GUI 屏幕打印.

条件和数学符号进行的DFD等.

软件需求验证

经过规定的技术规格，本文档中提及的要求进行验证。用户可能会问非法的，不切实际的解决方案或专家可以解释的规定不正确。这将导致成本大幅增加，如果在萌芽状态不是扼杀。要求可核对以下条件 -

如果能切实执行

如果他们每个功能和软件领域，并有效作为

如果有任何含糊之处

I如果它们是完整的

如果他们可以证明

需求获取过程

需求获取过程可以用下面的图来描绘:

收集需求 - 开发人员与客户和最终用户的讨论和认识，从软件的期望.

组织要求 - 开发者优先考虑和安排顺序的重要性，紧迫性和便利性的要求.

谈判和讨论 - 如果要求不明确或存在各种利益相关者的要求有冲突，如果是这样，它是那么谈判和与利益相关方进行讨论。要求然后可以优先和合理妥协.

需求来自各个利益相关者。消除不确定性和冲突，他们的清晰度和准确性进行讨论。不切实际的要求是合理的妥协.

文档 - 所有正式和非正式的，功能性和非功能性需求都记录并供下一阶段的处理.

需求获取技术

需求获取的过程中，找出一个预期软件系统的要求与客户，最终用户，系统用户和其他人谁在软件系统开发的股权进行通信.

有多种方法来发现需求

面试

面试是强中收集的要求。组织可进行多种类型的面试，如:

结构化(关闭)的采访，其中的每一个信息收集是事先决定，他们遵循的讨论模式.

非结构(开放)的采访，其中的信息收集是不是事先决定，更加灵活，更加客观.

口述访谈.

书面采访.

这是桌子对面的两个人之间进行1对1面谈.

集团这些参与者群体之间进行面试。它们有助于发现任何缺失要求众多的人参与.

调查

组织可通过查询他们从即将到来的系统的期望和要求，进行各种利益相关者之间的调查.

问卷调查

与预先定义的一组客观题，并选择相应的文件移交给所有利益相关者的回答，这是收集和编译.

这种技术的缺点是，如果没有在问卷中提到的一些问题的选项，这个问题可能会被看管。.

任务分析

工程师和开发团队可能分析的量，新的系统是必需的操作。如果客户机已经有一些软件来执行某些操作时，它进行了研究，并提出了系统的要求被收集.

域分析

每个软件属于某个领域的范畴。专家人在域可以是有很大的帮助，分析一般和具体的要求.

头脑风暴

一个非正式辩论举行各种利益相关者之间以及他们所有的投入都记录作进一步的需求分析.

原型

原型是建立用户界面，而无需添加细节功能，为用户诠释意软件产品的功能。它有助于提供更好的主意的要求。如果没有在客户端结束于开发人员的参考安装的软件和客户端是不知道自己的要求，开发人员创建一个原型的基础上开始提要求。原型被示出为客户端和反馈悉。客户反馈作为输入的需求收集。.

观察

专家团队拜访客户的组织或工作场所。他们观察了现有的已安装系统的实际工作。他们观察工作流程，在客户端和如何执行的问题得到处理。团队本身得出了一些结论，形成从软件预期的要求的援助.

软件需求特点

采集软件需求是整个软件开发项目的基础。因此，他们必须清晰，正确和明确的.

一个完整的软件需求规格必须是:

清除

正确

一致

相干

可理解

可修改

可验证

优先

勿庸置疑

溯源

可靠的消息来源

软件要求

我们应该试着去了解可能出现的需求获取阶段有什么样的要求，什么样的要求，从软件系统的预期.

广义的软件需求应该被归类于两类:

功能需求

这是关系到软件功能方面都属于这一类.

它们定义内，并从软件系统的功能和功能性.

例子 -

搜索选项提供给用户各种发票进行查询.

用户应该可以邮寄任何报告给管理层.

用户可以被分成组和组可以给出不同的权利.

应当遵守业务规则和行政职能.

软件开发保持向下兼容性完好.

非功能性需求

要求，这是不相关的软件功能性方面，都属于这一类。他们的软件隐含的或预期的特征，这对用户做出的假设。.

非功能性需求，包括 -

安全性

记录

存储

配置

性能

成本

互操作性

灵活性

灾难恢复

可访问性

要求在逻辑上划分为

必须具备 : 软件不能说的操作没有他们.

应具备 : 增强软件的功能.

可以有 : 软件仍然可以正常使用这些功能的要求.

我的收藏夹 : 这些要求不映射到软件的任何目标.

在开发软件，'必须拥有'必须执行，“应该有”的争论与利益相关者和否定的问题，而“可能”和“愿望清单”，可以保持软件更新.

用户界面的要求

用户界面是任何软件或硬件或混合动力系统的重要组成部分。软件已被广泛接受，如果它是 -

易于操作

响应快速

有效地处理运行错误

提供简单而一致的用户界面

用户的认可，取决于用户如何使用该软件。用户界面是用户感知系统的唯一途径。表现良好的软件系统也必须具备有吸引力的，明确的，一贯的，反应灵敏的用户界面。否则软件系统的功能不能在方便的方式被使用。系统被认为是好的，如果它提供的手段来有效地使用它。用户界面要求下面简要提及 -

内容介绍

轻松导航

简单的界面

响应

一致的用户界面元素

反馈机制

默认设置

针对性布局

战略运用色彩和质感

提供帮助信息

用户为中心的方法

集团基于视图设置

软件系统分析员

系统分析师在IT组织是一个人，谁提出分析系统的需求，并确保要求构思和记录正确与正确。分析师的角色，SDLC的软件分析阶段开始。这是分析师的责任，以确保所开发的软件满足客户的要求.

系统分析员有以下职责:

分析和理解意软件的要求

了解项目将如何在组织目标作出贡献

识别需求来源

需求验证

制定和实施需求管理计划

业务，技术，工艺和产品的需求文档

协调与客户需求的优先级，并删除和模糊性

定型验收标准与客户和其他利益相关者

软件度量与对策

软件的措施，可以理解为量化和象征各种属性和软件方面的处理.

软件度量提供措施，软件过程和软件产品的各个方面.

软件措施是软件工程的基本要求。他们不仅有助于控制软件开发过程中，也有助于保持最终产品的优良品质.

据汤姆•德马科，A(软件工程师)，“你无法控制你无法衡量的东西。”通过他的说法，这是非常清楚的软件措施是多么的重要.

让我们来看看一些软件指标:

尺寸度量 - LOC(代码行)，主要是计算在数千交付源代码行数，记为KLOC的.

功能点计数是衡量由软件提供的功能。功能点计数定义的软件功能性方面的大小.

复杂性度量 - McCabe的圈复杂度量化上限的计划，这被认为是程序或模块，它的复杂性，独立路径数。它是通过使用控制流图表示在图论中的概念术语。.

质量指标 - 缺陷，它们的类型和原因，后果，严重程度的强度及其影响界定产品的质量.

在发展的过程和报告的客户端产品安装，或在客户端交付后的缺陷数量发现的缺陷数，定义产品的质量.

流程指标 - 在SDLC的各个阶段，方法和工具使用，公司的标准和发展的表现是软件过程的度量.

资源指标 - 精力，时间和使用的各种资源，代表度量资源的测量.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件要求

软件设计的基础知识 - 软件工程教程™

软件设计是一个过程转换用户需求变成一些合适的形式，这助于程序设计者软件编码与实现.

为评估用户的需求，软件需求规格说明文档被创建，可是需要更具体的术语为编码与实施软件. 这个过程的输出可直接用来为实施编程语言.

在设计软件生命周期软件设计是第一步把会转道从问题域到解决方案域. 它指定如何满足软件规格需求.

软件设计水平

软件设计产生三个层面的结果:

建筑设计 - 建筑设计是系统最高抽象的版本。它确定了软件与许多组件相互交互的系统。在这个层面上，设计师得到建议的解决方案领域的想法.

高层次的设计 - 高层次的设计打破了建筑设计的“单一实体的多个组件的概念融入子系统和模块的不太抽象视图表示彼此间的互动。高层次设计的重点是如何在系统连同其所有的零部件都可以在模块的形式实现。它识别每个子系统的模块化结构和它们之间的相互关系和相互作用.

详细设计 - 详细设计是前两个设计的子系统而且实施过程的一部分. 它是更详细关于软件模块和实施过程. 它描述了每个模块的逻辑结构并接口通信与其他的模块.

模块化

软件模块化是一种技术为软件系统分成多个离散和独立的模块，其预期能够执行任务的)独立地. 这些模块可以工作好像整个软件的基本结构. 设计者倾向于设计模块以这样的方式，它可以单独地执行或独立地编制.

模块化设计遵循的规则分治的解决问题的策略，这是因为软件模块化设计有许多其他好处.

模块化的利用:

较小的元件更易于维护

程序可以分开按照功能性方面

所需的抽象水平可以带来在程序

具有高内聚的组件可以再次重复使用

并发执行是可能的

从安全性方面的期望

并发

所有的软件的目的是按顺序执行的. 在任何特定时间的编码指令将被执行了一个又一个使用程序只有一个部分. 软件有多个模块但只有一个模块可以发现活跃在执行任何时间.

在软件设计过程中并发进程通过把软件分成多个独立的执行单元来实现, 像模块和并行执行. 换句话说,并发性提供能力软件同时执行的代码的多个部分.

程序员和设计师必须认识那些模块需要平行执行.

比如

在文字处理器拼写检查功能 是一种软件模块，它本身运行在旁边的文字处理器.

耦合和内聚

当一个软件程序模块化，其任务是根据某些特征划分为若干模块。正如我们知道模块的设置放在一起实现一些任务的说明。有许多方法来测量模块设计质量和模块之间的接口. 这些措施被称为耦合和内聚.

凝聚

凝聚是定义帧内可靠性的模块的程度的量度. 更大的凝聚力是程序设计更好.

有七种类型的凝聚力–

巧合凝聚力 - 这是意外的和随机的凝聚，这可能是破程序分成较小的模块，为了模块化的结果。 因为是计划外的，它可能会成为混乱的程序员，一般不接受的.

逻辑内聚 - 当把逻辑上划分的元素组合成一个模块，它被称为逻辑内聚.

颞凝聚力 - 当模块的元素组成，使得它们在差不多同一时刻处理的，它被称为颞凝聚力.

程序上的凝聚力 - 当模块的元素分组在一起，这依次以执行一个任务执行时，它被称为程序性凝聚.

交际凝聚力 - 当模块的元素分组在一起，这依次与工作于相同的数据(信息)执行时，它被称为交际凝聚力.

顺序内聚 - 当模块的元素进行分组，因为一个元件的输出作为输入到另一个等等，它被称为连续的凝聚力.

凝聚功能 - 它被认为是最高程度的凝聚力，并且被高度期望。在功能内聚模块的元素进行分组，因为它们都以一个良好定义的函数贡献。它也可以被重复使用.

耦合

耦合是定义的跨可靠性的程序模块之间的电平的测量。它告诉在什么水平的模块干扰和相互影响。如果耦合是低，该程序是更好.

有五个级别的耦合 -

内容耦合 - 当一个模块可以直接访问或修改，或参考其他模块的内容，它被称为含量水平耦合.

公共耦合 - 当多个模块具有读取和写入访问一些全局数据，它被称为通用或全局耦合.

控制耦合 - 两个模块被称为控制耦合，如果其中的一个判定其他模块的功能，或改变其执行流程.

邮票耦合 - 当多个模块共享公共数据结构，并在它的不同部分工作，它被称为时间戳耦合.

数据耦合 - 数据耦合是当两个模块通过传递数据(作为参数)来彼此交互。如果一个模块传递数据的结构参数，然后接收模块应该使用它的所有组件.

理想情况下，无耦合被认为是最好的.

设计验证

软件设计过程的输出是设计文档，伪代码，详细逻辑图，过程图和所有功能或非功能性要求的详细描述.

取决于上述所有输出，下一阶段是软件的实现

这是必要在进行到下一个阶段之前验证输出。 最好是在早期阶段检测任何错误，否则它可能无法检测到开始测试软件。 如果设计阶段的输出是正规表示法的形式，应该用于验证相关的工具，否则全面的设计审查，可用于验证和确认.

通过结构化的验证方法，评审可以检测到可能受俯瞰某些情况下造成的缺陷。一个好的设计评论是针对优秀的软件设计，精度和质量很重要.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件设计的基础知识

软件分析和设计工具 - 软件工程教程™

软件分析和设计包括所有的活动把它有助于要求规范转化为执行。需求规范指定从该软件的所有功能性和非功能性要求。这些要求来规范人类阅读和理解文档的形状，到计算机无关.

软件分析和设计是中间阶段把它有助于人类可读的要求转化为实际的代码.

让我们来看看使用的软件设计师很少的分析和设计工具：:

数据流图

数据流图是在信息系统中流动的数据的图形表示。它是能够描述输入数据流，输出的数据流和存储的数据。DFD中没有提到这么数据流动在系统里面.

有DFD和流程之间的显着差异。流程图描述了在流动的程序模块的控制。 DFD的描述中，系统流数据的各个层次。 DFD不含有任何控制或分支元件。

DFD的类型

数据流图是逻辑或物理.

逻辑DFD - 这种类型的DFD的集中在系统进程和流数据的系统中。例如，在银行软件系统，数据是如何的不同实体之间移动.

物理DFD - 这种类型的DFD的显示了如何在数据流系统中的实际实现。它是更具体的并且接近实现。.

DFD组件

DFD可以代表来源，目的地，存储和流部件采用了以下一组数据 -

实体 - 实体是源和信息数据的目的地。实体是由矩形与各自的名称所表示.

过程 - 活动和行动上的数据所用圆或圆边矩形表示.

数据存储 - 数据存储有两个变体两个变体 - 它可以被表示为与不存在两个小侧壁的矩形或作为开放双面矩形，只有一个侧面丢失。.

数据流 - 数据移动显示用尖锐的箭头。数据的移动，从箭头所指的基表示为它的朝向箭头作为目标的头部源.

DFD水平

0级 - 最高抽象层次的DFD被称为0级DFD，它描述了整个信息系统作为一个图表隐藏所有的底层细节。级别0的DFD也被称为上下文级别的DFD.

等级1 - 0级DFD被分解成更具体的，1级的DFD。级别1 DFD描绘了系统和流程的各种模块之间的数据的基本单元。 1级DFD也提到基本流程和信息来源.

2级 - 在这个层面上，DFD数据显示在第1级所提到的模块内的流动方式1.

更高级别的DFD可以转化成更具体的较低级别的DFD同的理解更深层次，除非说明书中所需要的电平来实现的.

结构图

结构图是从数据流图得出的图表。它代表了系统中比DFD更多细节。它打破了整个系统进入最低的功能模块，描述的功能和系统的各个模块的子功能以比DFD更大的细节.

结构图表示模块的层次结构。在每一层执行某一特定任务.

以下是在建结构图中使用的符号 -

模块 - 它代表的过程或子程序或任务。控制模块转移到多个子模块。库模块可重复使用和可调用任何模块

状态 - 它是由小钻石在模块的基础上表示。它描述了该控制模块可以选择任意的子例程的基础上的一些条件.

跳 - 箭头所示指向在模块内部，以描绘该控制装置将在上述子模块的中间跳.

循环 - 弯曲的箭头表示循环模块中。覆盖模块的循环重复执行所有的子模块.

数据流 - 并在后面加上空圆A的箭头表示数据流.

控制流 - 并在后面加上填充圆A的箭头代表控制流.

HIPO图

HIPO(分层输入过程输出)图是两个有组织的方法相结合来分析系统，并提供文档的方式。黑豹模型是由IBM公司在1970年一年的发展.

HIPO图表示模块中的软件系统的层次结构。分析员使用HIPO图，以获得对系统功能的高级视图。它分解以分层方式功能于子功能。它示出了由系统执行的功能.

HIPO图是很好的文档的目的。它们的图形表示更容易为设计者和管理者得到了系统结构的图案构思.

相反，IPO(输入过程输出)图，它描绘了在一个模块的控制和数据的流动，HIPO不提供关于数据流或控制流的任何信息.

示例

HIPO图图表用于层次化表示，软件程序的IPO结构设计以及相同的文档.

结构化英语

大多数程序员没有意识到软件的大画面，使他们只能依靠他们的经理告诉他们做什么。这是更高的软件管理的责任提供准确的信息给程序员开发准确又快速的代码.

其他形式的方法，它使用图形或图表，可以被不同的人，有时不同的解释.

因此，分析师和软件的设计者想出了诸如结构化英语的工具。这无非是需要什么代码，以及如何编写它的描述。结构化英语可以帮助程序员写出无错的代码.

其他形式的方法，它使用图形或图表，可能有时会被不同的人有不同的解释。在这里，无论是结构化英语和伪代码试图减轻这种认识差距.

结构化英语是它使用结构化编程范式简单的英语单词。这不是最终的代码，而是一种描述所需要的代码，以及如何编写它。以下是结构化编程的一些标记.

IF-THEN-ELSE,
DO-WHILE-UNTIL

分析师使用相同的变量和数据的名称，它存储在数据字典，使得它更容易编写和理解的代码.

例如

我们采取的网上购物环境的客户身份验证的相同的例子。此过程来验证客户可能被写在结构化英文为:

Enter Customer_Name
SEEK Customer_Name in Customer_Name_DB file
IF Customer_Name found THEN
   Call procedure USER_PASSWORD_AUTHENTICATE()
ELSE
   PRINT error message
   Call procedure NEW_CUSTOMER_REQUEST()
ENDIF

以结构化英文代码更像是每天的日常英语口语。它不能直接作为软件代码实现。结构化英语是独立于编程语言.

伪码

伪代码编写更接近的编程语言。它可以被认为是增加的编程语言，完整的评价和说明.

伪代码，避免了变量声明，但他们使用的是一些实际的编程语言的结构写的，如C，FORTRAN和Pascal等。.

伪代码中包含结构比英语更多的编程细节。它提供了执行任务，因为如果一台计算机正在执行的代码的方法.

示例

程序打印斐波那契数最多n个数字.

void function Fibonacci
Get value of n;
Set value of a to 1;
Set value of b to 1;
Initialize I to 0
for (i=0; i< n; i++)
{
   if a greater than b
   {
      Increase b by a;
      Print b;
   }
   else if b greater than a
   {
      increase a by b;
      print a;
   }
}

决策表

决策表代表的条件和相应的行动将要采取的解决这些问题，以结构化的表格格式.

它是一个强大的工具来调试并防止出错。它可以帮助组类似信息放入一个表，然后通过组合表它提供了简单，方便决策.

建立决策表

要建立决策表，开发人员必须遵循四个基本步骤:

确定要解决的所有可能的条件

确定所有确定的条件下操作

创造最大可能的规则

定义动作为每个规则

决策表应该由最终用户进行验证，并可以通过近来消除重复的规则和操作简化.

示例

让我们以一天到一天的问题，一个简单的例子与我们的互联网连接。我们首先确定同时启动互联网和各自可能的解决方案可能出现的所有问题.

我们列出列的条件下栏动作准动作在所有可能出现的问题.

| Conditions/Actions | Rules
Conditions | Shows Connected | N | N | N | N | Y | Y | Y | Y
Ping is Working | N | N | Y | Y | N | N | Y | Y
Opens Website | Y | N | Y | N | Y | N | Y | N
Actions | Check network cable | X |  |  |  |  |  |  |
Check internet router | X |  |  |  | X | X | X |
Restart Web Browser |  |  |  |  |  |  | X |
Contact Service provider |  | X | X | X | X | X | X |
Do no action |  |  |  |  |  |  |  |

表 : 决策表 – 在内部网络故障排除

实体 - 关系模型

实体关系模型是基于真实世界的实体和它们之间的关系的概念数据库模型的类型。我们可以映射真实世界的场景上的ER数据库模型。 ER模型创建一组实体及其属性，一组约束和关系当中.

ER模型最适用于数据库的概念设计。 ER模型可以如下表示:

实体 - 在ER模型中的实体是一个真实的世界之中，其中有 一些属性称为属性. 每个属性是由它的相应的一组值 ，称为域定义.

例如, 考虑一个学校的数据库。在这里，学生是一个实体。学生也有类似的名称，ID，年龄，阶级等.

关系 - 实体之间的逻辑关联被称为 关系. 关系映射以各种方式与实体。映射基数确定协会的两个实体之间的数.

映射基数:

一对一的

一对多

多对一

多对多

数据字典

数据字典是关于数据的信息的集中收集。它存储的含义和数据的起源，它与其他数据的关系，为使用等数据字典具有的所有名称的严格定义，以便于用户和软件设计的数据格式.

数据字典是经常引用为存储库的元数据(关于数据的数据)。它是随着软件程序的DFD(数据流图)模型中创建并预计要被更新时，DFD被改变或更新.

数据字典的规定

该数据是通过数据字典中引用而设计和实现的软件。数据字典中删除模棱两可的任何机会。它可以帮助程序员和设计师同步的保管工作，同时在程序中使用同一个对象的引用随处可见.

数据字典提供了完整的数据库系统中的一个位置的文档的一种方法。 DFD的验证是通过使用数据字典.

内容

数据字典中应包含有关以下内容的信息

数据流

数据结构

数据元素

数据存储

数据处理

数据流是为研究早期和描述所代表的代数形式通过的DFD来描述

= | Composed of
{} | Repetition
() | Optional
+ | And
[ / ] | Or

示例

Address = House No + (Street / Area) + City + State

Course ID = Course Number + Course Name + Course Level + Course Grades

数据元素

数据元素组成的名称和数据的描述和控制项目，内部或外部数据存储等具有以下细节:

主名称

二次名 (Alias)

用例(如何以及在何处使用)

内容描述(符号等)

补充资料(预设值，约束等)

数据存储

它存储从在那里的数据输入到系统中，存在从系统中取出的信息。数据存储可以包括 -

文件

内部软件.

外部软件，但在相同的机器上

外部的软件和系统，位于不同的系统

表

命名规则

索引属性

数据处理

有两种类型的数据处理:

逻辑: 由于用户看到它

物理: 随着软件看到它

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件分析和设计工具

软件设计策略 - 软件工程教程™

软件设计是一个过程概念化的软件需求转化为软件实现。软件设计以用户的需求和挑战，并试图寻找最佳的解决方案。软件被概念化寻找最佳的设计实现预期的解决方案.

有软件设计的多个变体。让我们简单地读那些:

结构化设计

结构化设计是一个概念化的问题到解决方案的几个组织良好的元素。它基本上是涉及该解决方案的设计。结构化设计的好处是把它提供更深入的了解这个问题正在得到解决。结构化的设计也使设计师更准确地集中在这一问题变得更为简单.

结构化的设计主要是基于“分而治之”的策略，其中一个问题分成几个小问题，每个小问题单独解决，直到整个问题就解决了.

通过解决方案模块解决了小块的问题。结构化的设计重点这些模块很好组织为了实现精确解.

在层次结构中排列这些模块。它与对方沟通。一个好的结构化的设计即始终遵循一些规则的多个模块之间的通信 -

凝聚力 - 所有的功能相关的元素进行分组.

耦合 - 不同模块之间的通信.

一个好的结构化设计具有高内聚低耦合的安排.

面向功能的设计

在面向功能的设计中，该系统由许多较小的子系统称为函数组成。这些函数是能够在系统中执行的重大任务。该系统被认为是顶视图的所有功能.

功能导向设计继承了一些性能的结构化的设计分而治之的方法使用.

这种设计机制将整个系统分成更小的函数，通过隐瞒的信息和他们的操作提供抽象的方法。这些功能模块可以共享信息相互之间通过信息的传递与全球范围内使用可用的信息.

函数的另一个特点是程序的当一个程序调用一个函数，该函数更改，有时是程序的不能接受由其他模块的状态。功能导向设计作品好在哪里并不重要的系统状态和程序/功能工作的输入，而不是一种状态.

设计过程

整个系统是看到如何数据流动系统中采用的数据流程图。

DFD 描述了如何更改数据和整个系统的功能状态.

整个系统从逻辑上被分成更小的单位称为函数在其运作的基础上在系统中.

每个函数然后介绍了在大.

面向对象设计

面向对象设计作品周围的实体和其特性而不是在软件系统中涉及到的功能。这种设计战略重点实体和其特点。软件解决方案的整个概念是围绕经营实体.

让我们看看面向对象设计的重要概念:

对象 - 解决方案设计中涉及的所有实体被都称为对象。例如，人、 银行、 公司和客户都视为对象。每个实体都有一些与之关联的属性并有一些方法要在属性上执行.

类 - 一类是对象的普遍描述。对象是类的实例。类定义了所有的属性，这些属性的对象可以具有与方法，它定义了对象的功能.在该解决方案的设计，属性被存储为变量和功能都通过的方法或程序来定义.

封装 - 在面向对象的设计，(数据变量) 的属性和方法 (数据操作)捆绑在一起被称为封装。封装不仅捆绑对象的重要信息，而且还会限制访问的数据和方法从外面的世界。这就被所谓的信息隐藏.

继承 - 面向对象的设计允许在层次结构的方式堆积越低类似类或子类可以导入、 执行和重新使用允许的变量和方法从他们眼前的超级类。面向对象设计的这种性质被称为继承。这使得它更容易来定义特定的类，从具体创建广义的类.

多态性 - 面向对象设计语言提供一种机制在哪里执行类似任务的但在参数中，会发生变化的方法可以分配相同的名称。这被称为多态性，它允许一个单一的界面执行任务的不同类型。取决于如何来调用该函数，获取执行各自部分的代码.

设计过程

软件设计过程可以看作一系列定义良好的步骤。虽然设计方法不同而有所不同 (面向功能或面向对象的但它可能有涉及的下列步骤:

解决方案的设计是从要求或以前使用的系统和/或系统序列图中创建的.

对象确定并分为几类代表属性特征的相似性.

类层次结构和它们之间的关系定义.

应用程序框架定义.

软件设计方法

这里有两个通用的方法进行软件的设计:

自上而下的设计

我们知道一个系统由多个子系统组成，它包含多个组件。此外，这些子系统和部件可能有其发病的子系统和组件和系统中创建的层次结构.

自顶向下设计需要整个软件系统作为一个实体，然后将其分解，以实现一个以上的子系统或部件的基础上的一些特征。每个子系统或部件然后当作一个系统，并进一步分解。这个过程不断运行，直到系统中的自顶向下的层次结构的最低级别的实现.

自顶向下的设计开始，系统的通用模型，并不断定义它的更具体的部分。当所有的组件组成，整个系统开始存在.

自上而下的设计更适合当软件解决方案需要从头开始设计和具体细节是未知的.

自底向上的设计

自下而上的设计模式从最具体的和基本的组成部分。它继续与使用基本或更低级别的组件组成成分较高水平。它不断创造更高层次的组件，直到所需的系统没有演变为一个单一的组成部分。与每个台阶，抽象的量增加.

自下而上的策略是更合适的系统需要从一些现有的系统，其中所述基本图元可以在新的系统中使用时创建.

无论是自上而下和自下而上的方法是不实际的个别。相反，两者很好地结合起来使用.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件设计策略

软件用户界面设计 - 软件工程教程™

用户接口是哪个用户才能使用该软件进行交互的前端应用程序视图。用户可以操作和控制软件，以及通过用户接口的装置的硬件。如今，用户界面被发现在几乎每一个地方，数字化技术的存在，直接从电脑，手机，汽车，音乐播放器，飞机，轮船等.

用户界面的软件部分和被设计，它预计将提供软件的用户洞察的方式。用户界面提供了基本平台的人机交互.

用户界面可以是图形化的，基于文本，音频，视频的基础，这取决于底层硬件和软件的组合。用户界面可以是硬件或软件或两者的组合.

该软件变得越来越流行，如果它的用户界面:

有吸引力

简单易用

在很短的时间响应

清晰明白

所有接口的屏幕一致

UI大致分为两类:

命令行界面

图形用户界面

命令行界面(CLI)

CLI已经与电脑互动的一个很好的工具，直到视频显示监视器应运而生。 CLI是许多技术的用户和程序员的首选。 CLI是最小的接口软件可以提供给它的用户.

CLI提供了一个命令提示符的地方，命令的用户类型和进给系统。用户需要记住命令和其使用的语法。此前的CLI没有设定有效地处理用户的错误.

命令是一个基于文本的参照指令集合，预期由系统来执行。还有像宏，这很容易让用户操作脚本的方法.

CLI使用较少的GUI计算机资源的数量.

CLI的元素

基于文本的命令行界面，可以有以下内容:

命令提示符 - 这是基于文本的通知的主要是显示在用户工作的情况下。它是由软件系统生成的.

光标 - 这是一个小横线或直线的高度的竖线，代表字符的位置，同时打字。光标处于闪烁状态最常出现。它移动用户写入或删除一些东西.

命令 - 命令是一个可执行的指令。它可具有一个或多个参数。输出上执行命令显示内嵌在屏幕上。当输出端产生的，命令提示被显示在另一行.

图形用户界面

图形用户界面为用户提供了图形化的手段来与系统进行交互。 GUI可以是硬件和软件两者的组合。使用图形用户界面，用户解释软件.

通常情况下，界面更加消耗资源比命令行的。随着先进技术的程序员和设计师创造更多的效率，精度和速度工作，复杂的图形用户界面的设计.

GUI元素

GUI提供了一套组件与软件或硬件进行交互.

每个图形组件提供了一种方法与系统一起工作。一个GUI系统具有以下的元素，如:

窗口 - 在应用程序中内容显示的区域。在一个Window中的内容可以被显示在图标或列表形式，如果window代表文件结构。很容易用于用户文件系统中的导航中的探索窗。Window可以被最小化，调整大小或最大化，以屏幕的大小。它们可以在屏幕上的任何地方移动。一个window可以包含相同的应用程序的另一个window，称为子window.

标签 - 如果一个应用程序允许执行其自身的多个实例，它们出现在屏幕上作为单独的窗户。.选项卡式文档界面又拿出了在同一个窗口中打开多个文档 该接口也有助于在观看偏好设定面板中的应用程序。所有现代的网络浏览器使用此功能

菜单 - 菜单是标准命令的数组，组合在一起并放置在显眼的地方(通常是顶部)的应用程序窗口内。该菜单可被编程为显示或隐藏鼠标点击.

图标 - 图标是小画面较相关的应用程序。当这些图标单击或双击时，应用程序窗口被打开。图标显示应用程序和安装在小图片的形式在系统上的程序.

光标 - 交互设备，如鼠标，触摸板，数字笔在GUI中被表示为光标。在屏幕光标从硬件几乎实时的说明。游标还被评为GUI系统指针。它们被用来选择菜单，窗口和其他应用的功能。 .

特定的应用程序的GUI组件

一个应用程序的图形用户界面包含一个列出的GUI元素的一个或多个:

应用程序窗口 - 大多数应用程序窗口使用由操作系统提供的结构，但很多使用他们自己的客户创建的窗口包含应用程序的内容.

对话盒 - 这是一个包含信息的用户并要求采取一些行动的一个子窗口。例如：应用程序生成的对话得到确认，从用户删除的文件.

文本框 - 提供一个区域，用于用户输入和输入文本型数据.

按钮 - 它们模仿现实生活中的按钮和用于输入提交给软件.

单选按钮 - 用于选择显示可用的选项。只有一个可以在所有提供的来选择.

复选框 - 功能类似于列表框。当选择了一个选项，该框被标记为选中。通过复选框，表示多个选项可以选择。.

列表框 - 提供可供选择的产品清单。多个项目可以选择.

其他令人印象深刻的GUI组件包括:

滑块

组合框

数据网

下拉列表

用户界面设计活动

有许多用于设计用户界面执行的活动。 GUI设计和实现的过程是一样的SDLC。任何模型可以用于GUI实现瀑布之中，迭代或螺旋模型.

用于GUI设计和开发的模型应该满足这些GUI的具体步骤.

图形用户界面要求收集 - 设计师可能喜欢有图形用户界面的所有功能性和非功能性需求列表。这可以从用户和他们现有的软件解决方案.

用户分析 - 设计师研究谁是将要使用的软件GUI。目标受众为重要的设计细节根据用户的知识和能力水平变化。如果用户是技术知识，先进的和复杂的图形用户界面可以合并。对于初级用户，更多的信息包含关于如何到的软件.

任务分析 - 设计人员必须分析哪些工作是由软件解决方案完成的。在这里，在图形用户界面，它并没有多么一定会完成。任务可以采取分层方式的一个主要任务，并进一步划分为更小的子任务来表示。任务提供GUI中显示的目标。当中子任务信息流确定的GUI内容中的软件流程.

图形用户界面设计与实现 - 设计有有关要求，任务和用户环境的信息后，设计图形用户界面，并实现成代码，并嵌入在后台工作或虚拟软件的图形用户界面。它是那么自我测试的开发人员。.

测试 - GUI测试可以以各种方式来完成。组织可以在内部检查，用户和beta版发布的直接参与是其中的几个。测试可能包括易用性，兼容性，用户接受度等.

GUI实现工具

有使用它的设计师可以创建一个鼠标点击整个界面的几种工具可用。一些工具可以被嵌入到软件环境(IDE).

GUI实现工具提供了强大的GUI控件数组。对于软件定制，设计人员可以相应地更改代码.

有根据其不同的用途和不同平台的图形用户界面工具段.

示例

移动图形用户界面，电脑界面，触摸屏图形用户界面等。这里是一些工具，来方便构建图形用户界面的列表:

流体

AppInventor(安卓)

LucidChart

为本研究

Visual Studio中

用户界面黄金法则

以下规则被提及是在GUI设计，通过施奈德曼和PLAISANT在他们的著作中描述的黄金法则(设计用户界面).

力求一致性 - 应要求在类似情况下的行动一致序列。相同的术语，应在提示，菜单和帮助屏幕来使用。一致的命令应该在整个使用.

启用频繁的用户使用近路 - 用户的愿望，以减少交互的数量增加与使用的频率。缩写功能键，隐藏的命令和宏的设施都非常有帮助的专家用户.

提供信息反馈 - 对于每一个操作动作，应该有一些系统反馈。对于频繁而细微的动作，响应必须是适度的，而对于不经常和重大行动，响应必须更加可观.

设计对话产生闭合 - 动作序列应该被组织成一个开头，中间和结尾群体。在完成一组动作的信息反馈给运营商成就的满足感，一种如释重负的感觉，降应急预案，并选择从他们的头脑中的信号，这表明未来的路很清楚，准备下组的操作.

提供简单的错误处理 - 尽可能多地设计系统，这样用户就不会做出严重的错误。如果产生错误，系统应能检测到它，并且提供了简单的，易于理解的机制来处理错误.

允许容易逆转的动作 - 此功能减轻焦虑，因为用户知道错误可以被撤销。动作容易逆转鼓励不熟悉的选项探索。可逆性的单元可以是单个操作，数据输入，或者这些动作的一个完整的组。.

控制，支持内部轨迹 - 有经验的运营商强烈要求这个意义上，他们是负责系统和系统响应他们的行动。设计系统，使用户的操作，而不是反应的引发剂.

减少短期记忆负荷 - 人类信息处理的短期记忆的限制要求显示器必须保持简单，多页面显示进行合并，窗口运动频率降低，并有足够的训练时间分配的代码，助记符和动作序列。.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件用户界面设计

软件设计的复杂性 - 软件工程教程™

这个词的复杂性代表的事件或事情其中有多个相互关联的环节和高度复杂的结构状态。在软件编程，软件的设计是很重要的，相互连接的元件的数量是巨大的，这变得太难理解一次.

软件设计的复杂性是难以评估没有使用复杂性度量和措施。让我们看看三个重要软件复杂性的措施.

Halstead's 的复杂性措施

1977年，莫里斯·霍华德先生介绍霍尔斯特德指标来衡量软件的复杂性。霍尔斯特德的衡量标准取决于计划的实际执行情况和措施是直接从源代码中的运算符和操作数计算在静态方式。 它允许评估测试时间，词汇量，大小，难度，错误和对C/ C + + / Java源代码.

根据Halstead,“计算机程序的实现一个算法被认为是一个集合的令牌可以分为运营商或操作数”。Halstead指标认为程序是运营商及其相关操作数的顺序.

他定义了各种指标检查模块的复杂性.

参数 | 意义
n1 | 独特的营办商数目
n2 | N独特的操作数数
N1 | 运营商的总发生数
N2 | 操作数的总发生数

当我们选择源文件以查看其复杂性细节指标查看器,以下结果是度量报告:

度量 | 意义 | 数学表示
n | 词汇表 | n1 + n2
N | 大小 | N1 + N2
V | 成交量 | 长* LOG2词汇
D | 难度 | (n1/2) * (N1/n2)
E | 努力 | 难度*体积
B | 错误 | 成交量 / 3000
T | 测试时间 | 时间=努力/ S,S = 18秒.

圈复杂度的措施

每个程序包含语句为了执行一些任务和其他决策语句. 这些决策构造改变程序的流程.

如果我们比较两个相同大小的计算机程序，所述一个具有更多的决策陈述是更复杂的.

McCabe, 1976年提出的圈复杂度指标量化一个给定的软件的复杂性. 这是图形驱动程序模型,该模型是基于决策结构如if - else,延伸,repeat-until,switch-case和goto语句.

过程流程控制图:

除以所述计算机程序分成较小程序.

创建节点代表每一个节点.

连接节点,如下所示:

如果可以控制从块分支i到J座

画一条弧

从出口节点进入节点

画一条弧.

计算程序模块的圈复杂度,我们使用公式 -

V(G) = e – n + 2

在哪里
e是边总数
n是节点的总数目

上述模块的圈复杂度是

e = 10
n = 8
圈复杂度 = 10 - 8 + 2
                      = 4

根据 P. Jorgensen, 一个模块的圈复杂度不应超过10.

功能点

这是广泛用于测量软件的大小。功能点集中于系统提供的功能。特性和功能的系统被用来测量软件的复杂性.

功能点计算的五个参数，命名为外部输入，外部输出，逻辑内部文件，外部接口文件和外部咨询。考虑到软件的复杂性各参数进一步划分为简单，平均或复杂.

让我们来看看功能点的参数:

外部输出

每一个独特的输入系统从外面被认为是外部输入。独特性的输入测量,因为没有两个输入应该有相同的格式。这些输入可以是数据或控制参数.

简单 - 如果输入计数低,影响更少的内部文件

复杂 - 如果输入计数很高,影响更多的内部文件

平均 - 之间的简单和复杂.

外部输出

由系统提供的所有输出类型计数此类别中。输出被认为是独特的，如果其输出格式和/或处理是独特.

简单 - 如果输出计数低

复杂 - 如果输出值高

平均 - 之间简单和复杂.

逻辑内部文件

每一个软件系统维护维持其功能的信息和正常内部文件。这些文件保存了系统的逻辑数据。这个逻辑数据可能包含的功能数据和控制数据.

简单 - 如果记录类型的数量是低

复杂 - 如果记录类型的数量都很高

平均 - 之间简单和复杂.

外部接口文件

软件系统可能需要共享文件与一些外部软件或它可能需要将文件进行处理或作为参数传递给函数。所有这些文件都算作外部接口文件.

简单 - 如果共享文件的记录类型数量很低

复杂 - 如果共享文件的记录类型数量很高

平均 - 在简单和复杂之间.

外部咨询

调查是输入和输出的组合,在用户发送询问一些数据作为输入和输出的系统响应用户的查询处理。一个查询的复杂性超过外部输入、外部输出。查询是独特的,如果其输入和输出方面独特的格式和数据.

简单 - 如果查询的处理和低收益率少量的输出数据

复杂 - 如果查询的处理和低收益率少量的输出数据

平均 - 之间简单和复杂.

每个这些参数的系统给出weightage根据他们的阶级和复杂性。下面的表格提到了weightage给每个参数:

参数 | 简单 | 平均 | 复杂
输入 | 3 | 4 | 6
输出 | 4 | 5 | 7
查询 | 3 | 4 | 6
文件 | 7 | 10 | 15
接口 | 5 | 7 | 10

上表收益率原始功能点。这些功能点是根据环境调整的复杂性。系统使用14个不同的特征:

数据通信

分布式处理

绩效目标

操作配置负载

成交率

在线数据录入,

终端用户效率

在线更新

复杂处理逻辑

可重用性

安装方便

操作简便

多个网站

渴望促进变化

这些特征因素评级从0到5,如下提到的:

无影响

偶然的

温和的

平均

显著

重要的

所有收视率，然后概括为N。N的取值范围为0〜70(14种特性X 5种评级的)。它被用来计算复杂性的调整因子(CAF)使用下面的公式:

CAF = 0.65 + 0.01N

然后,

交付功能点 (FP)= CAF x Raw FP

这种FP然后可以在各种度量被使用，如:

成本 = $ / FP

质量 = Errors / FP

生产力 = FP / person-month

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件设计的复杂性

软件实施 - 软件工程教程™

在这一章我们学习关于计算机编程方，文档和软件实现中的挑战.

结构化编程

在程序编码的过程中，代码行不断增加，因此该软件增加大小。渐渐地，它变得几乎不可能记住程序的流程。如果忘记了如何软件和它的底层程序，文件，程序构造它，然后变得非常难以共享，调试和修改程序。该解决方案是结构化编程. 它允许开发人员使用的子程序，而不是在代码中使用简单的跳转，从而带来清晰的代码中，提高其效率结构化编程循环还可以帮助程序员减少编码时间和组织代码号令.

结构化程序设计告诉如何程序被编码的。结构化程序设计采用三个主要概念:

自顶向下的分析 - 软件还总是要进行一些理性的工作。这种合理的工作被称为软件中用语问题。因此，我们知道如何解决的问题是非常重要的。下自顶向下的分析，该问题被分解成小块，其中每一个具有一定的意义。每个问题都单独解决，步骤明确说明如何解决该问题。

模块化编程 - 编程时，代码被分解成较小的组的指令。这些基团被称为模块，子程序或子例程。基于自顶向下的分析理解模块化编程。它不鼓励使用“转到”在节目中，这往往使程序流程的非可追溯报表跳跃。跳跃是禁止的，模块化的形式鼓励在结构化编程.

结构化编码 -  在自顶向下分析参考时，结构编码的子划分的模块插入的代码还小的单位在其执行的顺序。结构化程序使用控制结构，其控制程序的流程，而结构化的编码使用控制结构来组织中定义的模式的指示.

函数式编程

函数式编程的编程语言把它使用数学函数的概念，方法。在数学中的函数应该总是产生在收到相同的参数相同的结果。在程序语言中，程序的流程通过程序运行时，例如，程序的控制被转移到被调用的过程。而控制流从一个程序到另一个传输，程序改变其状态。.

在程序编程，有可能为一个程序在执行中的相同参数的时间产生不同的结果，因为程序本身可以在不同的状态。这是一个属性，以及一个缺点的过程编程的，其中，所述程序执行的顺序或定时变得很重要.

函数式编程提供了计算的数学函数，其产生的程序状态的结果，不论手段。这使得能够预测程序的行为.

函数式编程使用以下概念:

第一级和高阶功能 - 这些功能有能力接受另一个函数作为参数或返回他们的其他功能的效果.

纯函数 - 这些函数不包括破坏性的更新，即，它们不影响任何I / O或存储器，如果它们不使用时，它们可以很容易地在不妨碍该程序的其余部分移除.

递归 - 递归是一种函数就是函数调用自身，重复的程序代码中，除非一些预先定义的条件相匹配的编程技术。递归是建立在函数式编程循环的方式.

严格的评价 - 它是评价传递给一个函数作为参数的表达式的方法。函数式编程有两种评价方法，严格的(渴望)还是非严格(偷懒)。严格评价调用该函数之前，请务必计算表达式。非严格的评估不计算表达式，除非它是必要的.

λ-演算 - 大多数函数式编程语言使用λ演算它们的类型系统。 λ-表达式被所发生的评估他们处决.

Common Lisp，斯卡拉，哈斯克尔，二郎和F＃是函数式编程语言的一些例子.

编程风格

编程风格设定的编码规则之后所有的程序员写的代码。当多个程序员在同一个软件项目工作，它经常需要与写的其他一些开发者的程序代码工作。这变得乏味，或有时是不可能的，如果所有的开发人员不遵守一些标准的编程风格编写程序.

适当的编程风格，包括使用函数和变量名相关的预期任务，用精心布置的缩进，注释代码阅读器和代码的整体表现带来的便利。这使得程序代码阅读和理解所有，这又使得求解更容易调试和错误。此外，适当的编码风格有助于缓解文档和升级.

编码准则

编码风格的变化与组织，操作系统和语言.

在一个组织的编码规则如下编码元件可以被定义:

命名约定 - 这部分定义如何命名函数，变量，常量和全局变量.

缩进 - 这是留在一行的开头的空间，通常2-8空白或单一标签.

空白 - 它通常被删去，在一行的末尾.

操作符 - 定义写数学，分配和逻辑运算符的规则。例如，赋值运算符'='应具有空间之前和之后，如在“X= 2”。.

控制结构 - 写IF-THEN-ELSE，区分开关的规则，同时，直到和控制流语句仅在嵌套的方式。.

线路长度和包装 - 定义多少个字应该是有一条线，大多是一行是80个字符长。包装定义了一条线要包好，如果太长.

功能 - 此功能定义应如何申报和调用，使用和不使用参数.

变量 - 这提到了不同的数据类型的变量是如何声明和定义.

注释 - 这提到了不同的数据类型的变量是如何声明和定义.

软件文档

软件文档是软件过程的一个重要组成部分。良好的书面文件提供一个很好的工具和信息资源库的方式要了解软件的过程。软件文档还提供了有关如何使用该产品的信息.

维护良好的文件应包括下列文件

需求文档 - 本文档可以作为软件设计，开发和测试团队，以履行各自的任务关键工具。本文件包含的意软件的所有功能，非功能性和行为的描述.

S本文件的来源可以事先存储的数据有关的软件，已经运行的软件在客户端结束的时候，客户的访谈，问卷调查和研究。通常它被存储在与高端软件管理团队的电子表格或字处理文档的形式.

本文档可以作为基础进行开发的软件和验证和确认阶段使用。大多数的测试案例是直接从需求文档建立.

软件设计文档 - 这些单证包括所有必要的信息，这些信息来构建软件的需要. 它包括：:(a) 一)高级软件架构, (b) 软件的设计细节, (c)数据流图, (d) 数据库设计.

这些文件的存储库工作的开发者实现软件。尽管这些文件没有提供有关如何编写程序的任何细节，他们给所需要的编码和执行所有必要的信息.

技术文件 - 这些文件已经由开发商和实际编码器维持。这些文件中，作为一个整体，表示有关代码的信息。在写代码的程序员也不在话下代码，是谁写的，在那里将它需要客观，它做什么，它是如何做，该代码使用什么其他的资源，等等.

技术文档增加了工作的相同的代码不同程序员之间的了解。它增强了代码的复用能力。这使得调试方便，可追溯.

有可用的各种自动化的工具和一些自带的编程语言本身。比如java的自带的JavaDoc工具生成代码的技术文档.

用户文档 - 本文档是不同的，从所有上述解释。所有以前的文件已经以提供约软件及其发展过程的信息。但是，用户文档介绍了软件产品应该如何工作，以及应该如何使用，以获得理想的效果.

这些单证包括，软件安装程序，操作指南，用户指南，卸载方法和特殊的引用，以获得更多象牌的信息等.

软件实施的挑战

有在实施软件所面临的开发团队的一些挑战。其中一些被提及如下:

代码重用 - 当代语言的编程接口是非常复杂的，配备巨大的库函数。静止，以使成本最终产物向下，组织管理倾向于重新使用的代码，这是早为一些其它软件创建的。有兼容性检查面临的程序员，并决定多少代码再利用巨大的问题.

版本管理 - 新的软件发给客户的每一次，开发商必须保持版本和配置相关的文件。这个文档需要高度精确，可利用时间.

目标 - 主机 - 软件程序，它正在开发的组织，需要被设计为主机上的客户端。但有时，不可能设计出在目标计算机上的可用的软件.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件实施

软件测试 - 软件工程教程™

软件测试是软件需求和用户系统规范的评估过程。测试是在软件开发生命周期，或在程序代码模块级进行。软件测试包括确认和验证。.

软件验证

验证过程，以验证该软件是在满足该使用者的要求。它是在SDLC的末端。如果软件相匹配的要求，我们可以考虑在验证完成.

验证确保正在开发的产品是按用户的要求.

验证回答了这个问题 - “我们是发展中国家，它试图从该软件的所有用户需求的产品?".

验证注重用户的需求.

软件验证

验证是确认软件是否满足业务需求的过程中，与显影附着于适当的规范和方法.

验证确保正在开发的产品是根据设计规范.

验证答案将以下问题“我们坚定地遵守所有的设计规范开发这个产品吗?".

考证专心的设计和系统的规格.

测试的目标是 -

错误 - 这些是由开发商作出实际的编码错误。此外，存在的软件和期望的输出输出的差，被认为是一个错误.

故障 - 当误差存在故障。故障时，也被称为一个bug，就是这可能会导致系统失败的错误造成的。.

故障 - 故障被说成是系统无法执行所需的任务。当故障存在于系统发生故障.

手动与自动测试

试验既可以手动进行或使用自动化测试工具:

手动 - 不考虑自动化测试工具帮助进行这一测试。软件测试人员编写测试案例的不同部分和代码的水平，执行测试，并将结果报告给经理。 .

手动测试耗费时间和资源。测试人员需要确认右边的测试用例是否被使用。测试的主要部分包括手动测试.

自动 - 这是测试用的自动化测试工具可帮助做了测试程序。与手工测试的局限性可以使用自动化测试工具来克服.

测试需要检查一个网页可以在Internet Explorer中打开。这可以通过手动测试很容易做到。但要检查网络服务器可以利用100万用户的负荷，这是很不可能的手动测试。

T有软件和硬件工具，它可以帮助测试人员在进行负载测试，压力测试，回归测试。.

测试方法

测试可以根据两种方法进行

功能测试

执行测试

当功能被没有考虑在担心它被称为黑箱测试的实际执行情况进行测试。另一边是被称为这里不仅功能测试白盒测试，但它的实现方式进行了分析。.

详尽的测试是一个完美的测试最需要的方法。中的输入和输出值的范围内的每一个可能的值进行测试。因此不可能在真实世界的场景来测试每一个值，如果值的范围是大.

黑盒测试

它进行到程序的测试功能。它也被称为“行为”的测试。在这种情况下，测试器，具有一组输入值和相应的期望的结果。于提供输入，如果与所期望的结果的输出相匹配时，该程序被测试'好'，和有问题的，否则.

在这个测试方法中，代码的设计和结构是不知道的测试器和测试工程师和最终用户进行该测试的软件.

黑盒测试技术:

等价类 - 输入被分成类似的课程。如果一个类中的一个元件通过测试，则假定所有的类被传递。

边界值 - 输入被分为较高和较低的最终值。如果这些值通过测试，则假定在之间的所有值可以通过.

因果图 - 在以前这两种方法中，只有一次一个输入值进行测试。原因(输入) - 效果(输出)，其中输入值的组合，有系统地进行试验测试技术.

成对测试 - 软件的行为取决于多个参数。在配对试验中，多个参数进行测试成对他们的不同的值.

基于状态的测试 - 系统变化对提供的输入状态。这些系统是基于它们的状态和输入测试.

白盒测试

据进行的测试程序和其执行中，为了提高编码效率或结构。它也被称为“结构”的测试.

在这个测试方法中，代码的设计和结构是已知的测试仪。代码的程序员对代码进行这项测试。.

下面是一些白盒测试方法:

控制流测试 - 控制流测试的目的建立测试用例覆盖所有的语句和分支条件。分支条件测试均为真与假，让所有的语句可以被覆盖.

数据流测试 - 这个测试技术重点覆盖包括在程序中所有的数据变量。据测试，其中变量声明和定义，并在那里他们被使用或更改.

水平测试

测试本身可以在各级SDLC的限定。测试过程中运行的并行软件开发。跳之前就下阶段，阶段测试，确认和验证。

测试分别做只是为了确保有留在软件没有任何隐藏的缺陷或问题。软件在各个层次上进行测试 -

单元测试

虽然编码，程序员执行程序的设备上的一些测试，以了解它是否是免费的错误。在白箱测试方法进行测试。单元测试可以帮助开发人员决定该计划的各个单位工作按要求，没有错误。

集成测试

即使软件的单位做工精细独特，有必要来看看单位，如果整合到一起也将工作没有错误。例如，参数传递和数据更新等.

系统测试

该软件被编译为产物，然后将其测试为一个整体。这可以通过使用下面的一个试验或多个来实现:

功能测试 - 测试对要求该软件的所有功能.

性能测试 - 这个测试证明了该软件的效率有多高的。它测试的有效性和所采取的软件的平均时间做所需的任务。性能测试是通过负载测试和压力测试的方法，其中软件在高的用户和数据加载各种环境条件下把完成的.

安全和便携性 - 这些测试完成后，软件是为了工作，在各种平台和人数进行访问.

验收测试

当软件准备交给客户就必须经过测试，它是用户交互和响应测试的最后阶段。这是重要的，因为即使软件相匹配的所有用户的要求，如果用户不喜欢显示的方式或作品，它可能会被拒绝.

Alpha测试 - 显影剂的团队本身通过使用系统仿佛它正在被在工作环境中使用时进行alpha测试。他们试图找出用户会如何反应到软件的一些操作，以及如何系统应以输入的响应。.

Beta测试 - 在软件内部测试，它被移交给用户使用它自己的生产环境下，仅用于测试目的。这不是尚未交付的产品。开发商预计，用户在这个阶段会带来分钟的问题，这被跳过出席.

回归测试

每当一个软件产品的新代码，特征或功能更新时，它被彻底的测试，以检测是否有附加代码的任何负面影响。这被称为回归测试。.

测试文档

试文件制备的不同阶段 -

测试前

测试开始，测试案例的产生。还需要参考下面的文档 –

SRS文档 - 功能需求文档

测试策略文件 - 这说明在多大程度上测试应该释放该产品前发生.

测试策略文件 - 这提到的测试团队，责任矩阵和测试经理和测试工程师的权利/责任的细节方面.

追踪矩阵文件 - 这是SDLC的文件，这是关系到需求收集过程。作为新的要求来，它们被添加到这个矩阵。这些矩阵帮助测试人员了解需求的来源。它们可以被追踪前进和后退。.

虽然正在测试中

可能需要以下文件，而测试已启动，正在做:

测试案例文件 - 该文件包含了需要进行的测试列表。它包括单元测试计划，集成测试计划，系统测试计划和验收测试计划.

测试说明 - 本文档是所有测试用例，并执行这些程序的详细说明.

测试案例报告 - 本文件包含测试用例报告测试结果.

测试日志 - 本文件包含的测试日志中的每一个测试用例报告.

经过测试

下列文件可测试后生成:

测试总结 - 此测试总结是所有的测试报告和日志的集体分析。它总结并得出结论，如果软件是随时可以启动。该软件在发布的版本控制系统，如果是准备发射.

测试与质量控制，质量保证和审计

我们要明白，软件测试是软件质量保证，软件质量控制和审计软件不同.

软件质量保证 - 这是软件开发过程的监控手段，通过它可以保证所有的措施都采取了按组织的标准。这种监视是为了确保适当的软件开发方法随访.

软件质量控制 - 这是一个系统维护软件产品的质量。它可能包括软件产品的功能性和非功能性方面，这对提高组织的好感。该系统可确保客户获得​​优质的产品为他们的要求，认证为“适合使用”的产品.

软件审核 - 这是由该组织制定的软件审查程序。一组审计人员，独立的开发团队探讨了软件的流程，程序，要求和SDLC的其他方面。软件审计的目的是检查软件和它的发展过程中，既符合标准，规则及规例.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件测试

软件维护概述 - 软件工程教程™

现在软件维护是SDLC的一部分。它代表了所有的修改和软件产品的交付之后更新完成。有原因，为什么修饰是必需的，其中一些在下面进行简要提到数:

市场条件 - 政策，这改变了的时候，如税收和新引入的约束一样，如何保持记账，可能会触发需要进行修改.

客户要求 - 客户可能会要求在软件的新特性或功能.

主机修改 - 如果任何目标主机中的硬件和/或平台(如操作系统)的，需要修改软件，以保持适应性。.

组织的变化 - 如果有任何业务层面的变化，在客户端，比如减少组织的实力，收购另一家公司，机构进军新的业务，需要在原有的软件可能会出现修改.

维修的类型

在软件生命周期，维护类型可以根据其性质不同而不同。它可能只是一个例行的维护任务，一些用户发现了一些bug或者基于维护规模或性质，它可能是一个大的事件本身。以下是一些类型基于其特性的维护:

纠正性维护 - 这包括修改和升级换代，以便纠正或解决问题，这是任一发现用户或由用户错误的报告得出的结论进行.

自适应维护 - 这包括修改和升级应用，以保持软件产品最多，更新和调整，以技术和业务环境的不断变化的世界.

完成式维护 - 这包括修改和升级换代，以便保持该软件在长时间周期可用做。它包括的新功能，为完善软件，提高其可靠性和性能的新的用户需求.

预防性维护 - 这包括修改和级换代，以防止该软件的未来的问题。它的目的是出席的问题，这是不能在这一刻显著但在将来可能会导致严重的问题.

维护成本

报告表明，维护成本高。在估算软件维护的一项研究发现，维修费用更是高达67％，整个软件流程周期的成本.

上的平均，软件维护的成本是所有SDLC阶段的50％以上。有各种因素，其中触发维护成本变高，如:

影响维护成本的现实世界中的因素

任何软件的标准的年龄被认为是长达10至15年。.

旧的软件，这是为了工作，慢的机器较少的内存和存储容量不能保持自己对现代新的硬件来增强软件的挑战.

随着技术的进步，它变得代价高昂的维护旧软件.

大多数维修的工程师都是新手，使用试错法来纠正问题.

通常情况下，取得了很容易伤害到软件的原始结构，使其难以在任何后续的更改.

化往往留下无证可能导致未来更多的冲突.

软件月底因素维修费用

软件程序的结构

编程语言

依赖于外部环境

员工的可靠性和可用性

维护活动

IEEE规定的顺序维护过程活动的框架。它可以在迭代的方式被使用，并且可以被扩展以便定制产品和过程可以包括在内

这些活动去手牵手，每个以下阶段:

I识别与跟踪 - 它涉及到有关鉴定的修改或维修要求的活动。它是由用户或系统产生的本身可能通过日志或错误信息报告。这里，维护类型分类也.

分析方法 - 修改了其对系统的影响，包括安全和安全的影响进行分析。如果可能的影响是严重的，可替代的解决方案是找。一组需要修改，然后兑现成要求的规格。修改/维护的成本进行了分析和估算得出.

设计 - 新模块，这需要被替换或修改时，被设计针对在前一阶段设置的要求规格。测试用例的验证和确认创建.

实施 - 新的模块编码​​在设计阶段创建结构化设计的帮助。每个程序员应该做单元测试.

系统测试 - 集成测试新创建的模块中完成的。集成测试也进行了新的模块和系统之间。最后，系统进行测试作为一个整体，下面的回归测试程序.

验收测试 - 内部测试系统后，它是接受用户的帮助下进行测试。如果在这种状态下，用户的投诉，他们正在解决或一些问题指出，在接下来的迭代来解决.

交付 - 在验收测试，系统部署各地组织无论是小更新包或全新安装的系统。最后的测试发生在客户端软件到底交付后.

训练设施，如果需要提供，除了用户手册的硬拷贝.

维护管理 - 配置管理是系统维护的重要组成部分。它是辅助版本控制工具，版本控制，半版或补丁管理.

软件再工程

当我们需要更新的软件，它保持目前的市场，而不会影响其功能，它被称为软件再工程。这是一个全面的过程，软件设计变更和程序重新写入.

传统的软件跟不上调整与市场上现有的最新技术。作为硬件已经过时，软件更新成为一个头疼的问题。即使软件衰老随着时间的推移，它的功能没有.

例如，最初的Unix是用汇编语言开发的。当C语言应运而生，Unix的重新设计在C中，由于在汇编语言中的工作是困难的.

除此之外，有时程序员会注意到的软件几个部分需要比其他人更维护和它们还需要重新设计。.

重新设计流程

决定要重新设计 - 它是整个软件或其中的一部分?

执行反向工程 - 以获得现有的软件规范.

重组计划 - 如果需要的话。例如，改变功能为导向的课程为面向对象的程序.

重新构造数据 - 据需要.

应用正向工程 - 的概念，以获得重新设计的软件.

还有在软件再工程中几个重要术语

逆向工程

这是一个过程，深入分析，了解现有的系统来实现系统的规范。这个过程可以看作是反向的SDLC模式，即我们试图通过分析较低的抽象层次，以获得更高的抽象水平.

现有系统是以前设计的实现。设计师然后做逆向工程通过查看代码，并试图让设计并尝试总结规范.

重组计划

它是一个过程，以重新构造和重新构造的现有软件。这是所有关于重新编排的源代码，无论是在相同的编程语言，或者从一个编程语言不同的一个。重组可以有代码，重组和数据重组或两者兼而有之.

重新构筑不会影响软件的功能，但提高可靠性和可维护性。程序组件，从而导致错误发生非常频繁是可以改变的，或者更新了重组.

软件的过时硬件平台的可靠性可通过重组被删除.

正向工程

正向工程是从中通过逆向工程的方式被放倒在手的规格得到所希望的软件的过程。它假定有一些软件工程在过去已经完成.

正向工程是一样的，只有一点区别的软件工程过程 - 它反向工程之后进行总.

组件的可重用性

组件是软件的程序代码，它执行系统中的一个独立的任务的一部分。它可以是一个小的模块或子系统本身.

示例

登录程序在网络上使用可被视为组件，在软件的打印系统可以被看作是该软件的一个组件.

组件具有功能性高内聚和耦合率较低，也就是说，它们相互独立，可以不依赖于其他模块执行任务.

在面向对象的，被设计的目的是非常特定的关注，并有较少的机会在其它一些软件的使用.

在模块化编程，这些模块被编码以执行其可以跨越其他软件程序号被用于特定的任务.

有一个全新的垂直，这是基于再利用的软件组件，以及被称为基于组件的软件工程(CBSE).

再利用可以在各个层次进行

应用层 - 如果整个应用程序被用作新的软件子系统.

组件级 - 当应用程序的子系统被使用.

模块级 - 当被重新使用的功能模块.

软件组件提供的接口，其可以用于建立不同的组件之间的通信.

再利用过程

可以采用两种方法：一是通过保持相同的要求和调整部件或组件保持不变，修改的要求.

需求规格 - 功能性和非功能性需求被指定，软件产品必须符合其中，与现有的系统中，用户输入或两者的帮助.

设计 - 这也是一种标准的SDLC过程步骤，其中要求在软件中用语的定义。系统的基本架构作为一个整体，其子系统中创建的.

指定组件 - 通过对软件的设计，设计师隔离整个系统分成较小的组件或子系统。一个完整的软件设计，变成了一组组巨大的协同工作的集合.

搜索合适的组件 - 软件构件库是由设计师称为搜索匹配元件，功能的基础上，拟软件要求上.

集成组件 - 所有匹配组件打包在一起，塑造他们作为完整的软件.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件维护概述

软件CASE工具 - 软件工程教程™

CASE完整 C形式是 计算机辅助软 E件工程.使用各种自动化软件工具可以做软件项目的开发和维护工作.

CASE 工具

CASE工具设置的软件应用程序。这使用为自动的SDLC活动。 CASE工具所使用的软件项目经理，分析师和工程师开发的软件系统.

有许多CASE工具做软件开发生命周期的各个阶段，如工具，设计工具，项目管理工具，数据库管理工具，文档工具分析.

为了得到所需的结果，CASE工具加速项目工作的发展并帮助推动软件开发的下一个阶段.

CASE工具组件

于特定的SDLC阶段，CASE工具可以分为以下:

中央存储库 - CASE工具需要一个中央存储库，它可以作为通用的，集成的，一致的信息来源。中央存储库是存放在哪里的产品规格，需求文档，相关的报告和图表，对管理的其他有用的信息都存储在一个中心位置。中央储存库也可以作为数据字典.

大写工具 - 大写工具在SDLC的规划，分析和设计阶段使用.

小写工具 - 小写工具的实施，测试和维护使用.

集成的CASE工具 - 集成的CASE工具在SDLC的各个阶段的帮助，从需求收集到的测试和文档.

CASE工具可以组合在一起，如果他们有类似的功能，流程活动，并得到整合其他工具的能力.

CASE工具的适用范围

CASE工具的范围，进入整个软件开发生命周期.

CASE工具类型

现在，我们简要地通过不同的CASE工具

图工具

这些工具被用来表示在图形形式的系统组件，数据和其中的各种软件组件的控制流程和体系结构。例如，流程图制作工具，用于创建流程图.

流程建模工具

过程建模方法来创建软件过程模型，该模型被用来开发软件。流程建模工具，帮助管理者选择的过程模型或修改它，因为每个软件产品的需求。例如，EPF作曲.

项目管理工具

这些工具用于项目计划，成本和工作量估计，项目调度和资源规划。经理人必须严格遵守项目执行与软件项目管理的每提及一步。项目管理工具可以帮助存储和整个组织共享项目信息的实时性. 例如, Creative Pro Office, Trac Project, Basecamp.

文档工具

在软件项目文档启动软件过程之前，整个云SDLC的各个阶段和项目建成后.

文档生成工具为技术用户和最终用户的文档。技术的用户大多是开发团队的内部专业人士谁是指系统手册，参考手册，培训手册，安装手册等最终用户文档描述的功能和操作方法系统，例如用户手册。例如, Doxygen, DrExplain, Adobe RoboHelp for documentation.

分析工具

这些工具可帮助收集需求，自动检查是否有任何不一致，不准确的图表，数据冗余或错误遗漏。例如, Accept 360, Accompa, CaseComplete for requirement analysis, Visible Analyst for total analysis.

设计工具

这些工具可帮助软件设计人员设计的软件，其可以进一步在使用细化技术更小的模块被分解的块结构。这些工具提供了详细的每个模块和互连模块之间的. 如，动画软件设计

配置管理工具

软件的实例下一个版本发布。配置管理工具处理 –

版本和修订管理

基线配置管理

变更控制管理

CASE工具在这有助于通过自动跟踪，版本管理和发布管理。例如, Fossil, Git, Accu REV.

变更控制工具

这些工具被认为是配置管理工具的一部分。他们处理的软件进行更改后，其基准是固定的，或者当软件首次发布。 CASE工具自动更改跟踪，文件管理，代码管理等。这也有助于在执行组织的政策变化.

编程工具

这些工具包括编程环境，如IDE(集成开发环境)，内置的模块库和仿真工具。这些工具提供全面的援助建设的软件产品，其中包括功能仿真和测试. 例如, Cscope to search code in C, Eclipse.

原型开发工具

软件原型仿真版的预定软件产品。原型提供初始的外观和产品的手感和模拟实际产品的几个方面.

原型CASE工具基本上都与图形库。他们可以创建独立于硬件的用户界面设计。这些工具可以帮助我们根据现有的信息来建立快速原型。此外，他们提供的仿真软件原型。例如.Serenaprototype composer, Mockup Builder.

Web开发工具

这些工具可协助设计网页的形式一样，文本，脚本，图形等所有盟国的元素。网络工具还提供了对正在开发的实时预览，以及如何将它看起来完成后。例如, Fontello, Adobe Edge Inspect, Foundation 3, Brackets.

质量保证工具

质量保证的软件组织监控工程过程和方法，通过开发软件产品，以确保质量的一致性按组织的标准。 QA工具，包括配置和变更控制工具和软件测试工具。例如, SoapTest, AppsWatch, JMeter.

维护工具

软件的维护包括软件产品的修改就交付了。自动记录和错误报告技术，误差自动售票生成和根本原因分析的几个CASE工具，可帮助软件组织在SDLC的维护阶段。例如, Bugzilla for defect tracking, HP Quality Center.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件CASE工具

软件工程面试问题 - 软件工程教程™

这些 软件工程面试问题 的目的是为了让你熟悉的问题的性质在你可能会遇到 S在软件工程程面试时.按我的经验，良好的面试者很难规划提出任何特别的问题，在你的采访，一般的问题开始与主题的一些基本概念，后来他们继续基础上，进一步讨论和回答什么.:

Q.什么是计算机软件?

A. 计算机软件是一个完整的方案，其中包括软件程序，如何使用该软件的文档和用户手册.

Q.您能不能区分计算机软件和计算机程序?

A. 计算机程序是一段程序代码，执行一个定义良好的任务，其中软件包括程序代码并它的文档和用户指南.

Q.什么是软件工程?

A. 软件工程与软件系统开发相关工程分支.

Q.如你知道编程，什么是需要学习软件工程的概念?

A. 一个人谁知道如何建立一个墙不是善于建设一个完整的家。同样，谁可以写程序的人可能没有对软件工程的其他概念的知识。软件工程的概念，引导程序员如何评估最终用户的需求，实际的编码开始之前设计的算法，创建了编码，测试代码和文档的程序.

Q.什么是软件过程和软件开发生命周期(SDLC)?

A. 软件开发生命周期，或软件过程是软件在开发过程中，即要求收集，系统分析，设计，编码，测试，维护和文档的顺序以下各阶段的系统化发展.

Q.有几个 SDLC模型?

A. 有几个可用的SDLC的模型，如瀑布模型，迭代模型，螺旋模型，V模型和大爆炸模型等等。.

Q.什么是SDLC的各个阶段?

A. SDLC的一般阶段是：理解客户需求，系统分析与设计，编码，测试和实施。该阶段取决于我们选择的软件开发模型时.

Q.那一种SDLC模式是最好的?

A. SDLC模式采用按开发过程中的需求。它很可能软件到软件，以确保该模型是合适的.

我们可以选择最佳的SDLC模式，如果以下答案感到满意 -

是否SDLC适合选择技术实现的软件 ?

是否SDLC适合客户的需求和优先事项 ?

是否SDLC模型适合于该软件的规模和复杂性 ?

是否SDLC模式适用于项目和工程，我们做的类型 ?

是否SDLC适当的地域共同定位或分散开发 ?

Q.什么是软件项目管理?

A. 软件项目管理是管理就像从事软件开发时间，成本和质量管理的所有活动的过程.

Q.谁是软件项目经理吗?

A. 软件项目经理承诺进行软件项目的责任.

Q.什么是软件项目经理角色与责任?

A. 软件项目经理是从事与软件管理的活动。他负责的项目规划，监测进展情况，利益相关者之间的沟通，风险管理和资源开发的顺利实施，并在时间，成本和质量的约束上交付项目.

Q.什么是软件的范围?

A. 软件的范围是一个明确的界限把它包含了所有完成开发和提供软件产品的活动.

该软件适用范围明确规定的所有功能和文物交付的软件的一部分。范围确定什么样的产品会做，什么也不会做，什么终端产品将包含哪些它将不包含.

Q.什么是项目估算?

A. 它是一个过程来估计，以计算在努力，时间和资源方面的开发成本的软件产品的各个方面。这种估计可以从过去的经验中得到，通过咨询专家或通过使用预先定义的公式.

Q.我们如何才能得到软件产品的规模?

A. 软件产品的大小可以用以下两种方法之一进行计算 -

计数的交付的代码行

计数交付功能点

Q.什么是功能点?

A. 作用点是由该软件产品提供的各种功能。它被认为是测量软件大小的单元.

Q.什么是软件项目估算技术可用?

A. 有许多估计技术.最广泛使用的是 -

分解技术(计数代码行和功能点)

实证方法(普特南和COCOMO)

Q什么是底线?

A. 基线是测量，定义了一个阶段的完整性。经过与特定阶段相关联的所有活动都完成，这个阶段就完成，并作为下一阶段的基准.

Q.什么是软件配置管理?

A. 软件配置管理是跟踪和控制的要求，设计，功能和产品的开发方面的变化，软件的处理。.

Q.什么是变更控制?

A. 变更控制的配置管理从而确保软件系统进行的所有更改都一致并按照组织的规章制度的作用。.

Q.你如何衡量项目的执行?

A. 们可以测量执行项目活动监视，状态报告和里程碑清单的方式.

Q.说一些项目管理工具.

A. T有作为每个软件项目和组织政策要求的各种项目管理工具。它们包括甘特图，PERT图，资源直方图，关键路径分析，状态报告，里程碑清单等.

Q.什么是软件需求?

A. 软件的要求，提出软件系统的功能描述。要求被假定为目标的系统，其功能和特征的描述。要求传送用户从系统的期望.

Q.什么是可行性研究?

A. 这是评估如何实践和有益的软件项目开发将是一个组织的一项措施。该软件分析仪进行了深入的研究，以了解该项目的经济，技术和操作可行性。.

经济 - 资源运输成本的培训，更多的实用程序和工具以及成本和项目的收益整体估算成本.

技术 - 是否有可能开发这个系统？评估机(S)和操作系统(S)上的软件将执行，现有的开发人员的知识和技能，培训，实用程序或工具对项目的适用性。 .

操作 - 可以顺利完成的每个项目的需求变化组织调整？就是这个问题值得解决 ?

Q.你怎么能收集需求?

A. 要求从用户通过访谈，调查，任务分析，集思广益，域分析，原型收集，学习软件现有的可用版本，并观察.

Q.什么是SRS?

A. SRS系统或软件需求规格说明是需求收集过程时产生的文件。它也可以被看作炼要求和记录它们的处理.

Q.什么是功能性的要求?

A. 功能要求是预计从提出软件产品的用户功能特性和规格.

Q.什么是非功能性需求?

A. 非功能性需求是隐含的，涉及到安全性，性能，外观和感觉的用户界面，互操作性，成本等。.

Q.什么是软件方面的措施?

A. 件的措施，可以理解为量化和象征的各种属性以及软件方面的过程.

Q.什么是软件度量?

A. 软件度量提供措施，软件过程和软件产品的各个方面。它们被分成 –

要求指标：长度要求，完整

产品指标：代码行数，面向对象度量，设计和测试指标

工艺指标：评估和跟踪预算，进度，人力资源

Q.什么是模块化?

A. 模块化是一种技术，将一个软件系统划分为多个离散的模块，预计进行的工作(S)独立。.

Q.什么是并发性以及它是如何在软件中实现的?

A. 并发是事件或动作的倾向同时发生。在软件中，当两个或多个过程同时执行的，它们被称为并发进程.

示例

当您启动打印命令，打印机开始打印，你可以打开一个新的应用程序.

并发，被分裂成软件即执行进程和线程的多个独立单位，并执行它们并行执行.

Q.什么是凝聚力?

A. 凝聚力是定义模块的元件之间的内部可靠性的程度的量度.

Q.什么是偶合?

A. 耦合是定义一个程序模块之间的相互可靠性水平的措施.

Q.提到一些软件分析和设计工具?

A. 这可能是：DFD的(数据流图)，结构图，结构化英语，数据字典，黑豹(分层输入过程输出)图，ER(实体关系)图和决策表。

Q.什么是0级的DFD?

A. 最高抽象层次的DFD被称为0级DFD也称为上下文级别的DFD，它描绘了整个信息系统的一个图表隐藏所有的底层细节.

Q.什么是结构化的英语和伪码的区别?

A. 结构化英语是用编程语言的关键字来写一个程序模块的结构，然而，伪码更接近的编程语言，并使用母语的英语单词或句子来写的代码部分英语为母语.

Q.什么是数据字典?

A. 数据字典被称为元数据。这意味着，它是关于数据的数据仓库。数据字典用于组织在系统中使用诸如对象和文件以及它们的命名约定的名称和它们的引用。.

Q.什么是结构化设计?

A. 结构化设计是一个概念化的问题到解决方案的几个组织良好的元素。这是值得关注与解决方案的设计和基于“分而治之”的策略.

Q.：什么是功能导向，面向对象的设计之间的区别?

A. 功能化的设计是由被称为功能许多较小的子系统。每个功能能够在系统中执行显著任务。面向对象的设计工作解决现实世界中的对象(实体)，它们的类(类)和对象(函数)的操作方法。 .

Q.定义自顶向下和自底向上的设计模型.

A. ：自顶向下的模型开始系统的广义视图，将其分解为更为具体的人，而自下而上的模式开始于第一次最具体的和基本的组成部分，并保持组成成分得到的抽象水平.

Q.什么是 Halstead’s 的复杂度基础?

A. Halstead’s 的复杂度取决于上的程序的实际执行，并认为该计划作为衡量的基础上使用令牌。.

Q.提到的公式来计算圈程序的复杂性?

A. 圈复杂度采用图论的公式: V(G) = e – n + 2

Q.什么是函数式编程?

A. 功能编程的编程语言，它使用数学函数的概念风格。它提供了计算的数学函数，其产生的程序的状态，结果，不论装置.

Q.区分确认和验证?

A. 验证检查，如果该产品是由按而验证检查用户的需求，如果遵循正确的步骤来开发产品。.

验证确认正确的产品和核查确认，如果该产品是建立在一个正确的方式.

Q.什么是黑盒和白盒测试?

A. 黑盒测试检查，如果所需的输出产生有效的输入值时给出。它不验证程序的实际执行。.

白盒提供了有效的输入，而且它会检查代码是否正确实现，测试时，不仅需要的有效输出检查。.

标准 | 黑盒测试 | 白盒测试
识的软件程序，设计和结构所必需的 | 否 | 是的
知识软件实现至关重要 | 否 | 是的
谁做这个软件的测试 | 软件测试员工 | 软件开发
为测试基准参考 | 需求规格说明书 | 设计和结构的详细信息

Q.质量保证与质量控制?

A. 质量保证监督检查，如果合适的流程进行后续处理，而软件开发软件e.

质量控制涉及维护软件产品的质量.

Q.什么是各类软件的维护

A. 维修种类有：纠正，适应性，完备和预防.

纠正

删除用户识别的错误

自适应

应对变化的硬件和软件环境下，软件工程

完备的维修

在现有的或新的用户需求的变化实施

预防性维护

采取适当措施以避免未来的问题

Q.什么是软件再工程?

A. 软件再工程的过程中，以加强该软件是建立在不改变软件的功能的技术。这样做是为了保持调整与最新技术的软件实现.

Q.什么是CASE工具?

A. 消协表示计算机辅助软件工程。 CASE工具被设置的自动化软件应用程序，它被用来支持，促进和平滑的SDLC活动.

本站代码下载：http://www.yiibai.com/siteinfo/download.html

本文属作者原创，转载请注明出处：易百教程 » 软件工程面试问题