软件工程产生的背景:软件危机(开发工期延误,费用高,不满足需求)
软件工程的主要目的:解决软件危机带来的问题。
工程的主要困难:需求了解不透彻,人员没有发挥应有的作用。
什么是软件工程:一系列为了更好地开发软件的流程和规范。
软工流程:做什么——>怎么做——>做——>哪不好——>怎么更好
1、做什么(计划制定,需求分析)
可行性研究(目标是什么?盈利还是服务打开知名度)
技术、法律、时间、盈利方面是否都可行//一定有一个判断的标准来决定是否可以开发这个项目。
需求分析:这是最关键的环节之一,你的软件是否用户愿意用这一环节起决定性作用;
这里有个概念给大家分享一下:高效就是保质保量按时的把任务完成;
这一环节少不了跟客户打交道:不能要求客户会c语言,就不要指望客户能看懂UML;
两个聪明的人讨论问题正常情况下结论只有一个如果出现争执,讨论的可能不是同一个问题。
如果一开始讲清楚:起因,目标,结论,原则确定。那么会发现不用讨论。
2、怎么做(设计)
设计阶段占得比重远大于编码阶段,一个系统设计的好不好直接决定了系统的性能,耗时,可移植性,可维护性。 设计主要分为:数据设计,文件设计,系统结构设计,过程设计。(面向对象设计也挺好)
模块原则:高内聚低耦合。
3、做(编码)
前面的基础工作做好之后,编码也就是水到渠成的事。真正理清楚软件的逻辑之后编码只不过是把这个清楚的逻辑用
计算机能听懂的语言告诉它罢了。只要逻辑没有错误它肯定会特别听话的按照你想的功能运行。
4、哪不好(测试)
我们做测试的目的就是找漏洞。找到的漏洞越离奇越没见过测试越成功。
测试分两种:正向测试,反向测试。
正向测试就是看看你本身应该做到的功能能不能实现;
反向测试就是输入一些不符合条件的数据看能不能禁受错误。
举个例子:你是一个锁匠,做出一把锁;要想知道这把锁的基本功能能不能实现就是你看看原配钥匙能不能打开这把
锁,要想看它的性能如何就找几把别的钥匙看能不能打开这把锁。
测试方法分为静态测试和动态测试:黑盒测试属于动态测试,不用管代码如何能实现应有的功能就行是面向用户的;
白盒测试属于静态测试,是检查代码逻辑错误是面向程序员测试人员的。
测试贯穿整个软件生命周期,越早发现错误损失越低。
5、怎样更好(维护)
硬件会随着使用时间的增加内部的零件难免有损坏,软件不存在零部件的损坏但是会有需求的变化。
维护种类和所占比例:改正性20%,适应性25%,完善性50%,其他5%
维护是整个生命周期中最长的阶段大概70%左右。所以一个软件的可维护性极其重要。
面向对象是很好的一种让维护容易的方法,就像雕版印刷如果要增删改某个文字只能重新再做一个雕版,活字印刷就
相当于面向对象,每个对象都可以直接拿来使用修改添加便于维护。
什么是一个优秀的软件:符合要求,好使,可移植,可复用,易维护
只要按照软工流程去做就能做出优秀的软件吗?这种技术只是解决软件危机的一种方法
,并不是唯一的方法。这种方法大家都可以通过学习得到但是他们开发的软件真的是最好的软件吗?显然不是,还有一个必要条件是一个优秀的项目团队。优秀的团队是保证
这种方法执行的关键,作为项目负责人一定要与内外都做好沟通。实现才是目的,工程
很重要但不要因为这个束缚住项目的进展,项目和客户才是重点。
最后送大家句话:这个问题是不是问题?主要在你的态度,你认为是,它就是!要想解
决问题:要么改变期望,要么改变体验。