软件开发过程:
软件需求、总体设计、详细设计、代码实现、测试到最终稿产品的提交,以及后期的维护和再开发过程,这就需哟软件开发具有连续性,和开发过程中产品要求在逻辑上相互一致性。
软件工程的目:
要在规定的时间、规定的开发费用内开发满足用户需求的高质量的软件系统。这里指的高质量不仅是指错误率低,还包括好用、易用,可移植,易维护等要求。
软件开发的复杂性:
1.主要是现在的计算机体系结构仍然是冯·诺依曼式,及存储器、运算器和控制器等简单的组件,对于一些简单的应用还行,但是要在庞大而复杂的软件系统的情况下,这种体系结构存在难以克服的缺点。
2.软件开发是人的一种智力活动,软件体系从本质上来说是相互联系的概念组成的结构,当然是很难用一种好的方法或工具刻画软件系统的内在本质特征或规律。
3.软件系统中各个元素之间存在相互的作用关系并具有不确定性。
4.软件没有固定的形式和坚硬的外壳,不同的软件需要满足不同的用户工作方式和习惯
5.软件系统要适应硬件的生命周期。
正是由于软件的国有复杂性,使得开发成员之间的沟通变得困难,开发费用超支,开发时间延期等等,当然也导致产品有缺陷,不易理解,不可靠,难以使用,功能难以扩充等等。
在艰难的事情总会有办法解决的,当然开发软件也是,控制软件复杂性的基本方法有:
1.分解
将问题“各个击破”,也就是对问题进行分解,然后再分别解决各个子问题。
2.抽象
指的是抽取系统中的基本特征而忽略非基本的特征,更加充分地注意与当前目标有关的方面。
3.模块化
一般地,对模块的要求是高内聚(cohesion)、低耦合(coupling)。高内聚值在一个模块中应尽量多的汇集逻辑上相关的计算资源,低耦合指的是模块之间的相互作用应尽量少
4.信息隐蔽
也称封装。信息隐蔽的原则是模块内的实现细节与外界隔离。用户只需要知道模块功能,而不需了解模块的内部细节。就行我们通常所说的包或者库,只需知道API就可解决问题