软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。
(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。
(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。
软件工程是计算机软件的一个分支学科,主要研究软件开发全过程中的各种技术;
主要包括:
1、软件开发的原则与策略,
2、软件开发方法与软件过程模型,
3、软件标准与软件质量的衡量;
4、软件开发的组织与项目管理,......
软件工程是计算机软件的一个分支学科,主要研究软件开发全过程中的各种技术;
主要包括:
1、软件开发的原则与策略,
2、软件开发方法与软件过程模型,
3、软件标准与软件质量的衡量;
4、软件开发的组织与项目管理,
5、软件版权。
它一般应用于大型的软件系统的开发。
其开发团队包括:用户、项目负责人、分析员、初高级程序员、资料员、操作员。
软件工程是指利用工程的概念、原理、技术和方法来开发、维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的
最好的技术方法结合起来,指导计算机软件的开发和维护的工程学科。
软件工程强调使用生存周期方法学、结构分析和结构设计技术以及新兴的面向对象分析和设计技术。
生存周期学(SDLC--系统开发生命周期)是指从软件开发项目的提出到软件产品完成使命而报废的整个时期;
分为八个阶段:
1、问题定义:问题是什么? 完成规模和目标的报告。
2、可行性研究:有可行性么?是否值得去做? 完成系统的实际模型,数据流图,成本/效益分析。
3、需求分析:系统必须做什么? 系统逻辑模型,数据流图,数据字典,算法描述,需求说明书。
4、总体设计:如何解决此问题? 可行的解法,系统流程图、成本/效益分析,推荐的系统结构,层次图 /结构图。
5、详细设计:如何实现此系统? 编码的规格说明。
6、编码和单元测试:正确的程序模块。 程序清单,单元测试方案和结果。
7、综合测试:符合要求的软件。 综合测试方案和结果,完整一致的系统配置。
8、软件维护:持久的满足用户。 完整准确的维护记录,需求的软件。
需求分析阶段:客户的业务活动进行分析,明确在用户的业务环境中,软件系统应该做什么。客户的要求一般包括"功能要求、性能要求、可靠性要求、安全保密要求、开发费用、开发周期及可使用的资源"。
用户的业务需要经用户与软件人员讨论后,理解用户的要求,并将双方共同的理解明确的写成一份文档---需求说明书。
需求说明书主要有三个作用:1、作为用户和软件人员之间的合同,为双方相互了解提供基础。2、反映问题的结构,可以作为软件人员进行设计和编程的基础。3、作为验收的依据,即作为选取测试用例的依据。
需求说明书应该达到完整、一致、精确、无二义,既简明易懂并易于修改和维护。
在需求阶段、还应考虑设计的限制"成本、进度、可用的软硬件资源";客户验收准则"客户需求的细化";编写"初步用户手册"及复查需求说明书。
谈一谈对软件工程专业的认识
1、软件工程是一门指导软件开发和维护的工程学科,主要研究软件开发和维护的工程技术和软件项目管理等内容,其中涉及如何保证软件产品的质量和可靠性,如何提高软件开发效率和拥护满意度等。
2、软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
3、软件生产历经4大阶段分别为:程序设计阶段(1946-1956年)、软件开发阶段(1956-1968年)、软件工程阶段(1968年以后)、计算机辅助软件工程阶段
4、常见的软件过程模型:边改边做模型、瀑布模型、演化模型、增量迭代模型、喷泉模型
5、软件过程的研究,标志着人们为解决软件危机问题,把关注的焦点由编程转移到了软件开发的整个过程,包括分析、设计、编程和测试4个核心阶段和需求调研、运行与维护两个延伸阶段说明软件质量、软件开发效率、软件的可靠性、可维护性问题涉及了软件生存周期的所有阶段。
6、软件生存周期:一个软件从定义到开发、使用和维护,直到最终被弃用,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。软件的生存周期可分为八个阶段:①问题定义;②可行性研究;③需求分析;④总体(概要)设计;⑤详细设计;⑥编码与单元测试;⑦综合测试;⑧软件维护。
7、需求分析:系统开发前期需求分析很重要,它是为了有效解决用户问题的需要进行的一项工程活动,所需要考虑的需求问题是功能需求、数据需求、性能需求和接口需求,开发者承担分析任务,核心是用户。其步骤有三个:①获取客户需求,客户泛指某个人或机构部门等,一般方法是调查,包括访谈、座谈、问卷、跟班和收集资料,需求规约可表达用户的软件价值。②建立需求模型,它是用户需求的图解,一些常用的模型有:业务树图、用例图、活动图。分别用于结构化需求建模、系统业务举例和反映系统工作流程。③进行需求验证,要验证的主要内容有:有效性验证、一致性验证、完整性验证、现实性验证和可检验性验证。
。。。
感悟:
了解了什么是“软件危机”,透过软件工程于解决“软件危机”的重要性、软件工程三条重要线索、软件工程知识体系函括内容及软件工程各类生存期模型,我对软件工程思想及“工程化”软件开发的流程有了较系统的了解,透过软件工程的起源,认识到:实现软件工业的产业化,软件工程必须是真正意义上的工程化。从软件开发三条线索(开发、管理、改进)来看,软件开发的过程必须规范化(各阶段都必须形成相应文档;编码必须依照通用可读性严格遵照编程规范……);软件项目管理的核心是项目规划和项目跟踪控制,保证软件工程开发的成功完成,软件开发流程的规范化在软件项目中有着重要的作用,通过不断地优化和规范过程,企业可以提高软件生产能力。
从需求分析到维护,透过软件的开发流程具体实施的学习,我对软件项目开发的流程有了更深的理解,例如通过需求规格说明书、可行性研究说明书、数据库设计说明书、需求分析说明书、总体设计说明书、详细设计说明书等六份作业的完成虽然很不完善,但仍让我对需求分析建模和设计中用到的方法有了更好的理解并熟悉了六份文档的格式。学了这门课才知道软件开发中每一阶段都有文档的产生,其管理与应用也是一门大学问……此外,这门课程里讲授了很多我以前从未接触过的方法和软件如UML模型、MVC模型、visio的强大绘图建模功能、这些知识不仅能应用于软件工程,也能应用于其他的很多领域,这门课结束了,但这些方面学习我还将继续的。
谈谈你对软件工程的认识
对软件工程的一点看法--希望能够抛砖引玉
在这里看到很多网友的高论,很有启发。而且目前市面上也涌现出一批面向不同方面的软件过程的书籍,可是在这里,我一直没找到真正对实践有指导意义的,可操作的应用方法,所以现在这儿抛块砖,望各位高手指正。
我个人的理解,软件工程就是按照工程学的管理方式,有组织、有计划的,在一定的质量基础、时间限度和成本范围内,实现功能明确的软件系统。而且,软件工程在企业范围内运行,一定需要企业资源的支持,要与企业的经营、决策、管理体系联系在一起,才能够被踏踏实实的落实下来。
软件业作为一个服务业,要想得到发展,首先必须形成一个对软件服务有迫切需要的市场。其次,这个市场中的消费者必须具备足够的购买力。软件的消费群体简单一点,可以分为个体消费和企业消费。中国的企业群体,数量庞大,但是质量不高。上规模的企业极少,因此,中国的企业对大型软件的消费肯定是有限的,软件的个人消费,至少目前在中国,还是不成气候。因此,国内目前能够形成比较大规模的独立市场的,肯定是小规模的软件系统。
此外,质量的好与坏也不能绝对而论。比如说,你花500元,买双皮鞋,只穿了一个月就坏了,肯定是劣质产品。可是如果你只花了5元买这双鞋,还是穿了一个月就坏了,他就是个优质产品了。软件也是一样。
还有一个,就是软件生命周期问题。在国外,很多中、大型企业里,软件系统已经作为企业的命脉在运行,这些企业当然需要长期、稳定的软件服务、开发体系作为保障,因此相对来说,对于软件的功能需求就比较明确,而国内的中小企业在运营方面本来就把灵活多变作为生存武器,当然不可能有比较长期的经营计划,更不可能运用软件系统进行全面企业管理。这就导致对软件系统需求的短期行为,因此,他们更加希望一次性购买功能有限的软件系统,而不是长期连续的软件服务。
如果上面的分析有代表性的话,那就是说我们现在必须对开发这类软件形成一套非常有效的工程方法:
1。规模小。
2。成本低
3。质量要求不高。
4。售后服务有限。
5。生命期短。
我想,对于这类系统,RUP未必是一套好的方法。另外,我还想谈谈对软件人员素质的看法。
从我个人的经历来说,我觉得我们对于软件工程师的培养方法有问题。理论上说,软件只要设计了一个好的结构,解决了所有的技术难点,剩下的代码高中生就能做。实际上我们的很多名牌大学的计算机专业毕业生都不能很好的Coding。尤其是现在有了VB、PB、JAVA之后,大家似乎认为计算机的体系结构都不用关心了。我曾经经手的几个软件项目中,很多工程师对于用C语言开发Win32多线程、事件驱动、死锁、内存分配等问题根本束手无策。我不相信这些问题可以靠很好的文档解决。实际上,能够用OO的工具工作,根本不代表能够进行OO的系统分析与设计。
话又说回来,在中国,有10年以上软件开发背景的人,又有几个?而且他们在过去10年里的经验,更多的是小项目的Coding,而不是大项目的管理与系统分析。而一个好的系统分析师,需要的是实践、实践、再实践。假如说我们的商业环境中根本没有大型的软件项目,怎么可能有优异的系统分析师呢?
所以,我想,目前我们的问题,是工程师的技术水平、知识面与管理意识、管理方法同样重要,在这样的前提下,我们是不是要探索一下真正适合我们的软件工程方法呢?
关于软件工程专业的迷茫…请给我一个走向未来的方向…
Android开发又跟数据结构和离散数学没关系。那个你要分清计算机科学和软件工程的区别呀,数据结构和离散数学都算是计算机科学的内容,跟现代软件工程没关系。基本现在你用Java做软件哪里需要懂什么排序?直接一个array.sort()方法调用就搞定了。嗯,这个意思不是说数据结构不重要,而是告诉你现代软件工程不强调数据结构这些东西了,因为直接有模板类,你直接继承模板类就行了。现代软件工程面向大规模软件开发。Android开发什么有专用的SDK,也就是类似与C语言的里提供的头文件,不同平台有不同平台的SDK。比如Windows有windows的SDK,包含在了<windows.h>,linux也有属于自己的SDK,SDK里有专用的函数,用这些函数来生成一些功能,比如Windows的窗口。简单的说计算机语言跟自然语言一样,自然语言由语法和词汇构成,计算机语言也是的。当然比如说你学过C语言,那么你主要学的是语法,而像printf()函数这样的函数就好像自然语言的词汇,你要做软件开发(好比是用自然语言写文章),不光要懂语法,还要懂词汇,你现在的问题在与“词汇量”不够。嗯 那个慢慢来。填鸭式教学到哪里都一样。还有说一点,计算机科学主要研究算法,不强调软件开发,比如我现在跟导师在做“数据聚类”(也就是利用计算机对数据进行自动分类)。嗯,还有你那个同学做Android也就是做做高级应用的软件,真正低层的东西,比如Linux多线程他也不会,高级的东西会几个函数就可以搞定,所以不急。慢慢来,真正难的东西就是算法还有数据结构,另外操作系统也很重要,如果想做硬件与嵌入式,那么微机原理得学好
我该怎么做呀?
慢慢来,数据结构如果想多花点时间看看也行,看不下去就去学学开发,网上很多视频的,看你喜欢什么了,有JAVA的, .NET的, VC++的 Linux 程序设计的都有,Android的也有,找个自己特别钟爱的方向,好好学学吧,慢慢来
在软件工程学科中,如何理解软件测试?
测试目的
第一是确认软件的质量;
第二是提供信息,比如提供给开发人员或程序经理的反馈信息;
第三软件测试不仅是在测试软件产品本身,而且还包括软件开发的过程。
软件测试的基本方法
1黑盒测试,也称为功能测试或数据驱动测试,着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。
2白盒测试,也称为结构测试和逻辑驱动测试,主要用于软件验证,全面了解程序内部结构,对所有逻辑路径进行测试。
3ALAC(act-like-a-customer)测试,是一种基于客户使用产品的知识开发出来的测试方法。
前几天去面试,面试官问我对所应聘的软件开发工程师的理解?应如何回答
软件工程师——顾名思义做软件开发的工程师,所谓工程师就是要对开发的程序、软件、系统有良好的逻辑思维能力,善于开拓创新,能快速的罗列出一个系统的大概构架,然后再来解决程序编程问题。其实软件工程师主要不是做编程,编程是专门给程序员来做的活,工程师把开发的系统大概的思路,构架都跟你说明清楚然后给程序员来用代码实现。所以要做一名软件工程师需要的不仅是扎实的编程功底,还要有比较好的逻辑思维和大胆创新的精神,记住要做一个软件工程师需要的是冰冻三尺非一日之寒的努力、踏实、上进、求新、求变、求实的态度和决心!
麻烦大家以“我心目中的软件工程系”,为题写一篇800字左右的文章,谢谢大家了,
我心目中的软件工程系
看待事物,大家都看其表象;如同看人也一样,所谓窈窕淑女君子好逑,不外如是。而文字上的理解,则更直接。我一看到“软件工程系”,闭上眼睛出现的都是数字及字母在显示器荧幕上不断翻滚,而软件工程系的高材生却可以从这些海量的信息中摄取有用的信息,比如说是想知道对象的姓名、住址、身分证号码及相关的信息。这真是令人仰慕的存在。
软件工程系主要的应该是涉及到的是“软件”及软件相关的工程。而软件则主要是编程方面的,以程序来控制工程。如此想来,软件工程系的主要任务就是学习并熟练运用编程,什么基础C语言,JAVA及相关数据库操作软件。
…………………写不下去了!哈哈。自己继续吧。其实每个人的感觉都不一样的,写自己的,让别人去评价才行!加油。
继续吧
谢谢了
做软件测试需要逻辑思维好吗?我是软件工程专业的,女生
首先,你文笔好、大学有很多时间花在社交上,这并不是没有用,相反,这对你进入软件测试行业有很大的帮助,因为软件测试员需要编写各种文档:比如测试计划、测试方案、测试用例,甚至需求文档、需求分析文档;然后对于软件测试员来说,沟通非常重要,与开发的沟通,与产品部的沟通,与上级、客户的沟通。可以看出,编写文档和沟通这两点,你在学校是有一定的历练的。在中国,软件测试还是一个新行业,相当一部份还是处于手工测试的阶段,在公司招聘时,甚至于并不要求你的测试技能,而看你其它方面的能力,比如文笔和沟通能力。
然后对于工资,我们说进入软件测试的门槛低,但并不是说工资待遇就会低,当然这要求你必须学习各种测试技能,包括测试流程、方法,各种自动化测试工具、开发语言、数据库、甚至网络知识、操作系统,当然需要学习什么,能学习到什么程度,要看你的工作环境和个人努力,我个人觉得只要你精通一种测试工具,熟悉一门开发语言,熟悉一种数据库,那你的工资也不会比开发人员的低。
对于社交圈,在说沟通能力的时候说了你需要和开发人员、产品部、上级、客户等各种人沟通,这就说明软件测试的交际圈其实是很宽泛的,但这主要取决于你的工作环境了,你的工作环境决定了你需要和谁沟通。
测试的发展路线也和其它职业一样,主要有三种:技术、管理、技术+管理,这三条路线,技术都是必不可少的,只不过管理不需要你对技术太深入。
我不知道你为什么说自己的思维跟不上开发,是说你不懂开发语言,还是说开发需要一直面对着电脑,我想说的是,你可以去尝试做做软件测试,记住一定要去有着成熟的管理模式和正规测试流程的公司尝试,不然的话,很难发现测试的乐趣。
最后说明一下,我从事测试也还不到三年,对测试的理解能力有限,以上仅供参考,建议你看看《一个老软件测试工程师的日志》,或许对你有帮助更多
你回答得很好,以后我也是你同行。我说思维跟不上是因为我不懂开发语言,我参加开发培训不到三个月,学得是java,感觉学得不好。做测试 是不是也要会写代码呢,对测试员的技术要求有多高呢。听说好的测试员要能参与到开发中去 是这样嘛。做测试是不是要精通脚本语言呢,如js,jquery。
我觉得最好的测试员是开发会的你都要会,开发不会的,你也要会,因为开发人员做的只是自己的模块,而测试人员却是测试整个系统
当然测试也是团队,也要分工合作,如果你只是测试黑盒的话,不需要关心软件的内部代码;使用自动化测试工具测试黑盒的话,也不需要关心软件的内部代码,但是要会优化自动化工具的脚本,这个比较简单,多做几次就会了。但是如果你是测试白盒的话,就至少要能看懂开发人员写的代码
做黑盒测试跟自动化测试是不是工资比不上白盒测试呢。两年后能达到4k~5k嘛?我是应届生
工资水平要看所在城市的发展状况,如果你在北京/上海/深圳这样的一线城市,工作两年后工资还只有4、5k是偏低的;也并不是说黑盒测试跟自动化测试的工资就比不上白盒测试,不同的公司也会不同
我记得我之前建议你看《一个老软件测试工程师的日志》,这里面提到业务测试工程师,你可以试着往这方面发展,固定在某个行业做测试,业务知识可以在一定程度上弥补你对计算机语言的不熟悉
以我目前对测试的理解,如果想完全避免白盒测试,这几乎是不可能的,或者说完全避开白盒测试后,会带来各种各样的问题:如找不到bug的根源、很难重现一些bug、无法判断修改bug后可能会引起哪些新bug等等
你既然培训过开发,对java的开发框架等一些知识应该是有一定程度上的了解的,在工作上慢慢学习吧,有时在实际项目中接触得多了,一些知识自然而然的也就懂了
转载请注明出处51数据库 » 我所理解的软件工程 对软件工程应该怎样理解