【软件工程】之软件工程的理解
针对本学期第一次软件工程课后的思考题,参考课本以及网络上的资料,作出如下自己的思考理解。
思考题如下
一、对软件工程的看法
在此之前,我所做过的工程仅仅局限于一些课程的大作业上,并没有更进一步到软件上面,仅仅是针对某一个或者某一类问题进行解决。
【任正非致员工的一封信】链接: link.
我的看法:
1、 <书上的定义 >:书上给出了许许多多的定义,如
①运用现代科学技术知识来构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料;②经济地获得能够在实际机器上有效运行地可靠软件而建立和使用地一系列完善地工程化原则;③开发、运行、维护和修复软件系统地方法。
2、<我的理解>:首先,根据书上的介绍可以知道软件工程是在软件危机的背景下产生的。而软件危机的时候,软件的规模越来越大,复杂度增加,价格昂贵,供需差日益增大,开发过程慢,质量差……越来越多的问题,使得软件的开发进入了危机时期。另外,针对软件工程中的工程进行理解,来自百度的定义是说
工程是科学和数学的某种应用,通过这一应用,使自然界的物质和能源的特性能够通过各种结构、机器、产品、系统和过程,是以最短的时间和最少的人力、物力做出高效、可靠且对人类有用的东西。将自然科学的理论应用到具体工农业生产部门中形成的各学科的总称。
也就是说,工程化是可以用最少的投入来完成真正有用的东西的。那么带入软件工程,再加上当时的软件危机背景和任正非的信中一直在强调的团队等等,我就可以把软件工程理解为:软件工程就是将软件开发等各种操作工程化,通过工程中的一些原则或者方法,将软件开发以及后续的各种操作简化并且可以达到最初的目标。
二、软件开发本质的理解
实现问题域中的概念和处理逻辑到运行平台的概念和处理逻辑的映射。
不同抽象层术语之间的“映射”。
不同抽象层处理逻辑之间的“映射”。
建模是解决问题实现映射的一般途径。
软件开发并不仅仅指编码,或者说,编码只是软件开发中的一个小步骤,但是在编码之前还有很多的步骤要做,比如需求分析等等。就像老师上课讲的,软件开发就像是建造一座房子,在真正开始施工建造之前,还有很多的工作要做,而施工建造就像是软件开发中的编码。在我看来,软件开发其实就已经是一个大工程了。
三、软件的特点
1、复杂性
软件是一个庞大的逻辑系统,比很多其他的产品都要复杂。软件产品相比于其他的物质产品。软件更像是一个逻辑品。软件的构造无论是前期还是后期都需要依靠人来完成,而又因为人的多样性,也导致了软件很难统一,所以就增加了它的复杂性。
2、不可见性
软件其实包括三部分:程序、数据和文档。而在此之前,我一直认为软件就相当于程序。但是就从这一方面去理解这个不可见性好像更加简单,就像我们在使用一个APP时,我们看到的往往是最终产物,就算这个APP出错了,我们也只能上报错误反馈,并不能真正知道究竟是软件的哪一个部分错了,作为用户而言,我们看不到它的开发过程。
3、服从性
软件必须和运行它的硬件保持一致,这是由于软件对硬件的依赖所决定的,一般采用软件顺应硬件接口。
4、易变性
其实在日常使用APP的时候,就经常会有更新消息发给我们。软件在生产过程中或者是最后的投入运行之后,都是可以再改变的。这些改变往往可以让这个软件更加顺应时代,更加完善,能够提升用户体验度;但同时,这些改变也有可能带来意想不到的损失,甚至可能会被其他非法分子修改。
四、软件危机
1、软件危机产生的原因
①前面在软件的特性中提到过软件的服从性,即软件得和运行它的硬件保持一致。但是,当硬件不断发展,而软件却跟不上硬件的发展速度的时候,问题就会越累越多,最后就会导致软件危机。总而言之,就是软件和硬件的不一致性。
②初期的需求提得不够明确,或者没有得到确切的表达。工作开始后,软件开发人员和用户没有及时交换意见,就有可能导致软件开发后期问题无法解决。毕竟,软件开发实际上是实现问题域中的概念和处理逻辑到运行平台的概念和处理逻辑的映射,实现双方的交互是非常重要的。
2、软件危机的表现
软件规模越来越大,复杂度不断增加,价格昂贵,供需差日益增大,开发过程慢,质量差……
3、解决手段
①需求分析后,要做好软件定义时期的工作,这样既可以在一定程度上降低开发成本,又可以提高软件的质量。
②开发过程要有统一的、公认的方法论和规范指导,参与人员必须按照规定的方法进行开发。
③做好充分的检测工作,提交给客户高质量的软件。
五、软件工程要素及其作用
软件工程包括三个要素:方法、工具和过程。
方法是完成软件开发的各项任务的技术方法,为软件开发提供“如何做”的技术。工具为运用方法而提供的自动的或半自动的软件工程的支撑环境。
过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤,如何将软件工程方法与软件工具相结合,合理、及时地进行软件开发。