精华内容
下载资源
问答
  • 2017-10-31 21:19:13

             软件功能设计:

             针对软件中某一具体的功能,所进行的设计。包括:这个功能的实现方式,实现的基本结构,类的组成,职责划分等,是软件设计中最最重要的基本功。

             功能设计在整个软件设计中的层次:

             软件设计的层次很多,不同的软件设计过程有不同的划分层次,大致可分为:架构设计,api/spi设计,数据库设计,功能设计,类设计,方法设计。

             从难度上说:公共类库》公共框架》基础平台/框架》应用(产品》项目)

            功能设计在整个软件设计中的地位:

            功能设计从属于详细设计,是整个系统功能实现的基石。

            功能设计与设计模式的关系:

            功能设计通常会综合应用多种设计模式,是各种设计思想的具体体现的载体。由于功能千变万化,因而要有较高的设计技巧和功力,才能设计出正确的,易用的,灵活的,         扩 展性高的,高性能实现。

            设计模式是业界公认的,优秀的设计经验和设计理念,理解、掌握、融会贯通、并能熟练变形应用设计模式,对于功能设计是由极大的帮助的。

            功能设计与详细设计的关系:

            功能设计只是详细设计中的一部分,详细设计还包括很多其他的设计,比如:流程设计、对api/spi的完善和细化,对数据库设计的完善和细化,对多个功能交互的控制,事         务 的规划,权限/安全的规划,例外的控制。。。很多很多

             功能设计要考虑的东西/评价标准:

            这个业界没有统一的标准,而且不同类型、不同业务的系统考虑的东西并不完全一样,但还是有一些通常要考虑的东西:

            “正确性”,易用性,可扩展性,复杂性(易理解,开发难度等),易维护,安全,性能,可重用,可测试。。。

             软件设计的实战方法---经验总结

             1,基本的功能实现方式,并进行细化;

             2,分析每个步骤,每个细节中,哪些是可变的,哪些是不可变得。通常分析3个部分:数据的输入,具体实现,数据产出;

             3,分析这个细节功能和其他步骤的关系,比如:顺序,平行,依赖等,已确定这些职责的粒度和分离方式,从而考虑他们之间的组合方式,也需要分离这些组合方式的变           与不变

              4,根据前面分析的结果,进行相应的类,方法的设计、进行职责的划分,并通过合适的方式把他们组织起来。

                      通常这个时候,就会融合进一个或多个设计模式的应用。当然也可能是没有现成的设计模式,需要自己来灵动的组织和实现。

              5,按照前面讲述的评价标准,进行系统的思考和调整,以形成最终的设计方案。


           关于软件设计的一些思考:


           设计的基本技巧:发现和封装变化,进行抽象和封装,实现高内聚和低耦合。

           设计是危险的平衡艺术,尽可能的找到最佳平衡点。

           没有完美的设计,设计总是在不断的演变中

          设计是没有标准答案的,只要能更好的实现功能,更好的满足那些评价标准,就是好东西。

         不要过度设计不等于不设计,而是更要精巧设计。

         关于重构的思考:在设计角度讲,重构是打补丁的思想。

         关于敏捷的思考:

         设计是否增加了复杂度:

         设计是否增加了软件成本:好的设计是会降低软件成本的。

        

       

            




            

           

            

             


    更多相关内容
  • 软件设计方案

    千次阅读 2018-10-19 18:38:28
    软件设计方案 1 引 言 1.1 编写目的 阐明编写本设计方案说明书的目的,指明读者对象。 1.2 项目背景 包括:a.本项目的委托单位、研制单位和主管部门;b.该软件系统与其它系统的关系。 1.3 定 义 列出本...

    转:https://blog.csdn.net/ckpckp/article/details/78838446

     

    软件设计方案

    1  引  言

    1.1 编写目的

    阐明编写本设计方案说明书的目的,指明读者对象。

    1.2 项目背景

    包括:a.本项目的委托单位、研制单位和主管部门;b.该软件系统与其它系统的关系。

    1.3 定  义

    列出本文档中所用到的专门术语的定义和缩写词的原意。

    (1)软件配置项(CSCI,ComputerSoftware Configuration Item)。为独立的配置管理而设计的并且能满足最终用户功能的一组软件(部件)。

    (2)计算机软件部件(CSC,ComputerSoftware Component)。计算机软件配置项中性质不同的部分。计算机软件部件可进一步分解为其它计算机软件部件和计算机单元。又称计算机软件模块。

    (3)计算机软件单元(CSU,ComputerSoftware Unit)。计算机软件部件中确定的能单独测试的部分。

    (4)软件接口(SI,SoftwareInterface)。软件系统中程序之间的接口,包括软件系统与其它系统或子系统之间的接口、程序模块之间的接口、程序单元之间的接口等。

    1.4 引用文件

    列出该计划中引用到的所有文档的编号、标题、修订版及日期。本章还应标识所有不能通过正常政府采购活动得到的文档的来源。

    2  项目概述

    2.1 目  标

    根据合同或项目任务书、用户提出的战术技术指标要求等有关文件,在对用户进行多次调研的基础上,逐项说明该软件各项功能的详细需求,描述为完成各项功能所需要的输入、输出、处理及达到的目标。确定软件的主要功能和次要功能,并用文字、图形的形式详尽描述。

    2.2 运行环境

    简要说明支持软件运行的硬件/网络环境(如单机、局域网、城域网、广域网等)和软件环境(如单机、客户机/服务器、多层客户机/服务器、浏览器/服务器环境等)。

    2.3 需求概述

    从用户的使用角度,以场景的角度,详细描述软件在指定运行环境下应该提供的功能、性能、输入、输出等。

    2.4  条件与限制

    说明开发本软件必须具备的条件以及可能受到的各种限制。

    3  总体设计

    注:描述软件总体结构、功能和处理流程。

    3.1 体系结构

    对所开发软件包含各部分及其相互关系进行描述。

    3.2 软件构成

    如果软件由多个软件包构成,则描述各个软件包及其相互关系,以及每个软件包由哪些软件配置项构成。

    以下分节描述每个软件包内的软件配置项之间的关系设计;如果没有软件包,则可直接描述软件配置项之间的关系;如果没有内部关系,则可直接写第6章。

    3.3  ××软件包

    3.3.1  配置项设计

    根据需求规格说明中的软件结构分析、功能分析,用图表说明软件包中各配置项的划分。

    分层次地给出软件包各个配置项之间的控制与被控制关系。详细描述系统的整体环境、依赖软件及相互之间的层次关系。

    3.3.2  信息处理设计

    说明对每个输入或条件进行响应的软件配置项行为的设计和输出设计。

    3.3.3  关键数据结构设计

    3.3.4  性能设计

    3.3.5  用户界面设计

    若有的话,说明用户界面设计的要求。

    4  软件配置项设计

    注:描述该软件各配置项的功能、性能以及详细的程序描述(包括输入、输出、算法、程序逻辑、测试要点等)。

    4.1 ××软件配置项(配置项唯一标识)

    4.1.1  结构设计

    4.1.1.1  部件图

    画出整个CSCI的所有部件(CSC)和组成部件的单元(CSU)的层次图。

    4.1.1.2  部件描述

    4.1.1.3  类描述

    对软件配置项下所有类进行描述。

    4.1.2  性能设计

    4.1.3  接口设计

    a)本节描述软件配置项的接口特性,既包括内部软件单元之间的接口,也包括与外部实体,如系统、配置项、用户之间的接口;

    b)本节只描述对软件需求规格说明(SRS)中的接口需求部分做出修改或增加的接口,其余相同的部分可在此引用;

    c)如果本节部分内容已在接口设计说明(IDD)中给出,则在此引用不必具体描述。如接口设计说明中没有提供,那么一定要在此处给出。

    4.1.3.1  外部接口设计

    4.1.3.2  内部接口设计

    4.1.4  执行序列设计

    本节描述该软件配置项中所有软件单元之间相互调用的执行序列。

    4.2  ××软件配置项

    展开全文
  • 软件设计说明书模版(申请软件著作权可供参考)

    万次阅读 多人点赞 2019-06-20 14:59:22
    1.引言 ...3.2 软件的概要设计 3.2.1 软件概要设计说明 3.2.3 基本设计概念和处理流程 3.3 软件的详细设计 3.3.1 系统结构 3.3.2 模块设计说明 3.3.3 爬虫模块 3.3.4 日志模块 3.3.5 数...

    1.引言

    1.1 编写目的

    1.2 项目背景

    1.2 项目概要

    1. 总体要求

    2.1 系统功能概述

    2.2 系统功能要求

    1. 软件开发

    3.1 软件需求分析

    3.2 软件的概要设计

    3.2.1 软件概要设计说明

    3.2.3 基本设计概念和处理流程

    3.3 软件的详细设计

    3.3.1 系统结构

    3.3.2 模块设计说明

    3.3.3 爬虫模块

    3.3.4 日志模块

    3.3.5 数据处理

    3.3.6 数据建模

    3.3.7 事件画像

    3.3.8 可视化展示

    3.4 数据库设计

    3.4.1 数据库说明

    3.4.2 数据库操作

    3.4.3 数据库结构

    3.4.4 表结构

    1.引言

    1.1 编写目的

    项目名称:基于互联网大数据的事件智能抓取和画像系统
    项目成员:禹精华、刘可可、刘贤辉

    对基于互联网大数据的事件智能抓取和画像系统进行算法描述和软件设计说明。

    1.2 项目背景

    项目背景:随着互联网大数据的发展,各种大数据的分析对各行业都产生了不同程度的影响。网站数据、社交媒体数据等是互联网大数据的重要组成部分。对于民航业领域,社会事件的发生,会很大程度影响旅客的出行需求变化,从而影响航空公司飞机运力投放、航班编排、票价策略调整等,对互联网事件的准确抓取和分析能够帮助航空公司更好的服务市场、服务旅客、提升收益。

    行业背景:对于航空公司来说,能否预先判断旅客的出行需求,可用于航空公司及行业管理部门决定行业运力投放的合理性,从而提高旅客服务水平、提高航空公司航班收益水平,从互联网中获取大量的影响民航领域的信息能够帮助航空公司制定销售策略。

    1.3 项目概要

    开发团队:武汉职业技术学院筑梦云工作室demo01团队

    项目开发平台说明:

    操作系统:Windows7 及以上版本

    应用服务器:Ubuntu Server 14.04 LTS 64位

    服务器配置:CUP: 1核 内存:1GB 公网带宽:1Mbps 硬盘:20G

    应用服务器:Windows Servers 2008

    服务器配置:CUP: 1核 内存:2GB 公网带宽:1Mbps 硬盘:40G

    网络架构:完全支持TCP/IP协议

    开发工具或技术体系:开发语言:Python 3.6,开发工具:Pycharm 2017

    数据库: MongoDB 3.4.3

    软件运行环境说明:

    设备:

    客户程序硬件要求:

    具有 1核处理器且满足以下要求的计算机:

    最低 1G内存

    最小 20 GB 硬盘

    web服务器硬件需求:

    具有1核处理器且满足以下要求的计算机:

    最低 1G内存

    最小 20 GB 硬盘

    总线I/O:8M/s;

    数据库服务器硬件需求:

    具有1核处理器且满足以下要求的计算机:

    最低 1G内存

    最小 20 GB 硬盘

    2.总体要求

    2.1 系统功能概述

    从互联网上抓取事件,对事件数据进行数据处理,存储到数据库,进行分词及语义等处理,提取事件的属性建立事件模型,以及可视化展现。

    1、实现互联网事件天级或更高频次抓取,采集政治会议、展会、体育赛事、演唱会、突发异常天气等各类中比较主要的事件,每个类型的事件数据至少来自2个数据源(网站),每天爬取一次。

    2、实现事件的去重功能,一是不同数据源(网站)的事件去重,二是不同天抓取的事件去重。

    3、事件画像建模,即事件属性自动化提取。

    4、使用DataV进行可视化展现。

    2.2 系统功能要求

    1、网络爬虫模块实现互联网事件抓取。

    2、日志模块实现各个模块间日志的生成。

    3、数据处理模块实现数据的准备、清洗、去重、转换。

    4、数据建模模块对数据建立模型,计算及转换。

    5、事件画像模块对事件分词及提取属性。

    6、DataV进行可视化展示。

    3.软件开发

    3.1 软件需求分析

    系统需求分析:为航空公司飞机的运力投放、航班编制、票价策略提供服务。

    软件系统结构描述:基于互联网大数据的事件智能抓取和画像系统由爬虫模块、日志模块、数据处理模块、数据建模模块、事件画像模块、可视化系统构成。

    软件结构如图3-1:

    图3-1 系统总用例图

    数据流程如图 3-2:

     

    图 3-2 数据流程

    3.2 软件的概要设计

    3.2.1 软件概要设计说明

    软件系统采用B/S架构,并且将程序部署在云服务器。

    3.2.2 基本设计概念和处理流程

    考虑到互联网上的数据复杂性非常高、并且事件数据一般为非结构化数据,其处理和分析有一定的难度,对爬虫的稳定性和爬取速度有很大的要求,我们使用scrapy爬虫框架技术来从各网站爬取数据,对数据进行处理,使用NoSQL型数据库MongoDB存储半结构化数据,对数据画像、分析、建模并且将程序部署在云端。通过访问云端数据库,数据流映射到DataV实现可视化展示。

    系统流程如图 3-2-2:

    图 3-2-2 系统流程图

    设计说明:

    1、每一个计算机需要不需要安装客户程序,但是需要有IE4.0或更高版本的支持;

    2、WEB发布服务器访问数据库服务器,数据库服务器对外部不可见;

    3、数据库服务器使用MongoDB来实现,对于目前的访问量,MongoDB在足够的硬件环境的支持下能够适用,并且在经济上也是合理的;

    4、多用户并发访问和处理、数据加锁、事务协调,由MongoDB数据库来完成,本系统不提供单独的事务处理服务器;

    5、scrapy爬虫框架可以实现快速、高并发、高层次的网络抓取。

    3.3 软件的详细设计

    3.3.1 系统结构

    应用程序采用Python语言进行开发,网络爬虫使用scrapy框架进行开发并将其部署在云服务器上,考虑到爬虫抓取的数据多为半结构化或者非结构化数据,我们使用NoSQL型数据库MongoDB进行数据存储,并部署在云服务器上。

    系统设计如图 3-3-1:

    图 3-3-1 系统设计图

    3.3.2 模块设计说明

    整个系统共划分为6个模块

    1、爬虫模块

    2、日志模块

    3、数据处理

    4、数据建模

    5、事件画像

    6、可视化展示

    系统模块设计如下:

    1、爬虫模块分为定时爬虫模块和scrapy爬虫两个模块构成。

    定时爬虫模块:管理整个爬虫模块,监控爬虫运行状态、设置爬虫抓取频率(每天爬取一次)、爬虫程序异常处理、管理爬虫日志。

    Scrapy爬虫模块:从目标网站上抓取数据,采集政治会议、展会、体育赛事、演唱会、突发异常天气、交通管制新闻网等数据源网站的事件经过数据处理,并生成爬虫日志存储到数据库。此模块由11个爬虫脚本组成,分别对相应的数据源进行数据爬取。

    爬虫模块如图3-3-2:

    图3-3-2 爬虫模块图

    2、日志模块:日志模块与系统各个模块部分联系紧密,各个模块运行都会产生日志,生成的日志将存储到数据库,方便系统管理、维护、排错。

    日志设计图如图 3-3-3:

    图3-3-3 日志模块设计图

    3、数据处理:数据处理分为数据准备、数据转换、数据聚合。主要对非结构化/半结构化数据进行处理,得到干净、规整的数据。爬虫爬取网站数据源的时候进行数据预处理,对所收集数据进行审核、筛选、排序等操作。数据预处理完成后对数据进行清洗,过滤掉不符合要求的数据,将脏数据转化为满足要求的数据。再进行缺失值处理,对缺失项进行特殊值填充,存储到数据库。数据去重主要对不同网站的事件数据去重复处理。

    4、数据建模:对事件数据建立一个统一的模型,利用聚类等机器学习算法挖掘数据间隐藏的属性及关系。由聚类算法和搜索引擎收录数两个子模块构成。

    聚类算法:使用无监督学习的K-Means对数据进行聚类分析。

    搜索引擎收录数:对于热度相关数据的缺失,我们通过抓取百度搜索引擎对事件的收录数,对缺失热度数据进行填充。

    5、事件画像:事件画像模块实现了对事件属性的自动化提取。调用数据建模模块对数据进行聚类,对不同类型的事件进行分词及属性提取,数据样本初始化,日志生成,对事件画像,生成事件样本。

    事件属性表如下:

    主办方级别是否是国际性组织
     是否是国家政府
     是否是省政府
     是否是地方级政府
    主办方类型是否是国内民间协会
     是否是国际民间协会
     是否是国内行业协会
     是否是国际行业协会
    主要影响年龄阶段主要影响年龄层为儿童
     主要影响年龄层为青年
     主要影响年龄层为成年
     主要影响年龄层为老年
    是否有固定的参与人群是否有固定的参与人群
    影响社会群体是否影响商务人群
     是否影响社会大众
    最大影响范围最大影响全球
     最大影响洲际
     最大影响全国
     最大影响全省
     最大影响全市
    事件类型是否是展会
     是否是演唱会
     是否是体育赛事
     是否是会议
     是否是地方性节假日
    事件热度事件热度
    事件历史悠久程度事件历史悠久程度
    事件一年内频率事件一年内频率
    基本属性开始日期
     结束日期
     举办城市
     事件名称

    6、可视化展示我们使用阿里云的可视化工具DataV来生成图表和数字大屏。


    3.3.3 爬虫模块

    定时爬虫模块设计如图3.3.3:

    图3.3.3 定时爬虫模块

    程序定时及爬虫管理脚本 TimerAdmins.py

    import multiprocessing
    import time
    import pymongo
    from SpiderAdmin import CrawlAdmin
    from Log import LogUtils
    
    class ProcessingTest(multiprocessing.Process):
    
        host = ''       #目标IP
        port = 0        #端口号
    
        def __init__(self,sleep):
            multiprocessing.Process.__init__(self)
            self.sleep=sleep
            self.ConfigDB='Config'
            self.ConfigTdb='timer'
    
        #程度运行
        def run(self):
            log = LogUtils()
            client = pymongo.MongoClient(host=self.host, port=self.port)
            db = client[self.ConfigDB]
            table = db[self.ConfigTdb]
            while True:
                ''' 得到当前时间戳'''
                times=time.time()
                '''得到当前时间戳去小数'''
                tim=int(str(times).split('.')[0])
                '''得到当前日期'''
                date=tim//86400
                '''从数据库查询日期'''
                info=table.find_one({"config": "timer"})
                print('data----------------------->'+str(date ))
                dateInfo=-1
                '''如果数据库没有记录则保存一下'''
                if info==None:
                    print('没有数据')
                    log.I('TimerAdmins','第一次运行数据库里没有数据')
                    table.insert({"config": "timer","time":date})
                    p = CrawlAdmin(1)
                    p.start()
                    print("已经启动爬虫模块")
                    log.I('TimerAdmins', '已经启动爬虫模块')
                    time.sleep(self.sleep)
    
                else:
                    '''
                    如果数据库有记录则对比上面获取的当前日期
                    '''
                    print(info)
                    dateInfo=int(info['time'])
                    ''' 如何当前日期大于数据库日期 '''
                    print("------------------------"+str(dateInfo))
                    if date>dateInfo:
                        timers=tim%86400
                        print('timers'+str(timers))
                        if date-dateInfo==1:
                            if timers>21600:
                                info['time']=date
                                table.save(info)
                                p=CrawlAdmin(1)
                                p.start()
                                print("已经启动爬虫模块---")
                                log.I('TimerAdmins', '已经启动爬虫模块')
                        else:
                            info['time'] = date-1
                            table.save(info)
                            p = CrawlAdmin(1)
                            p.start()
                            print("已经启动爬虫模块---")
                            log.I('TimerAdmins', '已经启动爬虫模块')
                        time.sleep(self.sleep)
                    else:
                        print('数据已是最新,不用更新')
                        log.I('TimerAdmins', '数据已是最新,不用启动爬虫模块更新')
                        time.sleep(self.sleep)
    
    if __name__ =="__main__":
        print('时间管理员开始运行')
        p=ProcessingTest(900)
        p.start()
        print(p.pid)
    

    scrapy爬虫模块设计如图 3.3.4:

     

    图3.3.4 Scrapy爬虫模块类和接口设计

    3.3.4 日志模块

    日志模块设计如图 3.3.4:

    图3.3.4 日志接口类图

    算法及源码设计如下:

    import pymongo
    import time
    import traceback
    class  LogUtils():
      
        host = ''      #目标主机IP
        port = 0      #端口号
    
        def __init__(self):
            self.LogDB='Log'
            self.Table=''
            self.client=pymongo.MongoClient(host=self.Host,port=self.port)
            self.db=self.client[self.LogDB]
    
        '''
        普通日志信息
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def InfoLog(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Info','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
    
        '''
        普通日志信息 的重载方法  简便写法
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
    
        def I(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Info','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
    
        '''
        错误日志信息 
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def ErrorLog(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Error','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
        '''
        错误日志信息 的重载方法  简便写法
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def E(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'Error','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
    
        '''
        调试日志信息 
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def DeBugLog(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'DeBug','time':OtherStyleTime})
    
            except:
                traceback.print_exc()
        '''
        调试日志信息 的重载方法  简便写法
        table  :  日志的表名 统一写类名
        LogInfo:  日志的内容
        '''
        def D(self,Table,LogInfo):
            try:
                self.Table=Table
                table=self.db[self.Table]
                times=str(time.time()).split('.')[0]
                timeArray=time.localtime(int(times))
                OtherStyleTime=time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
                table.insert({'logInfo':LogInfo,'Grade':'DeBug','time':OtherStyleTime})
            except:
                traceback.print_exc()
    
    
    

    3.3.5 数据处理

    数据处理脚本文件 ToHeavy.py

    数据去重设计如图 3.3.5:

    图3.3.5 数据去重接口和类图

    数据去重算法说明:根据表名查询数据库对应的表,获取该条事件过去三天所有数据,对事件名分词,如果事件名与过去三天的事件记录相似度超过65%,标记为重复数据,flag赋值为0。

    import jieba
    from datetime import *
    from pymongo import MongoClient
    import time
    from OperatingDB import OperatingDB
    
    
    def connDB(ip, port, tableName, base):
        db = OperatingDB(ip, port)
        table = db.createTable(tableName, base)
        return table
        
    
    #得到过去三天的日期(以字符串形式添加到列表)
    def past_three_days(time, daynum, pastday_lit):
        date_time = datetime.strptime(time, '%Y-%m-%d')
        for i in range(daynum):
            pastday = date_time - timedelta(i)
            strpastday = datetime.strftime(pastday, '%Y-%m-%d')
            pastday_lit.append(strpastday)
    
    #查询过去三天的数据
    def pastThreeDayData(table, pastday_lit):
        past_one_day = {}
        past_two_day= {}
        past_three_day = {}
        key = '开始日期'
    
        past_one_day[key] = pastday_lit[0]
        past_two_day[key] = pastday_lit[1]
        past_three_day[key] = pastday_lit[2]
    
        data = table.find({'$or':[past_one_day, past_two_day, past_three_day]})
        title_lit = []
        for i in data:
            title_lit.append(i['事件名称'])
     
        return title_lit
        
    
    #返回 flag,如果 flag = 0,则表示是重复数据   
    def toheavy(table, title, titles):
        
        #对标题分词处理
        title_Participle = jieba.lcut(title)
        
        for title in titles:
            count = 0
            title_tmp = jieba.lcut(title)
            for i in title_Participle:
                if i in title_tmp:
                    count += 1
            frequency = count/len(title_Participle)*100
            if(frequency > 65):
                print('相似度超过65%, 去重')
                flag = 0
    
        if flag == 1:
            print('数据无重复')
        return flag
    

    3.3.6 数据建模

    3.3.6.1 聚类算法

    数据建模说明:我们采用机器学习算法的无监督学习算法,对原始数据建立分类模型, 使用聚类分析算法来对数据进行建模。

    数据说明:在我们抓取到的数据中有关于热度的字段,例如下图的中国会展门户网站的一条数据,有关注指数的数据字段,可是单凭原始数据却无法判断所属热度的级别,无法直接划分热度级别。

    中国会展门户数据如图3.3.6.1:

    图3.3.6.1 中国会展门户数据图

    K-Means 聚类算法说明:在具体的聚类算法中我们采用K-Means聚类算法,对数据建模,将事件热度分为三类,既聚类热度级别为 1、2、3。K-Means算法是基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预定的类数K,采用距离作为相似性的评价指标,既认为两个对象的距离越近,相似度就越大。度量样本之间的相似性使用的是欧氏距离,公式如图 3.3.6.2:

    图3.3.6.2 欧氏距离公式图

    具体算法描述如图 3.3.6.3:

    图3.3.6.3 算法描述

    聚类算法流程如图 3.3.6.4:

    图 3.3.6.4 聚类算法流程图

    建模程序设计及算法说明: KMeans.py 聚类算法文件。

    聚类算法设计接口如图 3.3.6.5:

    图3.3.6.5 聚类算法设计接口和类图

    K-Means聚类算法设计源码如下:

    #-*- coding: utf-8 -*-
    import pandas as pd
    from sklearn.cluster import KMeans
    import xlrd
    import openpyxl
    import matplotlib.pyplot as plt
    
    class Kmeans:
        '''数据聚类'''
    
        k = 3                   #聚类的类别数(内置)
        iteration = 500         #聚类最大循环次数(内置)
        jobs = 4                #设置并发数(内置)
    
        def readData(self, inputfile):
            '''从磁盘读取数据'''
            self.inputfile = inputfile
            #读取数据
            data = pd.read_excel(self.inputfile)
            # 去掉无用字段
            data.drop(['事件名称','开始时间'], 1, inplace=True)
            return data
    
        def writeData(self, outputfile, data):
            '''写入文件'''
            self.outputfile = outputfile
            data.to_excel(self.outputfile)
    
    
        def KMeansCompute(self, data):
            '''K-Means聚类计算'''
              
            #数据标准化
            data_zs = 1.0 * (data - data.mean())/data.std()
    
            #分析为K类, 并发数4
            model = KMeans(n_clusters = self.k, n_jobs = self.jobs, max_iter = self.iteration)
            model.fit(data_zs)  #开始聚类
    
            r1 = pd.Series(model.labels_).value_counts()
            r2 = pd.DataFrame(model.cluster_centers_)   #找出聚类中心
          
            r = pd.concat([r2, r1], axis = 1)   #横向连接
            r.columns = list(data.columns) + ['类别数目']
            
            #详细输出
            r = pd.concat([data, pd.Series(model.labels_, index = data.index)], axis = 1)
            r.columns = list(data.columns) + ['聚类类别']   #重命名表头
            
            return r
    

    聚类完成后,根据事件的主办方级别、主办方类型及影响范围属性对聚类热度进行加权,得到热度属性。

    3.3.6.2 搜索引擎收录数

    在抓取其他数据源的时候会遇到热度相关字段的缺失,搜索引擎收录数一定程度上映射了事件的热度属性,既越热门的事件收录数越多,我们对百度搜索引擎事件收录数进行量化,根据事件的主办方级别、主办方类型及影响范围属性对聚类热度进行加权值来得出该事件的热度值。

    获取搜索引擎收录数文件:GetSearchEngineResult.py

    import re
    import requests
    
    class GetSearchEngineResult:
    #获取百度搜索搜索引擎结果数
        def getHTMLText(self, url):
            try:
                r = requests.get(url, timeout = 10, headers = {'user-agent' : 'Mozilla/5.0'})
                r.raise_for_status()
                return r.text
            except:
                print("解析百度结果异常")
    
        def getBaiduResult(self, title):
            baseURL = 'http://www.baidu.com/'
            url = baseURL + 's?' + 'wd=' + title
    
            html = self.getHTMLText(url)
            regex = r'百度为您找到相关结果.*?个'
            numRegex = r'[0-9]'
            data = re.search(regex, html)
            heatStr = ''
            if data:
                num = re.findall(numRegex, data.group())
                for i in num:
                    heatStr += i
            heat = self.getBaiduHeat(eval(heatStr))
    
            return heat
                 
    
    
    
     
    
    
        
    
    

    3.3.7 事件画像

    3.3.7.1 事件画像系统设计

    事件画像系统集成了事件画像管理脚本、数据样本初始化、事件样本输出、数据建模、事件画像等功能。事件画像系统调用数据建模模块,提取各类事件的属性,生成事件样本。
    事件画像系统设计如图 3.3.7.1:

    图 3.3.7.1事件画像系统设计图

    3.3.7.2事件画像

    事件画像模块的主要类是实体类、数据访问接口和功能类。

    实体类保存了事件的基本属性数据,访问接口连接数据库,功能类 对事件提取属性。

    事件画像设计及接口类如图 3.3.7.2:

    图 3.3.7.2 事件画像模块接口和类图

    3.3.8 可视化展示

    我们使用阿里的DataV做可视化展示,通过DataV建立云端数据库的连接,实现数据流映射到DataV。从而生成数据大屏。

    可视化展示预览图如图 3.3.8:

    图 3.3.8 数据大屏

    3.4数据库设计

    3.4.1 数据库说明

    考虑到程序的稳定性和团队协同工作等特性,我们将数据库部署在云服务器,实现了实时访问、高性能、高扩展性等特点。

    数据库软件:MongoDB
    建立的数据库名称: Spider、Config、DataV、Log
    存储爬虫抓取的数据: Spider
    系统配置数据库: Config
    存储可视化展示数据的库: DataV
    存储日志数据: Log

    3.4.2 数据库操作

    将对数据库的操作封装为一个模块。各个模块都要进行数据的存储,将数据的存储单独划分出来做成一个模块的好处是显而易见的,实现了系统模块间的弱耦合,方便数据的写入、读取等操作。

    ** ** ConnectMongoDB.py 功能:连接mongodb数据库

    连接数据库接口源码:

    from pymongo import MongoClient
    
    class ConnectMongo:
        '''连接数据库'''
    
        client = None
        
        # ipaddr:IP地址, port:端口号
        def connect(self, ipaddr, port):    #建立连接
            self.client = MongoClient(ipaddr, port)
    
        def close(self):                      #关闭连接
            return self.client.disconnect()
        
        def getConn(self):                  #返回连接
            return self.client
    
            
    
    
    

    OperatingDB.py 功能:封装了对数据库的操作,创建表\集合、插入数据、删除数据、查询数据、关闭数据库连接。

    from ConnectMongoDB import ConnectMongo
    
    class OperatingDB:
        
        '''操作Mongodb数据库'''
      
        def __init__(self, ipaddr, port):
            conn = ConnectMongo()
            conn.connect(ipaddr, port)
            self.client = conn.getConn()
    
        #tableName:表名, base:数据库名
        def createTable(self, tableName, base):
            '''创建数据库和表'''
            self.crawl = self.client[base]
            self.table = self.crawl[tableName]
            return self.table
    
        #data:插入的数据
        def insertDatas(self, data):
            self.table.insert(data)
                  
        def deleteData(self, data):
            '''删除数据'''
            self.table.remove(data)
        
        #q:查询条件,projecttion:查询字段。
        def query_one(self, q = {}, projection = {'_id' : 0}):
            '''查询一条数据'''
            return self.table.find_one(q, projection)
            
        def query(self, q = {}, projection = {'_id' : 0}):
            '''查询数据'''
            return self.table.find(q, projection)
    
        def closeConn(self):
            '''关闭连接'''
            self.client.close()
            
    

    3.4.3数据库结构

    由于NoSQL型数据库不同于传统的关系型数据库,在建立表结构、索引这些操作时没有像关系型的关联、约束等关系。结构设计也相对简单。

    数据库设计如下表

    数据库
    SpiderCityWeather
     DamaiConcert
     DamaiSports
     JuchengConcert
     WaringWeahter
     XishiquSports
     YongleConcert
     YongleSports
     cnena
     eshow
     people
     trafficcontrol
     xinhuanet
     XishiquConcert
    Configtimer
    LogCityWeather
     ConcertAttr
     CrawlAdmin
     DaMaiPW
     DaMaiWang
     EventPortraitAdmin
     ExhibitionAttr
     JuChenSpider
     SportAttr
     TimerAdmins
     WarningCrawl
     XishiquConcert..
     XishiquSports
     people
     xinhuanet
     yonglePW
    DataVDataV

    3.4.4 表结构

    MongoDB 将数据存储为一个文档/表,数据结构由键值(key=>value)对组成。MongoDB 文档/表类似于 JSON 对象。数据库各个表字段设计如下。

    数据库:Spider

    表名:CityWeather

    字段名中文描述数据类型
    city城市名String
    high最高气温String
    fengxiang风向String
    low最低气温String
    fengli风力String
    type天气类型String
    date日期String
    Wendu温度String
    Status状态String

    表名:DamaiConcert、JuchengConcert、YongleConcert

    字段名数据类型
    事件名称String
    举办城市String
    举办场馆String
    开始日期String
    结束日期String
    门票价格String
    事件类型String

    表名:DamaiSports

    字段名数据类型
    事件名称String
    举办城市String
    举办场馆String
    开始日期String
    结束日期String
    事件类型String

    表名:Longitudes

    字段名数据类型
    城市String
    经度String
    维度String

    表名:WaringWeather

    字段名数据类型
    事件名称String
    发布时间String
    预警城市String
    预警类型String
    预警详情String

    表名:XishiquConcert、XishiquSports

    字段名数据类型
    事件类型String
    事件名称String
    开始日期String
    场馆String
    举办城市String
    结束日期String
    累计成交String
    关注人数String
    详细热度String

    表名:YongleSports

    字段名数据类型
    事件名称String
    举办场馆String
    举办城市String
    开始日期String
    结束日期String
    类型String
    事件类型String

    表名:cnena

    字段名数据类型
    事件类型String
    事件名称String
    关注指数String
    开始日期String
    结束日期String
    展会地点String
    组织机构String
    展会概况String
    概览范围String
    举办城市String
    聚类热度String

    表名:eshow

    字段名数据类型
    事件类型String
    标签String
    事件名称String
    开始日期String
    结束日期String
    举办展馆String
    所属行业String
    举办城市String
    承办单位String
    展会面积String
    举办届数String
    举办周期String
    参观费用String
    展会概况String
    事件频率String

    表名:people

    字段名数据类型
    事件类型String
    事件名称String
    关键词String
    来源String
    描述String
    开始日期String
    会议内容String

    表名:trafficcontrol

    字段名数据类型
    事件类型String
    事件名称String
    内容String
    开始日期String

    表名:xinhuanet

    字段名数据类型
    事件类型String
    事件名称String
    关键词String
    开始日期String
    会议内容String

    数据库:Config

    表名:timer

    字段名中文描述数据类型
    _idID号ObjectId
    config配置信息String
    timer时间Date

    数据库:Log

    表名:CityWeather、ConcertAttr、CrawlAdmin、DaMaiPW、EventPortrait、EventPortraitAdmin、

    ExhibitionAttr、JuChenSpider、SportAttr、TimerAdmin、WarngingCrawl、XishiquConcert、XishiquSports、people、xinhuanet、yonglePW。

    字段名中文描述数据类型
    _idID号ObjectId
    logInfo日志信息String
    Grade报错信息String
    Time时间String

    数据库:DataV

    表名:DataV

    字段名数据类型
    _idObjectId
    热度int
    行业性质String
    影响人群String
    最大影响范围String
    事件类型String
    影响商务和群众占比String
    组织性质String

     

    展开全文
  • 软件设计有三个要素:流程、功能方法和数据结构 一 设计流程要点 功能方法考虑性能,流程方法考虑设计模式。 1. 愿景 你需要做个什么东西,要做到什么水平。 2. 边界 你需要干什么,什么你不用干,什么你不能干。 3....

    软件设计有三个要素:流程、功能方法和数据结构

    一 设计流程要点

    功能方法考虑性能,流程方法考虑设计模式。

    1. 愿景

    你需要做个什么东西,要做到什么水平。

    2. 边界

    你需要干什么,什么你不用干,什么你不能干。

    3. 需求

    客户给的需求,老板给的需求是功能需求;自己给的需求,代码给的需求是非功能需求。功能需求简单,一眼望穿。难点在于非功能需求。

    4. 明确

    明确非功能需求(实际上是扯淡)。你只能凭经验明确一部分,大多数还是实践的时候遇到坑反馈给你,你才能明确。所以这里需要明确的是非功能需求的功能方法。

    5. 定方案

    提炼重点、难点、核心功能。

    6. 尝试

    有些功能需要调研,写demo,不要一开始写,写出坑,改的时间都没有。

    7. 切割

    垂直的(分不用模块),前边工作做好了,就开始做划分(子系统、子模块)。
    没有关联的能分开就分开,可能分开的是一个子系统,也可能是一个子模块,很多时候是一个文件一个类。

    8. 切割

    水平的(同一模块分不同层次),就是把一个模块分层。
    把一个类分成base sub,一层一层的关联下来。减少改动,提高复用性,容易检查和修改,也容易理解。

    [补充一下切割,切割有三要素:数据结构、功能和流程]
    1)数据结构关键是思路核心,这个看经验
    2)功能简单粗暴,粒度越小越好,单一,不该管的事一律不管
    3)流程所谓逻辑,原则是流程就是call call call(调用),流程里一定不要做功能,会很乱,拆不开合不 上,难以重构

    9. 分合

    就是设计里常说的耦合问题。耦合问题的原则是内聚、外解耦(官方叫 高内聚、低耦合),这里说的分合是什么时候分,什么时候合。

    按照7、8部分的切割。能切开的都分,切不开的都合。另外,作为功能集的一定要分;作为框架集的一定要合(不然你写一堆接口 ,自己调着都烦)。

    解耦要看实际情况,不要一昧的解耦,当然都耦合在一起,谁痛苦谁知道

    10. 职责划分
    11. 接口设计
    12. 变

    复杂一点,需要做抽象,转换,把一个问题转变为另一个问题

    13. 换

    换个形式,比如使用设计模式,用于改变流程,其实就是改变了代码的理解方式,换汤不换药

    14. 仿

    就是偷,自己做不明白就偷别人的。先用起来

    15. 造

    用着用着等你理解了,再去改造成自己的。先要结果,再追求提高

    [补充一下仿造]
    比如对于设计模式中的工厂方法模式,一开始不理解,可以先拿来在项目中简单模块中使用, 后面用的多了,理解深了就可以改造拓展

    二 概念补充

    这里对部分概念做一下补充(还是针对 流程、功能方法和数据结构)

    1. 重构

    重构和设计模式,只能用在流程上功能方法是比较单一的,除非你写的有问题,不然就那几行,没什么可重构的。

    主要重构的是流程,流程复杂化、不容易理解和控制。重构就是改的简单容易理解一点,那怎么简单起来呢,应用设计模式一开始的时候,除非你很有经验,不然的话,不用考虑设计模式的问题。当你开始挠头的时候,怎么这么乱,都不想写了,这个时候开始重构,引入设计模式。

    2. 数据结构

    数据结构影响功能实现和性能。
    功能实现基本大家都能做到,其实实现功能根本就不是程序员的追求。追求的是怎么实现好。
    如果没有性能问题,不要轻易重构。数据结构在流程里是可以转变的,通过功能方法转变,所以方法设计好了,数据结构和流程是可以解耦的,不太需要关心

    3. 功能方法

    功能方法设计,简单 简单 简单,不要一个方法做多件事,恨不得它是万能的。相反只要这个方法能做好一件事,就是一个合格的方法, 粒度就是单一,容易拿掉、修改和重现实现,而且便于理解。

    设计模式实现是非功能需求,如果想不到适用性,就不要强加,没啥用多写多看,有经验再用

    下面是一个 windows项目为例的实用框架搭建
    https://blog.csdn.net/qq_27096221/article/details/103645405

    展开全文
  • 谈谈登录测试 ...的确,这构成了一个最基本、最典型的测试用例... 但是作为测试工程师,你的目标是要保证系统在各种应用场景下的功能是符合设计要求的,所以你需要考虑的测试用例就需要更多、更全面,于是你可能会根据...
  • 软件工程总结笔记——软件结构设计(四)

    千次阅读 多人点赞 2019-06-27 13:57:10
    第四章 软件结构设计 软件设计从概念上分为结构设计和详细设计两个阶段。 结构设计又称总体设计,主要任务是制订系统实施方案...详细设计又称模块设计,主要任务是详细规定每个模块功能的具体实现算法。 4.1 概述 ...
  • 软件架构设计-软件架构风格、分层架构

    万次阅读 多人点赞 2021-06-12 15:39:23
    一、软件架构设计 软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。 软件系统架构是关于软件系统的 结构、行为和属性 的高级抽象。指定了软件...
  • 软件设计-模块设计

    千次阅读 2019-04-25 18:22:58
    模块设计1.1 耦合:模块之间的联系紧密程度1.2 内聚:模块内部各元素联系的紧密程度1.3 其他1.4 模块设计注意事项 1. 模块设计 模块设计基本原则:信息隐蔽,模块独立 1.1 耦合:模块之间的联系紧密程度 1. 非直接...
  • 软件测试 - 功能测试(测试理论+用例设计

    千次阅读 多人点赞 2021-08-29 09:47:40
    1.软件的定义 软件:是计算机程序、程序所用的数据以及有关文档资料的集合 软件分为 系统软件 和 应用软件 系统软件:是生成、准备和执行其他程序所需要的一组文件和程序,比如:操作系统 应用软件:计算机用户为...
  • 软件工程】详细设计文档——详细设计说明书

    万次阅读 多人点赞 2021-04-12 20:14:08
    文章目录1 引言1.1 编写目的1.2 项目背景1.3 定义1.4 参考资料2 总体设计2.1 需求概述2.2 软件结构3 模块描述3.1 模块基本信息3.2 功能概述3.3 算法3.4 模块处理逻辑3.5 接口3.6 性能3.7 测试计划 1 引言 1.1 编写...
  • 软件工程】概要设计文档——概要设计说明书

    万次阅读 多人点赞 2021-03-28 17:22:05
    文章目录1 引言1.1 编写目的1.2 范围1.2.1 系统目标1.2.2 主要软件需求1.2.3 软件设计约束、限制1.3 术语和缩略词1.4 参考资料2 体系结构设计2.1 需求复审2.2 软件体系结构2.3 模块设计3 接口设计3.1 用户接口3.2 ...
  • 软件测试之功能测试

    万次阅读 2021-10-18 14:49:33
    2)功能测试,根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。本地化软件功能测试,用于验证应用程序或网站对目标用户能正确工作。使用适当的平台、浏览器和测试脚本...
  • 软件界面设计工具_3款合集

    千次下载 热门讨论 2010-06-29 03:52:47
     此时,设计者就可以使用软件的导出图片或者导出原型功能分享你的设计成果了。当然,现在这种效果还只是一个没有响应动作效果的原型。接下来,我们再给“设置…”按钮加入响应动作。首先,选中“设置…”按钮,然后...
  • 软件详细设计文档模板

    万次阅读 2014-07-11 17:38:15
    给出对该程序的简要描述,主要说明安排设计本程序的目的意义,并且,还要说明本程序的特点(如 是常驻内存还是非常驻?是否子程序?是可重人的还是不可重人的?有无覆盖要求?是顺序处理还是并发处理等)。 1.2...
  •  5.4 描绘软件结构的图形工具  5.5 面向数据流的设计方法  5.6小结及作业 总体设计(概要设计或初步设计)的基本目的就是回答“概括地说,系统应该如何实现?” 工作内容:将划分出组成系统的物理元素——...
  • 软件设计说明书模板

    万次阅读 2018-12-29 09:46:48
    软件项目的设计说明书是软件开发测试中重要的环节,一份好的设计说明不仅可以为系统设计、开发、测试提供指导,还可以收获研发领导、甲方、技术合作交流人员的信任。 设计模板 封面 包含系统项目名、版本、时间等 ...
  • 软件设计---概要设计和详细设计

    千次阅读 2019-10-30 22:57:28
    软件设计是需求工程的后续阶段,他根据项目所描述的需求(功能需求、性能需求、领域需求、数据需求等)的定义,进行数据设计、体系结构设计、界面设计和过程设计软件设计主要解决“如何做”的问题,设计的方案...
  • 软件概要设计与详细设计

    万次阅读 多人点赞 2018-09-29 21:22:44
    1、总体设计的必要性:可以站在全局角度上,花较少成本,从抽象的层次上分析对比多种可能性的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。 2、总体设计...
  • 软件工程:总体设计

    千次阅读 多人点赞 2020-10-21 21:31:47
    总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。 1,设计过程 1,设想供选择的方案 在总体设计阶段分析员应该考虑各种可能的...
  • 软件设计的总体思路

    万次阅读 2019-01-08 15:16:02
    软件设计的本质就是针对软件的需求,建立模型,通过将模型映射为软件,来解决实际问题。因此软件设计需要解决的核心问题是建立合适的模型,使得能够开发出满足用户需求的软件产品,并具有以下特性: 灵活性...
  • 软件开发文档-详细设计文档

    万次阅读 多人点赞 2019-06-21 11:22:34
    引言 引言也称前言、序言或概述经常作为科技论文的开端,提出文中要研究的问题,...系统功能总图系统总体介绍系统模块设计 模块结构图,模块汇总表,功能简述系统子模块 模块描述[功能点分析-],性能要求,模块类图
  • 软件工程——总体设计与详细设计

    万次阅读 2020-05-14 11:12:37
    需求分析确定了系统的开发目标,下一步工作就是软件设计软件设计可以进一步地 分为两个阶段:总体设计和详细设计
  • 嵌入式软件架构设计

    万次阅读 2018-08-31 11:49:26
    但是如果没有架构或者说架构很差,那么移植将是很痛苦的事,特别是对不熟悉改功能的人来讲还不如自己写呢,移植不对那将是很头疼的事。 所以随着开发越来越多,渐渐的发现我们考虑问题应该从广度和深度来考虑,做新...
  • 如何用一个实例来探讨嵌入式软件架构设计

    万次阅读 多人点赞 2018-07-01 20:50:04
    一、感慨近公司新招了一个做嵌入式软件开发开发的童鞋,该童鞋是从上海的某一个上市公司出来的,因为我们这边人手不够,因此把他安排了去负责一个新产品的研发,前期让他负责加速度计、NB-IOT、舵机、外置Flash的...
  • 软件设计之总体设计

    万次阅读 2018-03-25 10:22:52
    详细设计设计基本原理:总体设计的任务和过程总体设计分为:面向数据,面向功能,面向对象的分析设计原则:独立性,规模,深,宽,入,出。作用域。接口。单入单出。预测(黑盒子)总体设计图形工具1.层次图:描述...
  • 第五章 软件详细设计 任务:就是为软件结构图中的每一个模块确定所采用的算法和块内的数据结构。 5.1 结构化程序设计 流行的定义:结构程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和但入口单...
  • 软考—软件设计师(软件工程基础知识)

    万次阅读 多人点赞 2018-10-17 17:27:03
    1. 软件生存周期 同任何事物一样,一个...通常,软件生存周期包括可行性分析与项目开发计划、需求分析、设计(概要设计和详细设计)、编码、测试、维护等活动,可以将这些活动以适当的方式分配到不同的阶段去完...
  • 如何写软件概要设计

    万次阅读 多人点赞 2015-12-05 16:15:08
    2、现在进入概要设计阶段,重点说清楚“总体实现方案”,确定软件系统的总体布局,各个子模块的功能和模块间的关系,与外部系统的关系。有一些研究与论证性的内容。并输出《软件概要设计说明书》。这时一切都是概念...
  • 2021年上半年软件设计师下午真题及答案解析

    万次阅读 多人点赞 2021-06-03 18:33:24
    2021年上半年软件设计师下午真题及答案解析 试题一(共15分) 某停车场运营方为了降低运营成本,减员增效,提供良好的停车体验,欲开发无人值守停车系统,该系统的主要功能是: 1.信息维护。管理人员对车位...
  • 如何撰写软件详细设计内容?

    万次阅读 多人点赞 2016-08-26 17:11:19
    说明书编制的目的是说明一个软件系统各个层次中的每个程序(每个模块或子程序)和数据库系统的设计考虑,为程序员编码提供依据。 如果一个软件系统比较简单,层次很少,本文件可以不单独编写,和概要设计说明书中不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,186,488
精华内容 474,595
关键字:

软件功能设计

友情链接: m_amsz18.zip