学习软件构造课程的心得体会

        在学习软件构造课程之前,我对于编程工作的理解就是简单的写一写代码,改一改bug。但学完这门课后我对于编程有了更加深刻的认识。

1.软件构造基本过程

      首先在宏观上软件的生命周期基本可以划分为:需求收集和分析,可行性分析,系统分析,软件架构设计,编写代码,测试代码,整合代码,打包交付,运行和维护。但在具体实现过程又有不同的方式,比如传统的瀑布模型和现在比较流行的敏捷开发。

        对于瀑布模型,其核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。并基本严格按照上述的软件生命周期来自上而下的分工,具有相互衔接的固定次序,如同瀑布流水一样逐级下落。

        而敏捷开发以用户的需求为核心,采用迭代、循序渐进的方法进行开发。在敏捷开发中,把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。其核心原则是主张简单,只基于现有的需求进行建模,并时刻准备着迎接新的变化,同时保证项目的可持续性。由于在实际开发时用户的需求不可能在一开始就完全确定,因此这样的敏捷开发原则更加实用,效率更高。

        同时我觉得敏捷开发的思想对我们现在的编程也很有启发性,比如老师在实验的设计过程中会加入“新的变化”这一部分,来考验我们是否考虑了需求的可能变化。

2.软件构造的质量标准与目标

      然后对于软件构造的质量标准与目标也有了新的认识。从一开始的认为只要减少bug就可以到现在清楚软件至少需要有可理解性、可维护性、可复用性、健壮性、时空性能等。

      同时对于软件的认知又有了从功能需求到质量需求的变化,了解软件开发过程中应考虑哪些质量目标,掌握了面向关键质量目标的软件基本构造技术,形成了面向质量目标的软件开发思维模式。

3.ADT和OOP

      这一部分的内容老师花了很长时间讲解也是实验重点考察的部分,同时也是我思考的比较多的内容。

      对于ADT,我第一次接触到这个概念是在数据结构课程里,记得当时书上的定义是一个实现包括储存数据元素的存储结构以及实现基本操作的算法。而到了软件构造课,我知道了它在软件设计过程中也是一个重要的概念,它使得只研究和使用一些代码的结构而不用考虑它的实现细节成为可能。这也对我编程的思想有了本质的改变,考虑一个问题的实现从之前的具体思维逐渐倾向于抽象思维,掌握了“面向抽象编程”的核心思想和面向对象软件开发的基本过程,为以后能够对实际应用问题进行抽象和建模做好准备。

      对于OOP,在软件构造课程之前,我仅仅知道Java是一门面向对象的语言,也只是简单了解一些概念而已,但通过这门课的系统学习,我知道了OOP的封装与信息隐藏,继承与重写,多态、子类型、重载,静态与动态分派等一系列概念。OOP是一种重要的编程思想,区别于C语言的面向过程的编程思维,OOP更加符合我们考虑问题的真实想法,也使得编程效率更高,更易于理解。然后通过老师的讲解和实验的训练我知道了接口来确定ADT规约,类实现ADT,而OOP就是实现的最基本保证,同时继承和重载等也是基于OOP这最基本的特性来实现的。OOP实现了软件设计的三个重要目标:可重用性、灵活性和可扩展性,总之OOP和ADT是分不开的。

4.可复用可维护等质量目标

      最初的复用,每块代码分散在各处,独立的演变,仍需要针对每一块修改和测试。这种复用带来的好处很有限。而且传统复用方案的致命缺陷是复用常常以破坏可维护性为代价的。因此我们在课程中学会了要支持可维护性的复用,即在保持甚至提高系统的可维护性的同时,实现系统的复用。在面向对象语言中,语言具有良好特性,使得细节的复用变得简单成熟而不再是重点。这是提高复用性同时保持和提高可维护性的关键。抽象层次应是较为稳定的,是复用的重点。抽象层次的模块相对独立于具体层次。这样具体层次内部的变化就不会影响到抽象层次,抽象层次的模块复用会较为容易。因此在面向对象设计过程中ADT抽象数据型起到了非常重要的作用。

      可维护性作为一个重要的软件质量目标,直接关系到软件交付用户后的运维工作,因此也不容忽视。可以通过使用先进的软件开发技术和工具,选择可维护的程序设计语言等方法来提高程序的可维护性。同时在课程的学习中我也认识到程序的文档对于可维护性也有重要的作用,因此在实验中老师加入了一些对于代码注释文档等内容的要求。使我们认识到软件维护不仅仅是运维工程师的工作,而是从设计和开发阶段就开始了。

      老师在课上强调过健壮性是程序最为关键的质量目标,因为这直接关系到最后的软件能否在不正常操作或输入的情况下合理运行。因此健壮性简单说就是指软件对于规范要求以外的输入情况的处理能力。所谓健壮的系统是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。

5.实验

      软件构造的实验内容我觉得设计的很充实,虽然有的部分任务量比较重但对于所学知识是一个很好的复习和实践,同时在实验中用到的Junit,EclEmma等工具也十分高效有帮助,也体现了运用先进的软件开发工具来提高可维护性的原则。

      总之,软件构造这门课程无论对于今后的学习还是未来的就业都有很好的启发性的作用。而这其中我认为最有意义的就是思维上的转换,将我们的思维从编程转换成工程,从个人编程到团队合作的转换,从关注单一开发环节到关注全开发过程的转换。


你可能感兴趣的:(学习软件构造课程的心得体会)