一、软件
1、软件概念
在学习软件工程这门课的时候,对于软件的概念还局限于软件=程序,程序就是软件,软件就是程序。
但是在这学期学习了软件工程这门课程后我知道了软件=程序+软件工程,软件不只是有程序组成的还有软件工程,这才是软件的组成结构。
软件的开发和发展是需要很多的条件的,像前期的策划(需求分析、市场价值等)、后期的改进和营销等。这些都是决定一个软件的发展必要条件。
2、软件开发有四个阶段:
1、玩具阶段
2、业余爱好者阶段
3、探索阶段
4、成熟的产业阶段
3、软件的特殊性:
1、复杂性
2、不可见性
3、易变性
4、服从性
5、非连续性
就像书中将软件比喻成飞机,飞机的零部件有可能因为结构不协调或者某些方面造成飞机故障,然后修修补补就飞行了,可能运行的一些时间还会出现这种情况。这就是和软件一样,如果前期没有把程序的结构什么的搞清楚,那么也是会出现一系列的问题。这是我们就需要软件工程了。
二、软件工程
1、软件工程概念
软件工程这个概念是在1968年提出来的。
那么软件工程又是什么?软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括以下领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。当然软件工程在各个学科上也是有很大的作用的。
我们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系,叫“软件开发流程”。但是光有体系还不够我们还需要保证这些思想在实践上能运用那么我们就用到了一些工具。工具有很多例如:编译工具、代码管理工具、Microsoft visual studio、GitHub、eclipse等。
2、软件工程的知识领域
软件工程这个学科到底包含了什么样的知识,这些知识又是在什么基础上建立的。2014年IEEE发布了SWEBOK V3.0,完整的回答了这个问题,下面提到了15个知识领域:
1、Software Requirements
2、software design
3、software construction
4、software testing
5、software maintenance
6、software configuration management
7、software engineering process
8、software engineering management
9、software engineering models and methods
10、software quality
11、software engineering professional practice
12、software engineering economics
13、computing foundations
14、mathematical foundations
15、engineering foundations
上面15个知识领域中,1-12描述了软件工程学科本身的知识领域;13-15描述了软件工程的三大类基础知识领域:计算基础、数学基础和工程基础。
3、软件工程的目标
软件工程的目标是:创造“足够好”的软件。
那么“足够好“的定义是什么?是没有缺陷的软件吗?如果能做到没有缺陷是最好的,但是开发软件确实受很多限制像时间、成本等很多方面决定的。
但是我们要做一个接近于完美的软件,那么怎么衡量一个软件呢?这需要参考软件的开发效率、用户满意度、可靠性和维护性。
上面这些是我在读《现代软件工程——构建之法》这本书中对什么是软件?什么是软件工程?的一个概括和理解。
在速读本书过程中想提出几个问题,希望在今后的学习中自己能找到答案并能够解答。
1、软件工程师的发展需求?怎么才能成为一名合格的软件工程师?在职业发展中需要锻炼什么样的技能和发展空间是怎么样的?
2、团队合作和非团队合作之间的区别和需要注意的地方有什么?
3、怎么才能用最好的方法来设计和实现软件?
4、软件测试中哪种测试方法和工具最好?
5、怎么样才能保持创新思维?
以上想法和总结大部分均来自《现代软件工程——构建之法》第三版