对于《软件工程》的总结

软件工程课程总结

 

一、对前期提出的问题的回答

      学了一个学期的《软件工程》之后再回顾自己第一天的博客,重新再看当初提出的问题,如今都在学习和实践中找到了自己的答案。

 

   1.为什么我们不能只精通一种语言?

     回答:

     我总结一下自己大学三年的经历说一说吧。曾经大一的我以为精通C语言就够了,直到后来学习了Java,后来我发现Java还能写网站挺不错,直到发现部署windows太麻烦大三上个学期后又学习了C#,于是乎我以为C#就够了,结果发现网页很丑,然后又要学习了HTML/CSS,后来发现这样还不够炫,这个学期又有了J2EE的学习。于是就这样我跟着学校的课程学了一样有一样的技能,学的东西越多就会发现,好像自己会的东西越来越不够用。 

      所以我觉得分阶段来说:首先,要做的是,搞定一门语言,我们不说精通,因为没有几个人能精通一门语言,说自己精通XXX的,大多是吹嘘的。首先要搞定一门语言,如果知道好多门语言,结果做起项目来,稍微深一点的东西就做不了了。其次,你的主要语言周边的一些东西,开始接触别的语言。但是,需要注意的是,永远都是,学一个东西,就要让这个东西能工作,不然就是浪费时间。  

      我以为我们应该掌握至少两门语言(当然这只是个人意见,仅供参考):面向过程的和面向对象的!(1)c语言是面向过程中最好的语言了,而且也比较好学,容易入手! (2)Java是面向对象中最好的语言了,而且现在大部分编程都用用的Java。但是这门语言比较难入门,要有耐心。对于专业课当然要学好,数据结构和数据库当然要学好啦,学不好这些以后的课就很难看懂了!

  

  2.什么是单元测试?

    回答:

      单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

     经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。 

      我认为测试应该是一个挺招程序员嫌弃的一个过程。测试到底有什么用呢?在我看来测试不可能保证一个程序是完全正确的,但是测试却可以增强我们对程序完整的信心,测试可以让我们相信程序做了我么期望它做的事情。测试能够使我们尽早的发现程序的 bug 和不足。一个 bug 被隐藏的时间越长,修复这个 bug 的代价就越大。在日常的开发中,代码的完工其实并不等于开发的完工。如果没有单元测试,那么如何保证代码能够正常运行呢?测试人员做的只是业务上的集成测试,也就是黑盒测试,对单个的方法是没有办法测试的,而且,测试出的 bug 的范围也会很广,根本不能确定 bug 的范围,还得去花时间来确定 bug 出在什么地方。难道这就不浪费时间了吗?甚至,这样的方式,时间浪费的会更多。

    我的老师在上课的时候曾经警告我们:最后才修改一个 bug 的代过价是在 bug 产生时修改它的代价的10倍。我想正因为是这样单元测试才显的重要。它旨在强调在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完成全部功能的开发。

 

  3.如何让自己的代码更简洁?

    回答:

      我在之前的博客上曾经明确的表达过自己观点:自己的才华应该表现在设计良好的结构和模式,表现在干净易懂的代码,表现在对空间的尊重,对代码的尊重。这样您才能赢得别人的尊重!代码不是一次性的,需要重复的修改和重构,所以我们很多时候是在为未来写点代码。     

      我的总结了几个步骤,依其重要顺序:

       (1)能通过所有测试;(2)没有重复代码;(3)体现系统中的全部设计理念;(4)包括尽量少的实体,比如类、方法、函数等。

        这里我还有两个小技巧可以分享:

       (1)空语句:清理垃圾代码的最后一步就是删除空语句,空语句就是指标签间不存在任何内容的空语句。

     (2)注释语句:我们在添加注释语句时,就会要尽量避免添加那些即使删除后也不会影响网页源代码可读性的注释语句。 

 

 

  4.软件开发领域都有那些思想?

     回答:

        对于软件开发来说大致上可以分成两种思想:(1)分层思想;(2)模块思想。

 

 

    5.如何开发出符合用户需求的软件?

     回答:

       在学习《软件工程》的过程中我了解到,软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。 软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写、提交程序。

        要制作出用户符合客户需求的软件,其中需求捕捉和需求分析都显得尤其重要。在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围、定义和功能时所要做的所有的工作。首先调查组织机构情况,包括了解该组织的部门组成情况,各部门的职能等,为分析信息流程作准备。然后调查各部门的业务活动情况,包括了解各个部门输入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么。协助用户明确对新系统的各种要求,包括信息要求、处理要求、完全性与完整性要求。确定新系统的边界,确定哪些功能由计算机完成或将来准备让计算机完成,哪些活动由人工完成。由计算机完成的功能就是新系统应该实现的功能。

        

2.总结本学期这门课程的体会

       我最初学习《软件工程》的时候不知道什么是软件测试、代码管理、甚至连如何规范代码都不知道,更别提需求分析这些东西。可以说我对如何开发软件一无所知。但是经过这个学期的学习和实践我学到了许多东西。刚开始上课的时候,总是思考如何做好软件项目。认为学校的课程和考核混乱,所以总是很郁闷,认为自己学不到东西,尤其是每次到到要自己独立做东西的时候就感到自己什么也不会。

    但是《软件工程》这门课,却给了我一个很好的指引。这门课程的教学方法也与往常不大一样,使用微博来反应作业,而不是直接像往常一样上交作品项目+报告总结的方式。这样一来我们学生的自主能动性就提高了很多,而且由于有大量的模拟实践的作业,使得我们学生能够将之前学过的内容学以致用,从而积累了不少解决问题的经验。通过这次《软件工程》的学习,我们拓宽了知识面,锻炼了能力,综合素质得到较大提高。安排课程设计的基本目的,在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟。尤其是观察、分析和解决问题的实际工作能力,我个人觉得这应该算是一门培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才的课程了。

 

    回顾我们这一学期的微博,就可以发现老师的用心良苦和自己的点点进步。它的一个重要功能,在于运用学习成果,检验学习成果。把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。对我们来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。现在我从一开始对软件开发的两眼一抹黑,到手慢脚乱地完成四则运算程序,到两人结对编写四则运算的合作项目,再到小组的共同制作的耿丹师生基本信息管理系统的项目,学会了将如何将大一和大二学到的知识都运用到实际来,并且用其来创造出有实用价值的东西来。但是我认为我们学到的还有远远比这个更有价值的东西,就是学会了如何和与他人合作共同创作作品,和对自己的自信心。

     软件工程课程虽已结束,但我知道对于我来说《软件工程》的学习才刚刚开始。我很感谢这个学期以来老师们对我的教导和帮助,谢谢你们!

 

 

3.对课程的建议

 

      我其实十分喜欢这种写博客的教学方法方法。这种方法既能从时间上保证学习进度和学习效率,并能有效的从习惯上调动每个学生的积极性,我个人觉得这种教学方法还是值得采用的。

 

原文地址:https://www.cnblogs.com/yilinwei/p/5586890.html