数学建模作业.docx_第1页
数学建模作业.docx_第2页
数学建模作业.docx_第3页
数学建模作业.docx_第4页
数学建模作业.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程的流程及编程摘要计算机产业是更新发展速度较快、受科技影响变动较大的一种产业。从1946年世界上第一代电子计算机问世于美国开始,人类社会自此进入了以计算机的开发利用为主要标志的第一次信息革命时代。伴随着互联网的发展,计算机专业人才的短缺现象将会越来越严重.在我国,IC人才、网络存储人才、电子商务人才、信息安全人才、游戏技术人才严重短缺;在软件人才层次结构上,水平高的系统分析员和有行业背景的项目策划人员偏少,同时软件蓝领也比较缺乏。现对计算机软件开发项目进行讨论,一个软件项目的具体流程,每个步骤所要处理的事务,并对在编程方面的一些建议。以及想从事编程方面的人员一些建议。一、 一个软件项目的工作流程我们已知一个项目的大致工作流程为:A.软件生存周期1、 需求分析是怎样做的?需求分析是构建软件系统的一个重要过程。一般,把需求类型分成三个类型:1、业务需求(businessrequirement)反映了组织机构或客户对系统、产品高层次的目的要求,它们在项目视图与范围文档中予以说明。2、用户需求(userrequirement)文档描述了用户使用产品必须要完成的任务,这在使用实例文档或方案脚本说明中予以说明。3、功能需求(functionalrequirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。业务需求和用户需求是软件需求分析的基础,也是软件构建的前提。系统分析员通过对业务需求和用户需求的分解,将其转换成克一形式化描述的软件功能需求。开发软件系统最为困难的部分,就是准确说明开发什么。这就需要在开发的过程中不断的与用户进行交流与探讨,使系统更加详尽,准确到位。这就需要确定用户是否需要这样的产品类型以及获取每个用户类的需求。4、客户也经常是矛盾的。事实上,很少有客户能够明确的知道怎样的一个系统对自己是最有益处的,他们往往在集中方案之间徘徊,于是经常产生需求的变动。生产厂商经常陷入客户自己的矛盾之中。客户的负面影响可能对于能够在预算内按时完成项目产生很大的影响。尽管客户需要对需求的质量负责任,但是,当一个软件项目因为客户事先没有预料到的情况而导致失败的时候,即使客户不会追究开发方的责任,就软件项目本身而言,也已经是失败的。总结:良好的需求分析是软件成功的基础。以上是作者对需求分析工作实践的一次小结以及综合性的思考,是对需求分析本身所做的一次分析。在此基础上,作者提出了逆向沟通的设想,即系统分析员主动进行沟通,提出指导性意见。当软件融合了客户和系统分析员双方智慧,其质量将会进一步得以提高。如图所示为需求的层次5编码与调试编写代码:源代码编写程序代码:源代码目标代码可执行代码此阶段还包括部分软件模块的局部测试、集成与联调根据待开发软件的规模、控制点及人员安排,可细分为多个小阶段输出软件(源代码、目标代码、可执行代码及相关数据文件)文档(帮助文件等)保证编码风格的一致性,易读性;增强软件源码的可维护性。6测试按测试发生的顺序划分模块测试:是对单个软件模块的测试单元测试:是对各个软件功能单元的测试组装测试:是对各软件单元之间的互联测试集成测试:是对硬件装置、设备和软件的加入性测试系统测试:项目组所在部门组织的对完成集成的系统的测试(是否满足产品规格要)确认测试:单位质量控制部门进行的测试(是否满足产品规格要求)验收测试:在现场安装、调试结束并经试运行后,与顾客一起,就满足合同情况进行的测试(是否满足合同要求)7与顺序无关的测试联合测试:当软、硬件分头开发完成时,对其组合体进行的测试回归测试:对因排除不符合项而采取的措施是否产生了其他副作用行的确认性测试专项测试:针对某些具体测试项进行的确认性测试。例如:边界条件测试等。应根据开发规模,尽可能进行独立测试。为了保证测试的可信性,被测试的软件应以源代码的形式提交,同时说明生成可执行代码的环境和方法。由测试人员生成可执行代码,进行测试。8软件集成、联调 应按计划对所开发的软件模块进行组装并与硬件一起联调根据需要,规定应填写的调试记录 9内部确认在模拟环境下运行,并监视、记录运行情况根据任务书或合同的要求进行比照,检查其是否满足使用要求对运行情况、测试结果及文档的齐套性、正确性和一致性进行评审,达到确认 10复制、交付、安装软盘复制、光盘刻录交付时的版本标识和登记安装(派技术人员安装或由用户自行安装)记录软件安装实施计划软件安装环境最低需求软件安装记录 11试运行、用户验收以用户验收的方式进行最终确认结论软件设计与需求的一致性程序编码与软件设计的一致性文件描述与程序的一致性文件的成套性、完整性、准确性和标准化程度是否通过验收 12运行和维护收集使用中发现的问题和顾客意见针对运行中出现的问题,按设计更改程序进行控制记录用户服务记录表至此,一个项目的开发过程大致如此。一个大项目中各活动的比例由图可知,编程方面占一个软件项目的最大比重,重用和采购在个人负责的范围中所占的比重为最大,所以在编程方面,编程人员必须加强对编程能力的提高,由于大型编程软件工程所需要的大量代码和可执行文件,所以必须要有大量的技术人员一起参与合作,为了提高工作效率,每个编程人员应该有自己的任务,按时完成工程师所安排的任务,且必须从整体出发 ,使得大量的程序员编写的程序可以合并之后能正常运行,而不出现单个程序正常运行,而将所有程序整合在一起时由于程序员之间的代码不同出现无法整合或者代码出现错误的问题。二、给想从事编程人员的一些建议作为一个优秀的程序员,数学是十分重要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。数学主要能让人懂得一种分析问题的方法,然后再通过编程去实现它。计算机内部的许多原理也都牵涉到比较复杂的数学知识。它是我们用来解决现实问题的最高效的工具。很多学习编程的朋友对数学觉得不屑一顾,觉得对于编程没有什么关系。实际上优秀程序员和一般程序员拉开档次很大一个程度上就是取决于对数学的能力。一些项目有时需要很复杂的数学建模和利用数学对于系统效率进行分析,而这些项目对于一般的程序员是很困难的。正确应用数学知识有时候能使你的程序的效率产生质的飞跃。现在的程序员在数学上普遍是薄弱环节,这点是大家应该引起足够重视的。当别人对于这些项目感到无从下手,而你却能够完成,这个时候你的价值也就表现出来了。真正优秀的程序员是能够最基本的一点就是要能够通过自己的知识来解决一般程序员所无法完成的问题。而数学能力就是一个很重要的环节。其次就是要对数据结构引起足够的重视。如果说计算机专业的学生与非计算机专业的最根本的差别绝对是数据结构(数学大家都一样学了,主要看你自己学得好坏)。对数据结构的掌握与运用能力是衡量你编程能力的一个很重要的指标。有的人对于看了链表,栈,树,广义表这些东西就头痛。然而这些东西往往能使你的程序的效率比别人高出百倍。由于一直搞信息学竞赛,到了大学又搞ACM,所以我对数学和数据结构都掌握得相对较好。这使我在应聘与工作中明显感到胜人一酬。记得自己大学时去一家公司应聘的经历,当时去应凭的还有3个人,有2个大学毕业,有个也工作了一段时间了。他们几个都在大讲自己的能力如何之强,会使用的语言及编程工具如何之多,经验如何之丰富。按理说我应该是资质最浅的。当时也是初生牛X不怕虎,也就硬着头皮去了。当时面试的题目是一个公司的资金管理项目的一个问题,要求每个人都在思考后给出自己的设计方案。其中比较核心的一个问题就是要计算一个资金最小波动值的问题,给出的数据量相当大,对效率要求很高。对于整个程序的面向对象化的分析我们几个都是差不多的,毕竟这些东西在学校里是很重视的,而且不是真正的难点。然而到了最关键的问题时其余的人都卡壳了,有两个是用简单的双重循环,时间复杂度(N2),惨不忍睹。还有一个在冥思苦想了好一阵以后说用树,具体技术细节又讲不清楚,效率分析也很马虎。只有我当时很快就给出了采取AVL树的方案,并且利用高等数学推导作出了很详细的效率分析和时空换算,并提出了引入汇编的方法。很自然的我得到了这分工作。在这里大家显然可以看到数学和数据结构对于一个优秀程序员是多么重要,它们是和一般的程序员打开档次的最关键的地方。这样向“枣子”碰到的那种情况应该很轻松的就可以想到。如果你是一位想学习编程的朋友,我经过多年的学习总结出来了一个学习的线路希望对你有所帮助。要学习编程是要有很大恒心和毅力的,首先你要明确自己的目标,想好自己编程是为了干什么。如果你学习仅仅只是一时想编出QUAKE和成为比尔盖次的冲动,那么我劝你还是应该还是不要开始学习,应为这样的目标很难支持你日后大量的学习。而且你的年龄不能太大(最好是中学或者大学生)。如果你想好目标并决定开始奋斗,那就让我们开始吧。如果你一开始对电脑一无所知,那么你应该先熟悉一些电脑的一些最基本的原理和操作,这个不需要特别细致的学习,只要大概知道二进制和一些基本操作就可以了。接下来你应该先学习BASIC语言,这个语言并不会耽误你太多的时间,学习它完全是为了入门,让你对电脑编程有一个比较初步的认识。这时候你应该多编一些小的程序,知道一些最基本每条语句的功能,搞清楚一些基本的数据结构(尤其是数组)对于一些其余用途的函数最好不要做任何学习,因为这样只会分散你的注意力。当你能够可以熟练的运用BASIC编出猴子选大王,以及电脑出题考试之类的程序时,你就可以开始后面的学习了。接下来如果觉得自己接受能力强的话就可以开始学C了(注意不是C+),如果感觉有困难也可以先学Pascal过度一下。还有很重要的一点就是千万不要一开始就学VB,DELPHI,VC之类的东西,这些东西在一开始学会对你造成很坏的影响。有可能会把你引入另外一个错误的学习方向而忽略了真正应该掌握的东西。学C主要是学过程话的程序设计,学会把自己的程序分成许多的函数(或过程),养成良好的编程习惯。这时可以多看一下高人的程序,不一定要懂意思,主要是学会别人程序的格式(比如变量如何起名,怎么划分函数)。除开掌握基本的控制流语句外,应该学习一些很简单的I/O函数和数学函数。C的学习主要是你舍弃原来BASIC程序那种把所有语句积成一大堆的风格,要学会使用函数,提高代码重用性。对于指针之类的东西如果实在看不懂可以先不去管,到后面会有办法。当你能够比较自如的用C编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自己要多用心)。数据结构你可以一点一点漫漫看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。学完C我认为接着最好学习汇编。这个或许有许多人都会反对,然而我个人认为这样是很好的。从最基本的DOS汇编开始,买本IBM PC汇编程序设计一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。一般智力正常的人前一段东西应该都是可以掌握的。接着后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的(相信我,绝对没错)如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习C+了。学习前一定要有个正确的认识,那就是C和C+是两个不同的东西。学习C+是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C+和C相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构放在同等重要的地位。我就见过有的人都大学毕业了还搞不懂virtual到底是怎么一回事情。其实我认为学到这里你已经为你成为一个优秀的程序员打下了很好的基础,你已经能够应用C+,懂得面向对象程序设计,对数据结构掌握很好,掌握汇编和编译原理。接下来的学习就是基于操作平台的了,一般是先学windows(Microsoft毕竟是老大),先学win32 api,搞请windows基本消

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论