期刊投稿百科

软件工程在软件开发相关论文中的应用实例怎么写

发布时间:2024-07-08 19:01:28

软件工程在软件开发相关论文中的应用实例

这也能叫专家?建议撤职。

概念 需求的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部特性)来阐述需求 关键的问题是一定要编写需求文档我曾经目睹过一个项目中途更换了所有的开发者,客户被迫与新的需求分析者坐到一起系统的分析人员说:"我们想与你谈谈你的需求"客户的第一反应便是:"我已经将我的要求都告诉你们前任了,现在我要的就是给我编一个系统" 百事通 而实际上,UGGs,需求并未编写成文档,因此新的分析人员不得不从头做起所以如果只有一堆邮件、会谈记录或一些零碎的未整理的对话,你就确信你已明白用户的需求,那完全是自欺欺人 需求的另外一种定义认为需求是"用户所需要的并能触发一个程序或系统开发工作的说明"有些需求分析专家拓展了这个概念:"从系统外部能发现系统所具有的满足于用户的特点、功能及属性等"这些定义强调的是产品是什么样的,而并非产品是怎样设计、构造的而下面的定义则从用户需要进一步转移到了系统特性: 需求是指明必须实现什么的规格说明它描述了系统的行为、特性或属性,是在开发过程中对系统的约束 从上面这些不同形式的定义不难发现:并没有一个清晰、毫无二义性的"需求"术语存在,真正的"需求"实际上在人们的脑海中,这个人们主要是指客户,但一般情况下,用户并不能描述自己的需要,只就需要系统分析人员根据用户的自己语言的描述整理出相关的需要再进一步和客户核对系统分析员和客户需要确保所有项目风险承担者在描述需求的那些名词的理解上务必达成共识 任何文档形式的需求(例如如下将要描述的需求规格说明书)仅是一个模型,一种描述 需求分析的任务 开发软件系统最为困难的部分就是准确说明开发什么最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难 目前,国内产品的庞杂,一家企业可能有几个系统并立运行,它们之间接口是系统开发人员最头痛的问题 对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?而如果我们不知道什么对客户来说是重要的,那我们又如何能使客户感到满意呢? 然而,即便并非出于商业目的的软件需求也是必须的例如库、组件和工具这些供开发小组内部使用的软件当然你可能偶尔勿需文档说明就能与其他人意见较为一致,但更常见的是出现重复返工这种不可避免的后果,而重新编制代码的代价远远超过重写一份需求文档的代价,这些血的教训正在国内的软件开发者身上发生 近来,我遇到一个开发小组开发包括代码编辑器在内的一套内部使用的计算机辅助软件不幸的是,当他们开发完这个工具后,发现这个工具不能打印出源代码文件,使用者当然希望有这个功能结果这个小组只好手工抄写源代码文档以供代码检查这说明那怕需求明确无误并构思准确,如果我们没有编写文档,软件达不到期望目标也只能是咎由自取了 相反的情况,我曾见一个要集成到"错误跟踪系统"中的简单界面写了一页需求说明而操作系统系统管理员在为处理脚本时发现简单的一张需求清单竟是如此有用他们依据需求对系统进行测试时,此系统不仅非常清晰地实现了所有必需功能,而且未发现任何错误 事实上,需求文档在开发过程中一直起指导作用 需求分析过程 可把整个软件需求工程研究领域划分为需求开发和需求管理两部分更合适,如图4-1所示: 图4-1 需求工程域的层次分解示意图 需求开发可进一步分为:问题获取、分析、编写规格说明和验证四个阶段这些子项包括软件类产品中需求收集、评价、编写文档等所有活动需求开发活动包括以下几个方面: 确定产品所期望的用户类别 获取每个用户类的需求 了解实际用户任务和目标以及这些任务所支持的业务需求 分析源于用户的信息以区别用户任务需求、功能需求、业务规则、质量属性、建议解决方法和附加信息 将系统级的需求分为几个子系统,并将需求中的一部份分配给软件组件 了解相关质量属性的重要性 商讨实施优先级的划分 将所收集的用户需求编写成文档和模型 评审需求规格说明,确保对用户需求达到共同的理解与认识,并在整个开发小组接受说明之前将问题都弄清楚 需求管理需要"建立并维护在软件工程中同客户达成的合同" 这种合同都包含在编写的需求文档与模型中客户的接受仅是需求成功的一半,开发人员也必须能够接受他们,并真正把需求应用到产品中通常的需求管理活动包括: 定义需求基线(迅速制定需求文档的主体) 评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它 以一种可控制的方式将需求变更融入到项目中 使当前的项目计划与需求一致 估计变更需求所产生影响并在此基础上协商新的承诺,这种承诺具体体现在项目解决方案上 让每项需求都能与其对应的设计、源代码和测试用例联系起来以实现跟踪 在整个项目过程中跟踪需求状态及其变更情况 以上几点说明是我总结了成功实施项目后系统分析人员的经验,同时也根据国内外的其他系统实施的相关成功经验,进行了总结 需求的类型 下面这些定义是需求工程领域中常见术语的定义 软件需求包括三个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求) 业务需求(business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明 用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本说明中予以说明 功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求 在软件需求规格说明书 (SRS)中说明的功能需求充分描述了软件系统所应具有的外部行为软件需求规格说明在开发、测试、质量保证、项目管理以及相关项目功能中都起了重要的作用对一个大型系统来说,软件功能需求也许只是系统需求的一个子集,因为另外一些可能属于子系统(或软件部件) 作为功能需求的补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等它包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性所谓约束是指对开发人员在软件产品设计和构造上的限制质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能多角度描述产品对用户和开发人员都极为重要 下面以一个字处理程序为例来说明需求的不同种类业务需求可能是:"用户能有效地纠正文档中的拼写错误",该产品的包装盒封面上可能会标明这是个满足业务需求的拼写检查器而对应的用户需求可能是"找出文档中的拼写错误并通过一个提供的替换项列表来供选择替换拼错的词"同时,该拼写检查器还有许多功能需求,如找到并高亮度提示错词的操作;显示提供替换词的对话框以及实现整个文档范围的替换 从以上定义可以发现,需求并未包括设计细节、实现细节、项目计划信息或测试信息需求与这些没有关系,它关注的是充分说明你究竟想开发什么项目也有其它方面的需求,如开发环境需求或发布产品及移植到支撑环境的需求尽管这些需求对项目成功也至关重要,但它们并非本书所要讨论的 需求分析的原则 不重视需求过程的项目队伍将自食其果需求工程中的缺陷将给项目成功带来极大风险,这里的"成功"是指推出的产品能以合理的价格、及时地在功能、质量上完全满足用户的期望下面将讨论一些需求风险 不适当的需求过程所引起的一些风险: 无足够用户参与 客户经常不明白为什么收集需求和确保需求质量需花费那么多功夫,开发人员可能也不重视用户的参与究其原因:一是因为开发人员感觉与用户合作不如编写代码有意思;二是因为开发人员觉得已经明白用户的需求了在某些情况下,与实际使用产品的用户直接接触很困难,而客户也不太明白自己的真正需求但还是应让具有代表性的用户在项目早期直接参与到开发队伍中,并一同经历整个开发过程 系统人员在实践过程中,也有些感觉,在实施一家公司的项目时,若无足够的用户参与,系统人员获得的需求是片面的,不完整的,这样系统在需求之初就埋下风险 用户需求的不断增加 在开发中若不断地补充需求,项目就越变越庞大以致超过其计划及预算范围计划并不总是与项目需求规模与复杂性、风险、开发生产率及需求变更实际情况相一致,这使得问题更难解决实际上,问题根源在于用户需求的改变和开发者对新需求所作的修改 要想把需求变更范围控制到最小,必须一开始就对项目视图、范围、目标、约束限制和成功标准给予明确说明,并将此说明作为评价需求变更和新特性的参照框架说明中包括了对每种变更进行变更影响因素分析的变更控制过程,有助于所有风险承担者明白业务决策的合理性,即为何进行某些变更,相应消耗的时间、资源或特性上的折中 产品开发中不断延续的变更会使其整体结构日渐紊乱,补丁代码也使得整个程序难以理解和维护插入补丁代码使模块违背强内聚、松耦合的设计原则,特别是如果项目配置管理工作不完善的话,收回变更和删除特性会带来问题如果你尽早地区别这些可能带来变更的特性,你就能开发一个更为健壮的结构,并能更好地适应它这样设计阶段需求变更不会直接导致补丁代码,同时也有利于减少因变更导致质量的下降 模棱两可的需求 模棱两可是需求规格说明中最为可怕的问题它的一层含义是指诸多读者对需求说明产生了不同的理解;另一层含义是指单个读者能用不止一个方式来解释某个需求说明 模棱两可的需求会使不同的风险承担者产生不同的期望,它会使开发人员为错误问题而浪费时间,并且使测试者与开发者所期望的不一致一位系统测试人员曾告诉我,她所在的测试组经常对需求理解有误,以致不得不重写许多测试用例并重做许多测试 处理模棱两可需求的一种方法是组织好负责从不同角度审查需求的队伍仅仅简单浏览一下需求文档是不能解决模棱两可问题的如果不同的评审者从不同的角度对需求说明给予解释,但每个评审人员都真正了解需求文档,这样二义性就不会直到项目后期才被发现,那时再发现的话会使得更正代价很大 不必要的特性 "画蛇添足"是指开发人员力图增加一些"用户欣赏"但需求规格说明中并未涉及的新功能经常发生的情况是用户并不认为这些功能性很有用,以致在其上耗费的努力"白搭"了开发人员应当为客户构思方案并为他们提供一些具有创新意识的思路,具体提供哪些功能要在客户所需与开发人员在允许时限内的技术可行性之间求得平衡,开发人员应努力使功能简单易用,而不要未经客户同意,擅自脱离客户要求,自作主张 同样,客户有时也可能要求一些看上去很"酷",但缺乏实用价值的功能,而实现这些功能只能徒耗时间和成本为了将"画蛇添足"的危害尽量减小,应确信:你明白为什么要包括这些功能,以及这些功能的"来龙去脉",这样使得需求分析过程始终是注重那些能使用户完成他们业务任务的核心功能 过于精简的规格说明 有时,客户并不明白需求分析有如此重要,于是只作一份简略之至的规格说明,仅涉及了产品概念上的内容,然后让开发人员在项目进展中去完善,结果很可能出现的是开发人员先建立产品的结构之后再完成需求说明这种方法可能适合于尖端研究性的产品或需求本身就十分灵活的情况但在大多数情况下,这会给开发人员带来挫折(使他们在不正确的假设前提和极其有限的指导下工作),也会给客户带来烦恼(他们无法得到他们所设想的产品) 忽略了用户分类 大多数产品是由不同的人使用其不同的特性,使用频繁程度也有所差异,使用者受教育程度和经验水平也不尽相同如果你不能在项目早期就针对所有这些主要用户进行分类的话,必然导致有的用户对产品感到失望例如,菜单驱动操作对高级用户太低效了,但含义不清的命令和快捷键又会使不熟练的用户感到困难 不准确的计划 据统计,导致需求过程中软件成本估计极不准确的原因主要有以下五点:频繁的需求变更、遗漏的需求、与用户交流不够、质量低下的需求规格说明和不完善的需求分析 对不准确的要求所提问题的正确响应是"等我真正明白你的需求时,我就会来告诉你"基于不充分信息和未经深思的对需求不成熟的估计很容易为一些因素左右要作出估计时,最好还是给出一个范围未经准备的估计通常是作为一种猜测给出的,听者却认为是一种承诺因此我们要尽力给出可达到的目标并坚持完成它 需求分析人员和用户的合作关系 优秀的软件产品是建立在优秀的需求基础之上的而高质量的需求来源于客户与开发人员之间有效的交流与合作通常,开发人员与客户或客户代理人,如市场人员间的关系反而会成为一种对立关系双方的管理者都只想自己的利益而搁置用户提供的需求从而产生摩擦,在这种情况下,不会给双方带来一点益处 只有当双方参与者都明白要成功自己需要什么,同时也应知道要成功合作方需要什么时,才能建立起一种合作关系由于项目压力与日渐增,所有风险承担者有着一个共同的目标这一点容易被遗忘其实大家都想开发出一个既能实现商业价值,又能满足用户需要,还能使开发者感到满足的优秀软件产品 软件客户需求权利书列出了十条关于客户在项目需求工程实施中与分析人员、开发人员交流时的合法要求每一项权利都对应着软件开发人员、分析人员的义务而软件客户需求义务书也列出了十条关于客户在需求过程中应承担的义务如果愿意,可以将其作为开发人员的权利书 客户有如下权利: 1:要求分析人员使用符合客户语言习惯的表达 需求讨论应集中于业务需要和任务,故要使用业务术语,你应将其教给分析人员,而你 不一定要懂得计算机的行业术语 2:要求分析人员了解客户的业务及目标 通过与用户交流来获取用户需求、分析人员才能更好地了解你的业务任务和怎样才能使产品更好地满足你的需要这将有助于开发人员设计出真正满足你的需要并达到你期望的优秀软件为帮助开发人员和分析人员,可以考虑邀请他们观察你或你的同事是怎样工作的如果新开发系统是用来替代已有的系统,那么开发人员应使用一下目前的系统,这将有利于他们明白目前系统是怎样工作的,其工作流程的情况,以及可供改进之处 3:要求分析人员编写软件需求规格说明 分析人员要把从你和其他客户那里获得的所有信息进行整理,以区分开业务需求及规范、功能需求、质量目标、解决方法和其它信息通过这些分析就能得到一份软件需求规格说明而这份软件需求规格说明便在开发人员和客户之间针对要开发的产品内容达成了协议软件需求规格说明书可以用一种你认为易于翻阅和理解的方式组织编写要评审编写出的规格说明以确保它们准确而完整地表达了你的需求一份高质量的软件需求规格说明能有助于开发人员开发出真正需要的产品 4:要求得到需求工作结果的解释说明 分析人员可能采用了多种图表作为文字性软件需求规格说明的补充因为如工作流程图那样的图表能很清楚地描述出系统行为的某些方面所以需求说明中的各种图表有着极高的价值虽然它们不太难于理解,但是你很可能对此并不熟悉因此可以要求分析人员解释说明每张图表的作用或其它的需求开发工作结果和符号的意义,及怎样检查图表有无错误及不一致等 5:要求开发人员尊重你的意见 如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍,共同合作能使大家"兼听则明"参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间同样,客户也应对开发人员为项目成功这一共同目标所作出的努力表示尊重与感激 6:要求开发人员对需求及产品实施提供建议,拿出主意 通常,客户所说的"需求"已是一种实际可能的实施解决方案,分析人员将尽力从这些解决方法中了解真正的业务及其需求,同时还应找出已有系统不适合当前业务之处,以确保产品不会无效或低效在彻底弄清业务领域内的事情后,分析人员有时就能提出相当好的改进方法有经验且富有创造力的分析人员还能提出增加一些用户并未发现的很有价值的系统特性 7:描述产品易使用的特性 你可以要求分析人员在实现功能需求的同时还要注重软件的易用性因为这些易用特性或质量属性能使你更准确、高效地完成任务例如,客户有时要求产品要"用户友好"或"健壮"或"高效率",但这对于开发人员来说,太主观了并无实用价值正确的应是:分析人员通过询问和调查了解客户所要的友好、健壮、高效所包含的具体特性 8:调整需求,允许重用已有的软件组件 需求通常要有一定的灵活性分析人员可能发现已有的某个软件组件与你描述的需求很相符在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够在新系统开发中重用一些已有的软件如果有可重用的机会出现,同时你又能调整你的需求说明,那就能降低成本和节省时间,而不必严格按原有的需求说明开发所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合你所需的特性,这时一定程度上的需求灵活性就显得极为重要了 9:获得满足客户功能和质量要求的系统 每个人都希望项目获得成功但这不仅要求你要清晰地告知开发人员关于系统"做什么"所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制一定要明确说明你的假设和潜在的期望否则,开发人员开发出的产品很可能无法让你满意 客户有下列义务: 1:给分析人员讲解你的业务 分析人员要依靠你给他们讲解的业务概念及术语但你不能指望分析人员会成为该领域的专家,而只能让他们真正明白你的问题和目标不要期望分析人员能把握你们业务的细微与潜在之处,他们很可能并不知道那些对于你和你的同事来说理所当然的"常识" 2:抽出时间清楚地说明并完善需求 客户很忙,经常在最忙的时候还得参与需求开发但无论如何,你有义务抽出时间参与"头脑风暴"会议的讨论,接受采访或其它获取需求的活动有时分析人员可能先以为明白了你的观点,而过后发现还需要你的讲解这时,请耐心一些对待需求和需求的精化工作过程中的反复,因为它是人们交流中的很自然的现象,何况这对软件产品的成功极为重要 3:准确而详细地说明需求 编写一份清晰、准确的需求文档是很困难的由于处理细节问题不但烦人而且又耗时,故很容易留下模糊不清的需求但是,在开发过程中,必须得解决这种模糊性和不准确性而你恰是为解决这些问题作出决定的最佳人选不然的话,你就只好靠开发人员去正确猜测了在需求规格说明中暂时加上待定(to be determined, TBD也可采用汉语拼音略写"DQD:待确定")的标志是个不错的办法用该标志可指明了哪些需要进一步探讨、分析或增加信息的地方不过,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而注上TBD标志尽量将每项需求的内容都阐述清楚,以便分析人员能准确的将其写进软件需求规格说明中如果你一时不能准确表述,那就得允许获取必要的准确信息这样一个过程通常使用所谓的原型技术通过开发的原型,你可以同开发人员一起反复修改,不断完善需求定义 4:及时地作出决定 正如一位建筑师为你修建房屋,分析人员将要求你做出一些选择和决定这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等有权做出决定的客户必须积极地对待这一切,尽快做处理、做决定因为开发人员通常只有等你做出了决定才能行动,而这种等待会延误项目的进展 5:尊重开发人员的需求可行性及成本评估 所有的软件功能都有其成本价格,开发人员最适合预算这些成本(尽管许多开发人员并不擅长评估预测)你所希望的某些产品特性可能在技术上行不通,或者实现它要付出极为高昂的代价而某些需求试图在操作环境中要求不可能达到的性能或试图得到一些根本得不到的数据,开发人员会对此作出负面的评价意见,你应该尊重他们的意见有时,你可以重新给出一个在技术上可行、实现上便宜的需求,例如,要求某个行为在"瞬间"发生是不可行的,但换种更具体的时间需求说法("在50ms以内",但若没有准确的技术分析不能轻易下结论),这就可以实现了 6: 划分需求优先级别 大多数项目没有足够的时间或资源来实现功能性的每个细节决定哪些特性是必要的,哪些是重要的,哪些是好的,是需求开发的主要部分只能由你来负责设定需求优先级,因为开发者并不可能按你的观点决定需求优先级开发者将为你确定优先级提供有关每个需求的花费和风险的信息当你设定优先级时,你帮助开发者确保在适当的时间内用最小的开支取得最好的效果在时间和资源限制下,关于所需特性能否完成或完成多少应该尊重开发人员的意见尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对这种现实的业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷 7:评审需求文档和原型 正如我们将在第1 4章讨论的,无论是正式的还是非正式的方式,对需求文档进行评审都会对软件质量提高有所帮助让客户参与评审才能真正鉴别需求文档是否的确完整、正确说明了期望的必要特性评审也给客户代表提供一个机会,给需求分析人员带来反馈信息以改进他们的工作如果你认为编写的需求文档不够准确,就有义务尽早告诉分析人员并为改进提供建议通过阅读需求规格说明,很难想象实际的软件是什么样子的更好的方法是先为产品开发一个原型这样你就能提供更有价值的反馈信息给开发人员,帮助他们更好地理解你的需求必须认识到:原型并非是一个实际产品,但开发人员能将其转变、扩充成功能齐全的系统 8:需求出现变更要马上联系 不断的需求变更会给在预定计划内完成高质量产品带来严重的负面影响变更是不可避免的,但在开发周期中变更越在晚期出现,其影响越大变更不仅会导致代价极高的返工,而且工期也会被迫延误,特别是在大体结构已完成后又需要增加新特性时所以一旦你发现需要变更需求时,请一定立即通知分析人员 9:应遵照开发组织处理需求变更的过程 为了将变更带来的负面影响减少到最低限度,所有的参与者必须遵照项目的变更控制过程这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后作出合适的决策以确定将某些变更引入项目中 10:尊重开发人员采用的需求工程过程 软件开发中最具挑战性的莫过于收集需求并确定其正确性分析人员采用的方法有其合理性也许你认为需求过程不太划算,但请相信花在需求开发上的时间是"很有价值"的如果你理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利尽管去询问分析人员为什么他们要收集某些信息,或参与与需求有关的活动 系统分析人员在开发过程中可能会遇到以下问题,一些很忙的客户可能不愿意积极参与需求过程,而缺少客户参与将很可能导致不理想的产品故一定要确保需求开发中的主要参与者都了解并接受他们的义务如果遇到分歧,通过协商以达成对各自义务的相互理解,这样能减少今后的摩擦 需求文档 需求开发的最终成果是:客户和开发小组对将要开发的产品达成一致协议协议综合了业务需求、用户需求和软件功能需求就像我们早先所看到的,项目视图和范围文档包含了业务需求,而使用实例文档则包含了用户需求你必须编写从使用实例派生出的功能需求文档,还要编写产品的非功能需求文档,包括质量属性和外部接口需求只有以结构化和可读性方式编写这些文档,并由项目的风险承担者评审通过后,各方面人员才能确信他们所赞同的需求是可靠的 你可以使用以下三种方法编写软件需求规格说明: 用好的结构化和自然语言编写文本型文档 建立图形化模型,这些模型可以描绘转换过程、系统状态和它们之间的变化、数据关系、逻辑流或对象类和它们的关系 编写形式化规格说明,这可以通过使用数学上精确的形式化逻辑语言来定义需求 由于形式化规格说明具有很强的严密性和精确度,因此,所使用的形式化语言只有极少数软件开发人员才熟悉,更不用说客户了虽然结构化的自然语言具有许多缺点,但在大多数软件工程中,它仍是编写需求文档最现实的方法包含了功能和非功能需求的基于文本的软件需求规格说明已经为大多数项目所接受图形化分析模型通过提供另一种需求视图,增强了软件需求规格说明

软件工程在软件开发相关论文中的应用实例怎么写

编程语言都没学好,软件工程学习和工作当然无从谈起!所以,谈不上批驳分以下几点说明:1-从事软件工作需要天份(通常说是逻辑思维能力),若有这方面的能力,编程就不会不喜欢,略花些时间就会有较大的长进所以,若又花了时间,还学不好,多半不适合做这项工作!1-软件工程较编程语言要求更高,它是指导你如何组织你的开发工作(外行就不要进来了!),以提高开发和维护效率为目标对抽象、综合能力均有高要求。1-但若并不从事软件开发或编程工作,这又是另一回事了!软件工程中有相当好的管理方法和思想,可将其应用于其它行业中有些管理思想本就来自于软件行业Rose用于软件系统的建模,即UML图形的绘制专业级Visio就UML而言,简易一些但它提供了其它图类的绘制功能如DFD,E-R图,数据库模型图,流程图,工作流等功能更全,更易使用----这两套软件使用均不难难在你有需图形表现的东西吗?----看你没人回复,所以胡说八道这些!仅供参考

1引言 1编写目的 2背景 3定义 4参考资料 22任务概述 1目标 2用户的特点 3假定和约束 33需求规定 1对功能的规定 2对性能的规定 1精度 2时间特性要求 3灵活性 3输人输出要求 4数据管理能力要求 5故障处理要求 6其他专门要求 54运行环境规定 1设备 2支持软件 3接口 4控制 5 软件需求说明书的编写提示1引言1编写目的说明编写这份软件需求说明书的目的,指出预期的读者。2背景说明:a. 待开发的软件系统的名称;b. 本项目的任务提出者、开发者、用户及实现该软件的计算中心或计算机网络;c. 该软件系统同其他系统或其他机构的基本的相互来往关系。 3定义列出本文件中用到的专门术语的定义和外文首字母组词的原词组。4参考资料列出用得着的参考资料,如:a. 本项目的经核准的计划任务书或合同、上级机关的批文;b. 属于本项目的其他已发表的文件;c. 本文件中各处引用的文件、资料、包括所要用到的软件开发标准。 列出这些文件资料的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。2任务概述1目标叙述该项软件开发的意图、应用目标、作用范围以及其他应向读者说明的有关该软件开发的背景材料。解释被开发软件与其他有关软件之间的关系。如果本软件产品是一项独立的软件,而且全部内容自含,则说明这一点。如果所定义的产品是一个更大的系统的一个组成部分,则应说明本产品与该系统中其他各组成部分之间的关系,为此可使用一张方框图来说明该系统的组成和本产品同其他各部分的联系和接口。|2用户的特点列出本软件的最终用户的特点,充分说明操作人员、维护人员的教育水平和技术专长,以及本软件的预期使甩频度。这些是软件设计工作的重要约束3假定和约束列出进行本软件开发工作的假定和约束,例如经费限制、开发期限等。3需求规定 1对功能的规定用列表的方式(例如IPO表即输入、处理、输出表的形式),逐项定量和定性地叙述对软件所提出的功能要求,说明输入什么量、经怎样的处理、得到什么输出,说明软件应支持的终端数和应支持的并行操作的用户数。2对性能的规定1精度说明对该软件的输入、输出数据精度的要求,可能包括传输过程中的精度。2时间特性要求说明对于该软件的时间特性要求,如对:a. 响应时间;b. 更新处理时间;c. 数据的转换和传送时间;d. 解题时间;等的要求。3灵活性说明对该软件的灵活性的要求,即当需求发生某些变化时,该软件对这些变化的适应能力,如:a. 操作方式上的变化;b. 运行环境的变化;c. 同其他软件的接口的变化;d. 精度和有效时限的变化;e. 计划的变化或改进。对于为了提供这些灵活性而进行的专门设计的部分应该加以标明。3输人输出要求解释各输入输出数据类型,并逐项说明其媒体、格式、数值范围、精度等。对软件的数据输出及必须标明的控制输出量进行解释并举例,包括对硬拷贝报告(正常结果输出、状态输出及异常输出)以及图形或显示报告的描述。4数据管理能力要求说明需要管理的文卷和记录的个数、表和文卷的大小规模,要按可预见的增长对数据及其分量的存储要求作出估算。5故障处理要求列出可能的软件、硬件故障以及对各项性能而言所产生的后果和对故障处理的要求。6其他专门要求如用户单位对安全保密的要求,对使用方便的要求,对可维护性、可补充性、易读性、可靠性、运行环境可转换性的特殊要求等。4运行环境规定1设备列出运行该软件所需要的硬设备。说明其中的新型设备及其专门功能,包括:a. 处理器型号及内存容量;b. 外存容量、联机或脱机、媒体及其存储格式,设备的型号及数量;c. 输入及输出设备的型号和数量,联机或脱机;d. 数据通信设备的型号和数量;e. 功能键及其他专用硬件2支持软件列出支持软件,包括要用到的操作系统、编译(或汇编)程序、测试支持软件等。3接口说明该软件同其他软件之间的接口、数据通信协议等。4控制说明控制该软件的运行的方法和控制信号,并说明这些控制信号的来源。

A、需求分析阶段:综合各个用户的应用需求。  B、在概念设计阶段:用E-R图来描述。  C、在逻辑设计阶段:将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。  D、在物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,设计索引,形成数据库内模式。一展开就够论文字数了

软件工程在软件开发相关论文中的应用实例分析

需求啦设计模块可维护可扩充啦太多了,你们学的知识都可以拿出来说。

上网搜一下项目设计的模版的,会有许多范例

软件工程在软件开发相关论文中的应用实例有哪些

概念 需求的定义包括从用户角度(系统的外部行为),以及从开发者角度(一些内部特性)来阐述需求 关键的问题是一定要编写需求文档我曾经目睹过一个项目中途更换了所有的开发者,客户被迫与新的需求分析者坐到一起系统的分析人员说:"我们想与你谈谈你的需求"客户的第一反应便是:"我已经将我的要求都告诉你们前任了,现在我要的就是给我编一个系统" 百事通 而实际上,UGGs,需求并未编写成文档,因此新的分析人员不得不从头做起所以如果只有一堆邮件、会谈记录或一些零碎的未整理的对话,你就确信你已明白用户的需求,那完全是自欺欺人 需求的另外一种定义认为需求是"用户所需要的并能触发一个程序或系统开发工作的说明"有些需求分析专家拓展了这个概念:"从系统外部能发现系统所具有的满足于用户的特点、功能及属性等"这些定义强调的是产品是什么样的,而并非产品是怎样设计、构造的而下面的定义则从用户需要进一步转移到了系统特性: 需求是指明必须实现什么的规格说明它描述了系统的行为、特性或属性,是在开发过程中对系统的约束 从上面这些不同形式的定义不难发现:并没有一个清晰、毫无二义性的"需求"术语存在,真正的"需求"实际上在人们的脑海中,这个人们主要是指客户,但一般情况下,用户并不能描述自己的需要,只就需要系统分析人员根据用户的自己语言的描述整理出相关的需要再进一步和客户核对系统分析员和客户需要确保所有项目风险承担者在描述需求的那些名词的理解上务必达成共识 任何文档形式的需求(例如如下将要描述的需求规格说明书)仅是一个模型,一种描述 需求分析的任务 开发软件系统最为困难的部分就是准确说明开发什么最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难 目前,国内产品的庞杂,一家企业可能有几个系统并立运行,它们之间接口是系统开发人员最头痛的问题 对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?而如果我们不知道什么对客户来说是重要的,那我们又如何能使客户感到满意呢? 然而,即便并非出于商业目的的软件需求也是必须的例如库、组件和工具这些供开发小组内部使用的软件当然你可能偶尔勿需文档说明就能与其他人意见较为一致,但更常见的是出现重复返工这种不可避免的后果,而重新编制代码的代价远远超过重写一份需求文档的代价,这些血的教训正在国内的软件开发者身上发生 近来,我遇到一个开发小组开发包括代码编辑器在内的一套内部使用的计算机辅助软件不幸的是,当他们开发完这个工具后,发现这个工具不能打印出源代码文件,使用者当然希望有这个功能结果这个小组只好手工抄写源代码文档以供代码检查这说明那怕需求明确无误并构思准确,如果我们没有编写文档,软件达不到期望目标也只能是咎由自取了 相反的情况,我曾见一个要集成到"错误跟踪系统"中的简单界面写了一页需求说明而操作系统系统管理员在为处理脚本时发现简单的一张需求清单竟是如此有用他们依据需求对系统进行测试时,此系统不仅非常清晰地实现了所有必需功能,而且未发现任何错误 事实上,需求文档在开发过程中一直起指导作用 需求分析过程 可把整个软件需求工程研究领域划分为需求开发和需求管理两部分更合适,如图4-1所示: 图4-1 需求工程域的层次分解示意图 需求开发可进一步分为:问题获取、分析、编写规格说明和验证四个阶段这些子项包括软件类产品中需求收集、评价、编写文档等所有活动需求开发活动包括以下几个方面: 确定产品所期望的用户类别 获取每个用户类的需求 了解实际用户任务和目标以及这些任务所支持的业务需求 分析源于用户的信息以区别用户任务需求、功能需求、业务规则、质量属性、建议解决方法和附加信息 将系统级的需求分为几个子系统,并将需求中的一部份分配给软件组件 了解相关质量属性的重要性 商讨实施优先级的划分 将所收集的用户需求编写成文档和模型 评审需求规格说明,确保对用户需求达到共同的理解与认识,并在整个开发小组接受说明之前将问题都弄清楚 需求管理需要"建立并维护在软件工程中同客户达成的合同" 这种合同都包含在编写的需求文档与模型中客户的接受仅是需求成功的一半,开发人员也必须能够接受他们,并真正把需求应用到产品中通常的需求管理活动包括: 定义需求基线(迅速制定需求文档的主体) 评审提出的需求变更、评估每项变更的可能影响从而决定是否实施它 以一种可控制的方式将需求变更融入到项目中 使当前的项目计划与需求一致 估计变更需求所产生影响并在此基础上协商新的承诺,这种承诺具体体现在项目解决方案上 让每项需求都能与其对应的设计、源代码和测试用例联系起来以实现跟踪 在整个项目过程中跟踪需求状态及其变更情况 以上几点说明是我总结了成功实施项目后系统分析人员的经验,同时也根据国内外的其他系统实施的相关成功经验,进行了总结 需求的类型 下面这些定义是需求工程领域中常见术语的定义 软件需求包括三个不同的层次:业务需求、用户需求和功能需求(也包括非功能需求) 业务需求(business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明 用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本说明中予以说明 功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求 在软件需求规格说明书 (SRS)中说明的功能需求充分描述了软件系统所应具有的外部行为软件需求规格说明在开发、测试、质量保证、项目管理以及相关项目功能中都起了重要的作用对一个大型系统来说,软件功能需求也许只是系统需求的一个子集,因为另外一些可能属于子系统(或软件部件) 作为功能需求的补充,软件需求规格说明还应包括非功能需求,它描述了系统展现给用户的行为和执行的操作等它包括产品必须遵从的标准、规范和合约;外部界面的具体细节;性能要求;设计或实现的约束条件及质量属性所谓约束是指对开发人员在软件产品设计和构造上的限制质量属性是通过多种角度对产品的特点进行描述,从而反映产品功能多角度描述产品对用户和开发人员都极为重要 下面以一个字处理程序为例来说明需求的不同种类业务需求可能是:"用户能有效地纠正文档中的拼写错误",该产品的包装盒封面上可能会标明这是个满足业务需求的拼写检查器而对应的用户需求可能是"找出文档中的拼写错误并通过一个提供的替换项列表来供选择替换拼错的词"同时,该拼写检查器还有许多功能需求,如找到并高亮度提示错词的操作;显示提供替换词的对话框以及实现整个文档范围的替换 从以上定义可以发现,需求并未包括设计细节、实现细节、项目计划信息或测试信息需求与这些没有关系,它关注的是充分说明你究竟想开发什么项目也有其它方面的需求,如开发环境需求或发布产品及移植到支撑环境的需求尽管这些需求对项目成功也至关重要,但它们并非本书所要讨论的 需求分析的原则 不重视需求过程的项目队伍将自食其果需求工程中的缺陷将给项目成功带来极大风险,这里的"成功"是指推出的产品能以合理的价格、及时地在功能、质量上完全满足用户的期望下面将讨论一些需求风险 不适当的需求过程所引起的一些风险: 无足够用户参与 客户经常不明白为什么收集需求和确保需求质量需花费那么多功夫,开发人员可能也不重视用户的参与究其原因:一是因为开发人员感觉与用户合作不如编写代码有意思;二是因为开发人员觉得已经明白用户的需求了在某些情况下,与实际使用产品的用户直接接触很困难,而客户也不太明白自己的真正需求但还是应让具有代表性的用户在项目早期直接参与到开发队伍中,并一同经历整个开发过程 系统人员在实践过程中,也有些感觉,在实施一家公司的项目时,若无足够的用户参与,系统人员获得的需求是片面的,不完整的,这样系统在需求之初就埋下风险 用户需求的不断增加 在开发中若不断地补充需求,项目就越变越庞大以致超过其计划及预算范围计划并不总是与项目需求规模与复杂性、风险、开发生产率及需求变更实际情况相一致,这使得问题更难解决实际上,问题根源在于用户需求的改变和开发者对新需求所作的修改 要想把需求变更范围控制到最小,必须一开始就对项目视图、范围、目标、约束限制和成功标准给予明确说明,并将此说明作为评价需求变更和新特性的参照框架说明中包括了对每种变更进行变更影响因素分析的变更控制过程,有助于所有风险承担者明白业务决策的合理性,即为何进行某些变更,相应消耗的时间、资源或特性上的折中 产品开发中不断延续的变更会使其整体结构日渐紊乱,补丁代码也使得整个程序难以理解和维护插入补丁代码使模块违背强内聚、松耦合的设计原则,特别是如果项目配置管理工作不完善的话,收回变更和删除特性会带来问题如果你尽早地区别这些可能带来变更的特性,你就能开发一个更为健壮的结构,并能更好地适应它这样设计阶段需求变更不会直接导致补丁代码,同时也有利于减少因变更导致质量的下降 模棱两可的需求 模棱两可是需求规格说明中最为可怕的问题它的一层含义是指诸多读者对需求说明产生了不同的理解;另一层含义是指单个读者能用不止一个方式来解释某个需求说明 模棱两可的需求会使不同的风险承担者产生不同的期望,它会使开发人员为错误问题而浪费时间,并且使测试者与开发者所期望的不一致一位系统测试人员曾告诉我,她所在的测试组经常对需求理解有误,以致不得不重写许多测试用例并重做许多测试 处理模棱两可需求的一种方法是组织好负责从不同角度审查需求的队伍仅仅简单浏览一下需求文档是不能解决模棱两可问题的如果不同的评审者从不同的角度对需求说明给予解释,但每个评审人员都真正了解需求文档,这样二义性就不会直到项目后期才被发现,那时再发现的话会使得更正代价很大 不必要的特性 "画蛇添足"是指开发人员力图增加一些"用户欣赏"但需求规格说明中并未涉及的新功能经常发生的情况是用户并不认为这些功能性很有用,以致在其上耗费的努力"白搭"了开发人员应当为客户构思方案并为他们提供一些具有创新意识的思路,具体提供哪些功能要在客户所需与开发人员在允许时限内的技术可行性之间求得平衡,开发人员应努力使功能简单易用,而不要未经客户同意,擅自脱离客户要求,自作主张 同样,客户有时也可能要求一些看上去很"酷",但缺乏实用价值的功能,而实现这些功能只能徒耗时间和成本为了将"画蛇添足"的危害尽量减小,应确信:你明白为什么要包括这些功能,以及这些功能的"来龙去脉",这样使得需求分析过程始终是注重那些能使用户完成他们业务任务的核心功能 过于精简的规格说明 有时,客户并不明白需求分析有如此重要,于是只作一份简略之至的规格说明,仅涉及了产品概念上的内容,然后让开发人员在项目进展中去完善,结果很可能出现的是开发人员先建立产品的结构之后再完成需求说明这种方法可能适合于尖端研究性的产品或需求本身就十分灵活的情况但在大多数情况下,这会给开发人员带来挫折(使他们在不正确的假设前提和极其有限的指导下工作),也会给客户带来烦恼(他们无法得到他们所设想的产品) 忽略了用户分类 大多数产品是由不同的人使用其不同的特性,使用频繁程度也有所差异,使用者受教育程度和经验水平也不尽相同如果你不能在项目早期就针对所有这些主要用户进行分类的话,必然导致有的用户对产品感到失望例如,菜单驱动操作对高级用户太低效了,但含义不清的命令和快捷键又会使不熟练的用户感到困难 不准确的计划 据统计,导致需求过程中软件成本估计极不准确的原因主要有以下五点:频繁的需求变更、遗漏的需求、与用户交流不够、质量低下的需求规格说明和不完善的需求分析 对不准确的要求所提问题的正确响应是"等我真正明白你的需求时,我就会来告诉你"基于不充分信息和未经深思的对需求不成熟的估计很容易为一些因素左右要作出估计时,最好还是给出一个范围未经准备的估计通常是作为一种猜测给出的,听者却认为是一种承诺因此我们要尽力给出可达到的目标并坚持完成它 需求分析人员和用户的合作关系 优秀的软件产品是建立在优秀的需求基础之上的而高质量的需求来源于客户与开发人员之间有效的交流与合作通常,开发人员与客户或客户代理人,如市场人员间的关系反而会成为一种对立关系双方的管理者都只想自己的利益而搁置用户提供的需求从而产生摩擦,在这种情况下,不会给双方带来一点益处 只有当双方参与者都明白要成功自己需要什么,同时也应知道要成功合作方需要什么时,才能建立起一种合作关系由于项目压力与日渐增,所有风险承担者有着一个共同的目标这一点容易被遗忘其实大家都想开发出一个既能实现商业价值,又能满足用户需要,还能使开发者感到满足的优秀软件产品 软件客户需求权利书列出了十条关于客户在项目需求工程实施中与分析人员、开发人员交流时的合法要求每一项权利都对应着软件开发人员、分析人员的义务而软件客户需求义务书也列出了十条关于客户在需求过程中应承担的义务如果愿意,可以将其作为开发人员的权利书 客户有如下权利: 1:要求分析人员使用符合客户语言习惯的表达 需求讨论应集中于业务需要和任务,故要使用业务术语,你应将其教给分析人员,而你 不一定要懂得计算机的行业术语 2:要求分析人员了解客户的业务及目标 通过与用户交流来获取用户需求、分析人员才能更好地了解你的业务任务和怎样才能使产品更好地满足你的需要这将有助于开发人员设计出真正满足你的需要并达到你期望的优秀软件为帮助开发人员和分析人员,可以考虑邀请他们观察你或你的同事是怎样工作的如果新开发系统是用来替代已有的系统,那么开发人员应使用一下目前的系统,这将有利于他们明白目前系统是怎样工作的,其工作流程的情况,以及可供改进之处 3:要求分析人员编写软件需求规格说明 分析人员要把从你和其他客户那里获得的所有信息进行整理,以区分开业务需求及规范、功能需求、质量目标、解决方法和其它信息通过这些分析就能得到一份软件需求规格说明而这份软件需求规格说明便在开发人员和客户之间针对要开发的产品内容达成了协议软件需求规格说明书可以用一种你认为易于翻阅和理解的方式组织编写要评审编写出的规格说明以确保它们准确而完整地表达了你的需求一份高质量的软件需求规格说明能有助于开发人员开发出真正需要的产品 4:要求得到需求工作结果的解释说明 分析人员可能采用了多种图表作为文字性软件需求规格说明的补充因为如工作流程图那样的图表能很清楚地描述出系统行为的某些方面所以需求说明中的各种图表有着极高的价值虽然它们不太难于理解,但是你很可能对此并不熟悉因此可以要求分析人员解释说明每张图表的作用或其它的需求开发工作结果和符号的意义,及怎样检查图表有无错误及不一致等 5:要求开发人员尊重你的意见 如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍,共同合作能使大家"兼听则明"参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间同样,客户也应对开发人员为项目成功这一共同目标所作出的努力表示尊重与感激 6:要求开发人员对需求及产品实施提供建议,拿出主意 通常,客户所说的"需求"已是一种实际可能的实施解决方案,分析人员将尽力从这些解决方法中了解真正的业务及其需求,同时还应找出已有系统不适合当前业务之处,以确保产品不会无效或低效在彻底弄清业务领域内的事情后,分析人员有时就能提出相当好的改进方法有经验且富有创造力的分析人员还能提出增加一些用户并未发现的很有价值的系统特性 7:描述产品易使用的特性 你可以要求分析人员在实现功能需求的同时还要注重软件的易用性因为这些易用特性或质量属性能使你更准确、高效地完成任务例如,客户有时要求产品要"用户友好"或"健壮"或"高效率",但这对于开发人员来说,太主观了并无实用价值正确的应是:分析人员通过询问和调查了解客户所要的友好、健壮、高效所包含的具体特性 8:调整需求,允许重用已有的软件组件 需求通常要有一定的灵活性分析人员可能发现已有的某个软件组件与你描述的需求很相符在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够在新系统开发中重用一些已有的软件如果有可重用的机会出现,同时你又能调整你的需求说明,那就能降低成本和节省时间,而不必严格按原有的需求说明开发所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合你所需的特性,这时一定程度上的需求灵活性就显得极为重要了 9:获得满足客户功能和质量要求的系统 每个人都希望项目获得成功但这不仅要求你要清晰地告知开发人员关于系统"做什么"所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制一定要明确说明你的假设和潜在的期望否则,开发人员开发出的产品很可能无法让你满意 客户有下列义务: 1:给分析人员讲解你的业务 分析人员要依靠你给他们讲解的业务概念及术语但你不能指望分析人员会成为该领域的专家,而只能让他们真正明白你的问题和目标不要期望分析人员能把握你们业务的细微与潜在之处,他们很可能并不知道那些对于你和你的同事来说理所当然的"常识" 2:抽出时间清楚地说明并完善需求 客户很忙,经常在最忙的时候还得参与需求开发但无论如何,你有义务抽出时间参与"头脑风暴"会议的讨论,接受采访或其它获取需求的活动有时分析人员可能先以为明白了你的观点,而过后发现还需要你的讲解这时,请耐心一些对待需求和需求的精化工作过程中的反复,因为它是人们交流中的很自然的现象,何况这对软件产品的成功极为重要 3:准确而详细地说明需求 编写一份清晰、准确的需求文档是很困难的由于处理细节问题不但烦人而且又耗时,故很容易留下模糊不清的需求但是,在开发过程中,必须得解决这种模糊性和不准确性而你恰是为解决这些问题作出决定的最佳人选不然的话,你就只好靠开发人员去正确猜测了在需求规格说明中暂时加上待定(to be determined, TBD也可采用汉语拼音略写"DQD:待确定")的标志是个不错的办法用该标志可指明了哪些需要进一步探讨、分析或增加信息的地方不过,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而注上TBD标志尽量将每项需求的内容都阐述清楚,以便分析人员能准确的将其写进软件需求规格说明中如果你一时不能准确表述,那就得允许获取必要的准确信息这样一个过程通常使用所谓的原型技术通过开发的原型,你可以同开发人员一起反复修改,不断完善需求定义 4:及时地作出决定 正如一位建筑师为你修建房屋,分析人员将要求你做出一些选择和决定这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等有权做出决定的客户必须积极地对待这一切,尽快做处理、做决定因为开发人员通常只有等你做出了决定才能行动,而这种等待会延误项目的进展 5:尊重开发人员的需求可行性及成本评估 所有的软件功能都有其成本价格,开发人员最适合预算这些成本(尽管许多开发人员并不擅长评估预测)你所希望的某些产品特性可能在技术上行不通,或者实现它要付出极为高昂的代价而某些需求试图在操作环境中要求不可能达到的性能或试图得到一些根本得不到的数据,开发人员会对此作出负面的评价意见,你应该尊重他们的意见有时,你可以重新给出一个在技术上可行、实现上便宜的需求,例如,要求某个行为在"瞬间"发生是不可行的,但换种更具体的时间需求说法("在50ms以内",但若没有准确的技术分析不能轻易下结论),这就可以实现了 6: 划分需求优先级别 大多数项目没有足够的时间或资源来实现功能性的每个细节决定哪些特性是必要的,哪些是重要的,哪些是好的,是需求开发的主要部分只能由你来负责设定需求优先级,因为开发者并不可能按你的观点决定需求优先级开发者将为你确定优先级提供有关每个需求的花费和风险的信息当你设定优先级时,你帮助开发者确保在适当的时间内用最小的开支取得最好的效果在时间和资源限制下,关于所需特性能否完成或完成多少应该尊重开发人员的意见尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对这种现实的业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷 7:评审需求文档和原型 正如我们将在第1 4章讨论的,无论是正式的还是非正式的方式,对需求文档进行评审都会对软件质量提高有所帮助让客户参与评审才能真正鉴别需求文档是否的确完整、正确说明了期望的必要特性评审也给客户代表提供一个机会,给需求分析人员带来反馈信息以改进他们的工作如果你认为编写的需求文档不够准确,就有义务尽早告诉分析人员并为改进提供建议通过阅读需求规格说明,很难想象实际的软件是什么样子的更好的方法是先为产品开发一个原型这样你就能提供更有价值的反馈信息给开发人员,帮助他们更好地理解你的需求必须认识到:原型并非是一个实际产品,但开发人员能将其转变、扩充成功能齐全的系统 8:需求出现变更要马上联系 不断的需求变更会给在预定计划内完成高质量产品带来严重的负面影响变更是不可避免的,但在开发周期中变更越在晚期出现,其影响越大变更不仅会导致代价极高的返工,而且工期也会被迫延误,特别是在大体结构已完成后又需要增加新特性时所以一旦你发现需要变更需求时,请一定立即通知分析人员 9:应遵照开发组织处理需求变更的过程 为了将变更带来的负面影响减少到最低限度,所有的参与者必须遵照项目的变更控制过程这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,最后作出合适的决策以确定将某些变更引入项目中 10:尊重开发人员采用的需求工程过程 软件开发中最具挑战性的莫过于收集需求并确定其正确性分析人员采用的方法有其合理性也许你认为需求过程不太划算,但请相信花在需求开发上的时间是"很有价值"的如果你理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利尽管去询问分析人员为什么他们要收集某些信息,或参与与需求有关的活动 系统分析人员在开发过程中可能会遇到以下问题,一些很忙的客户可能不愿意积极参与需求过程,而缺少客户参与将很可能导致不理想的产品故一定要确保需求开发中的主要参与者都了解并接受他们的义务如果遇到分歧,通过协商以达成对各自义务的相互理解,这样能减少今后的摩擦 需求文档 需求开发的最终成果是:客户和开发小组对将要开发的产品达成一致协议协议综合了业务需求、用户需求和软件功能需求就像我们早先所看到的,项目视图和范围文档包含了业务需求,而使用实例文档则包含了用户需求你必须编写从使用实例派生出的功能需求文档,还要编写产品的非功能需求文档,包括质量属性和外部接口需求只有以结构化和可读性方式编写这些文档,并由项目的风险承担者评审通过后,各方面人员才能确信他们所赞同的需求是可靠的 你可以使用以下三种方法编写软件需求规格说明: 用好的结构化和自然语言编写文本型文档 建立图形化模型,这些模型可以描绘转换过程、系统状态和它们之间的变化、数据关系、逻辑流或对象类和它们的关系 编写形式化规格说明,这可以通过使用数学上精确的形式化逻辑语言来定义需求 由于形式化规格说明具有很强的严密性和精确度,因此,所使用的形式化语言只有极少数软件开发人员才熟悉,更不用说客户了虽然结构化的自然语言具有许多缺点,但在大多数软件工程中,它仍是编写需求文档最现实的方法包含了功能和非功能需求的基于文本的软件需求规格说明已经为大多数项目所接受图形化分析模型通过提供另一种需求视图,增强了软件需求规格说明

妈的你们也是长大的?

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

编程语言都没学好,软件工程学习和工作当然无从谈起!所以,谈不上批驳分以下几点说明:1-从事软件工作需要天份(通常说是逻辑思维能力),若有这方面的能力,编程就不会不喜欢,略花些时间就会有较大的长进所以,若又花了时间,还学不好,多半不适合做这项工作!1-软件工程较编程语言要求更高,它是指导你如何组织你的开发工作(外行就不要进来了!),以提高开发和维护效率为目标对抽象、综合能力均有高要求。1-但若并不从事软件开发或编程工作,这又是另一回事了!软件工程中有相当好的管理方法和思想,可将其应用于其它行业中有些管理思想本就来自于软件行业Rose用于软件系统的建模,即UML图形的绘制专业级Visio就UML而言,简易一些但它提供了其它图类的绘制功能如DFD,E-R图,数据库模型图,流程图,工作流等功能更全,更易使用----这两套软件使用均不难难在你有需图形表现的东西吗?----看你没人回复,所以胡说八道这些!仅供参考

软件工程在软件开发相关论文中的应用有哪些案例

你妈的 你是长大的吧。。

妈的你们也是长大的?

编程语言都没学好,软件工程学习和工作当然无从谈起!所以,谈不上批驳分以下几点说明:1-从事软件工作需要天份(通常说是逻辑思维能力),若有这方面的能力,编程就不会不喜欢,略花些时间就会有较大的长进所以,若又花了时间,还学不好,多半不适合做这项工作!1-软件工程较编程语言要求更高,它是指导你如何组织你的开发工作(外行就不要进来了!),以提高开发和维护效率为目标对抽象、综合能力均有高要求。1-但若并不从事软件开发或编程工作,这又是另一回事了!软件工程中有相当好的管理方法和思想,可将其应用于其它行业中有些管理思想本就来自于软件行业Rose用于软件系统的建模,即UML图形的绘制专业级Visio就UML而言,简易一些但它提供了其它图类的绘制功能如DFD,E-R图,数据库模型图,流程图,工作流等功能更全,更易使用----这两套软件使用均不难难在你有需图形表现的东西吗?----看你没人回复,所以胡说八道这些!仅供参考

相关百科
热门百科
首页
发表服务