1.DbUnit (å®è£
| 使ç¨)
2.定制电脑软件多少钱定制开发软件一般要多少钱
3.社会保险管理信息系统的社保社保构成有哪些啊?
4.人力资源管理软件系统,定制开发哪家公司好。系统系统
5.6个高可用的源码源码开源人脸识别项目!哪个识别率最高?
6.基于中文金融知识的社保社保 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学
DbUnit (å®è£ | 使ç¨)
è¿ç¨DBUnitè¿è¡é«æåå æµè¯
è¯è 注ï¼æè¿å¯¹DBUnitæ¯è¾æå ´è¶£ï¼çå°è¿ç¯æç« å°±ç¿»è¯åºæ¥åå¤§å®¶å ±äº«ï¼ä¸è¿æä¹æ¯New
Handï¼æ以翻è¯ä¸å¥½çå°æ¹è¯·å¤§å®¶ææ£ãæçMSN:zhlihui@hotmail.com,å¦æ大家æä»ä¹å¥½çèµæºåç»éªæ¬¢è¿åæ交æµ.
å¼å ¥DBUnit
ç°å®ç³»ç»ä¸é常ä¼æä¸äºå ·æå¤é¨ä¾èµæ§ç对象ï¼è¿äºå¯¹è±¡åæ°æ®åºæè å ¶ä»å¯¹è±¡åå¨è¯¸å¤å ³èãå¦ææ们对è¿æ ·ç对象ç¼ååå åç»ä»¶çº§æµè¯çè¯ï¼å¯ä»¥æ³è±¡å°æ¯é常麻ç¦çä¸ä»¶äº.å 为è¿ç§å¤é¨ä¾èµæ§çåå¨ï¼ä½¿çæ们å¾é¾å°å¯¹è±¡å¤ç«åºæ¥è¿è¡æµè¯ãç»å¸¸æåçç½çæµè¯æ³ï¼åºæ¬ä¸å°±æ¯éè¿æ§å¶å¯¹è±¡çå¤é¨ä¾èµæ§æ¥è¾¾å°é离对象çç®çï¼ä½¿çå¯ä»¥æä½è¿äºå¯¹è±¡çç¶æåç¸å ³è¡ä¸ºã
è¿ç¨ 模æ对象(mock objects)
æè stubsï¼å°±æ¯ä¸ä¸ªæ§å¶å¯¹è±¡å¤é¨ä¾èµæ§ç解å³æ¹æ¡ãéè¿é离é£äºå ³èçæ°æ®åºè®¿é®ç±»ï¼è±¡JDBCçç¸å ³æä½ç±»ï¼å¯¹äºæ§å¶å¯¹è±¡å¤é¨ä¾èµæ§å°æ¯å¾ææçãä½æ¨¡æ对象ç解å³æ¹æ¡å¯¹ä¸äºç¹æ®çåºç¨ç³»ç»æ¶æå°±æ¾å¾åä¸ä»å¿äºï¼è±¡é£äºè¿ç¨äºEJBçCMP(container-managed
persistence)æè JDO(java Data
Objects)çåºç¨ç³»ç»æ¶æï¼å¨è¿äºæ¶æéï¼æ°æ®åºç访é®å¯¹è±¡æ¯å¨æåºå±çèä¸å¾éè½ã
ç±Manuel Laflamme
ç¼åçå¼æ¾æºä»£ç çDBUnitæ¶æä½ç³»ï¼å¯¹äºæ§å¶ç³»ç»å é¨çæ°æ®åºä¾èµæ§æä¾äºä¸ä¸ªé常ä¸éç解å³æ¹æ¡ãä»å 许ç¨åºåå¨æ´ä¸ªçæµè¯è¿ç¨ä¸èªç±ç管çæ§å¶æ°æ®åºçç¶æï¼è¿å¾éè¦ãå©ç¨DBUnitï¼å¨æµè¯ä¹åï¼æ们å¯ä»¥ç»ç®æ æ°æ®åºæ¤å ¥æ们éè¦çæ°æ®éï¼èä¸ï¼å¨æµè¯å®æ¯åï¼æ°æ®åºå®å ¨è½å¤å溯å°æµè¯åçç¶æã
å¨å¾å¤æåç软件项ç®ä¸ï¼æµè¯èªå¨åå¾å¾æ¯å ³é®çå±é¢ãDBUnitå 许å¼å人åå建æµè¯ç¨ä¾ä»£ç ï¼å¨è¿äºæµè¯ç¨ä¾ççå½å¨æå æ们å¯ä»¥å¾å¥½çæ§å¶æ°æ®åºçç¶æãèä¸,è¿äºæµè¯ç¨ä¾æ¯å¾å®¹æå®ç°èªå¨åçãè¿æ ·å¨æµè¯è¿ç¨ä¸æ们æ 须对å®è¿è¡äººå·¥çå¹²é¢ï¼ä¸ºäººå·¥å¹²é¢é æçåæèæ å¿å°±æ´æ²¡å¿ è¦äºã
ç®åä»ç»
é 置使ç¨DBUnitç第ä¸æ¥æ们é¦å éè¦ç¥éå¦ä½çææ°æ®åºschemaï¼è¿ä¸ªæ件æ¯XMLæ ¼å¼çï¼å ¶ä¸å æ¬äºæ°æ®åºç表åç¸å ³æ°æ®ä¿¡æ¯ã
ä¾å¦ï¼è¿éæä¸ä¸ªæ°æ®åºè¡¨employee
ï¼æ们å¯ä»¥ç¨SQLçå½¢å¼è¿æ ·å°ä»è¡¨ç¤ºåºæ¥ã
èä¸ï¼æ们å¯ä»¥çå°ï¼ä¸ä¸ªç®åçæ°æ®éå¯ä»¥è¿æ ·è¡¨ç¤º
å¨DBUnitä¸ï¼ä¸é¢è¿ä¸ªè¡¨åæ½æ ·æ°æ®ä¿¡æ¯å¯ä»¥ç¨XMLæ件çå½¢å¼è¿æ ·è¡¨ç¤ºï¼
<EMPLOYEE employee_uid='1'
start_date='--'
first_name='Andrew'
ssn='xxx-xx-xxxx'
last_name='Glover' />
è¿ä¸ªçæçXMLæ ¼å¼çæ件å¯ä»¥ä½ä¸ºç³»ç»æéçææç§åæ件(seed
files)çæ ·æ¬æ¨¡ç.
为ç¸äºå ³èçæµè¯åºæ¯å建å¤ä¸ªç§åæ件æ¯ä¸ä¸ªå¾ææççç¥ï¼å°±è±¡éè¿ä¸åçæ°æ®åºæ件æ¥åºåé离æ°æ®åºç¶ææ¯ä¸ä¸ªéçãå¤ç§åæ件çç¥å¯ä»¥å°æ们çæµè¯ç®æ éå®å°è¾å°çèå´ï¼ç®æ æ°æ®å¯ä»¥åªé对æ°æ®åºç表ï¼èä¸æ¯æ´ä¸ªæ°æ®åºã
为äºç»ç®æ æ°æ®åºæ¤å ¥ä¸åçèåè®°å½ï¼æ们éè¦çXMLæ°æ®æ件å¦ä¸æ示ï¼
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<EMPLOYEE employee_uid='1'
start_date='--'
first_name='Drew' ssn='--'
last_name='Smith' />
<EMPLOYEE employee_uid='2'
start_date='--'
first_name='Nick' ssn='--'
last_name='Marquiss' />
<EMPLOYEE employee_uid='3'
start_date='--'
first_name='Jose' ssn='--'
last_name='Whitson' />
</dataset>
ç°å¨ï¼è¦è®©DBUnitåæ们æéçæ°æ®åºschemaä¸èµ·å·¥ä½äºï¼å¯¹äºç¨åºåæ¥è¯´ï¼æ们使ç¨DBUnitè¿è¡æµè¯å¯ä»¥æ两ç§éæ©ï¼éè¿ç´æ¥ç¼ç æ¹å¼è¿è¡æµè¯æè ä¸Antç»å.
ç¼ç æ¹å¼
DBUnitæ¡æ¶æä¾äºä¸ä¸ªåºæ¬çæ½è±¡æµè¯ç¨ä¾ç±»ï¼å«åDatabaseTestCaseï¼å®æ¯JUnitæ¡æ¶ä¸çåºç¡ç±»TestCaseçåç±»ãå¦ææ们使ç¨è¿ä¸ªç±»å¿ é¡»é¦å å®ç°ä¸¤ä¸ªé©åæ¹æ³(hook
methods)ï¼getConnection()ågetDataSet().
æ¹æ³getConnection()éè¦è¿åä¸ä¸ªIDatabaseConnectionç±»åç对象ï¼è¿ä¸ªå¯¹è±¡æ¯ä¸ä¸ªåºäºæ®éJDBCè¿æ¥çå è£ ç±»ãä¾å¦ï¼ä¸é¢ç代ç 段æ¼ç¤ºäºå¨MySQLæ°æ®åºç¯å¢ä¸ï¼IDatabaseConnectionç±»åè¿æ¥å¯¹è±¡çå建æ¹æ³ã
protected IDatabaseConnection getConnection()
throws Exception {
Class driverClass = Class.forName("org.gjt.mm.mysql.Driver");
Connection jdbcConnection = DriverManager.getConnection(
"jdbc:mysql://.0.0.1/hr", "hr", "hr");
return new DatabaseConnection(jdbcConnection);
}
æ¹æ³getDataSet()è¿åä¸ä¸ªIDataSetç±»å对象ï¼å ¶å®ï¼è¯´ç½äºï¼ä»å°±æ¯æ们å åæå°çXMLæ°æ®çç§åæ件çå¦ä¸ç§è¡¨ç°å½¢å¼ã
protected IDataSet getDataSet() throws Exception {
return new FlatXmlDataSet(
new
FileInputStream("hr-seed.xml"));
}
æäºè¿ä¸¤ä¸ªåºæ¬çæ¹æ³ä»¥åï¼DBUnitå°±å¯ä»¥æç §å®é¢å 缺ççè¡ä¸ºå·¥ä½äºãDatabaseTestCaseç±»æä¾äºä¸¤ä¸ªfixtureï¼æå«å®åºä»¶ï¼ä¸ç¥ä»å åæå¦ï¼ï¼æ¹æ³æ¥æ§å¶æµè¯ååæµè¯åçæ°æ®åºç¶æãè¿ä¸¤ä¸ªæ¹æ³å°±æ¯ï¼
getSetUpOperation() å getTearDownOperation().
ä¸ç§é«æçå®æ½æ¹æ¡å°±æ¯è®©getSetUpOperation()æ¹æ³æ§è¡REFRESHæä½ï¼éè¿è¿ä¸ªæä½,æ们å¯ä»¥ç¨ç§åæ件ä¸çæ°æ®å»æ´æ°ç®æ æ°æ®åºéçæ°æ®ãæ¥ä¸æ¥ï¼å°±æ¯getTearDownOperation()ï¼è®©ä»å»æ§è¡ä¸ä¸ªNONEæä½ï¼ä¹å°±æ¯ä»ä¹ä¹ä¸æ§è¡ã
protected DatabaseOperation getSetUpOperation()
throws
Exception {
return DatabaseOperation.REFRESH;
}
protected DatabaseOperation getTearDownOperation()
throws
Exception {
return DatabaseOperation.NONE;
}
è¿æä¸ç§ææçæ¹æ³å°±æ¯å¨getSetUpOperation()æ¹æ³ä¸æ§è¡CLEAN_INSERTæä½ï¼è¿æ ·é¦å ä¼å°ç®æ æ°æ®åºä¸ä¸æ们æä¾çç§åæ件ä¸è´çæ°æ®å é¤ï¼ç¶åå°æ们æä¾çæ°æ®æå ¥å°æ°æ®åºä¸ãè¿ä¸ªå®æ½é¡ºåºä¿è¯äºæ们对æ°æ®åºç精确æ§å¶ã
代ç æ ·ä¾
å¨ä¸ä¸ªåºäºJ2EEç人åèµæºç³»ç»ä¸ï¼æ们å¾å¸æ对æ个æ°æ®æä½å¨æå®ç°æµè¯èªå¨å,è¿ä¸ªæä½å¨æå æ¬èåçæ°å¢ï¼æ£ç´¢ï¼æ´æ°åå é¤ãè¿ç¨æ¥å£å®ä¹äºä¸åçä¸å¡æ¹æ³ï¼ä¸ºäºç®æ´æ¸ æ¥ï¼çç¥äºæ¹æ³ä¸çthrowsåå¥ï¼.
//è¯è 注ï¼è¿éçEmployeeValueObjectç±»å对象ï¼è¯è 认为æ¯ä»£è¡¨èåå®ä½ä¿¡æ¯ç对象ã
public void createEmployee( EmployeeValueObject emplVo )
public EmployeeValueObject getEmployeeBySocialSecNum( String ssn )
public void updateEmployee( EmployeeValueObject emplVo )
public void deleteEmployee( EmployeeValueObject emplVo )
æµè¯getEmployeeBySocialSecNum()æ¹æ³
éè¦æ¤å ¥ä¸æ¡æ°æ®å°ç®æ æ°æ®åºä¸ï¼å¦å¤ï¼æµè¯deleteEmployee()æ¹æ³åupdateEmployee()æ¹æ³æ¶ï¼åæ ·ä¹æ¯å¨å åæ¤å ¥çè¿æ¡è®°å½çåºç¡ä¸è¿è¡ãæåï¼æµè¯ç±»ä¼é¦å å©ç¨createEmployee()æ¹æ³å建ä¸æ¡è®°å½ï¼åæ¶æ们éè¦æ ¡éªæ§è¡è¿ä¸ªæ¹æ³æ¶ï¼æ¯å¦ä¼æå¼å¸¸åçã
ä¸é¢è¿ä¸ªDBUnitç§åæ件ï¼å«å"employee_hr_seed.xml",ä¸é¢å°ç¨å°è¿ä¸ªæ件ã
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<EMPLOYEE employee_uid='1'
start_date='--'
first_name='Drew' ssn='--'
last_name='Smith' />
<EMPLOYEE employee_uid='2'
start_date='--'
first_name='Nick' ssn='--'
last_name='Marquiss' />
<EMPLOYEE employee_uid='3'
start_date='--'
first_name='Jose' ssn='--'
last_name='Whitson' />
</dataset>
æµè¯ç±» EmployeeSessionFacadeTest
,éè¦æ©å±DBUnitçåºç¡ç±»DatabaseTestCase并ä¸å¿ é¡»æä¾å¯¹getConnection()ågetDataSet()æ¹æ³çå®ç°ï¼å¨getConnection()æ¹æ³ä¸å°è·å¾ä¸EJB容å¨åå§åæ¶ä¸æ ·çæ°æ®åºå®ä¾ï¼getDataSet()æ¹æ³è´è´£è¯»åä¸é¢æåçemployee_hr_seed.xmlæ件çæ°æ®ã
æµè¯æ¹æ³ç¸å½ç®åï¼å 为DBUnitå·²ç»ä¸ºæ们å¤çäºå¤æçæ°æ®åºçå½å¨æä»»å¡ã为äºæµè¯getEmployeeBySocialSecNum()æ¹æ³ï¼åªéè¦ç®åçä¼ éä¸ä¸ªåå¨äºç§åæ件ä¸ç社ä¿ä»£ç å·å³å¯,æ¯å¦
"--".
//è¯è 注ï¼EmployeeFacade ç±»å对象ï¼è¯è 认为æ¯ä»£è¡¨åºå±æ°æ®åºæ°æ®çæ å°ä½
public void testFindBySSN() throws Exception{
EmployeeFacade facade = //obtain somehow
EmployeeValueObject vo =
facade.getEmployeeBySocialSecNum("--");
TestCase.assertNotNull("vo shouldn't be null", vo);
TestCase.assertEquals("should be Drew",
"Drew", vo.getFirstName());
TestCase.assertEquals("should be Smith",
"Smith", vo.getLastName());
}
为äºç¡®ä¿æä½å¨æä¸çå建èåæ¹æ³createEmployee()没æé®é¢ï¼æ们åªéç®åçæ§è¡ä¸ä¸è¿ä¸ªæ¹æ³ï¼ç¶åæ ¡éªä¸ä¸çæ没æå¼å¸¸æåºï¼å¦å¤ï¼ä¸ä¸æ¥æ们è¦åçå°±æ¯å¨è¿æ¡æ°å¢çè®°å½ä¸è¿è¡æ¥æ¾æä½ï¼çæ¯å¦å¯ä»¥æ¾å°åå建çè®°å½ã
public void testEmployeeCreate() throws Exception{
EmployeeValueObject empVo = new EmployeeValueObject();
empVo.setFirstName("Noah");
empVo.setLastName("Awan");
empVo.setSSN("--");
EmployeeFacade empFacade = //obtain from somewhere
empFacade.createEmployee(empVo);
//perform a find by ssn to ensure existence
}
æµè¯updateEmployee()æ¹æ³å æ¬åæ¥ï¼é¦å æ¥æ¾æ们éè¦è¢«æ´æ°çé£æ¡è®°å½ï¼ç¶åæ´æ°å®ï¼ç´§æ¥çï¼éæ°æ¥æ¾è¿æ¡è®°å½ï¼ç¡®è®¤æ´æ°æä½æ¯å¦ææã
public void testUpdateEmployee() throws Exception{
EmployeeFacade facade =//obtain facade
EmployeeValueObject vo =
facade.getEmployeeBySocialSecNum("--");
TestCase.assertNotNull("vo was null", vo);
TestCase.assertEquals("first name should be Jose", "Jose",
vo.getFirstName());
vo.setFirstName("Ramon");
facade.updateEmployee(vo);
EmployeeValueObject newVo =
facade.getEmployeeBySocialSecNum("--");
TestCase.assertNotNull("vo was null", newVo);
TestCase.assertEquals("name should be Ramon", "Ramon",
newVo.getFirstName());
}
ç¡®ä¿æ°æ®æä½å¨æä¸çå é¤æä½deleteEmployee()çæ¹æ³åtestUpdateEmployee()æ¹æ³åºæ¬ç±»ä¼¼ã
å®å为ä¸æ¥ï¼é¦å æ¥æ¾ä¸ä¸ªå·²åå¨çè®°å½å®ä½ï¼ç¶å移é¤ï¼æåå对ç¸åçè®°å½è¿è¡æ¥æ¾ï¼ç¡®è®¤è¿æ¡è®°å½æ²¡æ被æ¥å°ã
public void testDeleteEmployee() throws Exception{
EmployeeFacade facade = //obtain facade
EmployeeValueObject vo = facade.getEmployeeBySocialSecNum("--");
TestCase.assertNotNull("vo was null", vo);
facade.deleteEmployee(vo);
try{
EmployeeValueObject newVo =
facade.getEmployeeBySocialSecNum("--");
TestCase.fail("returned removed employee");
}catch(Exception e){
//ignore
}
}
ä¸è¿°è¿äºæµè¯ä»£ç å¾ç®åä¹å¾å®¹æç解.å 为è¿äºä»£ç å¯ä¸çè责就æ¯æµè¯ï¼å·²ç»å®å ¨ä»ç³»ç»ç¨åºä»£ç ä¸ç¬ç«åºæ¥ï¼è¿ä½¿æµè¯åçç®åã并ä¸ï¼è¿äºæµè¯ç¨ä¾çèªå¨åä¹å¾å®¹æå®ç°ã
ä¸Antçç»å
ç¸å¯¹äºæ©å±DBUnitä¸çåºç¡ç±»DatabaseTestCase,DBUnitæ¡æ¶ä¸èªå¸¦Antåè½,å 许æ们å¯ä»¥å¨Antçbuild.xmlæ件ä¸æ§å¶æ°æ®åºçç¶æ.è¿ä¸ªåè½æ¯ç¸å½å¼ºå¤§çï¼å 为对äºä½æç诸å¤æµè¯ç¨ä¾ï¼å®æä¾äºä¸ä¸ªç¸å½ç®æ´ç解å³æ¹æ¡ãæ¯å¦ãå¨Antä¸è¿è¡JUnitæµè¯,就象ä¸é¢å®ä¹ä¸ä¸ªä»»å¡ä¸æ ·ç®åæäºã
<junit printsummary="yes" haltonfailure="yes">
<formatter type="xml"/>
<batchtest fork="yes"
todir="${ reports.tests}">
<fileset dir="${ src.tests}">
<include name="**/*Test.java"/>
</fileset>
</batchtest>
</junit>
DBUnitä»»å¡è¿ç¨ä¸ï¼ä¸ºäºå¨Junitä»»å¡ååæ§å¶æ°æ®åºçç¶æï¼æ们éè¦å建ä¸ä¸ª"setup"æä½ï¼å¨è¿ä¸ªæä½ä¸ç§åæ件ä¸çæ°æ®å 容ä¼è¢«æå ¥çæ°æ®åºä¸ã
<taskdef name="dbunit"
classname="org.dbunit.ant.DbUnitTask"/>
<dbunit driver=" org.gjt.mm.mysql.Driver "
url=" jdbc:mysql://.0.0.1/hr "
userid="hr"
password="hr">
<operation type="INSERT"
src="seedFile.xml"/>
</dbunit>
ç¶åï¼è¿éè¦ä¸ä¸ª"tear
down"æä½,å¨è¿ä¸ªæä½ä¸ï¼"setup"æä½æå ¥çè®°å½è¢«ä»ç®æ æ°æ®åºä¸å é¤äºã
<dbunit driver=" org.gjt.mm.mysql.Driver "
url=" jdbc:mysql://.0.0.1/hr "
userid="hr"
password="hr">
<operation type="DELETE"
src="seedFile.xml"/>
</dbunit>
ç¨ä¸é¢ç代ç æ¥å è£ JUnitä»»å¡ï¼è½å¤å¨æ¹éæµè¯åææçè£ è½½æ°æ®å°ç®æ æ°æ®åºä¸ï¼å¹¶ä¸å¨æµè¯ç»æåï¼å°å·²è£ è½½çå ¨é¨æ°æ®å é¤ã
<taskdef name="dbunit"
classname="org.dbunit.ant.DbUnitTask"/>
<!-- set up operation -->
<dbunit driver=" org.gjt.mm.mysql.Driver "
url=" jdbc:mysql://.0.0.1/hr "
userid="hr"
password="hr">
<operation type="INSERT"
src="seedFile.xml"/>
</dbunit>
<!-- run all tests in the source tree -->
<junit printsummary="yes" haltonfailure="yes">
<formatter type="xml"/>
<batchtest fork="yes" todir="${ reports.tests}">
<fileset dir="${ src.tests}">
<include name="**/*Test*.java"/>
</fileset>
</batchtest>
</junit>
<!-- tear down operation -->
<dbunit driver=" org.gjt.mm.mysql.Driver "
url=" jdbc:mysql://.0.0.1/hr "
userid="hr"
password="hr">
<operation type="DELETE"
src="seedFile.xml"/>
</dbunit>
ç»è®º
è½å¤å¨æµè¯å¨æå 管çæ°æ®åºçç¶æï¼DBUnitæ¡æ¶çè¿ä¸ªåè½ç¹æ§ä½¿å¾æµè¯ç¨ä¾ä»£ç çå建ååºç¨çå¨æ大大缩çãèä¸ï¼éè¿æ§å¶æ°æ®åºè¿ä¸ªä¸»è¦çä¾èµå¯¹è±¡ï¼ä½¿çå©ç¨DBUnitæ¡æ¶ççæµè¯æ´å®¹æèªå¨åã
DBUnitç²¾å¦ç设计ï¼ä½¿çå¦ä¹ 使ç¨å®åå¾å¾ç®åãå¨ä½ çæµè¯æ¹æ¡ä¸ï¼å¦æä½ è½å¤æ£ç¡®ç使ç¨å®ï¼é£ä¹å¸¦æ¥çå°æ¯ä»£ç 稳å®æ§æ¹é¢çå¤§å¹ åº¦å¢å¼ºï¼å½ç¶è¿ä¼ä½¿ä½ çå¼åå¢éä¿¡å¿åå¢ã
定制电脑软件多少钱定制开发软件一般要多少钱
一 定制开发软件一般要多少钱
定制开发软件一般要多少钱
摘要:开发软件的费用,根据所需开发软件的系统系统难易程度,以及所选择的源码源码理财分红软件源码软件开发公司的不同,从数千元到数万元甚至数十万元不等。社保社保选用第三方平台模板自助开发,系统系统价格大约在-元;软件外包公司固定模板加二次开发,源码源码价格大约在-元;软件外包公司完全定制开发,社保社保价格大约在3万-万元;自建开发团队自主开发,系统系统价格大约在万-万元,源码源码在正文中,社保社保我们将进行更详细的系统系统开发费用和开发周期说明和利弊分析。
一、源码源码第三方做软件致电壹伍扒壹壹叁叁驷柒驷驷平台模板自助开发说明及费用
1.什么是第三方平台模板?
即提供一套或者多套现成模板的,平台型的软件开发公司,其特点有以下几点:
(1)模板经过多人使用,多年打磨,软件质量高,BUG出现几率低。
(2)因为是平台型的模板 ,提供给大量的用户使用,所以收费最低,同时平台客服人员因需要面对大量用户导致客服质量相对较弱。
(3)通常需要使用者具备基本的软件知识,通过视频课程或者客服讲解进行自助搭建软件。
(4)对于小规模的用户来说,且预算较为紧张的情况下,基本上无法获得任何的个性需求定制服务,原因很简单,平台方即使额外收费,但做这样的定制也不划算。
(5)举例来说:就像我们买了1个二房一厅的住宅,但因为所有的间隔墙面都是承重墙,你无法将它改造成三房一厅。
2.费用做软件致电壹伍扒壹壹叁叁驷柒驷驷说明:
(1)通常是按年缴费。
(2)开发费用最低,通常是从数百到数千元每年的开发费用支出
3.费用做软件致电壹伍扒壹壹叁叁驷柒驷驷测算公式及方法示例:
(1)开发人工费:
通常开发人工费以软件开发总人力天乘以技术人员人工单价/天计算。第三方平台模板自助开发,颜色的源码不涉及外包开发人工费用支出。
(2)开发管理费:
中等规模公司的开发管理费为开发人工费的%左右,第三方平台模板自助开发,不涉及到开发人工管理费用。
(3)开发总报价:
开发人工费 开发管理费。
4.适用人群:
软件开发需求简单,且平台方提供的模板能够完整的满足开发需求,使用方具备基本的软件知识或者学习能力。
5.利弊分析
(1)利: 成本最低,开发周期最短,通常几天就可以完成。
(2)弊: 大部分情况下,无法获得个性需求定制支持。
二、软件外包公司固定模板加二次开发说明及费用
1.什么是软件外包公司固定模板?
即软件外包公司不提供平台型的服务,但软件开发限于外包公司已有的成型模板,其特点有以下几点:
(1)模板经过外包公司技术打磨,软件质量不一定比第三方平台的模板更低,BUG出现几率也不高。
(2)原则上来说使用者不需要具备基本的软件知识,外包公司会提供完善的客服服务。
2. 什么是二次开发?
(1)相对第三方平台而言,外包公司更有可能提供个性化的需求定制服务,通常这种定制,可以理解为是依附于原有模板的二次开发,其缺点是需求的解决受限于原有模板的框架及架构,通俗来说,就是能够满足你的定制需求,会帮你找到一条产品解决思路,但不一定是最优的实现方案。
(2)举例来说:就像我们买了1个二房一厅的住宅,其机构允许我们将它改造成三房一厅,但该下水管道无法做任何修改,我们可以增加房间数,但不能增加卫生间的数量。
3.费用说明:
(1)通常按年缴费或一次性买断都可行。
(2)如果不涉及定制,开发费用通常为数百到数千元。
(3)如果涉及定制,无锡江苏源码根据需求实现的难易程度,额外的定制开发费用为数千到数万元不等。
4.费用测算公式及方法示例:
(1)开发人工费:
通常开发人工费以软件开发总人力天乘以技术人员人工单价/天计算。举例:一个软件系统开发,其二次开发部分需要2人,工作5天,则总人力天为2×5=个人力天,而人工单价以中等规模公司的元/天计算(大型公司通常为元/天,小型公司通常为元/天),则开发人工费为:×=元。
(2)开发管理费:
中等规模公司的开发管理费为开发人工费的%左右,则开发管理费为:×%=元。
(3)开发总报价:
开发人工费 开发管理费= =元。
5.适用人群:
软件开发需求相对简单,且平台方提供的模板能够基本满足开发需求,不能完全满足需求部分的个性化的定制功能也不算复杂。
6.利弊分析
(1)利: 成本相对较低,开发周期最通常数周到1个月之间就可以完成。
(2)弊: 新增的需求定制的解决方案不一定最优,可能需要消耗更多的系统算力,或者在多用户并发的时候需要延长响应时间。
三、软件外包公司完全定制开发说明及费用
1.什么是软件外包公司完全定制开发?
即出于个性需求,软件外包公司提供度身定做的开发服务,其特点有以下几点:
(1)需求得到充分调研,软件产品设计方案能够完全满足需求方的要求。
(2)软件开发质量在第一期的版本或多或少会存在部分BUG,软件需求方需要有一定的耐心来配合修复。
(3)举例来说:就像我们向开发商定制了1个三房一厅的住宅,配备了足够的卫生间,且卫生间布局合理,但房内暗藏的管道可能出现局部不够通畅,需要入住后才被发现,并需要时间来做清通梳理工作。
2.费用说明
(1)一次性买断。
(2)开发费用通常为数万到数十万元,如果涉及大型ERP项目等,甚至需要耗费数百万元。
3.费用测算公式及方法示例:
(1)开发人工费:
通常开发人工费以软件开发总人力天乘以技术人员人工单价/天计算。源码移位规则举例:一个软件系统开发,其外包公司投入人员为5人,工作天,则总人力天为5×=个人力天,而人工单价以中等规模公司的元/天计算(大型公司通常为元/天,小型公司通常为元/天),则开发人工费为:×=元。
(2)开发管理费:
中等规模公司的开发管理费为开发人工费的%左右,则开发管理费为:×%=元。
(3)开发总报价:
开发人工费 开发管理费= =元。
4.适用人群:
软件开发需求复杂,现有的模板无法满足开发需求。
5.利弊分析
(1)利: 度身定做,有效的解决各类需求,采用软件提高管理、服务、效率的目标有效实现。
(2)弊:开发周期长,通常3个月起(包含项目需求调研及UI制定的工作),项目复杂的甚至需要按年计算开发时间。
四、自建开发团队自主开发说明及费用
1.什么是自建开发团队自主开发?
即出于个性需求,且放弃寻求软件外包公司提供度身定做的开发服务,改为自助开发团队研发。其特点有以下几点:
(1)需求得到充分调研,软件产品设计方案能够完全满足需求方的要求。
(2)相对软件外包而言,需求调整效率高,不需要耗费额外时间和软件外包公司进行就需求调整展开关于开发费用和开发周期谈判。
(3)软件开发质量在第一期的版本或多或少会存在部分BUG,投资人需要有足够的耐心来等待修复。
(4)举例来说:就像我们向开发商定制了1个三房一厅的住宅,配备了足够的卫生间,且卫生间布局合理,但房内暗藏的管道可能出现局部不够通畅,需要入住后才被发现,并需要时间来做清通梳理工作。
2.费用说明
(1)自主开发,不存在买断和源码交接的fullcalendar完整源码问题。
(2)开发费用通常会比外包开发更高,因为自建团队的所有开销均需要独立承担,特别是开发不顺利的时候,所有开发人员的工资福利均需要按期支付,其开发费用至少从数十万元起步,如果涉及大型ERP项目等,数百万元的开发费用并不罕见。
3.费用测算公式及方法示例:
(1)开发人工费:
通常开发人工费以软件开发总人力天乘以技术人员人工单价/天计算。举例:一个软件系统开发,其自主团队投入人员至上为5人,工作天,则总人力天为5×=个人力天,而人工单价以中等规模公司的元/天计算(大型公司通常为元/天,小型公司通常为元/天),则开发人工费为:×=元。
(2)开发管理费:
中等规模公司的开发管理费为开发人工费的%左右,则开发管理费为:×%=元。
(3)开发总报价:
开发人工费 开发管理费= =元。
(4)备注:自建团队的开发人工单价及管理费用,并不因为是自建团队而比外包团队更低,我们在自建团队前需要明白一点,员工工资加社保福利,特别是IT人员的工资和社保福利,是一项非常固定的支出,这类固定支出,特别是在项目研发不顺利的情况下,往往给资金不足的自建团队非常大的压力。
4.适用人群:
软件开发需求复杂,企业自有资金充足,且最为核心的一点是,企业股东成员中需要有专业的IT人员(否则,几乎可以肯定超过%以上的项目会烂尾收场)。
5.利弊分析
(1)利: 自有团队,度身定做,有效的解决各类需求,软件开发方向调整灵活、方便。
(2)弊:如果企业股东缺乏专业的IT人员,则开发成本投入一定会比外包开发更高,且项目开发失败的风险最高。
社会保险管理信息系统的构成有哪些啊?
简单点说
ERP系统结构:
一、支持企业整体发展战略的战略经营系统
二、全面成本管理系统
三、敏捷后勤管理系统
至于各分系统里面的具体操作要看你公司需要的内容来定了,每个公司都最好尽量做出自己的、适合自己的系统才真的有效。。。。
人力资源管理软件系统,定制开发哪家公司好。
传统的定制开发是找其他人弄,其实利用华创信息管理平台也可以自己搭建,就不用求别人了,而且自己可根据需要随时调。
该平台是一款综合性的信息管理软件,面向非专业人士,无需编程,能让用户自由建表、自定义字段,因此能管理各种数据。对你来说,在平台里把人力资源管理所要的表格建起来,再设置登录帐号及权限,大家就可录入数据、共享数据了。比如,员工信息表、薪资信息表、考勤信息表...等等。至于操作界面、数据存储等细节由平台自动完成。
给个实例截图,是上海一家公司利用它做的人力资源管理,供你参考:
其它几个功能对你也可能有用:
●支持多用户同时访问,具有完善的权限,各类人员的增删改及查看权均可详细控制;
●具有自动提醒功能,可用于合同到期提醒、薪资发放提醒等;
●可自由设置各种计算公式,可按照自己计算方式计算各薪资项目、社保金额等。
●支持excel数据的导入导出,现有的数据无需再次输入,可直接导入到本系统中。
希望对你有帮助。
6个高可用的开源人脸识别项目!哪个识别率最高?
实时人脸识别系统在计算机视觉领域热度不减,多家公司正积极开发解决方案以入局增长市场。相较于传统方法,实时人脸识别系统在连续帧中捕捉同一人物的多个实例,提供显著优势。对于开发者而言,开源项目成为探索实时人脸识别技术的起点。这类项目拥有公开源代码,开发者可以深入理解其运作机制,并确保数据安全。本文将指引初级开发者了解最佳开源人脸识别项目,并探讨为何选择开源软件为最佳策略。
开源人脸识别项目提供了丰富的功能和独特特性,但基本流程相似:首先,部署摄像头并开始视频流,确保足够的光线和清晰的分辨率,以便完整捕获用户面部。接着,通过运动检测避免过载人脸识别服务器。这一过程需要摄像头放置得当,确保高效识别。
选择开源项目的优势显而易见:确定数据处理方式、代码质量更高、许可成本更低、更不易过时且通常代表成熟代码。开源软件允许开发人员快速理解代码并激发创新。
本文精选出最佳开源人脸识别软件,以供开发者参考:
1. Deepface:支持FaceNet和InsightFace等识别方法,具备REST API,但仅支持验证功能。最新版本为0.0.。
2. CompreFace:年7月发布,以其轻便的REST API和易于集成的特性受到青睐。同时,它支持同时识别多个视频流中的人脸,且处于活跃开发阶段,最新版本为0.5。
3. Face Recognition:提供Python API和二进制命令行工具,易于安装,但缺少重大更新,准确率为.%,且无REST API。
4. InsightFace:采用最新最准确的人脸检测和识别方法,准确率高达.%,缺点在于不易操作。
5. FaceNet:准确率.%,但缺少REST API,最后一次更新在年4月。
6. InsightFace-REST:基于Docker的解决方案,提供方便的REST API,性能提升显著,最新版本为v0.5.9.6。但仅提供人脸嵌入,需自行实现分类器。
综上,本文精选的开源人脸识别项目各具特色,为开发者提供多样化选择。在实际应用中,应根据项目需求和优先级,选择合适的开源软件。尽管这些项目在功能上存在差异,但均能提供高质量的实时人脸识别体验。
拓展阅读:人脸识别技术作为生物识别技术的代表,以其高精度、易用性、稳定性和防假冒性,在公安、国防、海关、交通、金融、社保、医疗及其他民用安全控制等行业展现出广阔的应用前景。随着技术的不断进步,人脸识别技术在智能门禁、周界安全、景区人流量统计等场景中得到广泛应用。TSINGSEE青犀视频研发团队正积极开发AI技术,如人脸检测、人脸识别、人流量统计、安全帽检测等,并将其融入现有的视频平台中,如EasyCVR视频融合云服务,提供AI人脸识别、车牌识别、语音对讲、云台控制、声光告警、监控视频分析与数据汇总等功能,满足不同场景的需求。
基于中文金融知识的 LLaMA 系微调模型的智能问答系统:LLaMA大模型训练微调推理等详细教学
基于 LLaMA 系基模型经过中文金融知识指令精调的微调模型,旨在提升金融领域问答效果。通过整合中文金融公开问答数据与爬取的金融问答数据,构建指令数据集,并在此基础上对 LLaMA 系模型进行指令微调。使用 GPT3.5/4.0 API 和中文金融知识图谱、CFLEB 金融数据集等扩充数据集,确保高质量训练。
安装环境时,建议使用 Python 3.9 以上版本,同时通过 lfs 方便本地下载 LLaMa 大模型。下载 LLaMA 模型时,注意选择分类为“中文金融问答微调模型”,并根据模型的不同版本和参数调整训练数据、训练序列长度等参数。
进行单模型推理和多模型对比,通过运行 infer 脚本,使用 ./instruction_data/infer.json 提供的测试用例或自定义数据集进行验证。构建数据集时,集成公开和爬取的中文金融领域问答数据,覆盖保险、理财、股票、基金、贷款、信用卡、社保等业务场景,优化数据质量和丰富性。
在微调 Finetune 阶段,按照 ./instruction_data/fin_data.json 的格式构建自定义数据集,运行 finetune 脚本进行微调。训练细节包括计算资源需求,推荐使用 A-SXM-GB 显卡,训练总轮次为 轮。根据显存大小调整 batch_size,预计 / 显卡(GB 显存)以上显卡可以较好支持。
在提示词模板构建模块中,包含用于 LoRA 微调 LLaMa 模型的提示模板样式,通过 JSON 文件描述模板,确保模板灵活适用于不同任务需求。现有模板包括 alpaca.json、alpaca_legacy 和 alpaca_short 等,提供通用和特定任务的提示词选择。
提示构建模块是 Prompter 类,作为模板管理器,用于构建和调整提示词以适应不同模型微调需求。项目源代码和更多优质内容可访问指定链接或关注公号“汀丶人工智能”获取资源和文章。