软件工程概述,生命周期
原因:
表现:
对软件开发成本和进度的估计很不准确
用户对已完成的软件系统不满意
质量靠不住
不可维护
没有适当的文档资料
软件成本在计算机系统总成本中所占的比例上升
特点:
解决方法:
1.首先应该对计算机软件有一个正确的认识
2.充分认识到软件开发应该是各类人员协同配合,共同完成的工程项目
3.推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好的技术和方法
4.应该开发和使用更好的软件工具
软件生存周期一般可分为以下阶段:
(1) 问题定义(2)可行性研究(3)需求分析 (4)概要设计(总体设计)
(5)详细设计 (6)编码 (7)测试 (8)维护
也可以分为四个大的阶段:软件分析、软件设计、编码与测试、运行与维护
(1)软件分析时期;
任务:确定软件项目的目标,软件应具备的功能和性能,构造软件的逻辑模型,并制定验收标准。在此期间,要进行可行性论证,并做出成本估计和经费预算,制定进度安排。进行可行性研究和项目开发计划,需求分析。
(2)软件设计时期;
任务:a.设计软件的总体结构;
b.设计软件具体模块的实现算法;
c.软件设计结束之前,也要进行有关评审,评审通过后才能进入编码时期。
(3)编码与测试时期;
任务:组织程序员将高驻地的软件“翻译”成计算机可以正确运行的程序;并且要经过按照软件分析中提出需求要求和验收标准进行严格的测试和审查。根据具体软件的特点,决定是否划分成一些阶段,如编码、单元测试、集成测试、验收测试等等。
(4)运行与维护时期。
任务:软件运行过程中可能由于各方面的原因,需要对它进行修改。
优点:提高软件质量,降低维护成本,缓解软件危机
缺点:缺乏灵活性,无法解决需求不明确的问题。
适用场合:
优点:确定需求上优于瀑布模型,通过原型与用户交互;
提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用
有的软件原型可以成为最终产品的一部分
缺点:快速建立的系统结构加连续修改可能导致产品质量低下原型系统内部结构不好
优点:较短时间可以向用户提交可完成有用工作产品;有充裕时间学习适应产品;
缺点:难以做到:开放结构,便于向现有产品加入新构件
优点:大型软件开发项目有较好的风险控制
缺点:需要风险评估的经验;契约开发通常需要事先指定过程模型和发布产品;普及不如前述模型
可行性研究、需求分析
如何进行有效的项目管理:
软件工程管理就是指对整个软件开发运行过 程,包括分析、设计、编码、测试及维护各个 阶段的一切活动进行有效的管理和控制。 它主要包括开发人员、组织机构、用户、文 档资料、计划进度、经费开支等方面的管理
项目管理:使项目能够按照预定的成本、进度、质量、顺利完成并让所有干系人得到满意,而对成本、人员、进度、质量、风险等进行分析和管理的活动。
估算软件规模
工作量估算
进度计划
人员组织
软件配置管理
能力成熟模型
Gpt:
在软件工程中,项目管理的有效性对于项目的成功至关重要。以下是在软件项目中进行有效项目管理的一些建议:
明确定义项目目标: 在项目启动阶段确保所有利益相关方明确了项目的目标和预期结果。明确定义项目的范围、需求和交付物。
采用敏捷开发方法: 敏捷方法适用于快速变化的需求和灵活性要求高的项目。采用敏捷方法可使团队更容易适应变化、更灵活地交付功能。
建立跨职能团队: 构建一个跨职能的团队,包括开发人员、测试人员、设计师等,以促进更好的协作和沟通。
使用版本控制系统: 使用版本控制工具(如Git)来追踪和管理代码的变化。这有助于团队协作、版本管理和问题跟踪。
持续集成和持续交付: 实施持续集成和持续交付流程,以确保代码的及时集成、构建和交付。这有助于降低错误发生的可能性。
制定详细的项目计划: 制定详细的项目计划,包括任务、时间表、资源分配和风险管理。采用迭代开发方法,确保计划是灵活和可调整的。
采用自动化测试: 自动化测试有助于提高软件质量、减少错误和确保代码的稳定性。包括单元测试、集成测试和端到端测试。
定期进行代码审查: 进行定期的代码审查,以确保代码质量、可维护性和一致性。代码审查也有助于团队成员之间的知识分享。
使用项目管理工具: 利用专业的项目管理工具,如Jira、Trello或Asana,以更好地追踪任务、问题和进度。这样可以提高团队的协作和可见性。
建立有效的沟通渠道: 确保团队成员之间的有效沟通。定期召开会议、使用协作工具,并及时分享项目进展和问题。
风险管理: 识别潜在的风险,并建立计划来应对这些风险。及时处理问题,确保项目能够按计划前进。
培训团队成员: 提供培训以确保团队成员具备所需的技能,以适应项目需求和使用新技术。
软件项目管理(13章PPT)
软件项目特点: 软件产品与其他任何产品不同,它是无形的,完全没有物理属性。
特点表现为:①智力密集,可见性差;②单件生产:在特定机型上,利用特定硬件配置,由特定的系统软件或支撑软件的支持,形成了特定的开发环境;③劳动密集,自动化程度低:④使用方法繁琐,维护困难;⑤软件工作渗透了人的因素。
软件管理的功能:软件工程管理是对软件项目的开发管理,是对整个软件生存期的所有活动进行管理。
软件管理的主要功能包括:①制定计划:规定待完成的任务、要求、资源、人力和进度等;②建立组织项目:为实施计划,保证任务的完成,需要建立分工明确的责任机构;③配备人员:任用各种层次的技术人员和管理人员;④指导:鼓励和动员软件人员完成所分配的情况。
软件估算模型:软件成本估算模型可分为两大类:理论模型和统计模型,具体如下:模块性成本模型、静态单变量模型(IBM 估算模型)、动态多变量模型(Putnam 估算模型)、结构性成本模型(COCOMO模型)
软件质量保证:
在软件开发过程的每个阶段结束后,都需要组织技术评审,可以及早发现软件开发过程中可能引起的潜在错误,并对质量进行评价。
Eg/假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下述数据:零件编号,零件名称,订货数量,目前价格,主要供应者,次要供应者。零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给订货系统。当某种零件的库存数量少于库存量临界值时就应该再次订货。
例题:设有商店和顾客两个实体。
“商店”有属性:商店编号、商店名、地址、电话,
“顾客”有属性:顾客编号、姓名、地址、年龄、性别。
假设一个商店有多个顾客购物,一个顾客可以到多个商店购物,顾客每次去商店购物有一个消费金额和日期,而且规定每个顾客在每个商店里每天最多消费一次。
设计工具
是精确表达软件结构的图形表示方法,它以特定的符号表示模块、模块间的调用关系和模块间信息的传递。
⑴模块(Module):用矩形框表示,框中写有模块的名字,说明模块的功能。
⑵调用:从一个模块指向另一个模块的箭头表示前一模块对后一模块的调用,一般是上层调用下层。
⑶数据:调用箭头边上的小箭头表示调用时从一个模块传送给另一模块的数据。通常在短箭头附近应注有信息的名字,常用尾端带有空心圆的短箭头表示数据信息,用尾端带有实心圆的短箭头表示控制信息
START
IF p THEN
WHILE q DO
f
END DO
ELSE
BLOCK
G
N
END BLOCK
END IF
STOP
软件测试
面向对象分析
对象模型
第一层“动物”是类的名称;
第二层“+有生命”是动物的属性;
第三层“+新陈代谢+繁殖”是动物具有的方法
功能模型
动态模型
用来描述对象之间动态的交互关系。着重提现对象之间消息传递的时间顺序。
组成:参与者(对象),生命线,激活期,消息
返回消息为虚线表示
状态图展示了一个特定对象的所有可能状态以及由于各种事件的发生而引起的状态间的转移。
状态图的组成要素有状态、转换、事件、判定、同步。
- 转换转换用带箭头的直线表示,一端连接源状态,箭头指向目标状态。
- 判定菱形
- 状态由一个带圆角的矩形表示,状态的描述应该包括:名称、入口和出口动作、内部转换和嵌套状态。
- 状态图:
- 事件时序图
- 系统边界:框->代表一个系统
- 扩展:基础用例上添加一些动作就成了另一个用例
- 包含:两个用例之间构成使用关系
- 用例图
- 参与者:线条人->与系统进行交互的用户
- 用例:圆圈->表示外部可见的系统或软件的功能
- 参与者之间的关系:线
- 泛化:继承关系,子用例继承父用例的所有功能
- 类图
- 名称、字段和属性、方法,三部分组成
- 白盒测试
- 定义:
- 逻辑覆盖
- 控制结构测试
- 黑盒测试
- 定义
- 等价类划分、边界值分析、错误推断
- 盒图
- 判定树/表
- 流程图
- 软件结构图:
- 实体联系图
- 数据流图
- 数据流图有4种成分:源点和终点、处理、数据存储和数据流
- 顶层,第0层,第1层
- 数据存储不能直接流向数据终点
- 加强软件测试
- 推行软件工程标准
- 控制软件变更
- 对软件质量进行度量
- 应用技术手段
- 组织技术评审:
- 需求分析任务
- 确定对系统的综合要求
- 分析系统的数据要求
- 导出系统的逻辑模型
- 修正系统开发计划
- 在开发过程中,客户接受分阶段交付。
- 开发人员对应用领域不熟悉,难以一步到位。
- 工期过紧的中等或高风险项目。
- 用户可参与到整个软件开发过程中。
- 使用面向对象语言或第四代语言。
- 软件公司自己有较好的类库、构件库
- 螺旋模型
- 增量模型:开发软件时将软件产品作一系列增量构件设计、编码、集成和测试
- 快速原型模型:快速建立反应用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品
- 在开发时间内需求没有或很少变化。
- 分析设计人员对应用领域很熟悉。
- 低风险项目(对目标、环境很熟悉)。
- 用户使用环境很稳定。
- 用户除提出需求以外,很少参与开发。
- 瀑布模型:阶段性 软件生命周期各活动规定为依线性顺序联接的若干阶段的模型。
- 软件过程:(优缺点、适用开发场景)
- 软件生命周期划分:将软件产品从提出、实现、使用维护到停止使用退役的过程
- 软件危机:在计算机软件开发和维护过程中所遇到的一系列严重问题
- 软件工程概述,软件生命周期
- 数据流图.
- 软件结构图.
- 状态转换图.
- 根据伪代码或需求描述画流程图/盒图/pad图.
- 白盒测试/黑盒测试
- 用例图.
- 类图.
- 事件跟踪图(时序图).
- 软件项目管理问答(发散性).