软件工程——结构化软件开发案例“我不用软件工程所学的开发方法,一样可以做出系统!!所以,这套工程化的方法用处也不大!!”错误假设你正在从事软件开发工作。某私立职业学校财务科长请你研究用学校拥有的微型计算机生成工资明细表和各种财务报表的可能性。情景假设:结构化软件开发——问题定义你要解决的问题是什么?1.财务科长为什么要提出这个要求?2.预期的项目规模?①目前的工资计算成本②新系统的开发成本③新系统的运行费用关于工资支付系统规模和目标的报告书结构化软件开发——问题定义系统规模和目标的报告书2009.5.19项目名称:问题:项目目标:项目规模:初步设想:可行性研究:工资支付目前计算工资和编制报表的费用太高研究开发费用较低的新工资支付系统的可能性开发成本应该不超过7.2万(正负20%)用学校自己的计算机系统生成工资明细表和财务报表为了更全面的研究工资支付项目的可能性,建议进行超过两周的可行性研究。结构化软件开发——可行性研究澄清系统规模和目标研究现有的系统导出高层逻辑模型进一步确定系统规模和目标导出供选择的解法推荐最佳方案草拟开发计划写出文档提交审查结构化软件开发——可行性研究了解现有系统工作情况的直接方法:咨询两位会计结构化软件开发——可行性研究教师课时表任务表职工工资支付系统工资表工资明细表银行教师职工职工教师课时表任务表审核数据审核后的数据排序专用表格计算课时费计算岗位津贴计算工资总额计算个人所得税计算住房公积金计算保险费计算实发工资工资表工资明细表编制报表报表更新分类账分类账会计教师职工银行教务处办公室主任收集数据1审核数据2加工事务数据3D4报表D1事务数据D2工资表D3工资明细表更新分类账5分发工资明细表4教师职工会计银行课时表任务表事务数据事务数据事务数据加工结果加工结果加工结果报表信息分类账目工资信息工资明细表工资明细表工资明细表导出供选择的解法考虑解决方案时需要考虑的因素:向用户提供几种供选择的解决方案:低成本、中等成本、高成本两个月发一次工资用计算机复制现有系统功能长远考虑建立完整的管理信息系统技术可行性、操作可行性、经济可行性中等成本方案的系统流程图:导出供选择的解法课时表任务表数据收集程序事务数据工资支付程序工资表工资明细表报表中等成本方案的成本/效益分析:开发成本:人力(5人月,6000元/人月):3.0万元硬件购买:1.2万元总计:4.2万元新系统的运行费用:人力和物资(250元/月):0.3万元/年维护:0.1万元/年总计:0.4万元/年现有系统的运行费用:2.4万元运行费用每年节省:2.0万元年节省现在值(以5%计算)累计现在值12320000200002000019047.62元18181.82元17241.38元19047.62元37229.44元54470.82元投资回收期:2.28年纯收入:12470.82元推荐最佳方案中等成本高成本低成本草拟开发计划实现中等成本方案的工资支付系统的粗略计划:阶段需要用的时间(月)可行性研究需求分析总体设计详细设计实现总计0.510.5125结构化软件开发——需求分析需求分析阶段的主要任务:确定系统必须做什么?需求分析阶段的工作基础:可行性研究阶段的数据流图细化数据流图——回溯法沿数据流图回溯,一般来说,从数据流图的输出端着手分析是有意义的。因为系统最基本的功能是产生需要的输出数据,在输出端出现的数据元素决定了系统的基本构成。教师职工收集数据1审核数据2加工事务数据3D4报表D1事务数据D2工资表D3工资明细表更新分类账5分发工资明细表4教师职工会计银行课时表任务表事务数据事务数据事务数据加工结果加工结果加工结果报表信息分类账目工资信息工资明细表工资明细表工资明细表工资明细表上包含的数据元素教职工编号教职工姓名基本工资职务职称生活补贴书报费交通费洗理费课时费岗位津贴工资总额个人所得税住房公积金保险费实发工资回溯法发现的问题记录:结构化软件开发——需求分析1.必须搞清基本工资、生活补贴、书报费、交通费和洗理费等数据元素存储在何处;2.必须搞清课时费和岗位津贴的计算方法;3.必须搞清个人所得税、住房公积金和保险费的计算方法;写出文档初稿——数据流图、数据字典、IPO表结构化软件开发——需求分析名字:工资总额别名:总工资描述:扣除个税、公积金和保险费之前一个教职工的月工资格式:数,最大值9999.99位置:工资明细表名字:个人所得税别名:个税、所得税描述:政府每月征收的个人收入所得税格式:数,最大值9999.99位置:工资明细表IPO表系统:工资支付作者:06电子商务班日期:2009.5.19模块:计算工资总额算法编号:被调用:输入:基本工资,课时费,岗位津贴,生活补贴,书报费,交通费,洗理费输出:工资总额调用:处理:工资总额=基本工资+课时费+岗位津贴+书报费+生活补贴+交通费+洗理费局部数据元素:注释:教师岗位津贴为0职工课时费为0结构化软件开发——需求分析定义逻辑系统1.人事数据存储——更新人事数据2.正常课时费=每月授课时数×每节课的课时费×职称系数;岗位津贴=职称系数×津贴等级基数×任务等级超额课时费=年度超出课时数×每节课课时费×0.23.住房公积金=(工资总额-课时费或岗位津贴)×10%保险费=养老保险+失业保险+医疗保险个人所得税=(工资总额-免征税所得-3500)×税率8%1%2%+10最新扣税率全月应纳税所得额税率速算扣除数(元)不超过1500元3%0超过1500元至4500元10%105超过4500元至9000元20%555超过9000元至35000元25%1005超过35000元至55000元30%2755超过55000元至80000元35%5505超过80000元45%13505教务处办公室主任收集数据1审核数据2加工事务数据3D4报表D1事务数据D2工资表D3工资明细表更新分类账5分发工资明细表4教师职工会计银行课时表任务表事务数据事务数据事务数据加工结果加工结果加工结果报表信息分类账目工资信息工资明细表工资明细表工资明细表D5年度数据年度数据D6人事数据人事数据更新人事数据6结构化软件开发——需求分析细化数据流图使用功能分解的方法来细化数据流图:选取数据流图上功能过分复杂的处理,把它分解成若干个子功能,较低层次的子功能成为新数据流图上的处理,有自己的数据存储和数据流。取数据3.1计算正常工资3.2计算超额课时费3.3更新年度数据3.4印表格3.5D1事务数据D6人事数据D5年度数据D3工资明细表D2工资表D4报表年度数据年度数据取来的数据人事数据工资明细表报表信息工资信息取来的数据取来的数据取来的数据事务数据对“加工事务数据”的细化书写正式的文档——软件需求规格说明书结构化软件开发——需求分析数据流图数据字典IPO表构成软件需求规格说明书的主要成分技术审查管理复查结构化软件开发——需求分析组长本系统分析员两名会计结构化软件开发——总结通过案例的学习,对比自己所做的课程设计分析阶段的工作,你有什么收获?本阶段要搞清楚的问题:结构化软件开发——总体设计——概括地说,系统应该如何实现?确定物理方案设计软件结构结构化软件开发——总体设计判断数据流特征确定输入流和输出流的边界分解对设计结果进行优化——变换流——孤立出变换中心——若干次分解总体设计——分解第一级分解:计算教职工工资接收工资数据计算工资印出计算结果总体设计——分解计算教职工工资接收工资数据印出计算结果计算工资取数据收集事务数据计算正常工资计算超额课时费更新年度数据印表格第二级分解:审核事务数据总体设计——初步优化计算教职工工资接收工资数据计算工资印出计算结果取数据收集事务数据计算正常工资计算超额课时费更新年度数据印表格收集事务数据印表格总体设计——数据库设计库名表名salaryuserpersonnelaffairyearsalary1salary2系统使用者账号信息人事数据事务数据年度数据工资明细表中动态变化的项目工资明细表中相对固定的项目总体设计——数据库设计user表的设计:字段名数据类型能否为空是否主键数据类型用户名字符否是密码字符否否总体设计——数据库设计personnel表的设计:字段名数据类型能否为空是否主键职工编号数字否是职工姓名字符否否职务字符否否职称字符否否生活补贴数字是否书报费数字是否交通费数字是否洗理费数字是否affair表的设计:字段名数据类型能否为空是否主键职工编号数字否是职工姓名字符否否课时数数字是否授课班级数数字是否任务数数字是否总体设计——数据库设计year表的设计:字段名数据类型能否为空是否主键职工编号数字否是职工姓名字符否否本年度累计授课时数数字是否总体设计——数据库设计salary1表的设计:字段名数据类型能否为空是否主键职工编号数字否是职工姓名字符否否课时费数字是否总体设计——数据库设计岗位津贴数字是否工资总额数字否否个人所得税数字是否实发工资数字否否生活补贴数字是否书报费数字是否交通费数字是否洗理费数字是否salary2表的设计:总体设计——数据库设计字段名数据类型能否为空是否主键职称字符否是保险费数字是否住房公积金数字是否