软件项目管理
活动图 -- 如估算项目完成时间,计算关键路径和关键活动。
- 最短完成时间
- 最多可以多晚开始不受影响
结构化分析
结构化分析模型
需求分析阶段输出
- 数据流图、实体联系图、状态迁移图和数据字典
软件设计阶段进行
- 软件体系结构图
数据流图
- 描述数据在系统中如何被传送或变换,以及描述如何对数据流进行变换的功能,用于功能建模
四个要素:
- 外部实体,也称为数据源或数据汇点,表示要处理的数据的输入来源或处理结果要送往何处,不属于目标系统的一部分,通常为组织、部门、人、相关的软件系统或者硬件设备;
- 数据流表示数据沿箭头方向的流动;
- 加工是对数据对象的处理或变换;
- 数据储存在数据流中起保存数据的作用,可以是数据库文件或者任何形式的数据组织。
程序语言基础知识
编译和解释
- 解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;
- 编译器则将源程序翻译成目标语言程序,然后再计算机上运行目标程序。
- 这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不参与目标程序的执行过程;
- 而在解释方式下,解释程序和源程序(或者某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。
脚本语言
- 为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言。
- 脚本语言一般运行在解释器或虚拟机中,便于移植,开发效率较高。
将高级语言源程序转化为一种中间代码
- 中间代码有四元式、后綴式、三地址码、树等
- 操作系统
软件设计
- 模块独立性是创建良好设计的一个重要原则,一般采用模块间的耦合和模块的内聚两个准则来进行度量。耦合程序越低,内聚程度越高,则模块的独立性越好。 存在多种模块之间的耦合类型,从低到高依次为非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
- 公共耦合是指一组模块都能访问的同一公共数据环境;
- 控制耦合是指一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一个模块的功能;
- 标记耦合是一组模块通过参数表传递记录信息;
- 数据耦合是一个模块访问另一个模块时,彼此之间通过数据参数(而不是控制参数、公共数据结构或外部变量)来交换输入输出信息。
开发过程模型
增量开发模型
- 将软件产品分解成一系列的增量构件,在增量开发中逐步加入。其优点主要有: 能在较短的时间内交付可以使用的部分产品;逐步增加的产品功能可以使用户有充裕的时间学习和适应新产品;优先级最高的功能首先交付, 这意味着最重要的功能经过最多的测试。 但是要求对要开发的系统进行精心的分析和设计。
软件体系结构
- 仓库风格是一种软件体系结构,其中包含一个数据仓库和若干个其他构件。数据仓库位于该体系的结构中心,其他构件访问该数据仓库并对其中的数据进行增、删、改等操作。数据库系统、超文本系统和黑板系统都属于仓库风格。
该体系结构的优点包括:
- 对可更改性和可维护性的支持:
- 可复用的知识源;
- 支持容错性和健壮性。
缺点包括:
- 测试困难;
- 不能保证有好的解决方案;
- 难以建立好的控制策略;
- 低效;
- 昂贵的开发工作;
- 缺少对并行机制的支持。
软件测试
- 软件测试按阶段分为单元测试、集成测试和系统测试。在单元测试的基础上,将所有模块按照设计要求组装为系统;此时进行的测试称为集成测试。
集成测试有多种策略:
- 自底向上: 从系统层次中的最底层的构件开始,逐步向上。需要设计驱动模块来辅助测试。
- 自顶向上: 与自底向上相反,从最顶层的构件开始,逐步向下。需要设计桩模块来辅助测试。
- 三明治: 结合自底向上和自顶向下两种测试策略。
- 一次性: 对所有的构件一次性测试,然后集成。
软件复杂性知识
- McCabe 度量法是一种基于程序控制流的复杂性度量方法,环路复杂性为V(G)=m-n+2 m是弧的个数,n是节点数
面向对象
在面向对象系统中,对象是基本的运行时实体,它既包括数据(属性),也包括作用于数据的操作(行为)。所以,一个对象把属性和行为封装为一个整体。
- 封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。
- 一个类所包含的方法和数据描述一组对象的共同行为和属性,这些对象共享这些行为和属性。有些类之间存在一般和特殊关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入新的内容,这种机制就是父类和子类之间共享数据和方法的机制,即继承。
- 在子类定义时,可以继承它的父类(或祖先类)中的属性和方法,也可以重新定义父类中已经定义的方法,其方法可以对父类中的方法进行覆盖,即在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现。多态是在继承的支持下,在不同对象收到同一消息时,可以产生不同的结果,这是由于对通用消息的实现细节由接收对象自行决定。
面向对象和统一建模语言(UML)
- UML
UML用例图
- UML用例图展现类一组用例、参与者(Actor)以及它们之间的关系。用于对系统的静态用例视图进行建模。这个视图主要支持以下系统的行为,即该系统在它的周边环境的语境中所提供的外部可见服务。用例图说明参与者及其扮演者的角色,可以是人、硬件或者其他系统可以扮演的角色,而非个人用户。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。