软件定义世界,工程引领未来——中山大学软件工程学院 软件工程导论大作业
目录
“软件定义世界”是软工人的响亮口号,“工程引领未来”是我在上完导论课后的总结与思考。
软件工程导论课作为软件工程学院开设的特色课程以及专业必修课,不仅加深了我们对软件工程本身的理解,还使我们对软件工程的前沿研究与应用有了初步认识,并对群英荟萃的老师们有了更多的了解。
软件工程,理解加深
软件工程的目标是控制复杂度,而不是增加复杂性。——Dr.PamelaZave
个人困惑
在上导论课之前,有两个问题一直困扰着我,软件工程等于写代码吗?我到底要着重培养自己哪方面的能力?带着这两个问题,我认真学习了陈建国老师讲的第一课。陈老师的讲课风格幽默风趣,化繁为简,这使我更加热爱软件工程学院,以及学院中可爱且可敬的老师。
软件与软件工程的定义
软件是开发和运行产品的载体。引用陈老师的一句豪言“只有想不到,没有做不到;无处不在,无所不能,这就是软件”。而软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这才是软件工程。
学习思路的启发
信息是21世纪最重要的产品,软件充分体现了这一点。软件不仅提供了通往全球信息网络的途径,而且也提供了获取信息的多种手段。我在学习软件工程的过程中应注重计算思维能力、算法设计与分析能力、程序设计和实现能力、系统能力的培养,尤其要注重包含对系统的全局掌控能力和系统地考虑问题的求解能力的系统能力。
在未来的工作以及现在小组合作的作业中,规范的编程习惯会有助于项目开发。如KentBeck所说“我不是一个伟大的程序员,我只是一个具有良好习惯的优秀程序员。”所以我也要在变量命名与函数封装上力争规范,写出一个简洁明了的好程序。
软件危机的认识及思考
生于忧患,死于安乐。软件行业欣欣向荣不假,但也要认清危机四伏。比如在软件从设计到交付的环节中“信息的传递会产生误差”,其中“秋千的需求陷阱”就是一个典型的例子。Eiffel编程语言的创造者,提出契约式设计观念的编程大师BertrandMeyer说过“在没有合同的情况下编写类类似于在没有规范的情况下⽣产⼯程组件,没有专业工程师会考虑这个想法”。一份文档作为行动纲领的重要性不言而喻。所以我在日后的学习过程中,不但要努力提高自己的编程水平,也要不断加强自己撰写文档,带领团队的能力。
软件测试的初步认识
根据GlenMyers的观点,软件测试就是要设计合适的测试用例,用尽可能少的测试用例,来发现尽可能多的软件错误。在毛老师的课上学习到要通过测试发现程序中的所有错误,就要穷举所有可能的输入数据,这是不可能的。正如软件测试资深工程师CemKaner所说“我的心得是,企图找出所有的BUG是不现实的。”程序测试是证明程序正确地执行了预期的功能。在传统检验输入输出的认识上,还学习到一个程序不仅要完成它所需完成的功能,而且不应完成它不该做的事,比如不能把边长为0、0、0的三条边判断为等边三角形,因为它根本就不是三角形。
我还学到了白盒测试与黑盒测试的具体知识与测试方法,白盒测试又称结构测试检查的是这个软件的内部逻辑,而黑盒测试又称行为测试检查的是这个软件的输出结果是否与预期相同。这有点像物理学中测试电路,白盒测试就像是电路已知,可以用工具测量内部属性,也可以对内部结构进行化简;而黑盒测试就像是电路只留下了接口,只能用不同的电压输入来测试输出的结果。由此又衍生出了逻辑覆盖测试、基本路径覆盖测试和循环测试三种白盒测试方法与等价类划分、边界值分析、比较测试、错误猜测和因果图五中黑盒测试方法。
科技前沿,守正创新
软件工程导论课不仅打牢了理论基础,还立足当下,把当下热门且实用的技术介绍给我们,既让我们开拓眼界、增长见识,也加深了师生友谊,激发了同学们的科研兴趣。
代码有智能,教育有情怀
王焱林老师围绕代码智能,讲解了包括代码补全、代码注释自动生成等先进技术,让大家看到了解决“重复造轮子”和“看不懂别人代码”两大难题的希望。并且王老师还向我们介绍了她的教育情怀,同学们无不动容。
我有幸在课后获得了与王焱林老师深入交流的机会,她对我提出的问题知无不言言无不尽,在我未来的学业规划以及成长道路都提出了她的宝贵建议。她的教育热情令我感动,也让我再次庆幸能在软件工程学院学习!
深入浅出,引人入胜
陆智超老师把计算机视觉识别、深度学习和自动化深度学习有机结合,用直观的图来向同学们阐述晦涩的底层原理,让我们一群“小白”在上完后不仅在知识上收获颇丰,而且激发了我们的学习热情。
苏玉鑫老师则是把云计算这一个“悬在空中”的课题抽丝剥茧,把其实际应用讲实讲透。“云计算的精髓在于资源共享,时分复用”,云计算其本质就是计算资源的共享。苏老师重点把微服务架构与企业开发紧密相连,让同学们提前了解行业一线的先进开发方法,为以后投身软件行业打下坚实基础。苏老师在讲解OJ软件的微服务应用时还特地以我们现在正在使用的SSEOJ为样板,活灵活现地展示了一个OJ系统的前后端,把之前“神秘”的OJ系统原理直观明了地展现给了我们。
当然,其他老师上的导论课也同样精彩纷呈。比如南雨宏老师的软件攻防大战、陈嘉弛老师的区块链发展趋势与挑战、吴炜滨老师的对抗机器学习与可解释AI软件等等。在此我想向各位老师再次表达我衷心的感谢!
再接再厉,未来可期
在陈建国老师的课上我认识到软件产业是创新的与充满活力的朝阳产业,需要大量的,不同层次的软件人才。学院官网介绍软件工程专业为独立一级学科,是国家一流本科专业建设点。教育部甚至连续三年将软件工程评为“绿牌”专业。 通过自己的努力,在一个朝气蓬勃的学院中学习冉冉升起的软件工程专业,是我心之所向,素履以往。