再谈对软件工程的认知与理解
Posted 光颜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了再谈对软件工程的认知与理解相关的知识,希望对你有一定的参考价值。
再谈对软件工程的认知与理解
一、对软件工程的理解(我们学到了什么)
网上的定义为:按照工程学的管理方式,有组织、有计划的,在一定的质量基础、时间限度和成本范围内,实现功能明确的软件系统。通过本次学习,我们也对软件工程有了大致的概念,那什么是软件工程呢。个人的理解为,设计软件并不难,难在工程,如何用最小的规模、最低的成本、最短时间满足甲方的需求和使利益最大化。工程顾名思义,不仅需要技术,还需要对整个流程的熟悉与了解,从了解需求、到画原型图、建数据库、写代码、改bug,最后测试、交付等等,真真实实的了解完、并且亲身经历了一遍,我们对软件工程针对有了一个立体和形象的认识。同时也让我们理解了项目前期规划的重要性,团队重要性,每个人个人能力的重要性。
细点来说,软件开发是一个把用户需要转化为软件需求,把软件需求转化为软件设计,用软件代码来实现软件设计,对软件代码进行测试,并签署确认它可以投入运行使用的过程。在这个过程中的每一阶段,都包含有相应的文档编制工作。软件开发过程当中,遵循一定的流程,主要包括系统分析、系统设计、系统编码、系统测试以及系统的维护等几个阶段。系统分析包括软件需求分析和系统可行性分析。软件需求分析就是回答做什么的问题。它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。系统可行性分析就是通过需求调查来确定此系统是否具有可行性。系统设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块。概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库,常用方法还是结构化程序设计方法。系统编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的"源程序清单"。系统测试的目的不是验证软件的正确性,而是以较小的代价发现尽可能多的错误。测试从需求阶段开始,此后与整个开发过程并行,换句话说,伴随着开发过程的每一个阶段,都有一个重要的测试活动,它是预期内按时交付高质量的软件的保证。 系统维护是指在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。在实际开发过程中,软件开发并不是从第一步进行到最后一步,而是在任何阶段,在进入下一阶段前一般都有一步或几步的回溯。在测试过程中的问题可能要求修改设计,用户可能会提出一些需要来修改需求说明书等。总的说来,软件开发是一个环环相扣的设计和实施过程,整个系统开发的过程当中,系统分析和设计是重中之重。只有把握好系统分析,才能使后续改动尽可能多的减少;只有把握好系统设计,才能保证软件的根基比较稳固。也即是它们很大程度上决定着软件开发的周期以及寿命。
二、如何利用好技术与工具来开发项目
软件开发工具提供了描述软件状况及其开发过程的概念模式,协助软件开发人员认识软件工作的环境与要求、合理地组织与管理软件开的工作过程。传统的结构化模型包括数据模型、功能模型与行为模型,相应的需要画实体联系图、数据流图、状态转化图,画这些图需要用到Visual Paradigm、Axure,除了这些绘图工具,原型工具之外,还用到了数据库可视化工具SQLyog,开发工具IDEA等等,这些工具软件的应用极大的帮助我们了解需求,对整个开发过程有更清晰的了解,使开发相对简化。
我们也用到了很多技术,如ssh框架技术,它封装了很多类方法等等,使我们编程变得更简单,代码更简洁。前端我们采用的主要构件框架是EasyU(一组基于JQuery的UI插件集合体);中间件我们使用tomcat;持久化我们采用mysql。同时采用Ajax,Json,xml,Servlet,mail.jar等技术。
当然很多技术也是第一次听说,但也能感受到构成软件的软件实体的粒度不断增大,软件基本模型越来越符合人类的思维模式;软件运行平台的能力不断增强,越来越多地屏蔽掉计算机底层的复杂性;软件支撑平台的能力不断增强,越来越多地屏蔽了软件开发过程的复杂性;软件技术的应用范围不断扩大,越来越广地渗透到人类生活的各个方面。
三、在做项目时,遇到的问题及解决方法
1、一些绘图工具、原型工具不会使用。刚开始的时候不会用Visual Paradigm画类图,活动图,之前没用过这个工具,包括用Axure绘制快速原型图。后来和队友们一起商量,在网络中找教程,逐渐摸索,找到了解决问题的方式。
2、做页面的时候,很多web前端知识有些遗忘,页面做的很丑,后来边画页面,边在网上寻找相应的知识点,对自己进行补充。
3、很多技术都没听过,ssh框架不熟练,搭环境的时候很费劲,整个环境也是队友帮忙搭建的。
四、切身的体会、收获和感悟(感触最大、感触最深的某几个知识点的认知)
1.周威威:
首先,一个人在团队中的稳定输出相对于站在高度上去指导,更能有意义。能够输出很容易,但是想要稳定的输出(这里对我所说的稳定输出进行说明——高质量的代码,充分体现出了面向对象设计的思想。)其次就是对于开发工具的使用,我们享受开发工具给我们带来的便捷,但是我们绝对不能完全的依赖于开发工具,如果有一天开发工具消失了,那么我们能够依靠的也就最原生的SDK,我们的双手和大脑,所以我们应当自觉地提升脱离开发工具的编码能力。最后,还是觉得对于知识的认识,太过于片面,还有很多深层次的东西触及不到,每一个框架都是众多大牛的思想结晶,我们除了使用,还应该去和大牛们思想碰撞。
2.程昕蕊:
软件工程是一个从可行性研究、需求分析、概要设计、详情设计、开发实现、测试、部署及维护这几个方面来完成整个项目。对我来说,最深的亲身体会就是真的从头到尾的经历了这些步骤,真正了解了项目是如何开发的,在这过程中我们会经历许多坎坷,遇到从未接触过的知识点和从没有遇到过的bug,但这种挫折也锻炼了我们解决问题的能力,在项目一开始的时候,我不知道如何在写逻辑时,用debug来找到自己逻辑出问题的点,在写前台页面时,不知道如何用alert等语句查看自己的错误。但是后来,通过完成项目,我都可以熟练利用这些小技巧帮助自己更快的解决问题和发现问题。也明白了如何利用CSDN、知乎等知识库进行技术的检索,看别人的东西能让自己借鉴多少,这些都是我的成长。同时,我发现前台页面的json我了解的不多,导致写程序时一开始很懵,所以我也要在以后的日子里,多巩固基础知识。
3.刘立博:
软件工程作为一个脱胎于其他工程方法的学科,我们学习的就是前人的经验,同时突出了我们注重实践的特性。作为工程类学科,我们更关注“人”,将人作为工程主体考虑其中,这是我们的特点,也是优点。这种人文关怀,是我们的工程更复杂,有更多的不确定性,但得出的结论更精准。除了经验主义和人文关怀,我认为我们还要注重差异性规划,要考虑不同规模,不同情景的项目采取不同的工程方法,不能一刀切,这种方法实用就都用。同时,在做项目时,我更多的偏于前期的设计和需求分析,这也非常适合我细心、人缘广、善于沟通的特性,同时,我熟练使用文档,所以这在我们团队也发挥了重要的作用。除此之外,我也学会了一些技术知识。之前一直对各种开发软件的应用不了解、不清楚。不清楚前期的设计到底有什么用,甚至不知道如何去利用工具去画、去写。不知道如何使用idea这些开发软件来实现自己的逻辑和对功能进行实现。那么,经过这几个月的学习和与伙伴的合作,我了解了整个开发过程,这对我对软件工程的认识也有了新的进展。
4.冯暑容:
在学习中,我发现其实很多技术都是为了帮助开发的,现在先学会使用,就单纯搭环境这一方面来说吧,刚从gitHub上下载源码之后,上面虽然有搭配环境的教程,但实际操作却又是另一回事。先搭建Spring环境-->然后搭建 Hibernate环境--> 整合Spring和Hibernate --> 搭建Struts2环境 --> 整合Spring和Struts2。但是一开始不会啊,就一股脑的把所有包都引进去了,然后有的包是多余的,有的包是缺少的,一下子全引进去了,就看不出来自己到底哪里出了问题,就要一点点检查,很麻烦。而且之前对搭配环境很抵触,每次到这种地方,就不知道该如何去做,不知道怎么做。自己折磨自己的时候就是最让自己成长的时候。在自己不断试错和走弯路的时候,就是自己成长的时候,虽然搭配环境我用了好几天的时候也没研究明白,最后还是队友帮忙,但是下次我再看到搭配环境的时候,我至少会很有信心的去接触它。总的来说,团队协作非常重要,一个人可以走得很快,但一群人可以走的很远。
总的来说,这不仅需要个人的技术,还需要大家在一起团结协作,我们需要沟通、需要理解,同时我们也要互相提升,在队友有错误要及时指正,团队有问题要温暖的去帮助。我们是命运共同体,我们的成长也是团队共同的成长。在整个过程中,对于队长来说印象最深的就是如何去和队员沟通,如何去将项目的各个部分上传到公共管理的板块进行整个团队的统一管理,当队友焦虑不知道如何做时,队长应该怎么样鼓励队员并且给队员思路。在分配任务时,如何根据队员的能力进行任务的分配等等,这些都是在整个项目中,我们所成长的。同时,我也很感谢我的三位队友,我们互相鼓励温暖了彼此。不管以后能不能一起合作,都希望我们仍可以陪伴和支持彼此。
以上是关于再谈对软件工程的认知与理解的主要内容,如果未能解决你的问题,请参考以下文章