首先说一下我们的课程,这学期的软件工程课时并不多,其实对于软件工程这门课来说我认为是不太够的,课堂时间不允许我们得到足够多的知识,而两次实习,两个上午,也不能真正让我们静下心专注做些什么,所以,也许真正的学习是在课堂之外,老师是一个引导的作用,对于感兴趣的部分,还是要自己在网上书上查找阅读,才能真正有收获。
软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。典型的软件有电子邮件、嵌入式系统、人机界面、办公套件、操作系统、编译器、数据库、游戏等。同时,各个行业几乎都有计算机软件的应用,如工业、农业、银行、航空、政府部门等。这些应用都促进了经济和社会的发展,也提高了工作和生活效率 。
软件工程是教我们如何更高效的开发管理软件的。对于一个复杂的软件系统来说,它会有一个开发,运行,衰退的周期,就是我们所说的软件生命周期。软件生命周期(SDLC,Systems Development Life Cycle,SDLC)是软件的产生直到报废或停止使用的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件的质量。对于我们平时学习C语言或者C++编写的小程序,几乎不存在生命周期一说,课程结束,编出来或者没有编出来,都静静的躺到电脑文件夹或者删掉了。显然软件工程的对象不是这种代码简单,功能简单的小软件,它的对象是拥有复杂系统,需要多个模块协调合作的比较大型复杂的软件。软件工程这门课程,对于我们理解大型软件的复杂度和结构,打开了一扇大门。
软件工程令我印象深刻的是结构化设计。结构化分析是一种面向功能或面向数据流的需求分析方法,采用自顶向下、逐层分解的方法,建立系统的处理流程。其基本思想是:根据SA方法中的数据流图建立一个良好的模块结构图(例如SC图或软件层次方框图);运用模块化的设计原理控制系统的复杂性,即设计出模块相对独立的,模块结构图深度,宽度都适当的,单入口单出口的,单一功能的模块结构的软件结构图或软件层次方框图。同时模块之间的联系越松散越好,而模块内各成分之间的联系越紧凑越好。逐层分解到最小因子时,基本可以精细到算法代码层次,这是非常令人惊喜的,写出了结构化的详细设计,就相当于最底层的代码编写已经搭好了框架,完成了一半。
在软件工程这门课程的初始,老师就说过最好的学习方法就是实践,我们小组选定了做一个音乐播放器,围绕这个软件做了可行性分析,需求分析,概要设计,详细设计四篇文档的编写。在编写文档的过程中,我们了解到很多之前没有碰到过得问题,比如可行性分析中对于系统环境的说明,接口的说明,需求分析中对于人工,金钱的分配确定,概要设计中的出错预防,详细设计中的数据结构设计,都是需要我们思考一番才能确定的。软件工程不仅仅局限于编写程序,更多的软件从构思,开发到死亡的一个漫长的过程,同时学习它也需要不断实践和经验的积累!