软件开发过程及其组织

2.1 软件开发的困难

2.1.1 做好软件工作的关键

2.1.2 大型软件开发的困难有那些

2.1.3 大型软件开发困难的原因

2.2 软件开发方法的发展

2.2.1 结构化程序设计

2.2.2 软件工程方法

2.2.3 面向对象的程序设计

2.2.4 即插即用的程序设计

2.2.5 面向开源软件的程序设计

2.3 软件开发过程的管理

2.3.1 什么样的软件才是好的软件

2.3.2 一个好程序员应具备的条件

2.3.3 如何成为项目组的好成员

2.3.4 一个好的项目组应当具备的条件

软件开发的困难

2.1.1、软件开发的基本问题

做好软件工作的关键

两个转换
第一个是用户对软件功能的理解与程序员对软件功能理解之间的转换
(用户的理解到程序员的理解)

第二个是人与机器之间的交流与协调问题
(程序员的理解到程序的理解)

大型软件开发的困难有那些

1、一致性的保持成为十分困对的问题

2、测试的困难大大增加(黑箱检验法-只能证明有错,不能证明没错。)

3、工作进度难以控制

4、文档与代码的协调十分困难

5、版本更新带来的困难

记忆:一(致性)测(试困难)进(度控制)文(档)代(码)新(版本更新)

大型软件开发困难的原因

1、大系统的复杂性

2、个人之间的组织与协调

3、各个应用领域之间的差别

4、时间的因素,变化的因素

记忆:杂志(织)欲(域)变

软件开发方法的发展

软件开发各人员的责任

1、用户:提出需求,验收软件,使用软件,提出修改要求;

2、程序员:编程,写文档,调试自已的程序,向项目负责提交工作成果

3、项目负责人:分析用户需求形成设计方案,向程序员分配任务,验收程序员的工作成果,对整个软件联调、向用户交付使用、接收与分析用户的修改要求、向程序员分配修改任务、验收修改成果、向用户提交新的版本或修改的结果。

4、硬件:运行,试运行

结构化程序设计

1、什么是结构化程序设计

时间:20 世纪 60 年代末期

程序的结构分解成三个基本模块

即:处理单元、循环机制、二分决策机制

2、模块划分应符合那些要求

第一:模块功能在逻辑上尽可能地单一化,明确化,最好做到一一对应。

第二:减少模块之间的联系及互相影响,对于必需的联系都应当加以明确的说明。应当尽量避免逻辑耦合,而仅限于数据耦合。

第三:模块的规模应当足够小,以便使它本身的调试易于进行。

记忆:功能单一、规模小、模块之间耦合少。

3、实施结构化程序设计的基本思想

1、限制(甚至不用)GOTO语句,禁止超越模块边界的GOTO语句;

2、子程序尽可能的做到一入口,一出口;

3、程序风格应明确;

4、完成有关文档的编撰。

记忆:一入一出,不GOTO,风格明确编文档

软件工程方法

1、软件工程思想是如何产生的

1、软件危机的发生;

2、使软件生产从程序员的个人劳动提高成为可控制的工程;(把软件质量寄托于程序员的技能与认真负责是不牢靠的;从根本上,相到大幅度地提高软件开发的效率和质量,应吸取人们的成功经验,从组织上和管理角度加强力量,使软件生产从程序员的个人劳动提高成办可控制的工程)

3、从组织上和管理的角度加强力量(加强项目管理者的工作)

2、软件工程从传统产业工程中吸取的经验

1、对软件工程工作的步骤作出了严格的规定;工作顺序不能颠倒

2、每一个阶段都有各自明确的任务

3、在质量、表达方式等方面要统一的,并为人们共同遵守的标准

4、利用有关各方沟通与交流的手段,使参加工作的人们成为一个整体,共同地完成一项大的工程任务。

记忆:步任标体

面向对象的程序设计方法

面向对象的程序设计的基本思想(C++ / smalltalk)

1、客观世界的任何事物都是对象,他们都有一些静态属性和一些相关的操作

2、对象之间有抽象与具体,群体与个体,整体与部分等几种关系

3、抽象的、较大的对象所具有的性质,包括静态属性和动态操作,自然地成为它的子类的性质,这就是所谓的“遗传性”

4、对象之间可以互送消息

即插即用的程序设计方法

即插即用的程序设计的基本思想

1、应用硬件制造思路来处量大型转件开发工作的方法。

2、一部分人专门生产软件组件,而另一部分人则构造整个软件的结构,并且把软件插入结构中,以便迅速地完成大型软件的研制工作。

3、即插即用程序设计的基础是面向对象程序设计。

面向开源软件的程序设计方法

在什么情况下利用开源软件进行程序设计比较合适

1、在一些应用面广、流程比较清晰、比较规范的应用领域

例:网站的设计

软件开发过程的管理

什么样的软件才是好的软件

1、正确地实现所要求的功能

2、用户界面友好

3、具有足够的速度(而不是越快越好)

4、具有足够的可靠性

5、易于修改

一个好程序员应具备的条件

1、具有程序设计所需要的基本的知识与技能

2、对本项目所在的领域有较深入的了解,能够准确地理解用户的信息需求,正确地把握有前信息流程与信息处理原则;

3、对于软件开发的技术环境比较了解熟悉,对所用的语言,有足够的、实际运用的经验;

如何成为项目组的好成员

1、必须具有高度的组织纪律性和团队精神

2、必须按照统一的原则使用标识符

一个好的项目组应当具备的条件

1、有严格的工作规范

2、人员之间有严格的分工,必须有专门的测试人员,人专职的项目负责人;

3、每个项目都要事先制定详细的时间表,每一项完成之后都有完整的资料。