谈一谈对软件工程专业的认识87
发布网友
发布时间:2023-11-04 14:53
我来回答
共4个回答
热心网友
时间:2024-11-14 18:57
对软件工程的一点看法--希望能够抛砖引玉
在这里看到很多网友的高论,很有启发。而且目前市面上也涌现出一批面向不同方面的软件过程的书籍,可是在这里,我一直没找到真正对实践有指导意义的,可操作的应用方法,所以现在这儿抛块砖,望各位高手指正。
我个人的理解,软件工程就是按照工程学的管理方式,有组织、有计划的,在一定的质量基础、时间限度和成本范围内,实现功能明确的软件系统。而且,软件工程在企业范围内运行,一定需要企业资源的支持,要与企业的经营、决策、管理体系联系在一起,才能够被踏踏实实的落实下来。
软件业作为一个服务业,要想得到发展,首先必须形成一个对软件服务有迫切需要的市场。其次,这个市场中的消费者必须具备足够的购买力。软件的消费群体简单一点,可以分为个体消费和企业消费。中国的企业群体,数量庞大,但是质量不高。上规模的企业极少,因此,中国的企业对大型软件的消费肯定是有限的,软件的个人消费,至少目前在中国,还是不成气候。因此,国内目前能够形成比较大规模的独立市场的,肯定是小规模的软件系统。
此外,质量的好与坏也不能绝对而论。比如说,你花500元,买双皮鞋,只穿了一个月就坏了,肯定是劣质产品。可是如果你只花了5元买这双鞋,还是穿了一个月就坏了,他就是个优质产品了。软件也是一样。
还有一个,就是软件生命周期问题。在国外,很多中、大型企业里,软件系统已经作为企业的命脉在运行,这些企业当然需要长期、稳定的软件服务、开发体系作为保障,因此相对来说,对于软件的功能需求就比较明确,而国内的中小企业在运营方面本来就把灵活多变作为生存武器,当然不可能有比较长期的经营计划,更不可能运用软件系统进行全面企业管理。这就导致对软件系统需求的短期行为,因此,他们更加希望一次性购买功能有限的软件系统,而不是长期连续的软件服务。
如果上面的分析有代表性的话,那就是说我们现在必须对开发这类软件形成一套非常有效的工程方法:
1。规模小。
2。成本低
3。质量要求不高。
4。售后服务有限。
5。生命期短。
我想,对于这类系统,RUP未必是一套好的方法。另外,我还想谈谈对软件人员素质的看法。
从我个人的经历来说,我觉得我们对于软件工程师的培养方法有问题。理论上说,软件只要设计了一个好的结构,解决了所有的技术难点,剩下的代码高中生就能做。实际上我们的很多名牌大学的计算机专业毕业生都不能很好的Coding。尤其是现在有了VB、PB、JAVA之后,大家似乎认为计算机的体系结构都不用关心了。我曾经经手的几个软件项目中,很多工程师对于用C语言开发Win32多线程、事件驱动、死锁、内存分配等问题根本束手无策。我不相信这些问题可以靠很好的文档解决。实际上,能够用OO的工具工作,根本不代表能够进行OO的系统分析与设计。
话又说回来,在中国,有10年以上软件开发背景的人,又有几个?而且他们在过去10年里的经验,更多的是小项目的Coding,而不是大项目的管理与系统分析。而一个好的系统分析师,需要的是实践、实践、再实践。假如说我们的商业环境中根本没有大型的软件项目,怎么可能有优异的系统分析师呢?
所以,我想,目前我们的问题,是工程师的技术水平、知识面与管理意识、管理方法同样重要,在这样的前提下,我们是不是要探索一下真正适合我们的软件工程方法呢?
热心网友
时间:2024-11-14 18:58
软件工程涉及的资源有:人力、资金、时间的合理分配,涉及到文化与管理等,及各种规划化。
软件开发是一个把用户需要转化为软件需求,把软件需求转化为软件设计,用软件代码来实现软件设计,对软件代码进行测试,并签署确认它可以投入运行使用的过程。在这个过程中的每一阶段,都包含有相应的文档编制工作。
软件开发过程当中,遵循一定的流程,主要包括系统分析、系统设计、系统编码、系统测试以及系统的维护等几个阶段。依次概述如下:
1、系统分析
系统分析包括软件需求分析和系统可行性分析。软件需求分析就是回答做什么的问题。它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。系统可行性分析就是通过需求调查来确定此系统是否具有可行性。
2、系统设计
系统设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库,常用方法还是结构化程序设计方法。
3、系统编码
系统编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的"源程序清单"。
4、系统测试
系统测试的目的不是验证软件的正确性,而是以较小的代价发现尽可能多的错误。测试从需求阶段开始,此后与整个开发过程并行,换句话说,伴随着开发过程的每一个阶段,都有一个重要的测试活动,它是预期内按时交付高质量的软件的保证。
5、系统维护
系统维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。在实际开发过程中,软件开发并不是从第一步进行到最后一步,而是在任何阶段,在进入下一阶段前一般都有一步或几步的回溯。在测试过程中的问题可能要求修改设计,用户可能会提出一些需要来修改需求说明书等。
总的说来,软件开发是一个环环相扣的设计和实施过程,整个系统开发的过程当中,系统分析和设计是重中之重。只有把握好系统分析,才能使后续改动尽可能多的减少;只有把握好系统设计,才能保证软件的根基比较稳固。也即是它们很大程度上决定着软件开发的周期以及寿命。另外,完美的开发团队和开发过程的合理控制是软件成功开发关键要素之一。
>> 软件工程
过去几十年,软件技术经历了一系列重要的变化和发展,构成软件的软件实体的粒度不断增大,软件基本模型越来越符合人类的思维模式;软件运行平台的能力不断增强,越来越多地屏蔽掉计算机底层的复杂性;软件支撑平台的能力不断增强,越来越多地屏蔽了软件开发过程的复杂性;软件技术的应用范围不断扩大,越来越广地渗透到人类生活的各个方面。网络技术的发展日新月异,基于新一代网络技术的各种应用的融合是大势所趋。网络新技术与软件新技术的相互促进必将为人类创造一个更为灿烂多彩的IT世界。
这世上同时存在着两种对立的声音:本质决定成败和细节决定成败。偏好本质的人喜欢说本质论。偏好细节的人则喜欢说精细化管理。但如果在较长的时间轴上考量这两种观点,就会发现他们之间并不真的对立。
----------------------------
程序员几个发展方向:
走向管理:有两种原因会使部分程序员走上管理的道路,一是与生俱来的对 权力的*;一是在程序员的岗位上对自我价值重新认知。对于前者如果*过去强烈就会急功进利,很容易走捷径,会出现不能服众的情况。对于后者自我价值的重新认知是一个缓慢的过程,一个程序员在长期的开发过程中会慢慢发现一个人的力量是有限的,做一件事情必须要借助其他人的帮助,如果需要别人的帮助就必须能影响他人。从而认识到一个人的价值对公司来说几乎是不值一文,如果想让自己的价值得到提升必须要影响到他人,借助他人的力量使自己的价值得到最大提升。
走向行业:即成为某个行业的行业专家。一般来说走这个方面需要机遇,需 要长时间的从事某一个领域的开发与管理工作,对某个行业无论是大局还是细节都了如指掌。
走向专业:即成为架构师。一般来说这些人对开发有狂热的兴趣,逐渐的从代码的编写中认识到设计与软件架构的重要性,并对软件设计乐此不疲。
自已干:这些人是野心家,也是风险最大的一条路。好多程序员都认为软件开发不需要什么成本,只要能接到单子完全可以自己干,自己当老板。然而很少了解只有长期持续的订单才是一个企业不断稳定发展的最重要因素。
------------------------------
程序员具备:恒心、耐心、细心
兴趣决定一切:当一个人把自己的职业仅当成谋生的手段时,那他的人生将会失去很多乐趣。如果你不喜欢软件开发,那最好离开这个职业,没有兴趣只会让你一事无成。
自我学习:做程序员就是这样,走上了一条永无止境的学习之路,不学习新知就会被淘汰。然而学习也是有方法的:1)拿来主义;2)知其然也要知其所以然,细细分析与研究别人的优秀框架会对你大有好处。
自我修复:不断的重构与完善你的代码,是对所学知识的达到溶汇贯通的最简捷的途径。
找到一个圈子或老师:有时别人的一句话会对你的点拨很大。对于知识点有时只是一层窗户纸,看似玄妙,也许你差的只是那灵光一现或是换一个角度思考,这并不难。难的是将你所了解的知识点串接起来,使其能上下贯通运用自如,而在这点上通过一己之力会变得非常的漫长与痛苦。
---------------------------
软件开发要融入工程化的思想,要有高度的设计能力,关注更多的软件运行属性和设计质量属性,同样的系统,不同的软件人员会做出完全不同的软件,正规,高效的开发团队要比游击队开发团队不只高出几十倍。软件开发,不仅仅关注功能,性能,更应该去研究可维护性,可扩展性等质量属性,不仅仅只关注代码,而更要上升为设计,复用等。
还有更高层次的设计开发,软件重构,模块化,系统构架,搭建统一软件平台,度量软件质量等.软件开发人员,要作的事情太多了,软件实在是一个浩大的脑力工程,甚至会让人觉得这是一个投入/产出比最低的行业,因为要学习的知识实在太多了,每时每刻都要处于不断的学习和更新当中.
这是指导整个软件开发的指南,这里包括软件从开始到结束的整个过程,包括制定计划、需求分析和定义、软件设计、程序编写、软件测试、运行/维护,这六个步骤每一步的执行是保证项目成功完成的保证,以后将对这六个过程进行一一的分析。
软件生命周期
其中包括:瀑布模型、演化模型、螺旋模型、喷泉模型、智能模型。
模型特点:
瀑布模型:周期长,跟用户见面比较晚,从计划到和用户一起计划外,其他的部分用户和开发人员是分离的,用户不能直接把问题直接反应过去。
演化模型:由于在项目开发的初始阶段人们对软件的需求认识常常不够清晰,因而使得开发项目难于做到一次开发成功,出现返工再开发在所难免。做两次第一次只是实验开发,其目标只是在于探索可行性,弄清软件需求第二次则再此基础上获得较为满意的软件产品
螺旋模型:多次原型反复并增加风险评估的开发模型
喷泉模型:有严格的数学理论和形式化的技术支持,但目前在所研究试验阶段,不能实现
智能模型:1.通过领域的专家系统,可使需求说明更加完善、准确和无二义性。2.通过软件工程的专家系统,提供一个设计库支持,在开发过程中成为设计者的助手。3.通过软件工程知识和特定应用领域的知识和规则的应用来提供对开发的帮助。但是,要建立适合于软件设计的专家系统,或建立一个即适合软件工程又适合应用领域的知识库都是非常困难的。
--------------------------------
对软件的基本认识
i.开发软件为什么要工程化
有很多人,尤其是很多学生存在这样的误区,平时感觉自己能用语言写一个闹钟,写一个记事本等一些小东西,就以为自己一个人就可以完成一个小的项目,所以很不理解为什么开发软件有时候不能让一个人独立完成,也有个人英雄主义在作怪。其实原因很简单,比如说,高中我们做题应该很有体会,感觉一张卷子一点问题也没有,但是等成绩下来的时候总不是一百分,为什么,因为我们很难发现自己的错误,哪怕是重复很多次,这是思维定势。
ii.软件开发与其说是技术活,不如说是规范活.
软件开发是程序员奇思妙想的时候,用什么方法都是随心所欲的,有的人则为了追求速度或者说是彰显个性而用一些很不大众的算法,以为这是体现自己高明的地方,恰恰相反,这真是不懂编程的表现,一般的项目一般都不是一个人来完成的,它分为开发阶段和维护阶段,然而维护阶段一般又非开发人员所为,所以如果代码技术性过于高,反而对后面的维护不利,另外,IT是个跳槽率很高的职业,如果一项工程没有完成就离开,剩下高明的算法要让谁看呢,出于对公司的考虑,最好还是规规矩矩,符合大众的口味。
iii.文档的重要性
很多人,尤其是大学生,刚开始学习编程的时候,难免会有一些急功近利的想法,想快点做出点成绩,但是往往欲速则不达,就想前段时间做的机房收费系统一样,在一种完全没有文档的情况下,虽然最后做完了,而且也跑起来了,问题似乎也没有想象的那么多,但是其中的过程只有自己知道,代码啦,数据库啦都不忍心看,可以说是乱七八糟的,想加个数据库就加,想加个功能就加,很有文档,就像没有目的的去雕塑,雕成什么样,算什么样,而且很多情况是中途发现需要这个样子了,才发现,那部分材料已经被自己给去掉了,所做的程序自然没有规律可言,如果现在有人说那个机房收费系统那个功能要修改一下,我估计我的得全盘改动.
iv.开发软件为什么时间总是那么紧,开发的人总是那么累
曾经有过单纯的想法,为什么工作非要加班呢,多用些人不就行了吗,人多力量大嘛,但是自从软工看完后便觉得这种想法荡然无存了,其实,原因并不是说老板多黑心,而是取决于软件开发工作的性质,这是一项需要智慧的工作,首先,这不是工厂,没有机器,只有手工;其次,这里需要残杂很大一部分人文因素,比如说个人习惯,同样输出一个结果,两个人的算法往往就有很大的区别,所以参加人数越多,在项目中的不同因素就越多,因为各个模块之间的衔接问题就越大,所以参加人数应该是少而精,所以这也是为什么蓝精灵体中说程序员是“聪明而辛苦”,聪明在他们每个人都是一个设计师,辛苦在一项任务,自己又无可取代的位置,只能是自己的事情自己干。
v.如果自己无法适应社会中的潜规则,那么就学编程吧(不知道这样说对不对)
从我目前的认识来看,突然发现软件行业是整个社会的一片净土,这里不像其他行业一样靠嘴吃饭,更多的是需要能力,除非老板想赔钱,不然绝对不会用一个靠关系而不是靠技术的人来当项目经理,因为这个关系到整个项目生存的决定性因素;虽然同事之间保持着微妙的竞争关系,但是一个项目要想如期完成必须要和同事上司好好合作;做软件开发的每个项目的每个功能,无处不能体现全心全意为人民服务的宗旨,所以开发软件的人无疑又是心细如丝,必定是善良的,体贴的,嫁人就嫁程序员哦。所以,以此可见,这里的确是一片净土。
热心网友
时间:2024-11-14 18:59
我也在找...
热心网友
时间:2024-11-14 18:59
1、软件工程是一门指导软件开发和维护的工程学科,主要研究软件开发和维护的工程技术和软件项目管理等内容,其中涉及如何保证软件产品的质量和可靠性,如何提高软件开发效率和拥护满意度等。
2、软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
3、软件生产历经4大阶段分别为:程序设计阶段(1946-1956年)、软件开发阶段(1956-1968年)、软件工程阶段(1968年以后)、计算机辅助软件工程阶段
4、常见的软件过程模型:边改边做模型、瀑布模型、演化模型、增量迭代模型、喷泉模型
5、软件过程的研究,标志着人们为解决软件危机问题,把关注的焦点由编程转移到了软件开发的整个过程,包括分析、设计、编程和测试4个核心阶段和需求调研、运行与维护两个延伸阶段说明软件质量、软件开发效率、软件的可靠性、可维护性问题涉及了软件生存周期的所有阶段。
6、软件生存周期:一个软件从定义到开发、使用和维护,直到最终被弃用,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。软件的生存周期可分为八个阶段:①问题定义;②可行性研究;③需求分析;④总体(概要)设计;⑤详细设计;⑥编码与单元测试;⑦综合测试;⑧软件维护。
7、需求分析:系统开发前期需求分析很重要,它是为了有效解决用户问题的需要进行的一项工程活动,所需要考虑的需求问题是功能需求、数据需求、性能需求和接口需求,开发者承担分析任务,核心是用户。其步骤有三个:①获取客户需求,客户泛指某个人或机构部门等,一般方法是调查,包括访谈、座谈、问卷、跟班和收集资料,需求规约可表达用户的软件价值。②建立需求模型,它是用户需求的图解,一些常用的模型有:业务树图、用例图、活动图。分别用于结构化需求建模、系统业务举例和反映系统工作流程。③进行需求验证,要验证的主要内容有:有效性验证、一致性验证、完整性验证、现实性验证和可检验性验证。
。。。
感悟:
了解了什么是“软件危机”,透过软件工程于解决“软件危机”的重要性、软件工程三条重要线索、软件工程知识体系函括内容及软件工程各类生存期模型,我对软件工程思想及“工程化”软件开发的流程有了较系统的了解,透过软件工程的起源,认识到:实现软件工业的产业化,软件工程必须是真正意义上的工程化。从软件开发三条线索(开发、管理、改进)来看,软件开发的过程必须规范化(各阶段都必须形成相应文档;编码必须依照通用可读性严格遵照编程规范……);软件项目管理的核心是项目规划和项目跟踪控制,保证软件工程开发的成功完成,软件开发流程的规范化在软件项目中有着重要的作用,通过不断地优化和规范过程,企业可以提高软件生产能力。
从需求分析到维护,透过软件的开发流程具体实施的学习,我对软件项目开发的流程有了更深的理解,例如通过需求规格说明书、可行性研究说明书、数据库设计说明书、需求分析说明书、总体设计说明书、详细设计说明书等六份作业的完成虽然很不完善,但仍让我对需求分析建模和设计中用到的方法有了更好的理解并熟悉了六份文档的格式。学了这门课才知道软件开发中每一阶段都有文档的产生,其管理与应用也是一门大学问……此外,这门课程里讲授了很多我以前从未接触过的方法和软件如UML模型、MVC模型、visio的强大绘图建模功能、这些知识不仅能应用于软件工程,也能应用于其他的很多领域,这门课结束了,但这些方面学习我还将继续的。