优质使用软件感受心得范文word版本 12页Word文档格式.docx
- 文档编号:16162224
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:11
- 大小:28.63KB
优质使用软件感受心得范文word版本 12页Word文档格式.docx
《优质使用软件感受心得范文word版本 12页Word文档格式.docx》由会员分享,可在线阅读,更多相关《优质使用软件感受心得范文word版本 12页Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
最后是
需求的确认,因为需求的不稳定性往往随着时间的推移产生变动,使之难以确认。
为了克服以上的问题,必须有组织的执行需求的获取活动。
1.2需求分析的原则
(1)需求分析必须能够表达和理解问题的数据域和功能域。
数据域包括数据流、数据内容和数据结构,而功能域反映上述3方面的控制信息。
(2)需求分析要把一个复杂问题按功能进行分解并逐层细化。
通常,软件系统要处理的问题如果太大、太复杂就很难理解,若划分成几部分,并确定各部分间的接口,就可完成整体的功能。
在需求分析过程中,软件系统的用户需求中的数据、功能和行为都应细化。
(3)需求建模。
模型可以帮助系统分析人员更好地理解软件系统的数据、功能和行为,这些模型是软件工程中下一阶段进行系统设计的基础。
1.3需求分析的注意事项
(1)确定详细的需求,否则经费就算不准。
经费估计错误的原因多为:
用户需求频繁变动、遗漏重要需求、与用户交流不够、需求规格说明书质量低劣、需求分析不充分等。
(2)在编写需求规格说明书之前,应明确要解决的问题。
在试图解决问题之前,要保证已考察了全部可替代的方案。
要搞清哪地方有问题,真正的问题出在哪里。
这样,在编写需求规格说明书时做到有的放矢,把存在的问题暴露出来。
(3)立即确定需求,并记录下该需求的背景。
没有明确问题,就进行下一步的设计,想回避矛盾,可能会带来更大的问题。
用户不确定需求,软件设计人员自己决定需求,将会带来严重的问题。
为了避免将来可能出现的问题和软件工程项目能够尽快地进入到下一个阶段的系统设计中,要尽可能迅速地把用户需求确定下来。
任何决定总比没有决定要好。
(4)一旦在需求规格说明书中发现问题,立即改正。
如果把存在的问题拖延到系统设计阶段去改正,就可能要花数倍的时间和精力才能纠正同一错误。
(5)在众多用户需求中确定各个需求的优先顺序,并确定可能存在的子集,以便为软件设计、实施和项目管理等后续阶段提供有利条件。
(6)需求分析时,不要进行系统设计的工作。
需求分析的主要目的是确定软件系统的外部特征,充分反映软件系统应有的面貌,便于让软件设计人员根据
用户需求,去全面地考虑软件系统的体系结构、算法等。
在需求分析阶段要集中精力解决用户需求存在的问题,尽可能避免产生遗留问题。
(7)对于复杂的软件系统,要从多种视角进行需求分析。
根据软件系统的本质,切合实际地组织多种视角的需求。
例如,可从根据用户的类型,或根据响应的类型,或根据对象的软件工程案例教程类型,或根据系统的模式等视角来组织用户需求。
通过多个视角来研究用户需求问题,把可得到的不同的“投影”组合起来形成完整系统的描述。
当试图从整体观点来描述软件系统发生困难,或者有可能发生错误,或者很有可能遗失软件系统的某些特性。
而从不同的视角来描述软件系统,因为每个视角限制了研究的范围并能够将注意力集中于此,所以很容易保证所研究的问题是真正完整的。
(8)重视形式化方法,但不放弃自然语言。
为了用户需求表达的精确性和方便用户的可理解性,一个好方法是把自然语言的表达与形式化规格说明并立,互相对照,而且在一般情况下,先用自然语言写出,再给出它的形式模型。
(9)用户需求中不应存在“待确定”的条款。
如若有这种需要,应同时说明:
何时由谁来解决该问题。
1.4用户需求的类型
需求分析是从用户最初的非形式化需求到满足用户要求的软件产品的映射过程。
它实际上是一个对用户意图不断进行揭示和判断的过程,其目的在于细化、精化软件的作用范围,确定拟开发软件的功能和性能、约束、环境等。
可将用户的需求分为两大类:
功能性需求和非功能性需求。
(1)功能性需求。
功能性需求主要说明了系统各功能部件与环境之间的相互作用的本质,即拟开发软件在职能上实际应做到什么。
一般来说,它是用户最主要的需求,通常包括系统的输入、系统能完成的功能、系统的输出以及其他反应。
在功能性需求中还应包括备选功能的定义识别。
(2)非功能性需求。
非功能性要求主要从各个角度对所考虑的可能的解决方案起约束和限制作用。
1.5需求分析的方法
在软件工程中,常用的需求分析方法有面向数据流的结构化分析方法(简称SA)和面向对象的分析方法(简称OOA)。
此外,还有以用户为中心的需求分析
方法。
这些方法都采用图文结合的方式,可以直观地描述软件的逻辑模型。
这里仅介绍结构化分析方法和以用户为中心的需求分析方法。
2.软件测试
2.1软件测试概述
软件本身无形态,它是复杂的知识高度密集的逻辑产品,其中不可能没有错误。
软件实施工程过程中必须伴随着软件质量保证的活动,而软件测试是主要活动之一。
在开发软件的过程中,人们使用了许多保证软件质量的方法分析、设计和实现软件,但难免还会在工作中犯错误。
这样,在软件产品中就会隐藏许多错误和缺陷。
对于规模大、复杂性高的软件更是如此。
在这些错误中,有些是致命的错误,如果不排除,就会导致生命与财产的重大损失。
2.2软件测试的目的
测试的目的是“说明程序能正确地执行应有的功能”,还是“表明程序没有错误”?
基于不同的立场,存在着两种完全不同的测试目的。
从用户的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可以接受该产品。
而从软件开发者的角度出发,则希望测试成为表明软件产品中不存在错误的过程,验证该软件已正确地实现了用户的要求,确立人们对软件质量的信心。
因此,他们会选择那些导致程效概率小的测试用例,回避那些易于暴露程序错误的测试用例。
同时,也不会刻意去检测、排除程序中可能包含的副作用。
显然,这样的测试对完善和提高软件质量毫无价值。
因为在程序中往往存在着许多预料不到的问题,可能会被疏漏,许多隐藏的错误只有在特定的环境下才可能暴露出来。
如果不把着眼点放在尽可能查找错误这样一个基础上,这些隐藏的错误和缺陷就查不出来,会遗留到运行阶段中去。
如果站在用户的角度,替他们设想,就应当把测试活动的目标对准揭露程序中存在的错误。
在选取测试用例时,考虑那些易于发现程序错误的数据。
2.3软件测试的原则
(1)应当把“尽早地和不断地进行软件测试”作为软件开发者的座右铭。
由于原始问题的复杂性、软件的复杂性和抽象性、软件开发各个阶段工作的多样性,以及参加开发各种层次人员之间工作的配合关系等因素,使得开发的每个环节都可能产生错误。
所以不应把软件测试仅仅看成是软件开发的一个独立阶段,
而应当把它贯穿到软件开发的各个阶段中。
在需求分析阶段就应该制订测试计划,以保证每个需求,每个设计单元都是可测试的,便于测试。
坚持在软件开发的各个阶段的技术评审,这样才能在开发过程中尽早发现和预防错误,把出现的错误克服在早期,杜绝某些隐患,提高软件质量。
(2)测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成。
测试以前应当根据测试的要求,选择在测试过程中使用的测试用例(TestCase)。
测试用例主要用来检验程序员编制的程序,因此不但需要测试的输入数据,而且需要针对这些输入数据的预期输出结果。
如果对测试输入数据没有给出预期的程序输出结果,那么就缺少了检验实测结果的基准,就有可能把一个似是而非的错误结果当成正确结果。
(3)程序员应避免检查自己的程序。
测试工作需要严格的作风、客观的态度和冷静的情绪。
自己测试自己的软件不容易发现错误,程序员应避免测试自己的程序。
测试是一种“挑剔性”的行为,人们常常由于各种原因具有一种不愿否定自己工作的心理,认为揭露自己程序中的问题总不是一件愉快的事,这一心理状态就成为测试自己程序的障碍。
心理状态和思维定式是测试自己程序的两大障碍,应由别人或另外的机构来测试程序员编写的程序。
另外,程序员对软件规格说明理解错误而引入的错误则更难发现。
如果由别人来测试程序员编写的程序,可能会更客观、更有效,并更容易取得成功。
要注意的是,这点不能与程序的调试(Debugging)互相混淆,调试由程序员自己来做可能更有效。
(4)在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
合理的输入条件是指能验证程序正确的输入条件,而不合理的输入条件是指异常的、临界的、可能引起问题变异的输入条件。
在测试程序时,人们常常倾向于过多地考虑合法的和期望的输入条件,以检查程序是否做了它应该做的事情,而忽视了不合法的和预想不到的输入条件。
事实上,软件在投入运行以后,用户的使用往往不遵循事先的约定,使用了一些意外的输入,如用户软件工程案例教程在键盘上按错了键或打入了非法的命令。
如果开发的软件遇到这种情况时不能做出适当的反应,给出相应的信息,那么就容易产生故障,轻则给出错误的结果,重则导致软件失效。
因此,软件系统处理非法命令的能力也必须在测试时受到检验。
用不合理的输件测试程序时,往往比用合理的输入条件进行测试能发现更多
篇二:
软件实训心得体会
学生管理系统实训心得
通过为学期期的实训,我学习了很多关于很多的知识。
在老师的正确指导下,顺利的完成了我的实训内容。
在此,也有同学的帮助,在他们的帮助下我也受益匪浅。
最终,能顺利完成实训的任务也高兴了。
在实训生活中,我了解开发项目的需求、设计、实现、确认以及维护等活动整个过程,让自己开始懂得一点软件工程的知识点。
首先,了解需求分析的重要性,比如:
需求分析就是分析软件用户的需求是什么.如果投入大量的人力,物力,财力,时间,开发出的软件却没人要,那所有的投入都是徒劳.如果费了很大的精力,开发一个软件,最后却不满足用户的要求,从而要重新开发过,这种返工是让人痛心疾首的.(相信大家都有体会)比如,用户需要一个forlinux的软件,而你在软件开发前期忽略了软件的运行环境,忘了向用户询问这个问题,而想当然的认为是开发forwindows的软件,当你千辛万苦地开发完成向用户提交时才发现出了问题,那时候你是欲哭无泪了,恨不得找块豆腐一头撞死。
所以,需求分析是成功的第一步,就是要全面地理解用户的各项要求,并准确地表达所接受的用户需求。
然后呢?
确实客户的需求的以后我们要做什么呢,那当然是设计和分析。
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。
软件设计一般分为总体设计和详细设计。
好的软件设计将为软件程序编写打下良好的基础。
接下来是代码实现,此阶段是将软件设计的结果转换成计算机可运行的程序代码,我们这个项目为五个模块,分别为五个小组成员完成。
这阶段我学到很多编程的思想,如:
分层思想、mvc、ssh的整合、dao的编写。
编号程序之后就是软件测试了,此时在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。
整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。
测试的方法主要有白盒测试和黑盒测试两种。
在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
最后是软件维护,它是软件生命周期中持续时间最长的阶段。
在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。
要延续软件的使用寿命,就必须对软件进行维护。
但是,我深深体会到了在许多方面的欠缺和不足,比如:
在需求分析时,由于自己的实践经验不够,很难分析需求到位;
在编写代码时,由于自己技术知识水平不广,常常遇到技术难题;
还有自己没有
良好的编程习惯,不注释,有时连自己也看懵了;
编程的结构不好,维修和修改代码是很慢。
这次实训让我意识到了自己做为计算机软件工程专业的学生,要想在以后的职业中崭露头角,除了要有过硬的理论知识,健康的体魄外,还必须具备良好的心理素质,使自己在以后的途中无论经历什么样的困难,都立于不败之地。
“纸上得来终觉浅,绝知此事要躬行!
”在这短短的时间里,让我深深的感觉到自己在实际应用中所学专业知识的匮乏。
让我真真领悟到“学无止境”这句话的涵义。
而所学的,都是课本上没有而对我们又非常实用的东西,这又给我们的实训增加了浓墨淡采的光辉。
我懂得了实际生活中,专业知识是怎样应用与实践的。
在这次实训中,我不仅知道了职业生涯所需具备的专业知识,而且让我深深体会到一个团队中各成员合作的重要性,要善于团队合作,善于利用别人的智慧,这才是大智慧。
靠单一的力量是很难完成一个大项目的,在进行团队合作的时候,还要耐心听取每个成员的意见,使我们的组合达到更加完美。
实训过程中,除了要专业知识,包括人际交往,沟通方式及相关礼节方面的内容,对于团队开发来说,团结一致使我深有体会。
团队的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具体实践中,不仅加深我对理论的掌握和运用,还让我拥有了一次又一次难忘的开发经理,这是也是实训最大的收获。
这次实训带给我太多的感触,它让我知道工作上的辛苦,事业途中的艰辛。
让我知道了实际的工作并不像在学校学习那样轻松。
让我学到了很多课堂上更本学不到的东西,仿佛自己一下子成熟了,懂得了做人做事的道理,也懂得了学习的意义,时间的宝贵,人生的真谛。
明白人世间一生不可能都是一帆风顺的,只要勇敢去面对人生中的每个驿站!
这让我清楚地感到了自己肩上的重任,看清了自己的人生方向,也让我认识到了做软件应支持仔细认真的工作态度,要有一种平和的心态和不耻下问的精神,不管遇到什么事都要总代表地去思考,多听别人的建议,不要太过急燥。
人非生而知之,虽然我现在的知识结构还很差,但是我知道要学的知识,一靠努力学习,二靠潜心实践。
没有实践,学习就是无源之水,无本之木。
这次实训让我在一瞬间长大:
我们不可能永远呆在象牙塔中,过着一种无忧无虑的生活,我们总是要走上社会的,而社会,就是要靠我们这些年轻的一代来推动。
这就是我们不远千里来实训的心得和感受,而不久后的我,面临是就业压力,还是继续深造,我想我都应该好好经营自己的时间,充实、完善自我,不要让自己的人生留下任何空白!
从初出茅庐,到现在可以熟练的按照流程开发软件,这都与我组每个成员的努力是分不开的。
在实训中,教会了我们很多东西,同时
也锻炼了大家踏实、稳重、沟通的能力,每个人都很珍惜这来之不易的实训机会。
在工作中,经常会和不同的人打交道,然而他们的态度是不可恭维的,你会感觉到他的不耐烦以及他的高傲,所以这就需要学会沟通的方式及说话技巧,学会灵活面对。
在这学期的实训中,我受益匪浅,不仅专业知识增长了,最主要是懂得了如何更好的为人处事、团队合作,感觉自己比以前成熟多了。
正因为学习上有所收获,思想上也就豁然开朗起来。
通过这次实训,我觉得要改变以前错误的思想,想把各项工作做好,就必需要不断的学习,不断的充电,也只有不断的学习、充电,才能提高自已的工作能力。
古人云,“活到老、学到老”,这句话是很有道理的。
社会的竞争是激烈的,我想我们应该好好把握住大学学习的时间,充实、完善自我,全面发展,攻破电脑,争取做一名出色的程序员。
我们深刻的了解到,只有经历过,才知道其中的滋味。
对于我而言,可以说通过这次实训,真真切切的让我了解了什么是软件开发,什么是软件,让我对于软件最初的观点也有了本质性的改变!
程序员不仅仅是一份职业,更是一份细心+一份耐心+一份责任心=人生价值的诠释。
篇三:
心得体会
一、形式化方法的背景、应用
形式化验证是用严格的数学方法来证明系统设计是否满足满足规约的验证方法。
他是保证设计正确性的一条重要途径,其中逻辑、代数、自动机、图论等构成了形式化方法的数学基础。
形式化方法最早可以追溯到20世纪50年代后期对于程序设计语言编译技术的研究。
为了提高软件的生产质量和效率人们提出种种解决办法归纳起来有两类:
一是采用工程方法来组织、管理软件的开发过程;
二是深入探讨程序和程序开发过程的规律,建立严密的理论以期能用来指导软件开发实践。
前者导致“软件工程”的出现和发展;
后者则推动了形式化方法的深入研究。
经过30多年的研究和应用,人们在形式化方法这一领域取得了重要成果。
从早期最简单的一阶谓词演算方法到基于逻辑(LTL、CTL、TLA)、状态机、网格、进程代数、代数等众多形式化方法。
形式化方法的应用也是逐渐融入了软件开发过程的各个阶段,从需求系统分析、功能描述、(体系结构/算法)设计、编程、测试、直至维护。
形式化方法不仅在软件领域,在硬件开发、网络协议的设计,甚至是管理流程的设计上也有大量的应用。
基于模型检测技术的形式化验证工具,如:
贝尔实验室的spin,卡内基-梅隆大学的smv,美国航空航天局的JavaPathFinder(JPF),应经走出了实验室,逐步走向了工业级的应用。
可以说自动验证是计算机科学中形式化方法最成功的应用。
自动机理论(基于ltl)是计算机科学中一个优美的有着众多应用的理论。
在模型检测中,自动机为系统的描述和规约提供了一个统一的表达框架,基于自动机理论的模型检测问题最终转化为图的基本算法。
二、形式化方法过程
形式化方法是关于系统开发中进行严格推理的理论、技术和工具,它主要包括形式化规约和形式化验证技术.从高层规范至最终实现的过程中,选用适当的形式化方法进行辅助设计和验证对提高系统的可靠性有极大的帮助。
1、形式化规约
形式规约(formalspecification)是对系统“做什么”(whattodo)的数学描述。
形式
化规约技术使用具有严格数学定义语法和语义的形式语言刻画系统的功能和性质。
它是系统设计的出发点,也是验证系统是否正确的依据,通过形式化描述可以尽早的发现需求和设计中的错误。
对形式规约通常要讨论其一致性(自身无矛盾)和完备性(是否完全、无遗漏地刻画所要描述的对象)等性质。
形式规约的方法主要可分为两类:
一类是对系统的刻画也称为系统建模,该方法通过构造系统的计算模型来刻画系统的不同行为特征;
另一类是对性质
的描述也称为性质描述,该方法通过定义系统必须满足的一些性质来描述一个系统。
不同的形式规约方法和不同的系统要求不同的形式规约语言,即用于书写形式规约的语言因系统的不同而有所不同:
a.顺序系统的形式化规约侧重对状态空间的描述,其主要思想是利用集合、关系和函数等离散结构表达系统的状态,用前后置断言表达迁移,如Z、VDM等。
b.并发系统的规约侧重于对系统并发特性的描述,其主要思想是利用序列、数和偏序等来表达系统的行为,如进程代数语言CSP、CCS、π演算等;
时序逻辑语言PLTL、CTL、XYZ/E、UNITY、TLA等。
这些规约语言由于基于不同的数学理论及规约方法,因而也千差万别,但它们有一个共同的特点,即每种规约语言均由基本成分和构造成分两部分构成。
前者用来描述基本(原子)规约,后者把基本部分组合成大规约。
构造成分是形式规约研究和设计的重点,也是衡量规约语言优劣的主要依据。
模型检测针对的对象是反应式系统,其特征是持续的接受系统环境的输入,然后作出反应。
由于环境输入是不确定的,因此,此类系统一般都具有并发性。
另外,与传统的转换系统不同的是,反应式系统具有不停机的特点,如果发生了停机,说明系统不能接受环境的请求,也就意味着系统出现了故障。
基于这些特点,在模型检测中一般将系统抽象为状态迁移系统,特别是Kripke结构。
在模型检测中,系统性质一般表达为时序逻辑。
时序逻辑将时间看作离散的模型。
时序逻辑分为线性时序逻辑(LTL)和分支时序逻辑(CTL)。
线性时序逻辑将公式解释为线性的,每一个点的后续只有一个时间点。
分支时序逻辑将公式解释为树形,每一个时间点都有多种可能。
2、形式验证
形式化方法的另一重要研究内容是形式验证(formalverification)。
形式验证是在
形式规约的基础之上验证已有的系统P,是否满足其规约?
的要求(即P|=?
),它也是现阶段形式化方法所研究的核心问题。
传统的验证方法主要有模拟(simulation)和测试(testing)两种方法。
其共同特点是通过实验的方法对系统进行查错。
其不同点是模拟是在抽象模型上进行,而测试是在实际系统上进行的。
模拟和测试的实现方法一般是对系统给一些有典型意义输入,然后观察其输出,以此对系统进行验证。
这些方法花费很大,而且由于实验所能涵盖的系统行为有限,所以,很难找出所有潜在的错误。
Vardi、Wolper提出了基于自动机的模型检测方法。
80年代后期模型检测的研究重点转向了解决模型检测“状态爆炸问题”。
现在,模型检测技术已经开始走出实验室,逐步应用到实际系统的验证,并取得了大量令人满意的结果。
目前常见的形式验证方法主要可分为两类:
演绎验证(deductiveverification)和模型检测(modelchecking)
1)演绎验证
演绎验证基于定理证明(theoremproving)的基本思想,采用某种逻辑系统来
描述系统及其性质,通过基于公理或推理规则组成的形式系统,用定理证明的方法来证明系统具有某些性质。
演绎验证的优点是可以处理无限状态的问题,并且证明的中间步骤可以使用户对系统和被证明性质有更多的了解。
缺点是对使用者的要求高,需要使用者掌握大量的逻辑知识,这样就限制了演绎验证的使用范围。
另外,虽然现在定理证明的自动化程度得到了明显的提高,但是还不能够做到完全自动化,还需与用户交互,要求用户能提供验证中创造性最强部分(建立断言等)的工作。
因而演绎证明方法的效率较低,很难用于大系统的验证。
目前主要演绎验证工具有:
基于Manna和Pnueli证明系统的STeP(StanfordTheoremProver)、TLV机器定理证明器等。
2)模型检测模型检测
模型检测实质上基于时序逻辑的(LTL、CTL)一种形式化验证的算法方法。
算法应用的系统必须是有穷的,因为其基本思想利用是对状态的穷尽搜索来检测一个给定的计
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优质使用软件感受心得范文word版本 12页 优质 使用 软件 感受 心得 范文 word 版本 12