1.1
软件 = 程序 + 软件工程 (软件工程 = 软件 - 程序(我知道软件是什么,也知道程序是什么,但是就是不懂什么是软件工程啊...个人觉得 软件工程 - 程序 = 0
程序 = 数据结构 + 算法 (突然觉得至今为止我们所写的作业都只是程序而还没达到软件的程度啊..就缺软件工程了..软件工程到底是啥~?!
∴软件 = 数据结构 + 算法 + 软件工程
去百度百科看了一下:(有些就直接省略了
定义
IEEE:在软件工程术语汇编中的定义:软件工程是:1.将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;2.在1中所述方法的研究
ISO 9000对软件工程过程的定义是:软件工程过程是输入转化为输出的一组彼此相关的资源和活动。
其它定义:1.运行时,能够提供所要求功能和性能的指令或计算机程序集合。2.程序能够满意地处理信息的数据结构。3.描述程序功能需求以及程序如何操作和使用所要求的文档。以开发语言作为描述语言,可以认为:软件=程序+数据+文档。
内涵
一、软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括以下四个方面:
1、P(Plan)——软件规格说明。规定软件的功能及其运行时的限制。
2、D(DO)——软件开发。开发出满足规格说明的软件。
3、C(Check)——软件确认。确认开发的软件能够满足用户的需求。
4、A(Action)——软件演进。软件在运行过程中不断改进以满足客户新的需求。
二、从软件开发的观点看,它就是使用适当的资源(包括人员,软硬件资源,时间等),为开发软件进行的一组开发活动,在活动结束时输入(即用户的需求)转化为输出(最终符合用户需求的软件产品)。
三个阶段:定义阶段:可行性研究初步项目计划、需求分析;开发阶段:概要设计、详细设计、实现、测试;运行和维护阶段:运行、维护、废弃
原则:1、抽象;2、信息隐蔽;3、模块化;4、局部化;5、确定性;6,一致性;7、完备性;8、可验证性
上面有条式子,我是不是能够代入解得 软件工程 = 数据 + 文档 呢?
后面还有小学数学题的那个故事,看来我们前两次的作业确实是有点像那样发展,做作业的过程中也发现,软件 - 程序 > 0,因为我做第一个作业的时候和做第二个作业的时候都是分开来做的,明明就是同一个内容的程序,但是我发现前一次的程序要修改和维护完全比再写一个难.深深地觉得写软件还是要事先设计好对象和方法.以便于以后的修改维护.
软件企业 = 软件 + 商业模式
书上说商业模式的时候还提到了 腾讯和奇虎360 的梗(我猜的,书上没明确说是
这件事当年的我也是深有体会.两边打架,我们用户头疼...
1.2
软件工程师把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括下列领域:软件需求分析、软件设计、软件构件、软件测试和软件维护。
软件工程和下列的学科相关:计算机科学、计算机工程、管理学、数学、项目管理学、质量管理、软件人体工学、系统工程、工业设计和用户界面设计。
1.2.1
软件的特殊性:
1.复杂性.(这个深有体会,随便一点小程序都能复杂到头晕.
2.不可见性.(这个虽然是这么说,但是很多东西一旦摆上台来,大家都能看到或者看出其中的源代码..比如说网站的设计.
3.易变性.(这就是传说中的更新与维护?就是那个一修改或者添加一小段代码就要测试半天的东西吧?
4.服从性.(这个主要合适需求方面.嗯,客户是很难满足的,特别是要不断添加更改需求的客户
5.非连续性.(这个不懂.
软件工程的目标是尽量少的Bug,而Bug的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性。
2.1
电脑没有VSTS,也不懂C#...
个人对团队的理解还是可以,但是就是不太懂怎样让整个团队一起分工、运作.
可以理解成 我做这个功能,写一个函数,然后告诉你,我的函数的各参数是什么,然后返回什么值吗?
2.1.2
单元测试应该在最低的功能/参数上验证程序的正确性。
单元测试必须由最熟悉代码的人(程序的作者)来写。
单元测试过后,机器状态保持不变。
单元测试要快(一个测试的运行时间是几秒钟,而不是几分钟)。
单元测试应该产生可重复、一致的结果。
独立性——单元测试的运行/通过/失败不依赖于别的测试,可以人为构造数据,以保持单元测试的独立性。
单元测试应该覆盖所有代码路径。
单元测试应该集成到自动测试的框架中。
单元测试必须和产品代码一起保存和维护。
这一节很多看不懂,但是总的来说应该就是程序模块的测试吧(我猜的...
2.1.3
回归测试
这个其实也是测试的那一块的吧...
2.2
效能分析
分析程序的时间复杂度和各模块的耗时情况
2.3
个人开发流程
个人感觉这个知识点很重要.特别是流程中的分析和设计那一块.感觉我还不怎么会.
3.1
初级软件工程师的成长路线:
1.积累软件开发相关的只是,提升技术技能
2.积累问题领域的知识和经验
3.对通用的软件设计思想和软件工程思想的理解
4.提升职业技能(职业技能包括:自我管理的能力,表达和交流的能力,与人合作的能力,按质按量完成任务的执行力...)
5.实际成果.