<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>软件工程</title>
	<atom:link href="https://www.aitaocui.cn/tag/253297/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Sun, 27 Nov 2022 21:52:35 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>软件工程</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>软件工程(中国普通高等学校本科专业)</title>
		<link>https://www.aitaocui.cn/article/365394.html</link>
					<comments>https://www.aitaocui.cn/article/365394.html#respond</comments>
		
		<dc:creator><![CDATA[牛牪犇]]></dc:creator>
		<pubDate>Sun, 27 Nov 2022 21:52:35 +0000</pubDate>
				<category><![CDATA[知识]]></category>
		<category><![CDATA[软件工程]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=365394</guid>

					<description><![CDATA[软件工程，英文名Software Engineering，是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它提出了软件的生命周期并把软件开发的过程分成几个阶段，...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>软件工程，英文名Software Engineering，是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它提出了软件的生命周期并把软件开发的过程分成几个阶段，分别是定义规划、需求分析、软件设计、程序编码、软件测试和运行维护。它涉及到程序设计语言、数据库、软件开发工具、设计模式等方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时，各个行业几乎都有计算机软件的应用，如工业、农业、银行、航空、政府部门等。这些应用促进了经济和社会的发展，也提高了工作和生活效率。自从1968年提出“软件工程”这一术语以来，研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。</p>
</article>
<p><img decoding="async" src="https://www.aitaocui.cn/wp-content/uploads/2022/08/20220828_630b8ce26e5d9.jpg" /></p>
<article>
<h1>专业定义</h1>
<div></div>
<p>软件工程一直以来都缺乏一个统一的定义，很多学者、组织机构都分别给出了自己的定义：</p>
<p>（1）、BarryBoehm：运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。</p>
<p>（2）、IEEE在软件工程术语汇编中的定义：软件工程是：1.将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护，即将工程化应用于软件；2.在1中所述方法的研究</p>
<p>（3）、FritzBauer在NATO会议上给出的定义：建立并使用完善的工程化原则，以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。</p>
<p>目前比较认可的一种定义认为：软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件，以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。</p>
<p>（4）、《计算机科学技术百科全书》中的定义：软件工程是应用计算机科学、数学及管理科学等原理，开发软件的工程。软件工程借鉴传统工程的原则、方法，以提高质量、降低成本。其中，计算机科学、数学用于构建模型与算法，工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡，管理科学用于计划、资源、质量、成本等管理。</p>
<p>比较认可的一种定义认为：软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件，以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。</p>
</p>
<h1>发展过程</h1>
<p>软件是由计算机程序和程序设计的概念发展演化而来的，是在程序和程序设计发展到一定规模并且逐步商品化的过程中形成的。软件开发经历了程序设计阶段、软件设计阶段和软件工程阶段的演变过程。</p>
<h2 id="a-8f4617f3">程序设计阶段</h2>
<p>程序设计阶段出现在1946年～1955年。此阶段的特点是：尚无软件的概念，程序设计主要围绕硬件进行开发，规模很小，工具简单，无明确分工（开发者和用户），程序设计追求节省空间和编程技巧，无文档资料（除程序清单外），主要用于科学计算。</p>
<h2 id="a-c2a699cf">软件设计阶段</h2>
<p>软件设计阶段出现在1956年～1970年。此阶段的特点是：硬件环境相对稳定，出现了“软件作坊”的开发组织形式。开始广泛使用产品软件（可购买），从而建立了软件的概念。随着计算机技术的发展和计算机应用的日益普及，软件系统的规模越来越庞大，高级编程语言层出不穷，应用领域不断拓宽，开发者和用户有了明确的分工，社会对软件的需求量剧增。但软件开发技术没有重大突破，软件产品的质量不高，生产效率底下，从而导致了“软件危机”的产生。</p>
<h2 id="a-a9676095">软件工程阶段</h2>
<p>自1970年起，软件开发进入了软件工程阶段。由于“软件危机”的产生，迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件产生进入了软件工程时代。此阶段的特定是：硬件已向巨型化、微型化、网络化和智能化四个方向发展，数据库技术已成熟并广泛应用，第三代、第四代语言出现；第一代软件技术：结构化程序设计在数值计算领域取得优异成绩；第二代软件技术：软件测试技术、方法、原理用于软件生产过程；第三代软件技术：处理需求定义技术用于软件需求分析和描述。</p>
<h1>培养目标</h1>
</p>
<div></div>
<p>软件工程的目标是：在给定成本、进度的前提下，开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率，减少维护的困难。下面分别介绍这些概念。</p>
<p>（1）可修改性（modifiablity）。容许对系统进行修改而不增加原系统的复杂性。它支持软件的调试与维护，是一个难以达到的目标。</p>
<p>（2）有效性（efficiency）。软件系统能最有效地利用计算机的时间资源和空间资源。各种计算机软件无不将系统的时/空开销作为衡量软件质量的一项重要技术指标。很多场合，在追求时间有效性和空间有效性方面会发生矛盾，这时不得不牺牲时间效率换取空间有效性或牺牲空间效率换取时间有效性。时/空折衷是经常出现的。有经验的软件设计人员会巧妙地利用折衷概念，在具体的物理环境中实现用户的需求和自己的设计。</p>
<p>（3）可靠性（reliability）。能防止因概念、设计和结构等方面的不完善造成的软件系统失效，具有挽回因操作不当造成软件系统失效的能力。对于实时嵌入式计算机系统，可靠性是一个非常重要的目标。因为软件要实时地控制一个物理过程，如宇宙飞船的导航、核电站的运行，等等。如果可靠性得不到保证，一旦出现问题可能是灾难性的，后果将不堪设想。因此在软件开发、编码和测试过程中，必须将可靠性放在重要地位。</p>
<p>（4）可理解性（understandability）。系统具有清晰的结构，能直接反映问题的需求。可理解性有助于控制软件系统的复杂性，并支持软件的维护、移植或重用。</p>
<p>（5）可维护性（maintainability)。软件产品交付用户使用后，能够对它进行修改，以便改正潜伏的错误，改进性能和其他属性，使软件产品适应环境的变化，等等。由于软件是逻辑产品，只要用户需要，它可以无限期的使用下去，因此软件维护是不可避免的。软件维护费用在软件开发费用中占有很大的比重。可维护性是软件工程中一项十分重要的目标。软件的可理解性和可修改性有利于软件的可维护性。</p>
<p>（6）可重用性（reusebility）。概念或功能相对独立的一个或一组相关模块定义为一个软部件。软部件可以在多种场合应用的程度称为部件的可重用性。可重用的软部件有的可以不加修改直接使用，有的需要修改后再用。可重用软部件应具有清晰的结构和注解，应具有正确的编码和较低的时/空开销。各种可重用软部件还可以按照某种规则存放在软部件库中，供软件工程师选用。可重用性有助于提高软件产品的质量和开发效率、有助于降低软件的开发和维护费用。从更广泛的意义上理解，软件工程的可重用性还应该包括：应用项目的重用，规格说明（也称为规约）的重用，设计的重用，概念和方法的重用，等等。一般来说，重用的层次越高，带来的效益也就越大。</p>
<p>（7）可适应性（adaptability）。软件在不同的系统约束条件下，使用户需求得到满足的难易程度。适应性强的软件应采用广为流行的程序设计语言编码，在广为流行的操作系统环境中运行，采用标准的术语和格式书写文档。适应性强的软件较容易推广使用。</p>
<p>（8）可移植性（portability）。软件从一个计算机系统或环境搬到另一个计算机系统或环境的难易程度。为了获得比较高的可移植性，在软件设计过程中通常采用通用的程序设计语言和运行环境支撑。对依赖于计算机系统的低级（物理）特征部分，如编译系统的目标代码生成，应相对独立、集中。这样，与处理机无关的部分就可以移植到其他系统上使用。可移植性支持软件的课重用性和课适应性。</p>
<p>（9）可追踪性（tracebility）。根据软件需求对软件设计、程序进行正向追踪，或根据程序、软件设计对软件需求进行逆向追踪的能力。软件可追踪性依赖于软件开发各个阶段文档和程序的完整性、一致性和可理解性。降低系统的复杂性会提高软件的可追踪性。软件在测试或维护过程中或程序在执行期间出现问题时，应记录程序事件或有关模块中的全部或部分指令现场，以便分析、追踪产生问题的因果关系。</p>
<p>（10）可互操作性（interoperability）。多个软件元素相互通信并协同完成任务的能力。为了实现可互操作性，软件开发通常要遵循某种标准，支持折衷标准的环境将为软件元素之间的可互操作提供便利。可互操作性在分布计算环境下尤为重要。</p>
<p>软件工程活动是“生产一个最终满足需求且达到工程目标的软件产品所需要的步骤”。主要包括需求、设计、实现、确认以及支持等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义，又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件体系结构，包括子系统、模块以及相关层次的说明、每一模块接口定义。详细设计产生程序员可用的模块说明，包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程，实现完成后的确认，保证最终产品满足用户的要求。支持活动包括修改和完善。伴随以上活动，还有管理过程、支持过程、培训过程等。</p>
<h2 id="a-6679d7d6">过程</h2>
<p>生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义，又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构，包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明，包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程，实现完成后的确认，保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程，还有管理过程、支持过程、培训过程等。</p>
<h2 id="a-4961c883">原则</h2>
</p>
<div></div>
<p>软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。软件工程的原则有以下四项基本原则：</p>
<p>1）选取适宜开发范型。</p>
<p>该原则与系统设计有关。在系统设计中，软件需求、硬件需求以及其他因素之间是相互制约、相互影响的，经常需要权衡。因此，必须认识需求定义的易变性，采用适宜的开发范型予以控制，以保证软件产品满足用户的要求。</p>
<p>2）采用合适的设计方法。</p>
<p>在软件设计中，通常要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现，以达到软件工程的目标。</p>
<p>3）提供高质量的工程支持。</p>
<p>“工欲善其事，必先利其器”。</p>
<p>在软件工程中，软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。</p>
<p>4）重视开发过程的管理。</p>
<p>软件工程的管理，直接影响可用资源的有效利用，生产满足目标的软件产品，提高软件组织的生产能力等问题。因此，仅当软件过程得以有效管理时，才能实现有效的软件工程。</p>
<p>这一软件工程框架告诉我们，软件工程的目标是可用性、正确性和合算性；实施一个软件工程要选取适宜的开发范型，要采用合适的设计方法，要提供高质量的工程支撑，要实行开发过程的有效管理；软件工程活动主要包括需求、设计、实现、确认和支持等活动，每一活动可根据特定的软件工程，采用合适的开发范型、设计方法、支持过程以及过程管理。根据软件工程这一框架，软件工程学科的研究内容主要包括：软件开发范型、软件开发方法、软件过程、软件工具、软件开发环境、计算机辅助软件工程(CASE)及软件经济学等。</p>
<h1>基本原理</h1>
<div></div>
<p>自从1968年提出“软件工程”这一术语以来，研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。美国著名的软件工程专家巴利·玻姆（Barry Boehm）综合这些专家的意见，并总结了美国天合公司（TRW）多年的开发软件的经验，于1983年提出了软件工程的七条基本原理。</p>
<p>玻姆认为，这七条原理是确保软件产品质量和开发效率的原理的最小集合。它们是相互独立的，是缺一不可的最小集合；同时，它们又是相当完备的。</p>
<p>人们当然不能用数学方法严格证明它们是一个完备的集合，但是可以证明，在此之前已经提出的100多条软件工程准则都可以有这七条原理的任意组合蕴含或派生。下面简要介绍软件工程的七条原理：</p>
<p>1、用分阶段的生命周期计划严格管理</p>
<h2 id="a-867a35ac"></h2>
<p>这一条是吸取前人的教训而提出来的。统计表明，50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中，需要完成许多性质各异的工作。这条原理意味着，应该把软件生命周期分成若干阶段，并相应制定出切实可行的计划，然后严格按照计划对软件的开发和维护进行管理。玻姆认为，在整个软件生命周期中应指定并严格执行6类计划：项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。</p>
<p>2、坚持进行阶段评审</p>
<h2 id="a-867a35ac"></h2>
<p>统计结果显示：大部分错误是在编码之前造成的，大约占63%错误发现的越晚，改正它要付出的代价就越大，要差2到3个数量级。因此，软件的质量保证工作不能等到编码结束之后再进行，应坚持进行严格的阶段评审，以便尽早发现错误。</p>
<p>3、实行严格的产品控制</p>
<h2 id="a-867a35ac"></h2>
<p>开发人员最痛恨的事情之一就是改动需求。但是实践告诉我们，需求的改动往往是不可避免的。这就要求我们要采用科学的产品控制技术来顺应这种要求。也就是要采用变动控制，又叫基准配置管理。当需求变动时，其它各个阶段的文档或代码随之相应变动，以保证软件的一致性。</p>
<p>4、采纳现代程序设计技术</p>
<h2 id="a-867a35ac"></h2>
<p>从六、七时年代的结构化软件开发技术，到最近的面向对象技术，从第一、第二代语言，到第四代语言，人们已经充分认识到：方法大似气力。采用先进的技术即可以提高软件开发的效率，又可以减少软件维护的成本。</p>
<p>5、结果应能清楚地审查</p>
<h2 id="a-867a35ac"></h2>
<p>软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差，难于评价和管理。为更好地进行管理，应根据软件开发的总目标及完成期限，尽量明确地规定开发小组的责任和产品标准，从而使所得到的标准能清楚地审查。</p>
<p>6、开发小组的人员应少而精</p>
<h2 id="a-867a35ac"></h2>
<p>开发人员的素质和数量是影响软件质量和开发效率的重要因素，应该少而精。这一条基于两点原因：高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍，开发工作中犯的错误也要少的多；当开发小组为N人时，可能的通讯信道为N(N-1)/2，可见随着人数N的增大，通讯开销将急剧增大。</p>
<p>7、承认不断改进软件工程实践的必要性</p>
<h2 id="a-867a35ac"></h2>
<p>遵从上述六条基本原理，就能够较好地实现软件的工程化生产。但是，它们只是对现有的经验的总结和归纳，并不能保证赶上技术不断前进发展的步伐。因此，玻姆提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条原理。根据这条原理，不仅要积极采纳新的软件开发技术，还要注意不断总结经验，收集进度和消耗等数据，进行出错类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果，也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。</p>
<h1>方法学习</h1>
<div></div>
<p>软体工程的方法有很多方面的意义。包括专案管理，分析，设计，程序的编写，测试和质量控制。</p>
<p>软体设计方法可以区别为重量级的方法和轻量级的方法。重量级的方法中产生大量的正式文档。</p>
<p>著名的重量级开发方法包括ISO9000，CMM，和统一软体开发过程（RUP）。</p>
<p>轻量级的开发过过程没有对大量正式文档的要求。着名的轻量级开发方法包括极限编程（XP）和敏捷流程（AgileProcesses）。</p>
<p>根据《新方法学》这篇文章的说法，重量级方法呈现的是一种防御型的姿态。在应用重量级方法的软体组织中，由于软体项目经理不参与或者很少参与程序设计，无法从细节上把握项目进度，因而会对项目产生恐惧感，不得不要求程式设计师不断撰写很多“软体开发文档”。而轻量级方法则呈现“进攻型”的姿态，这一点从XP方法特别强调的四个准则—“沟通、简单、反馈和勇气上有所体现。目前有一些人认为，重量级方法合于大型的软体团队（数十人以上）使用，而“轻量级方法”适合小型的软体团队（几人、十几人）使用。当然，关于重量级方法和轻量级方法的优劣存在很多争论，而各种方法也在不断进化中。</p>
<p>一些方法论者认为人们在开发中应当严格遵循并且实施这些方法。但是一些人并不具有实施这些方法的条件。实际上，采用何种方法开发软体取决于很多因素，同时受到环境的制约。</p>
<h1>主要课程</h1>
<p>外语、高等数学、线性代数、高等代数、电子技术基础、离散数学、计算机引论（C语言）、数据结构、C++程序设计、汇编语言程序设计、算法设计与分析、计算机组成原理与体系结构、数据库系统、计算机网络、软件工程、软件测试技术、软件需求与项目管理、软件设计实例分析、CMM/ISO9000等。</p>
<h1>发展方向</h1>
<p>敏捷开发（Agile Development）被认为是软体工程的一个重要的发展。它强调软体开发应当是能够对未来可能出现的变化和不确定性作出全面反应的。</p>
<p>敏捷开发被认为是一种“轻量级”的方法。在轻量级方法中最负盛名的应该是“极限编程”（Extreme Programming，简称为XP）。而与轻量级方法相对应的是“重量级方法”的存在。重量级方法强调以开发过程为中心，而不是以人为中心。重量级方法的例子比如CMM/PSP/TSP。</p>
<p>面向侧面的程序设计（Aspect Oriented Programming，简称AOP）被认为是近年来软体工程的另外一个重要发展。这里的方面指的是完成一个功能的对象和函数的集合。在这一方面相关的内容有泛型编程（Generic Programming）和模板。</p>
<h1>需求分析</h1>
<p>软件工程中包含需求、设计、编码和测试四个阶段，其中需求工程是软件工程第一个也是很重要的一个阶段，本文以医院管理系统为例详细介绍了需求工程的构成和进行方法。</p>
<p>首先人们必须了解需求工程和其他项目过程的关系：</p>
<p>图1需求与其他项目过程的关系</p>
<p>软件需求包括三个不同的层次-业务需求、用户需求和功能需求-也包括非功能需求：业务需说明了提供给客户和产品开发商的新系统的最初利益，反映了组织机构或客户对系统、产品高层次的目标要求，它们在项目视图与范围文档中予以说明；用户需求文档描述了用户使用产品必须要完成的任务，这在使用实例文档或方案脚本说明中予以说明；功能需求定义了开发人员必须实现的软件功能，使得用户能完成他们的任务，从而满足了业务需求。</p>
<div></div>
<h1>需求开发</h1>
<p>需求开发又分为需求获取、需求分析、编写规格说明书和需求验证。以下列出和讲解分析常规的步骤，当然应按照项目的大小和特点等实际情况我们应该自己确定合适的步骤。</p>
<p>1．需求获取：</p>
<p>1）确定需求开发过程：确定需求开发过程确定如何组织需求的收集、分析、细化并核实的步骤，并将它编写成文档。对重要的步骤要给予一定指导，这将有助于分析人员的工作，而且也使收集需求活动的安排和进度计划更容易进行。</p>
<p>2）编写项目视图和范围文档：项目视图和范围文档应该包括高层的产品业务目标，所有的使用实例和功能需求都必须遵从能达到的业务需求。项目视图说明使所有项目参与者对项目的目标能达成共识。而范围则是作为评估需求或潜在特性的参考。</p>
<p>a、1背景在这一部分，总结新产品的理论基础，并提供关于产品开发的历史背景或形势的一般性描述。</p>
<p>a、2业务机遇描述现存的市场机遇或正在解决的业务问题。描述商品竞争的市场和信息系统将运用的环境。包括对现存产品的一个简要的相对评价和解决方案，并指出所建议的产品为什么具有吸引力和它们所能带来的竞争优势。</p>
<p>a、3业务目标用一个定量和可测量的合理方法总结产品所带来的重要商业利润，把重点放在给业务的价值上。</p>
<p>a、4客户或市场需求描述一些典型客户的需求，包括不满足现有市场上的产品或信息系统的需求。提出客户目前所遇到的问题在新产品中将可能（或不可能）出现的阐述，提供客户怎样使用产品的例子。确定了产品所能运行的软、硬件平台。</p>
<p>a、5提供给客户的价值确定产品给客户带来的价值，并指明产品怎样满足客户的需要。</p>
<p>a、6业务风险总结开发（或不开发）该产品有关的主要业务风险，例如市场竞争、时间问题、用户的接受能力、实现的问题或对业务可能带来的消极影响。预测风险的严重性，指明你所能采取的减轻风险的措施。</p>
<p>b.1项目视图陈述编写一个总结长远目标和有关开发新产品目的的简要项目视图陈述。项目视图陈述将考虑权衡有不同需求客户的看法。它可能有点理想化，但必须以现有的或所期待的客户市场、企业框架、组织的战略方向和资源局限性为基础。</p>
<p>b.2主要特性包括新产品将提供的主要特性和用户性能的列表。强调的是区别于以往产品和竞争产品的特性。可以从用户需求和功能需求中得到这些特性。</p>
<p>b.3假设和依赖环境在构思项目和编写项目视图和范围文档时，要记录所作出的任何假设。通常一方所持的假设应与另一方不同。</p>
<p>c.1首次发行的范围总结首次发行的产品所具有的性能。描述了产品的质量特性，这些特性使产品可以为不同的客户群提供预期的成果。c.2随后发行的范围如果你想象一个周期性的产品演变过程，就要指明哪一个主要特性的开发将被延期，并期待随后版本发行的日期。</p>
<p>c.3局限性和专用性明确定义包括和不包括的特性和功能的界线是处理范围设定和客户期望的一个途径。列出风险承担者们期望的而你却不打算把它包括到产品中的特性和功能。</p>
<p>d.1客户概貌客户概述明确了这一产品的不同类型客户的一些本质的特点，以及目标市场部门和在这些部门中的不同客户的特征。</p>
<p>d.2项目的优先级一旦明确建立项目的优先级，风险承担者和项目的参与者就能把精力集中在一系列共同的目标上。达到这一目的的一个途径是考虑软件项目的五个方面：性能、质量、计划、成本和人员。e.产品成功的因素明确产品的成功是如何定义和测量的，并指明对产品的成功有巨大影响的几个因素。不仅要包括组织直接控制的范围内的事务，还要包括外部因素。如果可能，可建立测量的标准用于评价是否达到业务目标.</p>
<p>3）用户群分类：产品的用户在很多方面存在着差异，例如：用户使用产品的频度、他们的应用领域和计算机系统知识、他们所使用的产品特性、他们所进行的业务过程、他们在地理上的布局以及他们的访问优先级。根据这些差异，你可以把这些不同的用户分成小组。用户类不一定都指人，你可以把其它应用程序或系统接口所用的硬件组件也看成是附加用户类的成员。以这种方式来看待应用程序接口，可以帮助你确定产品中那些与外部应用程序或组件有关的需求。将用户群分类并归纳各自特点为避免出现疏忽某一用户群需求的情况，要将可能使都有所差异。详细描述出它们的个性特点及任务状况，将有助于产品设计。</p>
<p>4）选择产品代表：择每类用户的产品代表为每类用户至少选择一位能真正代表他们需求的人作为那一类用户的代表并能作出决策。这对于内部信息系统的开发是最易实现的，因为此时，用户就是身边的职员。而对于商业开发，就得在主要的客户或测试者中建立起良好的合作关系，并确定合适的产品代表。他们必须一直参与项目的开发而且有权作出决策。每一个产品代表者代表了一个特定的用户类，并在那个用户类和开发者之间充当主要的接口。</p>
<p>5）建立核心队伍：建立起典型用户的核心队伍把同类产品或产品的先前版本用户代表召集起来，从他们那里收集目前产品的功能需求和非功能需求。这样的核心队伍对于商业开发尤为有用，因为你拥有一个庞大且多样的客户基础。与产品代表的区别在于，核心队伍成员通常没有决定权。</p>
<p>6）确定使用实例：让用户代表确定使用实例从用户代表处收集他们使用软件完成所需任务的描述-使用实例，讨论用户与系统间的交互方式和对话要求。在编写使用实例的文档时可采用标准模版，在使用实例基础上可得到功能需求。</p>
<p>一个单一的使用实例可能包括完成某项任务的许多逻辑相关任务和交互顺序。因此，一个使用实例是相关的用法说明的集合，并且一个说明是使用实例的例子。在描述时列出执行者和系统之间相互交互或对话的顺序。当这种对话结束时，执行者也达到了预期的目的。</p>
<p>对于一些复杂的使用实例，画出图形分析模型是有益的，这些模型包括数据流程图、实体关系图、状态转化图、对象类和联系图。</p>
<p>使用实例的描述并不向开发者提供他们所要开发的功能的细节。为了减少这种不确定性，需要把每一个使用实例叙述成详细的功能需求。每一个使用实例可引伸出多个功能需求，这将使执行者可以执行相关的任务；并且多个使用实例可能需要相同的功能需求。使用实例方法给需求获取带来的好处来自于该方法是以任务为中心和以用户为中心的观点。比起使用以功能为中心的方法，使用实例方法可以使用户更清楚地认识到新系统允许他们做什么。</p>
<p>每一个使用实例都描述了一个方法，用户可以利用这个方法与系统进行交互，从而达到特定的目标。使用实例可有效地捕捉大多数所期望的系统行为，但是你可能有一些需求，这些需求与用户任务或其他执行者之间的交互没有特定的关系。这时你就需要一个独立的需求规格说明。</p>
<p>7）召开应用程序开发联系会议：召开应用程序开发联系会议应用程序开发联系会议是范围广的、简便的专题讨论会，也是分析人员与客户代表之间一种很好的合作办法，并能由此拟出需求文档的底稿。该会议通过紧密而集中的讨论得以将客户与开发人员间的合作伙伴关系付诸于实践。</p>
<p>8）分析用户工作流程：分析用户工作流程观察用户执行业务任务的过程。画一张简单的示意图（最好用数据流图）来描绘出用户什么时候获得什么数据，并怎样使用这些数据。编制业务过程流程文档将有助于明确产品的使用实例和功能需求。你甚至可能发现客户并不真地需要一个全新的软件系统就能达到他们的业务目标。</p>
<p>9）确定质量属性：确定质量属性和其它非功能需求在功能需求之外再考虑一下非功能的质量特点，这会使你的产品达到并超过客户的期望。对系统如何能很好地执行某些行为或让用户采取某一措施的陈述就是质量属性，这是一种非功能需求。听取那些描述合理特性的意见：快捷、简易、直觉性、用户友好、健壮性、可靠性、安全性和高效性。你将要和用户一起商讨精确定义他们模糊的和主观言辞的真正含义。</p>
<p>10）检查问题报告：通过检查当前系统的问题报告来进一步完善需求客户的问题报告及补充需求为新产品或新版本提供了大量丰富的改进及增加特性的想法，负责提供用户支持及帮助的人能为收集需求过程提供极有价值的信息。</p>
<p>11）需求重用：跨项目重用需求如果客户要求的功能与已有的产品很相似，则可查看需求是否有足够的灵活性以允许重用一些已有的软件组件。</p>
<h1>软件需求</h1>
<p>软件需求包括3个不同的层次――业务需求、用户需求和功能需求。除此之外，每个系统还有各种非功能需求。</p>
<p>业务需求（Business requirement）表示组织或客户高层次的目标。业务需求通常来自项目投资人、购买产品的客户、实际用户的管理者、市场营销部门或产品策划部门。业务需求描述了组织为什么要开发一个系统，即组织希望达到的目标。使用前景和范围（vision and scope）文档来记录业务需求，这份文档有时也被称作项目轮廓图或市场需求（project charter 或 market requirement）文档。</p>
<p>用户需求（user requirement）描述的是用户的目标，或用户要求系统必须能完成的任务。用例、场景描述和事件――响应表都是表达用户需求的有效途径。也就是说用户需求描述了用户能使用系统来做些什么。</p>
<p>功能需求（functional requirement）规定开发人员必须在产品中实现的软件功能，用户利用这些功能来完成任务，满足业务需求。功能需求有时也被称作行为需求（behavioral requirement），因为习惯上总是用“应该”对其进行描述：“系统应该发送电子邮件来通知用户已接受其预定”。功能需求描述是开发人员需要实现什么。</p>
<p>系统需求（system requirement）用于描述包含多个子系统的产品（即系统）的顶级需求。系统可以只包含软件系统，也可以既包含软件又包含硬件子系</p>
<h1>软件工程专业学生就业前景</h1>
<p>作为“朝阳行业”，软件行业的发展虽然受到全球金融危机的影响，但是从目前的形势来看，软件工程专业在未来多年内仍将是就业形势看好的专业。09年就业调查显示，软件工程就业率及就业工资水平均居高校各专业前列。这主要源自于软件行业的快速发展和政府经济结构调整而对软件人才的迫切需求，据估计，我国目前存在着80万的软件人才缺口，而对软件人才的需求也以每年20%的速度递增。</p>
<p>目前我国的软件行业规模不是很大，有些软件企业在软件制作上，也只是采用了一些软件工程的思想，距离大规模的工业化大生产比较还是有一定的差距；原因有管理体制的问题，市场问题，政策问题，也有软件工程理论不全面和不完善的问题。所以软件工程的研究和应用，以及我国软件行业的进一步发展，都需要一定的既有软件工程的理论基础和研究能力，又有一定的实践经验的软件工程科学技术人员来推动。软件工程的前途是光明的。</p>
<p>鉴于目前我国软件行业仍然处于发展的初期阶段，而又是国家未来发展的方向，预计未来几年里，我国软件教育和软件培训市场依然很大，这也从一个侧面说明软件行业对人才的巨大需求。软件工程人才的就业前景十分看好。未来几年，国内外高层次软件人才将供不应求。毕业生主要在各大软件公司、企事业单位、高等院校、各大研究所、国防等重要部门从事软件设计、开发、应用与研究工作。有数据表明，我国软件出口规模达到215亿元，软件从业人员达到72万人，在中国十大IT职场人气职位中，软件工程师位列第一位，软件工程人才的就业前景十分乐观。</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/365394.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
