MSRA的高级软件工程已经开始两周了,听着邹欣老师介绍一通,什么心理学管理学全都囊括在内;再自己这本书那本书的翻看一通,忽然发现原来软件工程和我想象中的不完全是那么一回事。于是立马Google一番,发现维基百科中的定义是:软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科,它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。这才恍然大悟,原来软件工程不仅仅是说怎么用编程语言写出一个软件,除了程序员之外,系统分析员、软件设计师、系统架构师、测试员都是不可或缺的重要部分。
很可惜的是,我是学EE的,在科大没有学过软件工程,没有接触过什么真正意义上的系统级别的软件设计(这里顺便建议一下6系可以开开这种工程实践意义较强的课程~~连数学系都开Software Engineering~⊙﹏⊙b汗)。Cube里面就有一个数学系的女生很哈皮地说她学过软件工程,于是便有了这篇“之他见”,更确切的,“之她见”。
首先,是分组和选题。大家六人一组,然后讨论出一个比较感兴趣比较想做的项目开始计划,他们选择的是做出一个网上的科大毕业生通讯录系统,可以通过输入自己的用户名和密码来登录进系统内,然后可以进行一系列的相关操作。
确定要做的项目之后,接下来就是学习一些关于软件工程的基本方法,将所学的方法和步骤应用到选择的题目上去,包括市场调查、需求分析和可行性报告。通过调查现有的各种不同的SNS社区的情况、他们实现的功能什么的来对接下来自己要做的有一个大概的了解和概念;同时向身边的朋友同学以及其他社交圈内的人调研是否有必要设计出这样一个网上信息查询系统;最后再大致分析一下这个项目整体的可行性,以及一个关于这个项目要的计划。当然,这里只是一个初步的设计,对今后的方向有一个大概的了解就行。具体的设计什么的是下一步——概要设计的内容。
前面的基础,项目的 可行性条件都具备了之后,就要开始设计整个工程了。这里面涉及到的就是和全局、局部有关的概念:要首先将软件或者项目预期完成的功能决定好,然后进行概要设计。根据整个project的内容,把它划分为多个模块,再具体去考虑各个模块各自的功能。针对他们的project,一共分成了三个主要模块:登录、注册、信息查找。登录就是用户输入自己的用户名和密码去和已有的用户数据库中的各条匹配,如果匹配成功,则进入用户的个人主页,若匹配失败,则重新登录;注册则是原来不存在于数据库中的用户新建个信息项,然后转到新建的个人主页,同时将该用户的信息添加到数据库;信息查找则是用户输入想要查找对象的一些信息,系统根据这些信息区数据库中匹配,根据访问权限的设定来实现访问或者返回自己的主页。
完成了前面这些之后,整个系统的基本结构就架构好了^_^,可以开始画数据流图了。简单地说,数据流图就是把上面这一堆乱七八糟的结构功能的构想用箭头连接起来,简明扼要利于分析。当然啦,画数据流图的时候也有讲究:从最大的系统开始座位第0层数据流图,画的是整个系统的基本结构框图;接下来细分到具体的网上登录系统;最后就是要实现的登录、注册和查询、信息修改的流程。从那些图可以一目了然,工程的这个模块要干什么什么,那个模块要干什么什么之类的,很清晰,也利于后面编程的实现。
实现整个系统当然必不可少的就是coding啦~~coding只是整个的一部分而已,而且我也没办法说清楚如何如何去编程,毕竟高手牛人还是很多滴~~ 总之呢,编出系统之后并没有完事,还有一项要做的就是用户测试。你毕竟做出了一个系统嘛,不给人家用用看怎么能够判断它好不好呢?给一批科大毕业生体验一下这个系统之后,根据得到的反馈信息来评价这个系统的整体性能,然后进一步做一些修改和完善。其实写一个用户手册出来告诉大家这个系统该怎么用之类的还是很必要的,可以做一下。
大致的她在软件工程这门课上所做的就是这些了。她说,在软件工程这门课上还是可以学到很多东西的,当然啦,这些东西根据你所做的project还是有所不同的。像他们的这个网上信息查询系统,她就学会了用PHP,CSS,HTML, MYSQL,还有其他一些如何设计一个工程、如何一步步实现、如何进行用户测试以及相应的调整。在我看来,这是一个系统性的学习,交叉性学科的任务。除了写程序,我们在软件工程中其实还有很多方面可以学习和运用,经验教训的累积也会在将来的工作实践中成为一笔宝贵的财富。
哈哈,最后总结一下,软件工程还是很强大的,学好了还是很有用的。希望我们可以在邹欣老师的带领和指导下领略到这门独特的艺术~~